evo360-types 1.3.644 → 1.3.651
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-csq/zod-schemas.d.ts +322 -54
- package/dist/apps/evo-csq/zod-schemas.js +18 -1
- package/dist/apps/evo-csq/zod-schemas.ts +18 -1
- package/dist/apps/evo-finops/zod-schemas.d.ts +776 -67
- package/dist/apps/evo-finops/zod-schemas.js +29 -5
- package/dist/apps/evo-finops/zod-schemas.ts +29 -5
- package/dist/types/evo-csq/index.d.ts +47 -2
- package/dist/types/evo-csq/index.ts +54 -1
- package/dist/types/evo-finops/common/billing.d.ts +27 -3
- package/dist/types/evo-finops/common/billing.ts +27 -2
- package/dist/types/evo-finops/common/payment-method.d.ts +2 -0
- package/dist/types/evo-finops/common/payment-method.ts +2 -0
- package/dist/types/evo-finops/providers/asaas/asaas_provider.d.ts +16 -2
- package/dist/types/evo-finops/providers/asaas/asaas_provider.ts +17 -2
- package/package.json +1 -1
|
@@ -225,6 +225,13 @@ exports.zAsaasEnvAuthConfigSchema = zod_1.z
|
|
|
225
225
|
rate_limit_max_per_minute: zod_1.z.number().optional(),
|
|
226
226
|
})
|
|
227
227
|
.optional(),
|
|
228
|
+
/** feat-253 — IP enviado na cobrança com token quando a credencial não tem o do pagador. */
|
|
229
|
+
card_token: zod_1.z
|
|
230
|
+
.object({
|
|
231
|
+
remote_ip: zod_1.z.string().max(64).optional().nullable(),
|
|
232
|
+
})
|
|
233
|
+
.strip()
|
|
234
|
+
.optional(),
|
|
228
235
|
})
|
|
229
236
|
.passthrough();
|
|
230
237
|
exports.zAsaasNfseCapabilitiesSchema = zod_1.z.object({
|
|
@@ -241,10 +248,14 @@ exports.zAsaasEnvFlagSchema = zod_1.z
|
|
|
241
248
|
.strip();
|
|
242
249
|
exports.zAsaasPaymentsCapabilitiesSchema = zod_1.z.object({
|
|
243
250
|
enabled: zod_1.z.boolean(),
|
|
244
|
-
/** feat-253 — kill-switch do caminho A. */
|
|
251
|
+
/** feat-253 — kill-switch do caminho A. @deprecated (caminho A saiu do modelo). */
|
|
245
252
|
card_subscription_adjust: exports.zAsaasEnvFlagSchema.optional(),
|
|
246
|
-
/** feat-253 — flag do caminho B (token). */
|
|
253
|
+
/** feat-253 — flag do caminho B (captura + cobrança com token). */
|
|
247
254
|
card_token: exports.zAsaasEnvFlagSchema.optional(),
|
|
255
|
+
/** feat-253 — fatura hospedada (contingência C + entrada da captura). */
|
|
256
|
+
hosted_invoice: exports.zAsaasEnvFlagSchema.optional(),
|
|
257
|
+
/** feat-253 — job de cobrança automática no vencimento (fatia 8). */
|
|
258
|
+
card_token_auto: exports.zAsaasEnvFlagSchema.optional(),
|
|
248
259
|
});
|
|
249
260
|
exports.zAsaasProviderCapabilitiesSchema = zod_1.z.object({
|
|
250
261
|
nfse: exports.zAsaasNfseCapabilitiesSchema,
|
|
@@ -951,13 +962,26 @@ exports.zNexFinopsContractPaymentMethodsWriteSchema = zod_1.z
|
|
|
951
962
|
default_payment_method_id: zod_1.z.string().min(1).max(128).optional().nullable(),
|
|
952
963
|
})
|
|
953
964
|
.strip();
|
|
954
|
-
/**
|
|
965
|
+
/**
|
|
966
|
+
* `POST /billings/:id/card-charge` (feat-253 F2b).
|
|
967
|
+
* - `preview`: prévia da cobrança no cartão salvo (não escreve).
|
|
968
|
+
* - `charge_now`: cobra no cartão salvo (`confirm` + `expected_value`).
|
|
969
|
+
* - `send_invoice`: fatura hospedada do Asaas (`billing_type` CREDIT_CARD captura o cartão; UNDEFINED = cliente escolhe).
|
|
970
|
+
* - `cancel_invoice`: cancela a fatura aberta (`asaas_payment_id`).
|
|
971
|
+
* `.strip()`: dados de cartão/token nunca entram por aqui.
|
|
972
|
+
*/
|
|
955
973
|
exports.zNexFinopsBillingCardChargeSchema = zod_1.z
|
|
956
974
|
.object({
|
|
957
|
-
action: zod_1.z.enum(["preview", "
|
|
958
|
-
expected_value: zod_1.z.number(),
|
|
975
|
+
action: zod_1.z.enum(["preview", "charge_now", "send_invoice", "cancel_invoice"]),
|
|
976
|
+
expected_value: zod_1.z.number().optional(),
|
|
959
977
|
asaas_payment_id: zod_1.z.string().min(1).max(128).optional(),
|
|
960
978
|
confirm: zod_1.z.boolean().optional(),
|
|
979
|
+
capture_card: zod_1.z.boolean().optional(),
|
|
980
|
+
billing_type: zod_1.z.enum(["CREDIT_CARD", "UNDEFINED"]).optional(),
|
|
981
|
+
provider_id: zod_1.z.string().min(1).max(128).optional(),
|
|
982
|
+
env: zod_1.z.enum(["sandbox", "production"]).optional(),
|
|
983
|
+
taker_id: zod_1.z.string().min(1).max(128).optional(),
|
|
984
|
+
allow_early: zod_1.z.boolean().optional(),
|
|
961
985
|
})
|
|
962
986
|
.strip();
|
|
963
987
|
/** `POST /payment-methods/discover` — sem `confirm` é dry-run. */
|
|
@@ -237,6 +237,13 @@ export const zAsaasEnvAuthConfigSchema = z
|
|
|
237
237
|
rate_limit_max_per_minute: z.number().optional(),
|
|
238
238
|
})
|
|
239
239
|
.optional(),
|
|
240
|
+
/** feat-253 — IP enviado na cobrança com token quando a credencial não tem o do pagador. */
|
|
241
|
+
card_token: z
|
|
242
|
+
.object({
|
|
243
|
+
remote_ip: z.string().max(64).optional().nullable(),
|
|
244
|
+
})
|
|
245
|
+
.strip()
|
|
246
|
+
.optional(),
|
|
240
247
|
})
|
|
241
248
|
.passthrough();
|
|
242
249
|
|
|
@@ -256,10 +263,14 @@ export const zAsaasEnvFlagSchema = z
|
|
|
256
263
|
|
|
257
264
|
export const zAsaasPaymentsCapabilitiesSchema = z.object({
|
|
258
265
|
enabled: z.boolean(),
|
|
259
|
-
/** feat-253 — kill-switch do caminho A. */
|
|
266
|
+
/** feat-253 — kill-switch do caminho A. @deprecated (caminho A saiu do modelo). */
|
|
260
267
|
card_subscription_adjust: zAsaasEnvFlagSchema.optional(),
|
|
261
|
-
/** feat-253 — flag do caminho B (token). */
|
|
268
|
+
/** feat-253 — flag do caminho B (captura + cobrança com token). */
|
|
262
269
|
card_token: zAsaasEnvFlagSchema.optional(),
|
|
270
|
+
/** feat-253 — fatura hospedada (contingência C + entrada da captura). */
|
|
271
|
+
hosted_invoice: zAsaasEnvFlagSchema.optional(),
|
|
272
|
+
/** feat-253 — job de cobrança automática no vencimento (fatia 8). */
|
|
273
|
+
card_token_auto: zAsaasEnvFlagSchema.optional(),
|
|
263
274
|
});
|
|
264
275
|
|
|
265
276
|
export const zAsaasProviderCapabilitiesSchema = z.object({
|
|
@@ -1046,13 +1057,26 @@ export const zNexFinopsContractPaymentMethodsWriteSchema = z
|
|
|
1046
1057
|
})
|
|
1047
1058
|
.strip();
|
|
1048
1059
|
|
|
1049
|
-
/**
|
|
1060
|
+
/**
|
|
1061
|
+
* `POST /billings/:id/card-charge` (feat-253 F2b).
|
|
1062
|
+
* - `preview`: prévia da cobrança no cartão salvo (não escreve).
|
|
1063
|
+
* - `charge_now`: cobra no cartão salvo (`confirm` + `expected_value`).
|
|
1064
|
+
* - `send_invoice`: fatura hospedada do Asaas (`billing_type` CREDIT_CARD captura o cartão; UNDEFINED = cliente escolhe).
|
|
1065
|
+
* - `cancel_invoice`: cancela a fatura aberta (`asaas_payment_id`).
|
|
1066
|
+
* `.strip()`: dados de cartão/token nunca entram por aqui.
|
|
1067
|
+
*/
|
|
1050
1068
|
export const zNexFinopsBillingCardChargeSchema = z
|
|
1051
1069
|
.object({
|
|
1052
|
-
action: z.enum(["preview", "
|
|
1053
|
-
expected_value: z.number(),
|
|
1070
|
+
action: z.enum(["preview", "charge_now", "send_invoice", "cancel_invoice"]),
|
|
1071
|
+
expected_value: z.number().optional(),
|
|
1054
1072
|
asaas_payment_id: z.string().min(1).max(128).optional(),
|
|
1055
1073
|
confirm: z.boolean().optional(),
|
|
1074
|
+
capture_card: z.boolean().optional(),
|
|
1075
|
+
billing_type: z.enum(["CREDIT_CARD", "UNDEFINED"]).optional(),
|
|
1076
|
+
provider_id: z.string().min(1).max(128).optional(),
|
|
1077
|
+
env: z.enum(["sandbox", "production"]).optional(),
|
|
1078
|
+
taker_id: z.string().min(1).max(128).optional(),
|
|
1079
|
+
allow_early: z.boolean().optional(),
|
|
1056
1080
|
})
|
|
1057
1081
|
.strip();
|
|
1058
1082
|
|
|
@@ -165,10 +165,28 @@ export interface ICsqAlert {
|
|
|
165
165
|
* Nexus linkar `/{tenant}/evo-med/calendar/{calendar_id}/appointment/{appointment_id}`. */
|
|
166
166
|
appointment_id?: string;
|
|
167
167
|
calendar_id?: string;
|
|
168
|
+
/** So em alertas de agenda (feat-206 F6a): o claim que gerou o alerta, gravado
|
|
169
|
+
* quando ele nasce. As rechecagens tardias (passos 3 e 4, `closed_at + 4 h` e
|
|
170
|
+
* `+ 24 h`) reconferem a agenda a partir DELE, porque o claim so existe em
|
|
171
|
+
* `report.claims` da avaliacao que o extraiu e um laudo mais novo do mesmo
|
|
172
|
+
* lead pode ter herdado o alerta. Ausente em alertas antigos: passo tardio
|
|
173
|
+
* nao se aplica (sem backfill). */
|
|
174
|
+
appointment_claim?: ICsqAlertAppointmentClaim;
|
|
168
175
|
/** Ticket em que o alerta apareceu pela primeira vez (herdado x novo). */
|
|
169
176
|
first_seen_ticket_id: string;
|
|
170
177
|
created_at: Date;
|
|
171
178
|
}
|
|
179
|
+
/** O que foi informado ao lead, copiado do claim `appointment_informed`
|
|
180
|
+
* (feat-206 F6a). Sem `evidence`: a evidencia ja esta em `ICsqAlert.evidence`. */
|
|
181
|
+
export interface ICsqAlertAppointmentClaim {
|
|
182
|
+
/** YYYY-MM-DD, TZ do tenant. */
|
|
183
|
+
date: string;
|
|
184
|
+
/** HH:mm. */
|
|
185
|
+
time?: string;
|
|
186
|
+
professional?: string;
|
|
187
|
+
patient_name?: string;
|
|
188
|
+
modality?: string;
|
|
189
|
+
}
|
|
172
190
|
/** Indicadores quantitativos calculados por codigo, por lente
|
|
173
191
|
* ("neste atendimento" e "na jornada"). `null` = nao aplicavel a lente ou
|
|
174
192
|
* indisponivel (ex.: metricas liquidas sem horario comercial configurado). */
|
|
@@ -266,6 +284,10 @@ export interface ICsqClaimAppointmentInformed {
|
|
|
266
284
|
modality?: string;
|
|
267
285
|
/** Nome do paciente informado na conversa (mae/filho: pode diferir do lead). */
|
|
268
286
|
patient_name?: string;
|
|
287
|
+
/** feat-206 F6: o agendamento informado deixou de valer DEPOIS, na mesma
|
|
288
|
+
* jornada (o lead cancelou/desistiu, ou foi trocado por outro horario). O
|
|
289
|
+
* codigo nao exige registro na agenda de um claim assim. */
|
|
290
|
+
superseded?: boolean;
|
|
269
291
|
evidence: ICsqEvidence[];
|
|
270
292
|
}
|
|
271
293
|
/** "Prometi X ate quando". */
|
|
@@ -328,11 +350,19 @@ export interface ICsqClaimPriceInformed {
|
|
|
328
350
|
/** Uniao discriminada por `type` — o juiz extrai, o codigo verifica (§5). */
|
|
329
351
|
export type ICsqClaim = ICsqClaimAppointmentInformed | ICsqClaimPromise | ICsqClaimDataCollected | ICsqClaimRequiredData | ICsqClaimOutcome | ICsqClaimQuestionRequiresAnswer | ICsqClaimFirstConcreteOffer | ICsqClaimPatientStatus | ICsqClaimPriceInformed;
|
|
330
352
|
export type CsqClaimType = ICsqClaim["type"];
|
|
353
|
+
/** Como o agendamento da agenda foi identificado como sendo do paciente da
|
|
354
|
+
* conversa, na ordem de forca da prova (feat-154 B1; `name_fuzzy` na feat-206
|
|
355
|
+
* F6a: nome com grafia diferente, so no mesmo dia e hora do claim). */
|
|
356
|
+
export type CsqAppointmentMatch = "linked" | "phone" | "name" | "name_fuzzy";
|
|
357
|
+
/** Resultado do cruzamento por codigo.
|
|
358
|
+
* - `cancelled_after` (feat-206 F6a): o agendamento EXISTIU e foi cancelado ou
|
|
359
|
+
* excluido DEPOIS da mensagem que o informou ao lead — nao e "nao registrado". */
|
|
360
|
+
export type CsqCrossCheckResult = "match" | "mismatch" | "missing" | "inconclusive" | "cancelled_after";
|
|
331
361
|
/** Linha da tabela "o que foi dito x o que consta" (report-spec §2.5). */
|
|
332
362
|
export interface ICsqCrossCheck {
|
|
333
363
|
claim_type: CsqClaimType;
|
|
334
364
|
/** Resultado da verificacao por codigo. */
|
|
335
|
-
result:
|
|
365
|
+
result: CsqCrossCheckResult;
|
|
336
366
|
/** O que foi dito (resumo do claim). */
|
|
337
367
|
expected: string;
|
|
338
368
|
/** O que consta no sistema. */
|
|
@@ -343,6 +373,8 @@ export interface ICsqCrossCheck {
|
|
|
343
373
|
/** So em cruzamentos de agenda: agendamento encontrado (link no Nexus). */
|
|
344
374
|
appointment_id?: string;
|
|
345
375
|
calendar_id?: string;
|
|
376
|
+
/** So em cruzamentos de agenda: como o agendamento foi identificado. */
|
|
377
|
+
matched_by?: CsqAppointmentMatch;
|
|
346
378
|
}
|
|
347
379
|
/** Nota de um criterio. Todo criterio < 100 exige evidencia valida; sem ela o
|
|
348
380
|
* codigo zera para `null` e tira do denominador. */
|
|
@@ -453,7 +485,13 @@ export type CsqTriageMode = "skip_llm" | "full_review";
|
|
|
453
485
|
/** Motivo da triagem. `skip_llm` sempre tem motivo; `full_review` normalmente
|
|
454
486
|
* nao tem (lista vazia), salvo `forced` (replay do dry-run com
|
|
455
487
|
* `--force-review`; producao nunca usa). */
|
|
456
|
-
export type CsqTriageReason = "document_only" | "spam_close" | "reopen_without_new_messages" | "automation_only" | "ack_only"
|
|
488
|
+
export type CsqTriageReason = "document_only" | "spam_close" | "reopen_without_new_messages" | "automation_only" | "ack_only"
|
|
489
|
+
/** feat-206 F6b: nenhum texto livre de atendente humano nem nota; a HubIA
|
|
490
|
+
* falou no maximo uma vez (saudacao/fora do expediente). */
|
|
491
|
+
| "no_attendant_message"
|
|
492
|
+
/** feat-206 F6b: o lead nao escreveu texto livre e todo texto da atendente
|
|
493
|
+
* e confirmacao curta (sem data/hora, valor ou pergunta). */
|
|
494
|
+
| "attendant_ack_only" | "forced";
|
|
457
495
|
export interface ICsqTriageDecision {
|
|
458
496
|
mode: CsqTriageMode;
|
|
459
497
|
reasons: CsqTriageReason[];
|
|
@@ -558,6 +596,13 @@ export interface ICsqAppointmentFact {
|
|
|
558
596
|
professional_name?: string;
|
|
559
597
|
modality?: string;
|
|
560
598
|
created_at?: Date;
|
|
599
|
+
/** feat-206 F6a: agendamento que saiu da agenda — excluido (`deleted_at`) ou
|
|
600
|
+
* cancelado (`status_base` cancelado). So vem marcado na leitura de
|
|
601
|
+
* candidatos da agenda; o verificador nunca o trata como agendamento vivo. */
|
|
602
|
+
removed?: "deleted" | "cancelled";
|
|
603
|
+
/** Quando saiu: `deleted_at`; cancelado sem `deleted_at` usa `updated_at`.
|
|
604
|
+
* Ausente = nao comparavel com a mensagem que informou o agendamento. */
|
|
605
|
+
removed_at?: Date;
|
|
561
606
|
}
|
|
562
607
|
/** Agendamento envolvido numa sobreposicao (lote 9). */
|
|
563
608
|
export interface ICsqOverlapAppointmentFact {
|
|
@@ -365,11 +365,30 @@ export interface ICsqAlert {
|
|
|
365
365
|
* Nexus linkar `/{tenant}/evo-med/calendar/{calendar_id}/appointment/{appointment_id}`. */
|
|
366
366
|
appointment_id?: string;
|
|
367
367
|
calendar_id?: string;
|
|
368
|
+
/** So em alertas de agenda (feat-206 F6a): o claim que gerou o alerta, gravado
|
|
369
|
+
* quando ele nasce. As rechecagens tardias (passos 3 e 4, `closed_at + 4 h` e
|
|
370
|
+
* `+ 24 h`) reconferem a agenda a partir DELE, porque o claim so existe em
|
|
371
|
+
* `report.claims` da avaliacao que o extraiu e um laudo mais novo do mesmo
|
|
372
|
+
* lead pode ter herdado o alerta. Ausente em alertas antigos: passo tardio
|
|
373
|
+
* nao se aplica (sem backfill). */
|
|
374
|
+
appointment_claim?: ICsqAlertAppointmentClaim;
|
|
368
375
|
/** Ticket em que o alerta apareceu pela primeira vez (herdado x novo). */
|
|
369
376
|
first_seen_ticket_id: string;
|
|
370
377
|
created_at: Date;
|
|
371
378
|
}
|
|
372
379
|
|
|
380
|
+
/** O que foi informado ao lead, copiado do claim `appointment_informed`
|
|
381
|
+
* (feat-206 F6a). Sem `evidence`: a evidencia ja esta em `ICsqAlert.evidence`. */
|
|
382
|
+
export interface ICsqAlertAppointmentClaim {
|
|
383
|
+
/** YYYY-MM-DD, TZ do tenant. */
|
|
384
|
+
date: string;
|
|
385
|
+
/** HH:mm. */
|
|
386
|
+
time?: string;
|
|
387
|
+
professional?: string;
|
|
388
|
+
patient_name?: string;
|
|
389
|
+
modality?: string;
|
|
390
|
+
}
|
|
391
|
+
|
|
373
392
|
// ───────── Indicadores (report-spec §3) ─────────
|
|
374
393
|
|
|
375
394
|
/** Indicadores quantitativos calculados por codigo, por lente
|
|
@@ -478,6 +497,10 @@ export interface ICsqClaimAppointmentInformed {
|
|
|
478
497
|
modality?: string;
|
|
479
498
|
/** Nome do paciente informado na conversa (mae/filho: pode diferir do lead). */
|
|
480
499
|
patient_name?: string;
|
|
500
|
+
/** feat-206 F6: o agendamento informado deixou de valer DEPOIS, na mesma
|
|
501
|
+
* jornada (o lead cancelou/desistiu, ou foi trocado por outro horario). O
|
|
502
|
+
* codigo nao exige registro na agenda de um claim assim. */
|
|
503
|
+
superseded?: boolean;
|
|
481
504
|
evidence: ICsqEvidence[];
|
|
482
505
|
}
|
|
483
506
|
|
|
@@ -560,11 +583,26 @@ export type ICsqClaim =
|
|
|
560
583
|
|
|
561
584
|
export type CsqClaimType = ICsqClaim["type"];
|
|
562
585
|
|
|
586
|
+
/** Como o agendamento da agenda foi identificado como sendo do paciente da
|
|
587
|
+
* conversa, na ordem de forca da prova (feat-154 B1; `name_fuzzy` na feat-206
|
|
588
|
+
* F6a: nome com grafia diferente, so no mesmo dia e hora do claim). */
|
|
589
|
+
export type CsqAppointmentMatch = "linked" | "phone" | "name" | "name_fuzzy";
|
|
590
|
+
|
|
591
|
+
/** Resultado do cruzamento por codigo.
|
|
592
|
+
* - `cancelled_after` (feat-206 F6a): o agendamento EXISTIU e foi cancelado ou
|
|
593
|
+
* excluido DEPOIS da mensagem que o informou ao lead — nao e "nao registrado". */
|
|
594
|
+
export type CsqCrossCheckResult =
|
|
595
|
+
| "match"
|
|
596
|
+
| "mismatch"
|
|
597
|
+
| "missing"
|
|
598
|
+
| "inconclusive"
|
|
599
|
+
| "cancelled_after";
|
|
600
|
+
|
|
563
601
|
/** Linha da tabela "o que foi dito x o que consta" (report-spec §2.5). */
|
|
564
602
|
export interface ICsqCrossCheck {
|
|
565
603
|
claim_type: CsqClaimType;
|
|
566
604
|
/** Resultado da verificacao por codigo. */
|
|
567
|
-
result:
|
|
605
|
+
result: CsqCrossCheckResult;
|
|
568
606
|
/** O que foi dito (resumo do claim). */
|
|
569
607
|
expected: string;
|
|
570
608
|
/** O que consta no sistema. */
|
|
@@ -575,6 +613,8 @@ export interface ICsqCrossCheck {
|
|
|
575
613
|
/** So em cruzamentos de agenda: agendamento encontrado (link no Nexus). */
|
|
576
614
|
appointment_id?: string;
|
|
577
615
|
calendar_id?: string;
|
|
616
|
+
/** So em cruzamentos de agenda: como o agendamento foi identificado. */
|
|
617
|
+
matched_by?: CsqAppointmentMatch;
|
|
578
618
|
}
|
|
579
619
|
|
|
580
620
|
// ───────── Avaliacao (report-spec §4) ─────────
|
|
@@ -714,6 +754,12 @@ export type CsqTriageReason =
|
|
|
714
754
|
| "reopen_without_new_messages"
|
|
715
755
|
| "automation_only"
|
|
716
756
|
| "ack_only"
|
|
757
|
+
/** feat-206 F6b: nenhum texto livre de atendente humano nem nota; a HubIA
|
|
758
|
+
* falou no maximo uma vez (saudacao/fora do expediente). */
|
|
759
|
+
| "no_attendant_message"
|
|
760
|
+
/** feat-206 F6b: o lead nao escreveu texto livre e todo texto da atendente
|
|
761
|
+
* e confirmacao curta (sem data/hora, valor ou pergunta). */
|
|
762
|
+
| "attendant_ack_only"
|
|
717
763
|
| "forced";
|
|
718
764
|
|
|
719
765
|
export interface ICsqTriageDecision {
|
|
@@ -835,6 +881,13 @@ export interface ICsqAppointmentFact {
|
|
|
835
881
|
professional_name?: string;
|
|
836
882
|
modality?: string;
|
|
837
883
|
created_at?: Date;
|
|
884
|
+
/** feat-206 F6a: agendamento que saiu da agenda — excluido (`deleted_at`) ou
|
|
885
|
+
* cancelado (`status_base` cancelado). So vem marcado na leitura de
|
|
886
|
+
* candidatos da agenda; o verificador nunca o trata como agendamento vivo. */
|
|
887
|
+
removed?: "deleted" | "cancelled";
|
|
888
|
+
/** Quando saiu: `deleted_at`; cancelado sem `deleted_at` usa `updated_at`.
|
|
889
|
+
* Ausente = nao comparavel com a mensagem que informou o agendamento. */
|
|
890
|
+
removed_at?: Date;
|
|
838
891
|
}
|
|
839
892
|
|
|
840
893
|
/** Agendamento envolvido numa sobreposicao (lote 9). */
|
|
@@ -84,12 +84,16 @@ export interface INexFinopsBillingPaymentMethodSnapshot {
|
|
|
84
84
|
}
|
|
85
85
|
export type NexFinopsBillingCardChargeMode = 'subscription_adjust'
|
|
86
86
|
/** Contingência A′. */
|
|
87
|
-
| 'subscription_value_update' | 'token_charge'
|
|
88
|
-
|
|
87
|
+
| 'subscription_value_update' | 'token_charge'
|
|
88
|
+
/** feat-253 F2b: fatura avulsa hospedada no Asaas (cartão com captura, ou cliente escolhe). */
|
|
89
|
+
| 'hosted_invoice';
|
|
90
|
+
export type NexFinopsBillingCardChargeStatus = 'scheduled'
|
|
91
|
+
/** Fatura enviada aguardando pagamento, ou cobrança com token em análise. */
|
|
92
|
+
| 'pending' | 'stale' | 'confirmed' | 'refused' | 'refunded' | 'chargeback' | 'canceled' | 'reverted';
|
|
89
93
|
export interface INexFinopsBillingCardChargeHistoryEntry {
|
|
90
94
|
at: string;
|
|
91
95
|
by: string | null;
|
|
92
|
-
action: 'adjust' | 'readjust' | 'revert' | 'charge' | 'event';
|
|
96
|
+
action: 'adjust' | 'readjust' | 'revert' | 'charge' | 'event' | 'send_invoice' | 'cancel_invoice' | 'capture';
|
|
93
97
|
value?: number | null;
|
|
94
98
|
event?: string | null;
|
|
95
99
|
}
|
|
@@ -106,6 +110,7 @@ export interface INexFinopsBillingCardCharge {
|
|
|
106
110
|
value_after: number;
|
|
107
111
|
status: NexFinopsBillingCardChargeStatus;
|
|
108
112
|
raw_status?: string | null;
|
|
113
|
+
/** Mantido por compatibilidade: na F2b é o momento/autor da criação do `pay_`. */
|
|
109
114
|
adjusted_at: string;
|
|
110
115
|
adjusted_by: {
|
|
111
116
|
kind: 'user' | 'system';
|
|
@@ -119,7 +124,21 @@ export interface INexFinopsBillingCardCharge {
|
|
|
119
124
|
} | null;
|
|
120
125
|
/** Capado em 30 entradas. */
|
|
121
126
|
history: INexFinopsBillingCardChargeHistoryEntry[];
|
|
127
|
+
/** Fatura hospedada que, paga no cartão, captura o token (`billing_type: 'CREDIT_CARD'`). */
|
|
128
|
+
capture_card?: boolean | null;
|
|
129
|
+
/** `invoiceUrl` da fatura hospedada (pagável pelo cliente). */
|
|
130
|
+
invoice_url?: string | null;
|
|
131
|
+
/** `billingType` pedido ao Asaas. */
|
|
132
|
+
billing_type?: 'CREDIT_CARD' | 'UNDEFINED' | null;
|
|
133
|
+
/** Resultado da captura do token após o pagamento. */
|
|
134
|
+
capture_status?: NexFinopsBillingCardCaptureStatus | null;
|
|
135
|
+
/** Método `atok_` capturado por esta cobrança (a tela oferece usar como padrão). Interno (fora do portal). */
|
|
136
|
+
captured_payment_method_id?: string | null;
|
|
137
|
+
/** Provider/ambiente onde o `pay_` foi criado. */
|
|
138
|
+
provider_id?: string | null;
|
|
139
|
+
env?: 'sandbox' | 'production' | null;
|
|
122
140
|
}
|
|
141
|
+
export type NexFinopsBillingCardCaptureStatus = 'captured' | 'no_token' | 'skipped';
|
|
123
142
|
export interface INexFinopsBilling extends IFireGlobalDoc {
|
|
124
143
|
customer_id: string;
|
|
125
144
|
customer_ref?: string | null;
|
|
@@ -151,6 +170,11 @@ export interface INexFinopsBilling extends IFireGlobalDoc {
|
|
|
151
170
|
/** Todos os `pay_` do Asaas já associados (A e B) — chave do roteamento do webhook. Interno. */
|
|
152
171
|
card_payment_ids?: string[];
|
|
153
172
|
card_charge?: INexFinopsBillingCardCharge | null;
|
|
173
|
+
/** Trava curta da cobrança no cartão (`charge_now`). Interno (fora das projeções). */
|
|
174
|
+
card_charge_lock?: {
|
|
175
|
+
by: string | null;
|
|
176
|
+
until: string;
|
|
177
|
+
} | null;
|
|
154
178
|
}
|
|
155
179
|
/**
|
|
156
180
|
* Transições permitidas de status de cobrança.
|
|
@@ -107,10 +107,14 @@ export type NexFinopsBillingCardChargeMode =
|
|
|
107
107
|
| 'subscription_adjust'
|
|
108
108
|
/** Contingência A′. */
|
|
109
109
|
| 'subscription_value_update'
|
|
110
|
-
| 'token_charge'
|
|
110
|
+
| 'token_charge'
|
|
111
|
+
/** feat-253 F2b: fatura avulsa hospedada no Asaas (cartão com captura, ou cliente escolhe). */
|
|
112
|
+
| 'hosted_invoice';
|
|
111
113
|
|
|
112
114
|
export type NexFinopsBillingCardChargeStatus =
|
|
113
115
|
| 'scheduled'
|
|
116
|
+
/** Fatura enviada aguardando pagamento, ou cobrança com token em análise. */
|
|
117
|
+
| 'pending'
|
|
114
118
|
| 'stale'
|
|
115
119
|
| 'confirmed'
|
|
116
120
|
| 'refused'
|
|
@@ -122,7 +126,7 @@ export type NexFinopsBillingCardChargeStatus =
|
|
|
122
126
|
export interface INexFinopsBillingCardChargeHistoryEntry {
|
|
123
127
|
at: string;
|
|
124
128
|
by: string | null;
|
|
125
|
-
action: 'adjust' | 'readjust' | 'revert' | 'charge' | 'event';
|
|
129
|
+
action: 'adjust' | 'readjust' | 'revert' | 'charge' | 'event' | 'send_invoice' | 'cancel_invoice' | 'capture';
|
|
126
130
|
value?: number | null;
|
|
127
131
|
event?: string | null;
|
|
128
132
|
}
|
|
@@ -140,6 +144,7 @@ export interface INexFinopsBillingCardCharge {
|
|
|
140
144
|
value_after: number;
|
|
141
145
|
status: NexFinopsBillingCardChargeStatus;
|
|
142
146
|
raw_status?: string | null;
|
|
147
|
+
/** Mantido por compatibilidade: na F2b é o momento/autor da criação do `pay_`. */
|
|
143
148
|
adjusted_at: string;
|
|
144
149
|
adjusted_by: { kind: 'user' | 'system'; id: string | null };
|
|
145
150
|
last_event?: string | null;
|
|
@@ -147,8 +152,26 @@ export interface INexFinopsBillingCardCharge {
|
|
|
147
152
|
failure?: { event: string; description?: string | null } | null;
|
|
148
153
|
/** Capado em 30 entradas. */
|
|
149
154
|
history: INexFinopsBillingCardChargeHistoryEntry[];
|
|
155
|
+
|
|
156
|
+
// ── F2b (fatura hospedada / token) ──
|
|
157
|
+
|
|
158
|
+
/** Fatura hospedada que, paga no cartão, captura o token (`billing_type: 'CREDIT_CARD'`). */
|
|
159
|
+
capture_card?: boolean | null;
|
|
160
|
+
/** `invoiceUrl` da fatura hospedada (pagável pelo cliente). */
|
|
161
|
+
invoice_url?: string | null;
|
|
162
|
+
/** `billingType` pedido ao Asaas. */
|
|
163
|
+
billing_type?: 'CREDIT_CARD' | 'UNDEFINED' | null;
|
|
164
|
+
/** Resultado da captura do token após o pagamento. */
|
|
165
|
+
capture_status?: NexFinopsBillingCardCaptureStatus | null;
|
|
166
|
+
/** Método `atok_` capturado por esta cobrança (a tela oferece usar como padrão). Interno (fora do portal). */
|
|
167
|
+
captured_payment_method_id?: string | null;
|
|
168
|
+
/** Provider/ambiente onde o `pay_` foi criado. */
|
|
169
|
+
provider_id?: string | null;
|
|
170
|
+
env?: 'sandbox' | 'production' | null;
|
|
150
171
|
}
|
|
151
172
|
|
|
173
|
+
export type NexFinopsBillingCardCaptureStatus = 'captured' | 'no_token' | 'skipped';
|
|
174
|
+
|
|
152
175
|
// ── Main Document ──
|
|
153
176
|
|
|
154
177
|
export interface INexFinopsBilling extends IFireGlobalDoc {
|
|
@@ -214,6 +237,8 @@ export interface INexFinopsBilling extends IFireGlobalDoc {
|
|
|
214
237
|
/** Todos os `pay_` do Asaas já associados (A e B) — chave do roteamento do webhook. Interno. */
|
|
215
238
|
card_payment_ids?: string[];
|
|
216
239
|
card_charge?: INexFinopsBillingCardCharge | null;
|
|
240
|
+
/** Trava curta da cobrança no cartão (`charge_now`). Interno (fora das projeções). */
|
|
241
|
+
card_charge_lock?: { by: string | null; until: string } | null;
|
|
217
242
|
}
|
|
218
243
|
|
|
219
244
|
// ── Status transitions ──
|
|
@@ -70,6 +70,8 @@ export interface INexFinopsCustomerPaymentMethod extends IFireGlobalDoc {
|
|
|
70
70
|
last_synced_at?: string | null;
|
|
71
71
|
last_used_at?: string | null;
|
|
72
72
|
last_charge?: INexFinopsPaymentMethodLastCharge | null;
|
|
73
|
+
/** feat-253 F2b: `asub_` migrado aponta para o `atok_` que o substituiu. */
|
|
74
|
+
replaced_by_payment_method_id?: string | null;
|
|
73
75
|
}
|
|
74
76
|
/** Prefixos determinísticos dos ids (idempotência da descoberta). */
|
|
75
77
|
export declare const NEX_FINOPS_PAYMENT_METHOD_ID_PREFIX: Record<NexFinopsPaymentMethodKind, string>;
|
|
@@ -94,6 +94,8 @@ export interface INexFinopsCustomerPaymentMethod extends IFireGlobalDoc {
|
|
|
94
94
|
last_synced_at?: string | null;
|
|
95
95
|
last_used_at?: string | null;
|
|
96
96
|
last_charge?: INexFinopsPaymentMethodLastCharge | null;
|
|
97
|
+
/** feat-253 F2b: `asub_` migrado aponta para o `atok_` que o substituiu. */
|
|
98
|
+
replaced_by_payment_method_id?: string | null;
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
/** Prefixos determinísticos dos ids (idempotência da descoberta). */
|
|
@@ -156,6 +156,13 @@ export interface IAsaasEnvAuthConfig {
|
|
|
156
156
|
operational?: {
|
|
157
157
|
rate_limit_max_per_minute?: number;
|
|
158
158
|
};
|
|
159
|
+
/**
|
|
160
|
+
* feat-253 (caminho B) — cobrança com `creditCardToken`. `remote_ip` é o IP enviado ao Asaas
|
|
161
|
+
* quando a credencial não guardou o IP do pagador. Ausente nos dois → a cobrança falha fechada.
|
|
162
|
+
*/
|
|
163
|
+
card_token?: {
|
|
164
|
+
remote_ip?: string | null;
|
|
165
|
+
};
|
|
159
166
|
}
|
|
160
167
|
export interface IAsaasNfseCapabilities {
|
|
161
168
|
enabled: boolean;
|
|
@@ -170,10 +177,17 @@ export interface IAsaasEnvFlag {
|
|
|
170
177
|
}
|
|
171
178
|
export interface IAsaasPaymentsCapabilities {
|
|
172
179
|
enabled: boolean;
|
|
173
|
-
/**
|
|
180
|
+
/**
|
|
181
|
+
* feat-253 — kill-switch do caminho A (ajuste do valor da cobrança pendente da assinatura).
|
|
182
|
+
* @deprecated O caminho A saiu do modelo (o Asaas trava valor/vencimento após a 1ª fatura paga). Não usar.
|
|
183
|
+
*/
|
|
174
184
|
card_subscription_adjust?: IAsaasEnvFlag;
|
|
175
|
-
/** feat-253 — flag do caminho B (cobrança com `creditCardToken`). Desligado até o Asaas habilitar. */
|
|
185
|
+
/** feat-253 — flag do caminho B (captura do token + cobrança com `creditCardToken`). Desligado até o Asaas habilitar. */
|
|
176
186
|
card_token?: IAsaasEnvFlag;
|
|
187
|
+
/** feat-253 — fatura hospedada do Asaas gerada pelo Nexus para a cobrança (contingência C e entrada da captura). */
|
|
188
|
+
hosted_invoice?: IAsaasEnvFlag;
|
|
189
|
+
/** feat-253 — job diário que cobra no cartão salvo no vencimento (fatia 8). */
|
|
190
|
+
card_token_auto?: IAsaasEnvFlag;
|
|
177
191
|
}
|
|
178
192
|
export interface IAsaasProviderCapabilities {
|
|
179
193
|
nfse: IAsaasNfseCapabilities;
|
|
@@ -225,6 +225,14 @@ export interface IAsaasEnvAuthConfig {
|
|
|
225
225
|
operational?: {
|
|
226
226
|
rate_limit_max_per_minute?: number;
|
|
227
227
|
};
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* feat-253 (caminho B) — cobrança com `creditCardToken`. `remote_ip` é o IP enviado ao Asaas
|
|
231
|
+
* quando a credencial não guardou o IP do pagador. Ausente nos dois → a cobrança falha fechada.
|
|
232
|
+
*/
|
|
233
|
+
card_token?: {
|
|
234
|
+
remote_ip?: string | null;
|
|
235
|
+
};
|
|
228
236
|
}
|
|
229
237
|
|
|
230
238
|
export interface IAsaasNfseCapabilities {
|
|
@@ -245,10 +253,17 @@ export interface IAsaasEnvFlag {
|
|
|
245
253
|
|
|
246
254
|
export interface IAsaasPaymentsCapabilities {
|
|
247
255
|
enabled: boolean; // false for now, future for payment links/subscriptions
|
|
248
|
-
/**
|
|
256
|
+
/**
|
|
257
|
+
* feat-253 — kill-switch do caminho A (ajuste do valor da cobrança pendente da assinatura).
|
|
258
|
+
* @deprecated O caminho A saiu do modelo (o Asaas trava valor/vencimento após a 1ª fatura paga). Não usar.
|
|
259
|
+
*/
|
|
249
260
|
card_subscription_adjust?: IAsaasEnvFlag;
|
|
250
|
-
/** feat-253 — flag do caminho B (cobrança com `creditCardToken`). Desligado até o Asaas habilitar. */
|
|
261
|
+
/** feat-253 — flag do caminho B (captura do token + cobrança com `creditCardToken`). Desligado até o Asaas habilitar. */
|
|
251
262
|
card_token?: IAsaasEnvFlag;
|
|
263
|
+
/** feat-253 — fatura hospedada do Asaas gerada pelo Nexus para a cobrança (contingência C e entrada da captura). */
|
|
264
|
+
hosted_invoice?: IAsaasEnvFlag;
|
|
265
|
+
/** feat-253 — job diário que cobra no cartão salvo no vencimento (fatia 8). */
|
|
266
|
+
card_token_auto?: IAsaasEnvFlag;
|
|
252
267
|
}
|
|
253
268
|
|
|
254
269
|
export interface IAsaasProviderCapabilities {
|