evo360-types 1.3.516 → 1.3.520

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.
@@ -39,6 +39,23 @@ export interface INexVendasJourneySignature {
39
39
  signed_at?: Date | null;
40
40
  last_error?: string | null;
41
41
  }
42
+ /**
43
+ * PDF da proposta comercial já persistido no bucket, pronto para virar anexo do
44
+ * envelope de assinatura (feat-136).
45
+ *
46
+ * `sha256` é o hash do HTML **sanitizado** que originou o PDF, não do PDF: é o
47
+ * que permite detectar que o vendedor editou a proposta depois da geração e
48
+ * regerar em vez de anexar um documento obsoleto. `storage_path` é o objeto
49
+ * determinístico derivado desse mesmo hash.
50
+ */
51
+ export interface INexVendasJourneyProposalPdf {
52
+ /** Caminho do objeto no bucket, sem o `gs://` e sem o nome do bucket. */
53
+ storage_path: string;
54
+ /** SHA-256 hex do HTML SANITIZADO que gerou o PDF. */
55
+ sha256: string;
56
+ size_bytes: number;
57
+ generated_at: Date;
58
+ }
42
59
  export interface INexVendasJourneyCompany {
43
60
  legal_name?: string | null;
44
61
  trade_name?: string | null;
@@ -57,6 +74,15 @@ export interface INexVendasJourneyCustomerData {
57
74
  email: string;
58
75
  phone: string;
59
76
  company?: INexVendasJourneyCompany | null;
77
+ /**
78
+ * CPF de quem assina o contrato (variável `RESPONSAVEL_CPF`), só dígitos.
79
+ *
80
+ * Existe separado de `company.document_number` porque no cadastro PJ aquele
81
+ * campo é o CNPJ e o contrato imprime o CPF do representante legal abaixo do
82
+ * nome, na região da assinatura. No cadastro PF os dois coincidem — o form
83
+ * replica o documento aqui em vez de perguntar duas vezes.
84
+ */
85
+ responsible_cpf?: string | null;
60
86
  }
61
87
  /**
62
88
  * Métodos que o passo `g` oferece. Espelha `NexFinopsProposalPaymentMethod`: a
@@ -178,15 +204,20 @@ export interface INexVendasJourneyNotification {
178
204
  }
179
205
  /**
180
206
  * Slots que disparam efeito externo NÃO-idempotente e por isso precisam de
181
- * reserva transacional: criar o contrato, criar o envelope de assinatura e
182
- * (feat-131) criar o artefato de pagamento.
207
+ * reserva transacional: criar o contrato, criar o envelope de assinatura,
208
+ * (feat-131) criar o artefato de pagamento e (feat-136) renderizar o PDF da
209
+ * proposta.
210
+ *
211
+ * `payment` difere dos outros num ponto: contrato e envelope são efeito ÚNICO
212
+ * por jornada, enquanto o artefato de pagamento pode legitimamente ser recriado
213
+ * quando o cliente troca de método. Por isso o slot de pagamento é um mutex
214
+ * puro — não tem valor "definitivo" que o torne `already_done`.
183
215
  *
184
- * `payment` difere dos outros dois num ponto: contrato e envelope são efeito
185
- * ÚNICO por jornada, enquanto o artefato de pagamento pode legitimamente ser
186
- * recriado quando o cliente troca de método. Por isso o slot de pagamento é um
187
- * mutex puro — não tem valor "definitivo" que o torne `already_done`.
216
+ * `proposal_pdf` também é mutex puro, por motivo diferente: o PDF é reemitido
217
+ * quando o vendedor edita o `html_content`, e o "já feito" é decidido por
218
+ * comparação de hash antes do claim, não pela presença do campo.
188
219
  */
189
- export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment';
220
+ export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment' | 'proposal_pdf';
190
221
  /**
191
222
  * Marca de reserva de um slot, gravada e liberada dentro de transaction.
192
223
  *
@@ -218,6 +249,12 @@ export interface INexVendasJourney extends IFireGlobalDoc {
218
249
  customer_data?: INexVendasJourneyCustomerData | null;
219
250
  signature?: INexVendasJourneySignature | null;
220
251
  payment?: INexVendasJourneyPayment | null;
252
+ /**
253
+ * PDF da proposta pronto para anexar ao envelope (feat-136). Ausente = ainda
254
+ * não gerado, ou proposta sem `html_content` — nos dois casos o envelope sai
255
+ * sem anexo.
256
+ */
257
+ proposal_pdf?: INexVendasJourneyProposalPdf | null;
221
258
  /**
222
259
  * Espelho PLANO de todo id externo de pagamento que a jornada já produziu —
223
260
  * checkout, cobrança, assinatura e link, **inclusive os superseded**.
@@ -93,6 +93,26 @@ export interface INexVendasJourneySignature {
93
93
  last_error?: string | null;
94
94
  }
95
95
 
96
+ // ── PDF da proposta (anexo do envelope) ──
97
+
98
+ /**
99
+ * PDF da proposta comercial já persistido no bucket, pronto para virar anexo do
100
+ * envelope de assinatura (feat-136).
101
+ *
102
+ * `sha256` é o hash do HTML **sanitizado** que originou o PDF, não do PDF: é o
103
+ * que permite detectar que o vendedor editou a proposta depois da geração e
104
+ * regerar em vez de anexar um documento obsoleto. `storage_path` é o objeto
105
+ * determinístico derivado desse mesmo hash.
106
+ */
107
+ export interface INexVendasJourneyProposalPdf {
108
+ /** Caminho do objeto no bucket, sem o `gs://` e sem o nome do bucket. */
109
+ storage_path: string;
110
+ /** SHA-256 hex do HTML SANITIZADO que gerou o PDF. */
111
+ sha256: string;
112
+ size_bytes: number;
113
+ generated_at: Date;
114
+ }
115
+
96
116
  // ── Dados de identificação coletados ──
97
117
 
98
118
  export interface INexVendasJourneyCompany {
@@ -114,6 +134,15 @@ export interface INexVendasJourneyCustomerData {
114
134
  email: string;
115
135
  phone: string;
116
136
  company?: INexVendasJourneyCompany | null;
137
+ /**
138
+ * CPF de quem assina o contrato (variável `RESPONSAVEL_CPF`), só dígitos.
139
+ *
140
+ * Existe separado de `company.document_number` porque no cadastro PJ aquele
141
+ * campo é o CNPJ e o contrato imprime o CPF do representante legal abaixo do
142
+ * nome, na região da assinatura. No cadastro PF os dois coincidem — o form
143
+ * replica o documento aqui em vez de perguntar duas vezes.
144
+ */
145
+ responsible_cpf?: string | null;
117
146
  }
118
147
 
119
148
  // ── Pagamento (feat-131) ──
@@ -266,15 +295,20 @@ export interface INexVendasJourneyNotification {
266
295
 
267
296
  /**
268
297
  * Slots que disparam efeito externo NÃO-idempotente e por isso precisam de
269
- * reserva transacional: criar o contrato, criar o envelope de assinatura e
270
- * (feat-131) criar o artefato de pagamento.
298
+ * reserva transacional: criar o contrato, criar o envelope de assinatura,
299
+ * (feat-131) criar o artefato de pagamento e (feat-136) renderizar o PDF da
300
+ * proposta.
301
+ *
302
+ * `payment` difere dos outros num ponto: contrato e envelope são efeito ÚNICO
303
+ * por jornada, enquanto o artefato de pagamento pode legitimamente ser recriado
304
+ * quando o cliente troca de método. Por isso o slot de pagamento é um mutex
305
+ * puro — não tem valor "definitivo" que o torne `already_done`.
271
306
  *
272
- * `payment` difere dos outros dois num ponto: contrato e envelope são efeito
273
- * ÚNICO por jornada, enquanto o artefato de pagamento pode legitimamente ser
274
- * recriado quando o cliente troca de método. Por isso o slot de pagamento é um
275
- * mutex puro — não tem valor "definitivo" que o torne `already_done`.
307
+ * `proposal_pdf` também é mutex puro, por motivo diferente: o PDF é reemitido
308
+ * quando o vendedor edita o `html_content`, e o "já feito" é decidido por
309
+ * comparação de hash antes do claim, não pela presença do campo.
276
310
  */
277
- export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment';
311
+ export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment' | 'proposal_pdf';
278
312
 
279
313
  /**
280
314
  * Marca de reserva de um slot, gravada e liberada dentro de transaction.
@@ -314,6 +348,13 @@ export interface INexVendasJourney extends IFireGlobalDoc {
314
348
  signature?: INexVendasJourneySignature | null;
315
349
  payment?: INexVendasJourneyPayment | null;
316
350
 
351
+ /**
352
+ * PDF da proposta pronto para anexar ao envelope (feat-136). Ausente = ainda
353
+ * não gerado, ou proposta sem `html_content` — nos dois casos o envelope sai
354
+ * sem anexo.
355
+ */
356
+ proposal_pdf?: INexVendasJourneyProposalPdf | null;
357
+
317
358
  /**
318
359
  * Espelho PLANO de todo id externo de pagamento que a jornada já produziu —
319
360
  * checkout, cobrança, assinatura e link, **inclusive os superseded**.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.516",
3
+ "version": "1.3.520",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",