evo360-types 1.3.639 → 1.3.647

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.
@@ -0,0 +1,108 @@
1
+ import type { IFireGlobalDoc } from '../../shared';
2
+ import type { NexFinopsAsaasSubscriptionStatus } from './contract';
3
+
4
+ // ── Métodos de pagamento do cliente (feat-253) ──
5
+ //
6
+ // Coleção própria do nex-finops: `core/nexus/apps/nex-finops/payment_methods/{pmId}`.
7
+ // Fica FORA do customer porque o portal devolve o customer inteiro e a regra de
8
+ // `nex-customers/customers` não tem curinga de subcoleção.
9
+ //
10
+ // PCI: o doc só guarda bandeira + últimos 4. Número completo, CCV, dados do
11
+ // portador ou token de cartão NÃO têm campo aqui e não devem ganhar um. O token
12
+ // do caminho B mora em `payment_methods/{pmId}/private/credential`, sem leitura
13
+ // pelo cliente e sem tipo exportado para o front.
14
+
15
+ /**
16
+ * - `asaas_subscription` (caminho A): cartão capturado na página do Asaas, dentro
17
+ * de uma assinatura. Id do doc: `asub_<subscription_id>`.
18
+ * - `asaas_card_token` (caminho B): token de cartão do Asaas. Id do doc: `atok_<shortid>`.
19
+ */
20
+ export type NexFinopsPaymentMethodKind = 'asaas_subscription' | 'asaas_card_token';
21
+
22
+ /**
23
+ * - `active`: assinatura `ACTIVE` sem `deleted`, ou token válido.
24
+ * - `failing`: última captura recusada/reprovada; volta a `active` no próximo `PAYMENT_CONFIRMED`.
25
+ * - `inactive`: assinatura `INACTIVE`/`EXPIRED`/`deleted`, ou desativado pelo operador.
26
+ * - `revoked`: token invalidado pelo Asaas. Terminal — o cliente cadastra o cartão de novo.
27
+ */
28
+ export type NexFinopsPaymentMethodStatus = 'active' | 'failing' | 'inactive' | 'revoked';
29
+
30
+ export type NexFinopsPaymentMethodSource =
31
+ | 'discovery_contract_asaas'
32
+ | 'discovery_payment_link'
33
+ | 'manual_link'
34
+ | 'asaas_capture';
35
+
36
+ export interface INexFinopsPaymentMethodProviderRef {
37
+ provider_id: string;
38
+ provider_type: 'asaas';
39
+ env: 'sandbox' | 'production';
40
+ /** `cus_` dono do cartão/assinatura (Q5) — pode ser ≠ `taker.provider_refs.remote_customer_id`. */
41
+ remote_customer_id: string;
42
+ }
43
+
44
+ export interface INexFinopsPaymentMethodSubscriptionInfo {
45
+ subscription_id: string;
46
+ /** Doc id do nosso payment_link (origem). */
47
+ payment_link_id?: string | null;
48
+ /** Checkout de vendas (`contract.asaas.checkout_id`). */
49
+ checkout_id?: string | null;
50
+ subscription_status?: NexFinopsAsaasSubscriptionStatus | null;
51
+ deleted?: boolean | null;
52
+ cycle?: string | null;
53
+ /** Valor BASE da assinatura. */
54
+ value?: number | null;
55
+ /** Data civil `YYYY-MM-DD`. */
56
+ next_due_date?: string | null;
57
+ }
58
+
59
+ /** PCI: só bandeira e últimos 4. */
60
+ export interface INexFinopsPaymentMethodCard {
61
+ brand: string | null;
62
+ last4: string | null;
63
+ }
64
+
65
+ export interface INexFinopsPaymentMethodSourceInfo {
66
+ kind: NexFinopsPaymentMethodSource;
67
+ contract_id?: string | null;
68
+ payment_link_id?: string | null;
69
+ journey_ref?: string | null;
70
+ /** Pagamento que originou o método (caminho B). */
71
+ asaas_payment_id?: string | null;
72
+ }
73
+
74
+ export interface INexFinopsPaymentMethodLastCharge {
75
+ asaas_payment_id: string;
76
+ status: string;
77
+ at: string;
78
+ error?: string | null;
79
+ }
80
+
81
+ export interface INexFinopsCustomerPaymentMethod extends IFireGlobalDoc {
82
+ customer_id: string;
83
+ kind: NexFinopsPaymentMethodKind;
84
+ status: NexFinopsPaymentMethodStatus;
85
+ label?: string | null;
86
+ /** PCI: só isto. Nunca número completo, CCV ou token. */
87
+ card: INexFinopsPaymentMethodCard;
88
+ provider: INexFinopsPaymentMethodProviderRef;
89
+ /** Só no kind `asaas_subscription`. */
90
+ asaas_subscription?: INexFinopsPaymentMethodSubscriptionInfo | null;
91
+ /** Kind `asaas_card_token`: existe `private/credential`. Único reflexo do token. */
92
+ has_credential?: boolean | null;
93
+ source: INexFinopsPaymentMethodSourceInfo;
94
+ last_synced_at?: string | null;
95
+ last_used_at?: string | null;
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;
99
+ }
100
+
101
+ /** Prefixos determinísticos dos ids (idempotência da descoberta). */
102
+ export const NEX_FINOPS_PAYMENT_METHOD_ID_PREFIX: Record<NexFinopsPaymentMethodKind, string> = {
103
+ asaas_subscription: 'asub_',
104
+ asaas_card_token: 'atok_',
105
+ };
106
+
107
+ /** Status em que o método pode ser herdado por uma cobrança. */
108
+ export const NEX_FINOPS_PAYMENT_METHOD_USABLE_STATUSES: readonly NexFinopsPaymentMethodStatus[] = ['active', 'failing'];
@@ -12,3 +12,5 @@ export declare const FINOPS_SERVICES_COLLECTION = "services";
12
12
  export declare const FINOPS_TAKERS_COLLECTION = "takers";
