@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.
- package/dist/components/chart/chartSystem.js +14 -2
- package/dist/components/chart/hooks/useChartData.js +87 -8
- package/dist/components/chart/hooks/usePieChartData.js +4 -3
- package/dist/components/chart/utils/dataProcessing.d.ts +1 -1
- package/dist/components/chart/utils/dataProcessing.js +53 -5
- package/dist/components/protestos/protestos.js +9 -0
- package/lib/cjs/index.js +166 -19
- package/lib/esm/index.js +166 -19
- package/package.json +1 -1
|
@@ -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
|
-
|
|
164
|
-
var
|
|
163
|
+
// Usa valores já 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
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
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
|
-
}, [
|
|
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
|
-
|
|
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 = (
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|