@credithub/harlan-components 1.108.2 → 1.109.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -160,8 +160,9 @@ var ChartSystem = function (_a) {
160
160
  }, [consultaSerasa, consultaBoaVista]);
161
161
  var errorMessage = typeof errorChart === 'string' ? new Error(errorChart) : errorChart;
162
162
  var isOpen = useToggle(true)[0];
163
- var quantidadeProtestos = ((_g = (_f = chartData === null || chartData === void 0 ? void 0 : chartData.protestos) === null || _f === void 0 ? void 0 : _f[(chartData === null || chartData === void 0 ? void 0 : chartData.protestos.length) - 1]) === null || _g === void 0 ? void 0 : _g.quantidade) || 0;
164
- var valorTotalProtestos = ((_j = (_h = chartData === null || chartData === void 0 ? void 0 : chartData.protestos) === null || _h === void 0 ? void 0 : _h[(chartData === null || chartData === void 0 ? void 0 : chartData.protestos.length) - 1]) === null || _j === void 0 ? void 0 : _j.valorTotal) || 0;
163
+ // Usa valores calculados de globalData.protestosData (calculados uma única vez em protestos.tsx)
164
+ var quantidadeProtestos = (_g = (_f = globalData === null || globalData === void 0 ? void 0 : globalData.protestosData) === null || _f === void 0 ? void 0 : _f.totalProtestos) !== null && _g !== void 0 ? _g : 0;
165
+ var valorTotalProtestos = (_j = (_h = globalData === null || globalData === void 0 ? void 0 : globalData.protestosData) === null || _h === void 0 ? void 0 : _h.valorTotalProtestos) !== null && _j !== void 0 ? _j : 0;
165
166
  var _r = useCalculation((chartData === null || chartData === void 0 ? void 0 : chartData.serasa) || []), quantidadeSerasa = _r.quantidade, valorTotalSerasa = _r.valorTotal, ultimaOcorrenciaSerasa = _r.dataMaisRecente;
166
167
  var _s = useCalculation((chartData === null || chartData === void 0 ? void 0 : chartData.boaVista) || []), quantidadeBoaVista = _s.quantidade, valorTotalBoaVista = _s.valorTotal, ultimaOcorrenciaBoaVista = _s.dataMaisRecente;
167
168
  var quantidadeCCFs = useCalculation((chartData === null || chartData === void 0 ? void 0 : chartData.ccfs) || []).quantidade;
@@ -234,6 +235,17 @@ var ChartSystem = function (_a) {
234
235
  quantidadeDividas,
235
236
  valorTotalDividas,
236
237
  ultimaOcorrenciaDividas,
238
+ quantidadeProtestos,
239
+ valorTotalProtestos,
240
+ ultimaOcorrenciaProtestos,
241
+ quantidadeSerasa,
242
+ quantidadeBoaVista,
243
+ valorTotalSerasa,
244
+ valorTotalBoaVista,
245
+ ultimaOcorrenciaSerasa,
246
+ ultimaOcorrenciaBoaVista,
247
+ quantidadeCCFs,
248
+ documento,
237
249
  setGlobalState,
238
250
  ultimaOcorrenciaCCF
239
251
  ]);
@@ -1,14 +1,15 @@
1
1
  import { Queries, RequestStatus } from '../../../components/webservice';
2
2
  import { useGlobalData } from '../../../contexts/globalDataContext';
3
+ import { converterParaFormatoValido } from '../../../utils/date';
3
4
  import { useContext, useEffect, useMemo, useRef, useState } from 'react';
4
5
  import { processData, processProtestData } from '../utils/dataProcessing';