13
13
  export declare const FINOPS_INVOICES_COLLECTION = "invoices";
14
14
  export declare const FINOPS_PAYMENT_LINKS_COLLECTION = "payment_links";
15
+ /** feat-253 — métodos de pagamento do cliente (path: core/nexus/apps/nex-finops/payment_methods). */
16
+ export declare const FINOPS_PAYMENT_METHODS_COLLECTION = "payment_methods";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FINOPS_PAYMENT_LINKS_COLLECTION = exports.FINOPS_INVOICES_COLLECTION = exports.FINOPS_TAKERS_COLLECTION = exports.FINOPS_SERVICES_COLLECTION = exports.FINOPS_DICS_SERVICES_ID = exports.FINOPS_ISSUER_PROFILES_COLLECTION = exports.FINOPS_DICS_ISSUERS_ID = exports.FINOPS_PROVIDERS_COLLECTION = exports.FINOPS_DICS_COLLECTION = exports.EVO_FINOPS_APP = void 0;
3
+ exports.FINOPS_PAYMENT_METHODS_COLLECTION = exports.FINOPS_PAYMENT_LINKS_COLLECTION = exports.FINOPS_INVOICES_COLLECTION = exports.FINOPS_TAKERS_COLLECTION = exports.FINOPS_SERVICES_COLLECTION = exports.FINOPS_DICS_SERVICES_ID = exports.FINOPS_ISSUER_PROFILES_COLLECTION = exports.FINOPS_DICS_ISSUERS_ID = exports.FINOPS_PROVIDERS_COLLECTION = exports.FINOPS_DICS_COLLECTION = exports.EVO_FINOPS_APP = void 0;
4
4
  // evo-finops app identifier for Firestore paths
5
5
  exports.EVO_FINOPS_APP = "evo-finops";
6
6
  // Collection names for evo-finops
@@ -17,3 +17,5 @@ exports.FINOPS_SERVICES_COLLECTION = "services";
17
17
  exports.FINOPS_TAKERS_COLLECTION = "takers";
