@credithub/harlan-components 1.36.8 → 1.37.3

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.
@@ -16,7 +16,6 @@ var Dominios = function () {
16
16
  return (React.createElement(Section, { ctx: ctx, title: "Dom\u00EDnios na Internet", subtitle: "Informa\u00E7\u00F5es de dom\u00EDnios na internet.", icon: DominiosIcon, onSuccess: function (document) {
17
17
  var children = document.length ? (React.createElement(Result, { resultContentStriped: false },
18
18
  React.createElement(ResultContent, { desktop: "1fr 1fr 1fr", tablet: "1fr 1fr", mobile: "1fr 1fr" }, document.map(function (data, key) { return (React.createElement(AddItemField, { key: key, name: "Dom\u00EDnio", value: React.createElement(Link, { href: "https://www.".concat(data), target: "_blank", rel: "noreferrer" }, data) })); })))) : null;
19
- console.log(document === null || document === void 0 ? void 0 : document.length);
20
19
  var description = (React.createElement(StatusMessage, { type: (document === null || document === void 0 ? void 0 : document.length) ? 'success' : 'default' }, document.length
21
20
  ? document.length === 1
22
21
  ? 'Foi encontrado 1 registro de domínio'
@@ -28,6 +28,10 @@ import { Summary } from './summary/summary';
28
28
  import { TransactionsTable } from './transactionTable/transactionTable';
29
29
  var DossieContent = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 1fr 2fr;\n justify-items: center;\n align-items: flex-start;\n margin-bottom: 20px;\n gap: 20px;\n\n @media screen and (max-width: 992px) {\n grid-template-columns: 1fr;\n }\n"], ["\n display: grid;\n grid-template-columns: 1fr 2fr;\n justify-items: center;\n align-items: flex-start;\n margin-bottom: 20px;\n gap: 20px;\n\n @media screen and (max-width: 992px) {\n grid-template-columns: 1fr;\n }\n"])));
30
30
  var DossieContainer = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding: 0px 70px;\n\n @media (max-width: 1000px) {\n padding: 0px 30px;\n }\n"], ["\n padding: 0px 70px;\n\n @media (max-width: 1000px) {\n padding: 0px 30px;\n }\n"])));
31
+ var LlamaContainer = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n padding: 32px;\n background-color: ", ";\n"], ["\n padding: 32px;\n background-color: ", ";\n"])), function (_a) {
32
+ var theme = _a.theme;
33
+ return theme.colors.white;
34
+ });
31
35
  var Dossie = function (_a) {
32
36
  var documento = _a.documento;
33
37
  var ctx = useContext(Queries.Finder);
@@ -60,13 +64,14 @@ var Dossie = function (_a) {
60
64
  var DossieCarrousel = function () {
61
65
  return !isPF ? (React.createElement(ReclameAquiCarousel, { documento: document, nome: name })) : (React.createElement(Carrousel, { name: name, document: document }));
62
66
  };
63
- return (React.createElement(DossieContainer, null,
64
- React.createElement(DossieContent, null,
65
- React.createElement(DossieCarrousel, null),
66
- React.createElement(Summary, { finderResponse: data, rfbResponse: rfbResponse, document: document })),
67
- React.createElement(TransactionsTable, { events: XPathUtils.select('//historico/consulta', data) || [] })));
67
+ return (React.createElement(React.Fragment, null,
68
+ React.createElement(DossieContainer, null,
69
+ React.createElement(DossieContent, null,
70
+ React.createElement(DossieCarrousel, null),
71
+ React.createElement(Summary, { finderResponse: data, rfbResponse: rfbResponse, document: document })),
72
+ React.createElement(TransactionsTable, { events: XPathUtils.select('//historico/consulta', data) || [] }))));
68
73
  };
69
74
  return (React.createElement(Section, { ctx: ctx, hideHeader: true, minimized: false, isError: function (e) { return response(e); }, onSuccess: response }));
70
75
  };
71
76
  export default Dossie;
72
- var templateObject_1, templateObject_2;
77
+ var templateObject_1, templateObject_2, templateObject_3;
@@ -0,0 +1,157 @@
1
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
+ if (ar || !(i in from)) {
4
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
+ ar[i] = from[i];
6
+ }
7
+ }
8
+ return to.concat(ar || Array.prototype.slice.call(from));
9
+ };
10
+ /* eslint-disable @typescript-eslint/no-explicit-any */
11
+ import StatusMessage from '../../../components/interface/statusMessage';
12
+ import { useQuery } from '../../../components/webservice';
13
+ import { useGlobalData } from '../../../contexts/globalDataContext';
14
+ import React, { useEffect, useMemo, useState } from 'react';
15
+ import { ChatInput, ChatInputContainer, Container, ContainerInput, Header, InitialMessageBox, InitialMessageContent, Message, MessageHistory, SendButton, Title } from './styles';
16
+ var isValidLlamaApiResponse = function (response) {
17
+ return (response &&
18
+ typeof response === 'object' &&
19
+ response.document &&
20
+ typeof response.document.messages === 'string');
21
+ };
22
+ function safeStringify(obj) {
23
+ var seen = new WeakSet();
24
+ return JSON.stringify(obj, function (_, value) {
25
+ if (typeof value === 'object' && value !== null) {
26
+ if (seen.has(value)) {
27
+ return;
28
+ }
29
+ seen.add(value);
30
+ }
31
+ return value;
32
+ });
33
+ }
34
+ var selectRelevantData = function (data, documento) {
35
+ var protestos = data.protestos, ultimoRegistroCCF = data.ultimoRegistroCCF, ccf = data.ccf, dividasPublicas = data.dividasPublicas, processosJuridicos = data.processosJuridicos, bankAccounts = data.bankAccounts, ccfData = data.ccfData, divida = data.divida, dossie = data.dossie, imoveis = data.imoveis, liminar = data.liminar, partners = data.partners, pepData = data.pepData, processosJuridicosData = data.processosJuridicosData, protestosData = data.protestosData, reclameAqui = data.reclameAqui, refinBoaVista = data.refinBoaVista, refinSerasa = data.refinSerasa, scoreData = data.scoreData, scr = data.scr, veiculos = data.veiculos;
36
+ return {
37
+ documento: documento,
38
+ protestos: protestos,
39
+ ultimoRegistroCCF: ultimoRegistroCCF,
40
+ ccf: ccf,
41
+ dividasPublicas: dividasPublicas,
42
+ processosJuridicos: processosJuridicos,
43
+ bankAccounts: bankAccounts,
44
+ ccfData: ccfData,
45
+ divida: divida,
46
+ dossie: dossie,
47
+ imoveis: imoveis,
48
+ liminar: liminar,
49
+ partners: partners,
50
+ pepData: pepData,
51
+ processosJuridicosData: processosJuridicosData,
52
+ protestosData: protestosData,
53
+ reclameAqui: reclameAqui,
54
+ refinBoaVista: refinBoaVista,
55
+ refinSerasa: refinSerasa,
56
+ scoreData: scoreData,
57
+ scr: scr,
58
+ veiculos: veiculos
59
+ };
60
+ };
61
+ function flattenData(data) {
62
+ // Declara o tipo do objeto flattened como { [key: string]: any }
63
+ var flattened = {};
64
+ for (var key in data) {
65
+ if (typeof data[key] === 'object' && !Array.isArray(data[key])) {
66
+ for (var innerKey in data[key]) {
67
+ flattened["".concat(key, "_").concat(innerKey)] = data[key][innerKey];
68
+ }
69
+ }
70
+ else {
71
+ flattened[key] = data[key];
72
+ }
73
+ }
74
+ return safeStringify(flattened);
75
+ }
76
+ var createQueryAndMessages = function (relevantData, messageHistory, extraMessage) {
77
+ var baseMessages = __spreadArray([
78
+ {
79
+ role: 'system',
80
+ content: 'Você é um assistente financeiro especializado em análise de crédito. Sua tarefa é fornecer um alerta claro e direto sobre a existência de protestos, processos judiciais e outros problemas financeiros da empresa, sempre priorizando informações mais relevantes.'
81
+ },
82
+ {
83
+ role: 'user',
84
+ content: "\n Esse dossi\u00EA inclui informa\u00E7\u00F5es financeiras e jur\u00EDdicas importantes. Sua tarefa \u00E9:\n 1. Informar se h\u00E1 protestos, processos judiciais ou outros problemas financeiros.\n 2. Priorizar informa\u00E7\u00F5es sobre processos judiciais, caso existam, e em seguida mencionar protestos.\n 3. N\u00E3o repetir informa\u00E7\u00F5es irrelevantes como valores ou detalhes n\u00E3o essenciais.\n 4. Manter o resumo curto, focando apenas em pontos cr\u00EDticos para a an\u00E1lise de cr\u00E9dito, com no m\u00E1ximo 300 caracteres.\n 5. N\u00E3o precisa falar sobre o que tem nos dados, o que dados incluem.\n\n Aqui est\u00E3o os dados da empresa: ".concat(relevantData, ".\n\n Responda em portugu\u00EAs de forma objetiva, com foco em informa\u00E7\u00F5es cr\u00EDticas e evitando linguagem t\u00E9cnica. Construa a resposta com a\n seguinte estrutura: Esse dossie tem alguns problemas com processos juridiciais relacionados a credito e trabalhistas, bem como protestos, tenha cuidado.\n A estrutura que apresentei \u00E9 meramente ilustrativa n\u00E3o se restrinja, apenas uma ideia para se guiar.\n ").concat(extraMessage || '', "\n ")
85
+ }
86
+ ], messageHistory, true);
87
+ return {
88
+ model: 'llama3',
89
+ messages: JSON.stringify(baseMessages)
90
+ };
91
+ };
92
+ var Llama = function (_a) {
93
+ var documento = _a.documento;
94
+ var globalData = useGlobalData().data;
95
+ var _b = useState('{}'), serializedData = _b[0], setSerializedData = _b[1];
96
+ var _c = useState(false), queryEnabled = _c[0], setQueryEnabled = _c[1];
97
+ var _d = useState(''), userInput = _d[0], setUserInput = _d[1];
98
+ var _e = useState([]), messageHistory = _e[0], setMessageHistory = _e[1];
99
+ var _f = useState(''), initialMessage = _f[0], setInitialMessage = _f[1];
100
+ useEffect(function () {
101
+ if (globalData && documento) {
102
+ try {
103
+ var relevantData = selectRelevantData(globalData, documento);
104
+ var serialized = flattenData(relevantData);
105
+ setSerializedData(serialized);
106
+ setQueryEnabled(true);
107
+ }
108
+ catch (error) {
109
+ console.error('Erro ao preparar os dados para a API:', error);
110
+ setSerializedData('{}');
111
+ setQueryEnabled(false);
112
+ }
113
+ }
114
+ }, [documento, globalData]);
115
+ var queryData = useMemo(function () {
116
+ if (!queryEnabled || !serializedData || serializedData === '{}')
117
+ return undefined;
118
+ return createQueryAndMessages(serializedData, []);
119
+ }, [queryEnabled, serializedData]);
120
+ var _g = useQuery("SELECT FROM 'LlamaApi'.'Consulta'", queryData, !!queryData), response = _g.response, error = _g.error, isLoading = _g.isLoading, refetch = _g.refetch;
121
+ useEffect(function () {
122
+ var _a;
123
+ if (response && !isLoading && !error) {
124
+ if (isValidLlamaApiResponse(response) && ((_a = response.document) === null || _a === void 0 ? void 0 : _a.messages)) {
125
+ setInitialMessage(response.document.messages || 'Resumo não disponível');
126
+ }
127
+ else {
128
+ setInitialMessage('Resumo não disponível');
129
+ }
130
+ }
131
+ }, [response, isLoading, error]);
132
+ var handleSendMessage = function () {
133
+ if (userInput.trim()) {
134
+ setMessageHistory(function (prevMessages) { return __spreadArray(__spreadArray([], prevMessages, true), [
135
+ { role: 'user', content: userInput }
136
+ ], false); });
137
+ setUserInput('');
138
+ refetch();
139
+ }
140
+ };
141
+ return (React.createElement(React.Fragment, null,
142
+ React.createElement(Container, null,
143
+ React.createElement(Header, null,
144
+ React.createElement(Title, null, "Assistente artificial de an\u00E1lise de cr\u00E9dito")),
145
+ error && (React.createElement("div", null,
146
+ React.createElement(StatusMessage, { type: "error" },
147
+ "Erro ao realizar a an\u00E1lise: ",
148
+ error.message))),
149
+ React.createElement(InitialMessageBox, null,
150
+ React.createElement(InitialMessageContent, null, initialMessage || 'Pensando...')),
151
+ React.createElement(MessageHistory, null, messageHistory.map(function (msg, index) { return (React.createElement(Message, { key: index, role: msg.role }, msg.content)); }))),
152
+ React.createElement(ContainerInput, null,
153
+ React.createElement(ChatInputContainer, null,
154
+ React.createElement(ChatInput, { type: "text", placeholder: "Digite o que deseja saber sobre esse dossi\u00EA", value: userInput, onChange: function (e) { return setUserInput(e.target.value); } }),
155
+ React.createElement(SendButton, { onClick: handleSendMessage })))));
156
+ };
157
+ export default Llama;
@@ -0,0 +1,13 @@
1
+ export declare const InitialMessageBox: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
2
+ export declare const InitialMessageContent: import("styled-components").StyledComponent<"p", import("styled-components").DefaultTheme, {}, never>;
3
+ export declare const Container: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
4
+ export declare const Header: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
5
+ export declare const Title: import("styled-components").StyledComponent<"h1", import("styled-components").DefaultTheme, {}, never>;
6
+ export declare const MessageHistory: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
7
+ export declare const Message: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
8
+ role: string;
9
+ }, never>;
10
+ export declare const ChatInputContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
11
+ export declare const ChatInput: import("styled-components").StyledComponent<"input", import("styled-components").DefaultTheme, {}, never>;
12
+ export declare const SendButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, {}, never>;
13
+ export declare const ContainerInput: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
@@ -0,0 +1,42 @@
1
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
2
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
3
+ return cooked;
4
+ };
5
+ import styled from 'styled-components';
6
+ // Estilo da caixa de mensagem inicial
7
+ export var InitialMessageBox = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n width: 100%;\n"], ["\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n width: 100%;\n"])));
8
+ export var InitialMessageContent = styled.p(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n font-size: 1rem;\n color: ", ";\n line-height: 1.5;\n\n @media (max-width: 768px) {\n font-size: 0.9rem;\n }\n"], ["\n font-size: 1rem;\n color: ", ";\n line-height: 1.5;\n\n @media (max-width: 768px) {\n font-size: 0.9rem;\n }\n"])), function (_a) {
9
+ var theme = _a.theme;
10
+ return theme.colors.azulApoio;
11
+ });
12
+ export var Container = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n border-radius: 10px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 800px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n"], ["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n border-radius: 10px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 800px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n"])), function (_a) {
13
+ var theme = _a.theme;
14
+ return theme.colors.cinzaBackground;
15
+ });
16
+ export var Header = styled.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n text-align: center;\n margin-bottom: 20px;\n\n @media (max-width: 768px) {\n margin-bottom: 10px;\n }\n"], ["\n text-align: center;\n margin-bottom: 20px;\n\n @media (max-width: 768px) {\n margin-bottom: 10px;\n }\n"])));
17
+ export var Title = styled.h1(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n color: ", ";\n font-size: 1.5rem;\n\n @media (max-width: 768px) {\n font-size: 1.2rem;\n }\n"], ["\n color: ", ";\n font-size: 1.5rem;\n\n @media (max-width: 768px) {\n font-size: 1.2rem;\n }\n"])), function (_a) {
18
+ var theme = _a.theme;
19
+ return theme.colors.azulCredithub;
20
+ });
21
+ export var MessageHistory = styled.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n width: 100%;\n max-height: 300px;\n overflow-y: auto;\n border-radius: 8px;\n\n @media (max-width: 768px) {\n max-height: 200px;\n padding: 8px;\n }\n"], ["\n width: 100%;\n max-height: 300px;\n overflow-y: auto;\n border-radius: 8px;\n\n @media (max-width: 768px) {\n max-height: 200px;\n padding: 8px;\n }\n"])));
22
+ export var Message = styled.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n padding: 10px;\n margin: 10px 0;\n background-color: ", ";\n color: ", ";\n border-radius: 8px;\n text-align: ", ";\n\n @media (max-width: 768px) {\n padding: 8px;\n margin: 8px 0;\n }\n"], ["\n padding: 10px;\n margin: 10px 0;\n background-color: ", ";\n color: ", ";\n border-radius: 8px;\n text-align: ", ";\n\n @media (max-width: 768px) {\n padding: 8px;\n margin: 8px 0;\n }\n"])), function (props) { return (props.role === 'user' ? '#007bff' : '#f1f1f1'); }, function (props) { return (props.role === 'user' ? '#fff' : '#000'); }, function (props) { return (props.role === 'user' ? 'right' : 'left'); });
23
+ export var ChatInputContainer = styled.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 30px;\n width: 100%;\n background-color: ", ";\n border-radius: 30px;\n padding: 8px;\n box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);\n\n @media (max-width: 768px) {\n margin-top: 15px;\n padding: 6px;\n border-radius: 20px;\n }\n"], ["\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 30px;\n width: 100%;\n background-color: ", ";\n border-radius: 30px;\n padding: 8px;\n box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);\n\n @media (max-width: 768px) {\n margin-top: 15px;\n padding: 6px;\n border-radius: 20px;\n }\n"])), function (_a) {
24
+ var theme = _a.theme;
25
+ return theme.colors.cinzaBackground;
26
+ });
27
+ export var ChatInput = styled.input(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n flex-grow: 1;\n border: none;\n padding: 10px;\n font-size: 1rem;\n border-radius: 20px;\n background-color: ", ";\n outline: none;\n margin-right: 10px;\n\n @media (max-width: 768px) {\n padding: 8px;\n font-size: 0.9rem;\n margin-right: 5px;\n }\n"], ["\n flex-grow: 1;\n border: none;\n padding: 10px;\n font-size: 1rem;\n border-radius: 20px;\n background-color: ", ";\n outline: none;\n margin-right: 10px;\n\n @media (max-width: 768px) {\n padding: 8px;\n font-size: 0.9rem;\n margin-right: 5px;\n }\n"])), function (_a) {
28
+ var theme = _a.theme;
29
+ return theme.colors.cinzaBackground;
30
+ });
31
+ export var SendButton = styled.button(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n width: 40px;\n height: 40px;\n background-color: ", ";\n color: ", ";\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n border: none;\n cursor: pointer;\n font-size: 1.5rem;\n\n @media (max-width: 768px) {\n width: 35px;\n height: 35px;\n font-size: 1.2rem;\n }\n"], ["\n width: 40px;\n height: 40px;\n background-color: ", ";\n color: ", ";\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n border: none;\n cursor: pointer;\n font-size: 1.5rem;\n\n @media (max-width: 768px) {\n width: 35px;\n height: 35px;\n font-size: 1.2rem;\n }\n"])), function (_a) {
32
+ var theme = _a.theme;
33
+ return theme.colors.azulCredithub;
34
+ }, function (_a) {
35
+ var theme = _a.theme;
36
+ return theme.colors.white;
37
+ });
38
+ export var ContainerInput = styled.div(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n width: 100%;\n max-width: 820px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n"], ["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n width: 100%;\n max-width: 820px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n"])), function (_a) {
39
+ var theme = _a.theme;
40
+ return theme.colors.white;
41
+ });
42
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11;
@@ -15,6 +15,7 @@ declare const theme: {
15
15
  positivoClaro: string;
16
16
  cinzaClaro: string;
17
17
  cinzaBase: string;
18
+ cinzaBackground: string;
18
19
  cinzaEscuro: string;
19
20
  prata: string;
20
21
  likeButton: string;
@@ -15,6 +15,7 @@ var theme = {
15
15
  positivoClaro: 'rgba(150, 219, 120, 1)',
16
16
  cinzaClaro: 'rgba(209, 209, 209, 1)',
17
17
  cinzaBase: 'rgba(245, 245, 245, 1)',
18
+ cinzaBackground: '#efefef',
18
19
  cinzaEscuro: 'rgba(53, 53, 53, 1)',
19
20
  prata: 'rgba(121, 129, 125, 1)',
20
21
  likeButton: '#007aff',