5
6
  var useChartData = function (consultaSerasa, consultaBoaVista) {
6
- var _a;
7
- var _b = useState(null), data = _b[0], setData = _b[1];
8
- var _c = useState(null), errorState = _c[0], setErrorState = _c[1];
9
- var _d = useState(0), loadingProgress = _d[0], _setLoadingProgress = _d[1];
10
- var _e = useState(false), isProcessing = _e[0], setIsProcessing = _e[1];
11
- var _f = useState(false), dataReady = _f[0], setDataReady = _f[1];
7
+ var _a, _b, _c;
8
+ var _d = useState(null), data = _d[0], setData = _d[1];
9
+ var _e = useState(null), errorState = _e[0], setErrorState = _e[1];
10
+ var _f = useState(0), loadingProgress = _f[0], _setLoadingProgress = _f[1];
11
+ var _g = useState(false), isProcessing = _g[0], setIsProcessing = _g[1];
12
+ var _h = useState(false), dataReady = _h[0], setDataReady = _h[1];
12
13
  var lastProgress = useRef(0);
13
14
  var lastProcessedDocument = useRef(null);
14
15
  var processingTimeout = useRef(null);
@@ -25,12 +26,87 @@ var useChartData = function (consultaSerasa, consultaBoaVista) {
25
26
  }
26
27
  return 0;
27
28
  }, [ctxProcessos.type, ctxProcessos.document]);