18
18
  exports.FINOPS_INVOICES_COLLECTION = "invoices";
19
19
  exports.FINOPS_PAYMENT_LINKS_COLLECTION = "payment_links";
20
+ /** feat-253 — métodos de pagamento do cliente (path: core/nexus/apps/nex-finops/payment_methods). */
21
+ exports.FINOPS_PAYMENT_METHODS_COLLECTION = "payment_methods";
@@ -16,3 +16,5 @@ export const FINOPS_TAKERS_COLLECTION = "takers";
16
16
  export const FINOPS_INVOICES_COLLECTION = "invoices";
17
17
  export const FINOPS_PAYMENT_LINKS_COLLECTION = "payment_links";
18
18
 
19
+ /** feat-253 — métodos de pagamento do cliente (path: core/nexus/apps/nex-finops/payment_methods). */
20
+ export const FINOPS_PAYMENT_METHODS_COLLECTION = "payment_methods";
@@ -4,6 +4,7 @@ export * from "./common/taker";
4
4
  export * from "./common/contract";
5
5
  export * from "./common/proposal";
6
6
  export * from "./common/billing";
7
+ export * from "./common/payment-method";
7
8
  export * from "./providers";
8
9
  export * from "./providers/provider_fiscal_types";
9
10
  export * from "./providers/asaas/asaas_provider";
@@ -21,6 +21,7 @@ __exportStar(require("./common/taker"), exports);
21
21
  __exportStar(require("./common/contract"), exports);
22
22
  __exportStar(require("./common/proposal"), exports);
23
23
  __exportStar(require("./common/billing"), exports);
24
+ __exportStar(require("./common/payment-method"), exports);
24
25
  __exportStar(require("./providers"), exports);
25
26
  __exportStar(require("./providers/provider_fiscal_types"), exports);
26
27
  __exportStar(require("./providers/asaas/asaas_provider"), exports);
@@ -6,6 +6,7 @@ export * from "./common/taker";
6
6
  export * from "./common/contract";
7
7
  export * from "./common/proposal";
8
8
  export * from "./common/billing";
9
+ export * from "./common/payment-method";
9
10
  export * from "./providers";
10
11
  export * from "./providers/provider_fiscal_types";
11
12
  export * from "./providers/asaas/asaas_provider";
@@ -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;
@@ -163,8 +170,24 @@ export interface IAsaasNfseCapabilities {
163
170
  allow_avulsa: boolean;
164
171
  allow_linked_to_payment: boolean;
165
172
  }
173
+ /** Liga/desliga por ambiente. Ausente = desligado. */
174
+ export interface IAsaasEnvFlag {
175
+ sandbox?: boolean;
176
+ production?: boolean;
177
+ }
166
178
  export interface IAsaasPaymentsCapabilities {
167
179
  enabled: boolean;
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
+ */
184
+ card_subscription_adjust?: IAsaasEnvFlag;
185
+ /** feat-253 — flag do caminho B (captura do token + cobrança com `creditCardToken`). Desligado até o Asaas habilitar. */
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;
168
191
  }
169
192
  export interface IAsaasProviderCapabilities {
170
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 {
@@ -237,8 +245,25 @@ export interface IAsaasNfseCapabilities {
237
245
  allow_linked_to_payment: boolean; // future
238
246
  }
239
247
 
248
+ /** Liga/desliga por ambiente. Ausente = desligado. */
249
+ export interface IAsaasEnvFlag {
250
+ sandbox?: boolean;
251
+ production?: boolean;
252
+ }
253
+
240
254
  export interface IAsaasPaymentsCapabilities {
241
255
  enabled: boolean; // false for now, future for payment links/subscriptions
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
+ */
260
+ card_subscription_adjust?: IAsaasEnvFlag;
261
+ /** feat-253 — flag do caminho B (captura do token + cobrança com `creditCardToken`). Desligado até o Asaas habilitar. */
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;
242
267
  }
243
268
 
244
269
  export interface IAsaasProviderCapabilities {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.639",
3
+ "version": "1.3.647",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",