evo360-types 1.3.600 → 1.3.604
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/apps/evo-chat/chatbee/zod-schemas.d.ts +4 -4
- package/dist/apps/evo-crm/lead/zod-schemas.d.ts +3 -0
- package/dist/apps/evo-crm/lead/zod-schemas.js +1 -0
- package/dist/apps/evo-crm/lead/zod-schemas.ts +2 -0
- package/dist/apps/evo-csq/zod-schemas.d.ts +10 -10
- package/dist/apps/evo-finops/zod-schemas.d.ts +143 -0
- package/dist/apps/evo-finops/zod-schemas.js +11 -0
- package/dist/apps/evo-finops/zod-schemas.ts +11 -0
- package/dist/apps/evo-hub-ia/v1/zod-schemas.d.ts +36 -36
- package/dist/apps/evo-med/dic/zod-schemas.d.ts +4 -4
- package/dist/apps/evo-med/people/zod-schemas.d.ts +3 -0
- package/dist/apps/evo-med/people/zod-schemas.js +1 -0
- package/dist/apps/evo-med/people/zod-schemas.ts +2 -0
- package/dist/apps/shared/zod-schemas.d.ts +100 -0
- package/dist/apps/shared/zod-schemas.js +39 -1
- package/dist/apps/shared/zod-schemas.ts +44 -0
- package/dist/types/evo-crm/lead/index.d.ts +3 -1
- package/dist/types/evo-crm/lead/index.ts +3 -0
- package/dist/types/evo-finops/common/proposal.d.ts +47 -4
- package/dist/types/evo-finops/common/proposal.ts +47 -4
- package/dist/types/evo-med/people/index.d.ts +3 -1
- package/dist/types/evo-med/people/index.ts +3 -0
- package/dist/types/shared/capture-data.d.ts +49 -0
- package/dist/types/shared/capture-data.js +26 -0
- package/dist/types/shared/capture-data.ts +74 -0
- package/dist/types/shared/index.d.ts +1 -0
- package/dist/types/shared/index.js +1 -0
- package/dist/types/shared/index.ts +1 -0
- package/package.json +1 -1
|
@@ -42,12 +42,34 @@ export type NexFinopsProposalLoyaltyPeriod = 'none' | '3m' | '6m' | '1y' | '2y';
|
|
|
42
42
|
|
|
43
43
|
// ── Prefill do cliente ──
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Dados que o vendedor já conhece e a página pública usa para pré-preencher.
|
|
47
|
+
* Os nomes seguem `INexVendasJourneyCustomerData`/`INexVendasJourneyCompany` da
|
|
48
|
+
* jornada, exceto `company`, que é a razão social (lá, `legal_name`).
|
|
49
|
+
*
|
|
50
|
+
* Com `customer_id` na proposta, o backend grava aqui um SNAPSHOT do cadastro do
|
|
51
|
+
* cliente a cada create/update (o que o vendedor enviar é sobrescrito); sem
|
|
52
|
+
* `customer_id`, vale o que o vendedor digitou. `document_number` e
|
|
53
|
+
* `responsible_cpf` são gravados só com dígitos.
|
|
54
|
+
*/
|
|
46
55
|
export interface INexFinopsProposalPrefill {
|
|
47
56
|
name?: string | null;
|
|
48
57
|
email?: string | null;
|
|
49
58
|
phone?: string | null;
|
|
59
|
+
/** Razão social. */
|
|
50
60
|
company?: string | null;
|
|
61
|
+
trade_name?: string | null;
|
|
62
|
+
document_type?: 'cpf' | 'cnpj' | null;
|
|
63
|
+
document_number?: string | null;
|
|
64
|
+
/** CPF de quem assina. No cadastro PF coincide com `document_number`. */
|
|
65
|
+
responsible_cpf?: string | null;
|
|
66
|
+
zip?: string | null;
|
|
67
|
+
street?: string | null;
|
|
68
|
+
number?: string | null;
|
|
69
|
+
complement?: string | null;
|
|
70
|
+
district?: string | null;
|
|
71
|
+
city?: string | null;
|
|
72
|
+
state?: string | null;
|
|
51
73
|
}
|
|
52
74
|
|
|
53
75
|
// ── Documento principal ──
|
|
@@ -127,13 +149,19 @@ export interface INexFinopsProposalPublic {
|
|
|
127
149
|
*/
|
|
128
150
|
loyalty_period_label?: string | null;
|
|
129
151
|
/**
|
|
130
|
-
* Dados
|
|
131
|
-
*
|
|
132
|
-
*
|
|
152
|
+
* Dados que o vendedor cadastrou, por inteiro, para a página pública
|
|
153
|
+
* pré-preencher o formulário. `null` quando a proposta não tem prefill; cada
|
|
154
|
+
* campo é `null` quando ausente.
|
|
133
155
|
*
|
|
134
156
|
* Decisão do usuário (2026-09-23): a proposta existe para o cliente não
|
|
135
157
|
* precisar preencher. Quem tem o link vê o contato do lead — risco aceito.
|
|
136
158
|
* Supera, neste ponto, a projeção só-nome da feat-128.
|
|
159
|
+
*
|
|
160
|
+
* Documento INCLUÍDO desde a feat-194 (2026-09-24), revogando o "nunca
|
|
161
|
+
* documento" da fix-150: CNPJ, CPF do titular PF e CPF do responsável saem
|
|
162
|
+
* para quem tem o link, porque pré-preencher CPF/CNPJ só funciona se o
|
|
163
|
+
* endpoint público os entregar. Risco LGPD (CPF é dado pessoal) registrado;
|
|
164
|
+
* restringir a CNPJ depois muda só a projeção, não o contrato.
|
|
137
165
|
*/
|
|
138
166
|
prefill: INexFinopsProposalPublicPrefill | null;
|
|
139
167
|
/**
|
|
@@ -143,11 +171,26 @@ export interface INexFinopsProposalPublic {
|
|
|
143
171
|
prefill_masked: { name: string | null };
|
|
144
172
|
}
|
|
145
173
|
|
|
174
|
+
/** Mesmos campos de `INexFinopsProposalPrefill`, cada um `null` quando ausente. */
|
|
146
175
|
export interface INexFinopsProposalPublicPrefill {
|
|
147
176
|
name: string | null;
|
|
148
177
|
email: string | null;
|
|
149
178
|
phone: string | null;
|
|
179
|
+
/** Razão social. */
|
|
150
180
|
company: string | null;
|
|
181
|
+
trade_name: string | null;
|
|
182
|
+
document_type: 'cpf' | 'cnpj' | null;
|
|
183
|
+
/** Só dígitos. */
|
|
184
|
+
document_number: string | null;
|
|
185
|
+
/** Só dígitos. */
|
|
186
|
+
responsible_cpf: string | null;
|
|
187
|
+
zip: string | null;
|
|
188
|
+
street: string | null;
|
|
189
|
+
number: string | null;
|
|
190
|
+
complement: string | null;
|
|
191
|
+
district: string | null;
|
|
192
|
+
city: string | null;
|
|
193
|
+
state: string | null;
|
|
151
194
|
}
|
|
152
195
|
|
|
153
196
|
// ── Transições de status ──
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from "../fb_collections";
|
|
2
2
|
import { IProfile } from "../../evo-people";
|
|
3
|
-
import type { FirestoreDocumentReference, IAddress, IContact, IExternalLink, ITag } from "../../shared";
|
|
3
|
+
import type { CaptureDataMap, FirestoreDocumentReference, IAddress, IContact, IExternalLink, ITag } from "../../shared";
|
|
4
4
|
import { IMedication, PatientAttachmentBaseCategory } from "../dic";
|
|
5
5
|
export declare const EvoMedProfessionalPermissions: {
|
|
6
6
|
readonly List: "evo_med_people_professional_read";
|
|
@@ -184,6 +184,8 @@ export interface IPatient extends IProfile {
|
|
|
184
184
|
attachments?: IPatientAttachment[] | null;
|
|
185
185
|
attachmentExternalLinkKeys?: string[] | null;
|
|
186
186
|
tags?: ITag[] | null;
|
|
187
|
+
/** Campos complementares (code → valor), validados contra o dicionário `dics/patients/capture-data` (feat-196). */
|
|
188
|
+
capture_data?: CaptureDataMap | null;
|
|
187
189
|
userRef?: FirestoreDocumentReference;
|
|
188
190
|
[key: string]: unknown;
|
|
189
191
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from "../fb_collections";
|
|
2
2
|
import { IProfile } from "../../evo-people";
|
|
3
3
|
import type {
|
|
4
|
+
CaptureDataMap,
|
|
4
5
|
FirestoreDocumentReference,
|
|
5
6
|
IAddress,
|
|
6
7
|
IContact,
|
|
@@ -249,6 +250,8 @@ export interface IPatient extends IProfile {
|
|
|
249
250
|
attachments?: IPatientAttachment[] | null;
|
|
250
251
|
attachmentExternalLinkKeys?: string[] | null;
|
|
251
252
|
tags?: ITag[] | null;
|
|
253
|
+
/** Campos complementares (code → valor), validados contra o dicionário `dics/patients/capture-data` (feat-196). */
|
|
254
|
+
capture_data?: CaptureDataMap | null;
|
|
252
255
|
userRef?: FirestoreDocumentReference;
|
|
253
256
|
[key: string]: unknown; // index signature
|
|
254
257
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { IFireDoc } from "./index";
|
|
2
|
+
/** Nome da subcoleção do dicionário, sob `dics/{entidade}/`. */
|
|
3
|
+
export declare const CAPTURE_DATA_COLLECTION = "capture-data";
|
|
4
|
+
/** Entidades que têm dicionário de campos complementares (= segmento do path em `dics/`). */
|
|
5
|
+
export type CaptureDataEntity = "leads" | "patients";
|
|
6
|
+
export declare const CAPTURE_DATA_FIELD_TYPES: readonly ["text", "number", "date", "select", "boolean"];
|
|
7
|
+
/** Tipo do campo. Ausente no doc = `text` (campos legados de lead). */
|
|
8
|
+
export type CaptureDataFieldType = (typeof CAPTURE_DATA_FIELD_TYPES)[number];
|
|
9
|
+
/**
|
|
10
|
+
* Valor gravado no mapa `capture_data`. `date` é string `YYYY-MM-DD`;
|
|
11
|
+
* `select` grava o `value` da opção.
|
|
12
|
+
*/
|
|
13
|
+
export type CaptureDataValue = string | number | boolean;
|
|
14
|
+
/** Mapa gravado na entidade (`lead.capture_data`, `patient.capture_data`). */
|
|
15
|
+
export type CaptureDataMap = Record<string, CaptureDataValue>;
|
|
16
|
+
/**
|
|
17
|
+
* Regra de CRIAÇÃO do `code` (aplicada no backend). Codes legados fora desse
|
|
18
|
+
* padrão (ex.: `Convênio`, `nome-paciente`) continuam válidos para leitura.
|
|
19
|
+
*/
|
|
20
|
+
export declare const CAPTURE_DATA_CODE_PATTERN = "^[a-z][a-z0-9_]{0,63}$";
|
|
21
|
+
/** Limite de caracteres de um valor `text`. */
|
|
22
|
+
export declare const CAPTURE_DATA_TEXT_MAX_LENGTH = 2000;
|
|
23
|
+
export interface ICaptureDataFieldOption {
|
|
24
|
+
/** O que vai gravado no mapa. */
|
|
25
|
+
value: string;
|
|
26
|
+
/** O que a UI mostra. */
|
|
27
|
+
label: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ICaptureDataField extends IFireDoc {
|
|
30
|
+
/** Chave no mapa `capture_data`. Imutável depois de criado. */
|
|
31
|
+
code: string;
|
|
32
|
+
name: string;
|
|
33
|
+
/** Ausente = `text` (legado). Imutável depois de definido. */
|
|
34
|
+
type?: CaptureDataFieldType;
|
|
35
|
+
/** Só para `select`. */
|
|
36
|
+
options?: ICaptureDataFieldOption[] | null;
|
|
37
|
+
required?: boolean;
|
|
38
|
+
order?: number | null;
|
|
39
|
+
/** Envia o valor ao índice de busca (Algolia, região US). Default false (D2). */
|
|
40
|
+
searchable?: boolean;
|
|
41
|
+
/** Instrução para a IA preencher o campo. */
|
|
42
|
+
mcp_description?: string | null;
|
|
43
|
+
/** Default true. */
|
|
44
|
+
mcp_enabled?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** Compatibilidade: o dicionário de lead é o genérico. */
|
|
47
|
+
export type ILeadCaptureDataField = ICaptureDataField;
|
|
48
|
+
/** Dicionário de campos complementares de paciente. */
|
|
49
|
+
export type IPatientCaptureDataField = ICaptureDataField;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CAPTURE_DATA_TEXT_MAX_LENGTH = exports.CAPTURE_DATA_CODE_PATTERN = exports.CAPTURE_DATA_FIELD_TYPES = exports.CAPTURE_DATA_COLLECTION = void 0;
|
|
4
|
+
// ----- Campos complementares (capture-data) — feat-196
|
|
5
|
+
//
|
|
6
|
+
// Dicionário genérico por entidade: cada tenant define campos próprios que são
|
|
7
|
+
// gravados em `{entidade}.capture_data` (mapa code → valor).
|
|
8
|
+
// leads → tenants/{t}/apps/evo-crm/dics/leads/capture-data/{id}
|
|
9
|
+
// patients → tenants/{t}/apps/evo-med/dics/patients/capture-data/{id}
|
|
10
|
+
// Herda do `base_tenant` (o tenant atual vence o base, deduplicado por `code`).
|
|
11
|
+
/** Nome da subcoleção do dicionário, sob `dics/{entidade}/`. */
|
|
12
|
+
exports.CAPTURE_DATA_COLLECTION = "capture-data";
|
|
13
|
+
exports.CAPTURE_DATA_FIELD_TYPES = [
|
|
14
|
+
"text",
|
|
15
|
+
"number",
|
|
16
|
+
"date",
|
|
17
|
+
"select",
|
|
18
|
+
"boolean",
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Regra de CRIAÇÃO do `code` (aplicada no backend). Codes legados fora desse
|
|
22
|
+
* padrão (ex.: `Convênio`, `nome-paciente`) continuam válidos para leitura.
|
|
23
|
+
*/
|
|
24
|
+
exports.CAPTURE_DATA_CODE_PATTERN = "^[a-z][a-z0-9_]{0,63}$";
|
|
25
|
+
/** Limite de caracteres de um valor `text`. */
|
|
26
|
+
exports.CAPTURE_DATA_TEXT_MAX_LENGTH = 2000;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { IFireDoc } from "./index";
|
|
2
|
+
|
|
3
|
+
// ----- Campos complementares (capture-data) — feat-196
|
|
4
|
+
//
|
|
5
|
+
// Dicionário genérico por entidade: cada tenant define campos próprios que são
|
|
6
|
+
// gravados em `{entidade}.capture_data` (mapa code → valor).
|
|
7
|
+
// leads → tenants/{t}/apps/evo-crm/dics/leads/capture-data/{id}
|
|
8
|
+
// patients → tenants/{t}/apps/evo-med/dics/patients/capture-data/{id}
|
|
9
|
+
// Herda do `base_tenant` (o tenant atual vence o base, deduplicado por `code`).
|
|
10
|
+
|
|
11
|
+
/** Nome da subcoleção do dicionário, sob `dics/{entidade}/`. */
|
|
12
|
+
export const CAPTURE_DATA_COLLECTION = "capture-data";
|
|
13
|
+
|
|
14
|
+
/** Entidades que têm dicionário de campos complementares (= segmento do path em `dics/`). */
|
|
15
|
+
export type CaptureDataEntity = "leads" | "patients";
|
|
16
|
+
|
|
17
|
+
export const CAPTURE_DATA_FIELD_TYPES = [
|
|
18
|
+
"text",
|
|
19
|
+
"number",
|
|
20
|
+
"date",
|
|
21
|
+
"select",
|
|
22
|
+
"boolean",
|
|
23
|
+
] as const;
|
|
24
|
+
|
|
25
|
+
/** Tipo do campo. Ausente no doc = `text` (campos legados de lead). */
|
|
26
|
+
export type CaptureDataFieldType = (typeof CAPTURE_DATA_FIELD_TYPES)[number];
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Valor gravado no mapa `capture_data`. `date` é string `YYYY-MM-DD`;
|
|
30
|
+
* `select` grava o `value` da opção.
|
|
31
|
+
*/
|
|
32
|
+
export type CaptureDataValue = string | number | boolean;
|
|
33
|
+
|
|
34
|
+
/** Mapa gravado na entidade (`lead.capture_data`, `patient.capture_data`). */
|
|
35
|
+
export type CaptureDataMap = Record<string, CaptureDataValue>;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Regra de CRIAÇÃO do `code` (aplicada no backend). Codes legados fora desse
|
|
39
|
+
* padrão (ex.: `Convênio`, `nome-paciente`) continuam válidos para leitura.
|
|
40
|
+
*/
|
|
41
|
+
export const CAPTURE_DATA_CODE_PATTERN = "^[a-z][a-z0-9_]{0,63}$";
|
|
42
|
+
|
|
43
|
+
/** Limite de caracteres de um valor `text`. */
|
|
44
|
+
export const CAPTURE_DATA_TEXT_MAX_LENGTH = 2000;
|
|
45
|
+
|
|
46
|
+
export interface ICaptureDataFieldOption {
|
|
47
|
+
/** O que vai gravado no mapa. */
|
|
48
|
+
value: string;
|
|
49
|
+
/** O que a UI mostra. */
|
|
50
|
+
label: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface ICaptureDataField extends IFireDoc {
|
|
54
|
+
/** Chave no mapa `capture_data`. Imutável depois de criado. */
|
|
55
|
+
code: string;
|
|
56
|
+
name: string;
|
|
57
|
+
/** Ausente = `text` (legado). Imutável depois de definido. */
|
|
58
|
+
type?: CaptureDataFieldType;
|
|
59
|
+
/** Só para `select`. */
|
|
60
|
+
options?: ICaptureDataFieldOption[] | null;
|
|
61
|
+
required?: boolean;
|
|
62
|
+
order?: number | null;
|
|
63
|
+
/** Envia o valor ao índice de busca (Algolia, região US). Default false (D2). */
|
|
64
|
+
searchable?: boolean;
|
|
65
|
+
/** Instrução para a IA preencher o campo. */
|
|
66
|
+
mcp_description?: string | null;
|
|
67
|
+
/** Default true. */
|
|
68
|
+
mcp_enabled?: boolean;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Compatibilidade: o dicionário de lead é o genérico. */
|
|
72
|
+
export type ILeadCaptureDataField = ICaptureDataField;
|
|
73
|
+
/** Dicionário de campos complementares de paciente. */
|
|
74
|
+
export type IPatientCaptureDataField = ICaptureDataField;
|
|
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.IEvoApp = void 0;
|
|
18
18
|
__exportStar(require("./fb_collections"), exports);
|
|
19
19
|
__exportStar(require("./external-links"), exports);
|
|
20
|
+
__exportStar(require("./capture-data"), exports);
|
|
20
21
|
var IEvoApp;
|
|
21
22
|
(function (IEvoApp) {
|
|
22
23
|
IEvoApp["EvoActivity"] = "evo-activity";
|