29
+ // Calcula dados de categorias a partir dos dados já processados em globalData
30
+ // ou fallback para processamento do documento se globalData ainda não estiver disponível
28
31
  var dadosProtestos = useMemo(function () {
32
+ var protestosData = globalData === null || globalData === void 0 ? void 0 : globalData.protestosData;
33
+ // Se temos os dados já processados em globalData, usa diretamente
34
+ if ((protestosData === null || protestosData === void 0 ? void 0 : protestosData.isLoaded) &&
35
+ (protestosData === null || protestosData === void 0 ? void 0 : protestosData.protestosGerais) &&
36
+ (protestosData === null || protestosData === void 0 ? void 0 : protestosData.protestosDeCredito) &&
37
+ (protestosData === null || protestosData === void 0 ? void 0 : protestosData.protestosDeImposto)) {
38
+ var obterUltimaData = function (protestos) {
39
+ if (!protestos.length)
40
+ return null;
41
+ var datas = protestos
42
+ .map(function (p) {
43
+ try {
44
+ var dataStr = p.dataProtesto || '';
45
+ if (!dataStr)
46
+ return null;
47
+ var formattedDate = converterParaFormatoValido(dataStr);
48
+ var date = new Date(formattedDate);
49
+ return isNaN(date.getTime()) ? null : date.getTime();
50
+ }
51
+ catch (_a) {
52
+ return null;
53
+ }
54
+ })
55
+ .filter(function (d) { return d !== null; });
56
+ return datas.length
57
+ ? new Date(Math.max.apply(Math, datas)).toLocaleDateString('pt-BR')
58
+ : null;
59
+ };
60
+ return [
61
+ {
62
+ categoria: 'Protestos de Crédito',
63
+ quantidade: protestosData.protestosDeCredito.length,
64
+ ultimaOcorrencia: obterUltimaData(protestosData.protestosDeCredito)
65
+ },
66
+ {
67
+ categoria: 'Protestos de Impostos',
68
+ quantidade: protestosData.protestosDeImposto.length,
69
+ ultimaOcorrencia: obterUltimaData(protestosData.protestosDeImposto)
70
+ },
71
+ {
72
+ categoria: 'Protestos Gerais',
73
+ quantidade: protestosData.protestosGerais.length,
74
+ ultimaOcorrencia: obterUltimaData(protestosData.protestosGerais)
75
+ }
76
+ ];
77
+ }
78
+ // Fallback: processa do documento se globalData ainda não estiver disponível
29
79
  if (ctxProtestos.type === RequestStatus.Success && ctxProtestos.document) {
30
80
  return processProtestData(ctxProtestos.document, iaOverrides);
31
81
  }
32
82
  return [];
33
- }, [ctxProtestos.type, ctxProtestos.document, iaOverrides]);
83
+ }, [
84
+ globalData === null || globalData === void 0 ? void 0 : globalData.protestosData,
85
+ ctxProtestos.type,
86
+ ctxProtestos.document,
87
+ iaOverrides
88
+ ]);
89
+ // Obtém valores de protestos já calculados do globalData
90
+ var totalProtestos = (_b = globalData === null || globalData === void 0 ? void 0 : globalData.protestosData) === null || _b === void 0 ? void 0 : _b.totalProtestos;
91
+ var valorTotalProtestos = (_c = globalData === null || globalData === void 0 ? void 0 : globalData.protestosData) === null || _c === void 0 ? void 0 : _c.valorTotalProtestos;
92
+ // Calcula última ocorrência a partir dos dados de categorias
93
+ var ultimaOcorrenciaProtestos = useMemo(function () {
94
+ if (!dadosProtestos || !dadosProtestos.length)
95
+ return null;
96
+ var datas = dadosProtestos
97
+ .map(function (cat) { return cat.ultimaOcorrencia; })
98
+ .filter(Boolean)
99
+ .map(function (data) {
100
+ if (!data)
101
+ return null;
102
+ var date = new Date(data.split('/').reverse().join('-'));
103
+ return isNaN(date.getTime()) ? null : date.getTime();
104
+ })
105
+ .filter(function (timestamp) { return timestamp !== null; });
106
+ return datas.length
107
+ ? new Date(Math.max.apply(Math, datas)).toLocaleDateString('pt-BR')
108
+ : null;
109
+ }, [dadosProtestos]);
34
110
  useEffect(function () {
35
111
  var _a, _b, _c, _d;
36
112
  var parts = [
@@ -127,7 +203,7 @@ var useChartData = function (consultaSerasa, consultaBoaVista) {
127
203
  }
128
204
  var parsed = JSON.parse(documentSnapshot_1);
129
205
  parsed.protestosCategory = dadosProtestos;
130
- var processed = processData(structuredClone(parsed), quantidadeProcessos);
206
+ var processed = processData(structuredClone(parsed), quantidadeProcessos, totalProtestos, valorTotalProtestos, ultimaOcorrenciaProtestos);
131
207
  setData(processed);
132
208
  setIsProcessing(false);
133
209
  setDataReady(true);
@@ -151,6 +227,9 @@ var useChartData = function (consultaSerasa, consultaBoaVista) {
151
227
  ctxHistory.document,
152
228
  dadosProtestos,
153
229
  quantidadeProcessos,
230
+ totalProtestos,
231
+ valorTotalProtestos,
232
+ ultimaOcorrenciaProtestos,
154
233
  allContextsReady
155
234
  ]);
156
235
  // Cleanup do timeout quando componente desmonta
@@ -4,14 +4,15 @@ import { defaultChartColors } from '../config/chartColors';
4
4
  export var usePieChartData = function (dataInput) {
5
5
  var width = useWindowSize().width;
6
6
  return useMemo(function () {
7
- var _a;
7
+ var _a, _b, _c, _d;
8
8
  var getLastValue = function (arr) { var _a; return arr.length > 0 ? ((_a = arr[arr.length - 1].quantidade) !== null && _a !== void 0 ? _a : 0) : 0; };
9
- var totalProtestos = getLastValue(dataInput.protestos);
9
+ // Usa valor já calculado de pieChartTotalConfig se disponível, senão usa histórico
10
+ var totalProtestos = (_c = (_b = (_a = dataInput.pieChartTotalConfig) === null || _a === void 0 ? void 0 : _a.protestos) === null || _b === void 0 ? void 0 : _b.total) !== null && _c !== void 0 ? _c : getLastValue(dataInput.protestos);
10
11
  var totalCCFs = getLastValue(dataInput.ccfs);
11
12
  var totalSerasa = getLastValue(dataInput.serasa);
12
13
  var totalBoaVista = getLastValue(dataInput.boaVista);
13
14
  var totalDividasPublicas = getLastValue(dataInput.dividasPublicasGrafico);
14
- var processosJuridicos = (_a = dataInput.pieChartTotalConfig) === null || _a === void 0 ? void 0 : _a.processosJuridicos;
15
+ var processosJuridicos = (_d = dataInput.pieChartTotalConfig) === null || _d === void 0 ? void 0 : _d.processosJuridicos;
15
16
  var chartData = {
16
17
  labels: [
17
18
  'Protestos',
@@ -2,5 +2,5 @@ import { DataInput } from '../../../components/chart/types/iChart';
2
2
  /**
3
3
  * Normaliza todos os datasets do DataInput.
4
4
  */
5
- export declare const processData: (data: DataInput, quantidadeProcessosJuridicos: number) => DataInput;
5
+ export declare const processData: (data: DataInput, quantidadeProcessosJuridicos: number, totalProtestos?: number, valorTotalProtestos?: number, ultimaOcorrenciaProtestos?: string | null) => DataInput;
6
6
  export declare function processProtestData(document: Document, iaOverrides?: Record<string, string>): DataInput['protestosCategory'];
@@ -36,7 +36,7 @@ var keyToTime = function (key) {
36
36
  /**
37
37
  * Normaliza todos os datasets do DataInput.
38
38
  */
39
- export var processData = function (data, quantidadeProcessosJuridicos) {
39
+ export var processData = function (data, quantidadeProcessosJuridicos, totalProtestos, valorTotalProtestos, ultimaOcorrenciaProtestos) {
40
40
  // ------------------------------------------------------------------
41
41
  // PROTESTOS
42
42
  // ------------------------------------------------------------------
@@ -61,6 +61,44 @@ export var processData = function (data, quantidadeProcessosJuridicos) {
61
61
  .map(function (info) { return (__assign(__assign({}, info), { data: formatDatePtBrToDate(info.data) // normaliza p/ ISO local
62
62
  })); }), function (info) { return info.data; });
63
63
  // ------------------------------------------------------------------
64
+ // GARANTIR ÚLTIMO PONTO CORRETO PARA PROTESTOS
65
+ // ------------------------------------------------------------------
66
+ // Se temos valores corretos de totalProtestos e valorTotalProtestos,
67
+ // garantimos que o último ponto do histórico tenha esses valores
68
+ if (totalProtestos !== undefined &&
69
+ valorTotalProtestos !== undefined &&
70
+ data.protestos.length > 0) {
71
+ var ultimoPonto = data.protestos[data.protestos.length - 1];
72
+ var dataAtual = ultimaOcorrenciaProtestos
73
+ ? formatDatePtBrToDate(ultimaOcorrenciaProtestos)
74
+ : new Date();
75
+ // Verifica se o último ponto precisa ser atualizado
76
+ var precisaAtualizar = ultimoPonto.quantidade !== totalProtestos ||
77
+ ultimoPonto.valorTotal !== valorTotalProtestos;
78
+ if (precisaAtualizar) {
79
+ // Atualiza o último ponto ou adiciona um novo se necessário
80
+ var dataUltimoPonto = ultimoPonto.data instanceof Date
81
+ ? ultimoPonto.data
82
+ : new Date(ultimoPonto.data);
83
+ var dataProtesto = dataAtual instanceof Date ? dataAtual : new Date(dataAtual);
84
+ // Se a data atual é mais recente que o último ponto, adiciona novo ponto
85
+ // Caso contrário, atualiza o último ponto existente
86
+ if (dataProtesto.getTime() > dataUltimoPonto.getTime()) {
87
+ data.protestos.push({
88
+ data: dataProtesto,
89
+ quantidade: totalProtestos,
90
+ valorTotal: valorTotalProtestos
91
+ });
92
+ }
93
+ else {
94
+ // Atualiza o último ponto mantendo a data original
95
+ data.protestos[data.protestos.length - 1] = __assign(__assign({}, ultimoPonto), { quantidade: totalProtestos, valorTotal: valorTotalProtestos });
96
+ }
97
+ // Reordena após adicionar/atualizar
98
+ data.protestos = sortBy(data.protestos, function (info) { return info.data; });
99
+ }
100
+ }
101
+ // ------------------------------------------------------------------
64
102
  // CCFs
65
103
  // ------------------------------------------------------------------
66
104
  data.ccfs = sortBy(unique(data.ccfs, function (x) { return x.data; })
@@ -103,10 +141,20 @@ export var processData = function (data, quantidadeProcessosJuridicos) {
103
141
  // ------------------------------------------------------------------
104
142
  // PIE-CHART EXTRA
105
143
  // ------------------------------------------------------------------
106
- data.pieChartTotalConfig = {
107
- processosJuridicos: quantidadeProcessosJuridicos
108
- };
109
- return __assign(__assign({}, data), { protestos: data.protestos, ccfs: data.ccfs, boaVista: data.boaVista, serasa: data.serasa, dividasPublicasGrafico: data.dividasPublicasGrafico, pieChartTotalConfig: __assign(__assign({}, data.pieChartTotalConfig), { processosJuridicos: quantidadeProcessosJuridicos }) });
144
+ data.pieChartTotalConfig = __assign({ processosJuridicos: quantidadeProcessosJuridicos }, (totalProtestos !== undefined && {
145
+ protestos: {
146
+ total: totalProtestos,
147
+ valorTotal: valorTotalProtestos !== null && valorTotalProtestos !== void 0 ? valorTotalProtestos : null,
148
+ ultimaOcorrencia: ultimaOcorrenciaProtestos !== null && ultimaOcorrenciaProtestos !== void 0 ? ultimaOcorrenciaProtestos : null
149
+ }
150
+ }));
151
+ return __assign(__assign({}, data), { protestos: data.protestos, ccfs: data.ccfs, boaVista: data.boaVista, serasa: data.serasa, dividasPublicasGrafico: data.dividasPublicasGrafico, pieChartTotalConfig: __assign(__assign(__assign({}, data.pieChartTotalConfig), { processosJuridicos: quantidadeProcessosJuridicos }), (totalProtestos !== undefined && {
152
+ protestos: {
153
+ total: totalProtestos,
154
+ valorTotal: valorTotalProtestos !== null && valorTotalProtestos !== void 0 ? valorTotalProtestos : null,
155
+ ultimaOcorrencia: ultimaOcorrenciaProtestos !== null && ultimaOcorrenciaProtestos !== void 0 ? ultimaOcorrenciaProtestos : null
156
+ }
157
+ })) });
110
158
  };
111
159
  export function processProtestData(document, iaOverrides) {
112
160
  // Converte Node[] para Protesto[]
@@ -28,6 +28,7 @@ import ProtestosGeraisIcon from '../../assets/icones/protestosGerais';
28
28
  import ProtestosImpostosIcon from '../../assets/icones/protestosImpostos';
29
29
  import { useGlobalData } from '../../contexts/globalDataContext';
30
30
  import { classifyProtestos, useProtestosClassification } from '../../hooks/useProtestosClassification';
31
+ import { clearMoneyString } from '../../utils/number';
31
32
  import { parseProtesto } from '../../utils/parseProtesto';
32
33
  import XPathUtils from '../../utils/xpath';
33
34
  import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';
@@ -83,6 +84,13 @@ var Protestos = function () {
83
84
  return;
84
85
  }
85
86
  var nmChave = Array.from(new Set(__spreadArray(__spreadArray(__spreadArray([], getChaves(protestosDeCredito), true), getChaves(protestosDeImposto), true), getChaves(protestosGerais), true)));
87
+ // Calcula valorTotalProtestos uma única vez somando todos os valores
88
+ var todosProtestos = __spreadArray(__spreadArray(__spreadArray([], protestosDeCredito, true), protestosDeImposto, true), protestosGerais, true);
89
+ var valorTotalProtestos = todosProtestos.reduce(function (total, protesto) {
90
+ var valorStr = (protesto === null || protesto === void 0 ? void 0 : protesto.valor) || '0';
91
+ var valorNumero = Number(clearMoneyString(valorStr)) || 0;
92
+ return total + valorNumero;
93
+ }, 0);
86
94
  setData(function (prevState) {
87
95
  var _a;
88
96
  return (__assign(__assign({}, prevState), { protestos: registros, protestosData: {
@@ -90,6 +98,7 @@ var Protestos = function () {
90
98
  protestosDeImposto: protestosDeImposto,
91
99
  protestosGerais: protestosGerais,
92
100
  totalProtestos: registros,
101
+ valorTotalProtestos: valorTotalProtestos,
93
102
  isLoaded: true,
94
103
  iaOverrides: (_a = prevState.protestosData) === null || _a === void 0 ? void 0 : _a.iaOverrides,
95
104
  nmChaves: nmChave