evo360-types 1.3.734 → 1.3.746

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.
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.zServiceTaxInfoSchema = exports.zServiceLineItemSchema = exports.zServiceInvoiceStateSchema = exports.zProviderServiceInvoiceStatusSchema = exports.zExternalLinkSchema = exports.zExternalObjectTypeSchema = exports.zInvoiceSourceRefSchema = exports.zInvoiceSourceTypeSchema = exports.zInvoiceTakerRefSchema = exports.zInvoiceTakerSnapshotSchema = exports.zInvoiceTakerSnapshotAddressSchema = exports.zTakerDocumentSchema = exports.zTakerTaxProfileSchema = exports.zTakerProviderRefsSchema = exports.zTakerAddressSchema = exports.zInvoiceTakerTypeSchema = exports.zServiceSchema = exports.zCustomerServiceTaxInfoSchema = exports.zIssuerTaxProfileSchema = exports.zIssuerNfseConfigSchema = exports.zIssuerMunicipalCredentialsRefSchema = exports.zIssuerTaxRegimeSchema = exports.zIssuerCompanyIdentitySchema = exports.zIssuerCompanyAddressSchema = exports.zTaxProfileSyncStateSchema = exports.zAsaasProviderSchema = exports.zAsaasProviderAsaasBlockSchema = exports.zAsaasProviderCapabilitiesSchema = exports.zAsaasPaymentsCapabilitiesSchema = exports.zAsaasEnvFlagSchema = exports.zAsaasNfseCapabilitiesSchema = exports.zAsaasEnvAuthConfigSchema = exports.zAsaasSubaccountInputSchema = exports.zAsaasAccountScopeSchema = exports.zAsaasWebhookConfigSchema = exports.zRetryPolicySchema = exports.zAsaasWebhookEventSchema = exports.zAsaasAccountScopeModeSchema = exports.zProviderRemoteRefsSchema = exports.zProviderFiscalInfoPayloadSchema = exports.zProviderCredentialsInputSchema = exports.zProviderCredentialsSecretRefsSchema = exports.zProviderMunicipalOptionsSnapshotSchema = exports.zProviderOptionItemSchema = exports.zProviderMunicipalAuthTypeSchema = exports.zFinopsProviderBaseSchema = exports.zProviderStatusSchema = exports.zFinopsActionSchema = exports.zFinopsProviderTypeSchema = exports.zProviderEnvSchema = void 0;
4
- exports.zNfseFeeReimbursementExecuteSchema = exports.zNfseFeeReimbursementCompetenciaSchema = exports.zNexFinopsPaymentMethodsDiscoverSchema = exports.zNexFinopsBillingCardChargeSweepSchema = exports.zEvoBillingPortalCardCaptureSchema = exports.zNexFinopsBillingCardChargeSchema = exports.zNexFinopsContractPaymentMethodsWriteSchema = exports.zNexFinopsPaymentMethodPatchSchema = exports.zNexFinopsPaymentMethodStatusSchema = exports.zNexFinopsPaymentMethodKindSchema = exports.zNexFinopsContractAllowancesWriteSchema = exports.zNexFinopsUsageAlertDefaultsSchema = exports.zNexFinopsAlertThresholdSchema = exports.zNexFinopsContractAllowancesSchema = exports.zNexFinopsContractAllowanceSchema = exports.zNexVendasJourneyPaymentSchema = exports.zNexVendasJourneyPaymentSupersededSchema = exports.zNexVendasJourneyPaymentWebhookEventSchema = exports.zNexVendasJourneyBoletoSchema = exports.zNexVendasJourneyPaymentChooseSchema = exports.zNexVendasJourneyPaymentStateSchema = exports.zNexVendasJourneyPaymentKindSchema = exports.zNexVendasJourneyPaymentMethodSchema = exports.zNexFinopsContractAsaasInfoSchema = exports.zNexFinopsAsaasSubscriptionStatusSchema = exports.zNexFinopsPaymentMethodSchema = exports.zNexFinopsProposalSchema = exports.zNexFinopsProposalWriteSchema = exports.zNexFinopsProposalPrefillSchema = exports.zNexFinopsProposalLoyaltyPeriodSchema = exports.zNexFinopsProposalPaymentMethodSchema = exports.zNexFinopsProposalStatusSchema = exports.zServiceInvoiceSchema = exports.zServiceInvoiceCancellationSchema = exports.zNfseCancellationStatusSchema = exports.zPaymentLinkSchema = exports.zPaymentLinkDocumentStateSchema = exports.zAsaasPaymentLinkSubscriptionCycleSchema = exports.zAsaasPaymentLinkChargeTypeSchema = exports.zAsaasPaymentLinkBillingTypeSchema = exports.zProviderPayloadSnapshotSchema = exports.zProviderTraceSchema = exports.zProviderInvoiceErrorSchema = exports.zProviderInvoiceIdentifiersSchema = exports.zProviderInvoiceLinksSchema = void 0;
4
+ exports.zNfseFeeReimbursementCompetenciaSchema = exports.zNexFinopsPaymentMethodsDiscoverSchema = exports.zNexFinopsBillingCardChargeSweepSchema = exports.zEvoBillingPortalCardCaptureSchema = exports.zNexFinopsBillingCardChargeSchema = exports.zNexFinopsContractPaymentMethodsWriteSchema = exports.zNexFinopsPaymentMethodPatchSchema = exports.zNexFinopsPaymentMethodStatusSchema = exports.zNexFinopsPaymentMethodKindSchema = exports.zNexFinopsContractAllowancesWriteSchema = exports.zNexFinopsUsageAlertDefaultsSchema = exports.zNexFinopsAlertThresholdSchema = exports.zNexFinopsContractAllowancesSchema = exports.zNexFinopsContractAllowanceSchema = exports.zNexVendasJourneyPaymentSchema = exports.zNexVendasJourneyPaymentSupersededSchema = exports.zNexVendasJourneyPaymentWebhookEventSchema = exports.zNexVendasJourneyBoletoSchema = exports.zNexVendasJourneyPaymentChooseSchema = exports.zNexVendasJourneyPaymentStateSchema = exports.zNexVendasJourneyPaymentKindSchema = exports.zNexVendasJourneyPaymentMethodSchema = exports.zNexFinopsContractAsaasInfoSchema = exports.zNexFinopsAsaasSubscriptionStatusSchema = exports.zNexFinopsPaymentMethodSchema = exports.zNexFinopsProposalSchema = exports.zNexFinopsProposalWriteSchema = exports.zNexFinopsProposalPrefillSchema = exports.zNexFinopsProposalLoyaltyPeriodSchema = exports.zNexFinopsProposalPaymentMethodSchema = exports.zNexFinopsProposalStatusSchema = exports.zServiceInvoiceSchema = exports.zServiceInvoiceReplacedBySchema = exports.zServiceInvoiceReissuedFromSchema = exports.zServiceInvoiceReissueSchema = exports.zNfseReissueStageSchema = exports.zNfseReissueFieldSchema = exports.zNfseReissueStatusSchema = exports.zServiceInvoiceCancellationSchema = exports.zNfseCancellationStatusSchema = exports.zPaymentLinkSchema = exports.zPaymentLinkDocumentStateSchema = exports.zAsaasPaymentLinkSubscriptionCycleSchema = exports.zAsaasPaymentLinkChargeTypeSchema = exports.zAsaasPaymentLinkBillingTypeSchema = exports.zProviderPayloadSnapshotSchema = exports.zProviderTraceSchema = exports.zProviderInvoiceErrorSchema = exports.zProviderInvoiceIdentifiersSchema = exports.zProviderInvoiceLinksSchema = void 0;
5
+ exports.zNfseFeeReimbursementExecuteSchema = void 0;
5
6
  const zod_1 = require("zod");
6
7
  const zod_schemas_1 = require("../shared/zod-schemas");
7
8
  // ---- Provider enums and base ----
@@ -671,6 +672,75 @@ exports.zServiceInvoiceCancellationSchema = zod_1.z
671
672
  attempts: zod_1.z.number().int().nonnegative(),
672
673
  })
673
674
  .passthrough();
675
+ // ---- Reemissão de NFS-e (feat-292) ----
676
+ exports.zNfseReissueStatusSchema = zod_1.z.enum([
677
+ "requesting",
678
+ "requested",
679
+ "failed",
680
+ ]);
681
+ exports.zNfseReissueFieldSchema = zod_1.z.enum([
682
+ "value",
683
+ "service_description",
684
+ "observations",
685
+ "deductions",
686
+ "taxes",
687
+ ]);
688
+ exports.zNfseReissueStageSchema = zod_1.z.enum(["get", "put", "authorize"]);
689
+ const zNfseReissueActorSchema = zod_1.z
690
+ .object({
691
+ user_id: zod_1.z.string(),
692
+ login_id: zod_1.z.string().optional(),
693
+ name: zod_1.z.string().optional(),
694
+ })
695
+ .passthrough();
696
+ exports.zServiceInvoiceReissueSchema = zod_1.z
697
+ .object({
698
+ status: exports.zNfseReissueStatusSchema,
699
+ attempts: zod_1.z.number().int().nonnegative(),
700
+ last_at: zod_schemas_1.zFirestoreDateSchema,
701
+ last_by: zNfseReissueActorSchema,
702
+ previous_state: exports.zServiceInvoiceStateSchema,
703
+ previous_error: exports.zProviderInvoiceErrorSchema.nullable().optional(),
704
+ changes: zod_1.z.array(zod_1.z
705
+ .object({
706
+ field: exports.zNfseReissueFieldSchema,
707
+ from: zod_1.z.unknown().optional(),
708
+ to: zod_1.z.unknown().optional(),
709
+ })
710
+ .passthrough()),
711
+ stage: exports.zNfseReissueStageSchema.optional(),
712
+ provider_status_at_response: exports.zProviderServiceInvoiceStatusSchema.optional(),
713
+ responded_at: zod_schemas_1.zFirestoreDateSchema.optional(),
714
+ error: zod_1.z
715
+ .object({
716
+ http_status: zod_1.z.number().optional(),
717
+ code: zod_1.z.string().optional(),
718
+ description: zod_1.z.string().optional(),
719
+ })
720
+ .passthrough()
721
+ .optional(),
722
+ })
723
+ .passthrough();
724
+ exports.zServiceInvoiceReissuedFromSchema = zod_1.z
725
+ .object({
726
+ invoiceId: zod_1.z.string(),
727
+ provider_invoice_id: zod_1.z.string().optional(),
728
+ number: zod_1.z.string().optional(),
729
+ state_at_reissue: exports.zServiceInvoiceStateSchema,
730
+ at: zod_schemas_1.zFirestoreDateSchema,
731
+ by: zNfseReissueActorSchema,
732
+ })
733
+ .passthrough();
734
+ exports.zServiceInvoiceReplacedBySchema = zod_1.z
735
+ .object({
736
+ status: zod_1.z.enum(["pending", "done"]),
737
+ invoiceId: zod_1.z.string().optional(),
738
+ provider_invoice_id: zod_1.z.string().optional(),
739
+ requested_at: zod_schemas_1.zFirestoreDateSchema,
740
+ requested_by: zNfseReissueActorSchema,
741
+ done_at: zod_schemas_1.zFirestoreDateSchema.optional(),
742
+ })
743
+ .passthrough();
674
744
  exports.zServiceInvoiceSchema = zod_schemas_1.zFireDocSchema
675
745
  .extend({
676
746
  providerId: zod_1.z.string(),
@@ -730,6 +800,15 @@ exports.zServiceInvoiceSchema = zod_schemas_1.zFireDocSchema
730
800
  canceled_at: zod_schemas_1.zFirestoreDateSchema.optional(),
731
801
  error: exports.zProviderInvoiceErrorSchema.nullable().optional(),
732
802
  cancellation: exports.zServiceInvoiceCancellationSchema.optional(),
803
+ reissue: exports.zServiceInvoiceReissueSchema.optional(),
804
+ reissued_from: exports.zServiceInvoiceReissuedFromSchema.optional(),
805
+ replaced_by: exports.zServiceInvoiceReplacedBySchema.optional(),
806
+ observations: zod_1.z.string().optional(),
807
+ deductions: zod_1.z.number().optional(),
808
+ effective_date: zod_1.z
809
+ .string()
810
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
811
+ .optional(),
733
812
  trace: exports.zProviderTraceSchema.optional(),
734
813
  snapshots: zod_1.z.array(exports.zProviderPayloadSnapshotSchema).optional(),
735
814
  })
@@ -733,6 +733,85 @@ export const zServiceInvoiceCancellationSchema = z
733
733
  })
734
734
  .passthrough();
735
735
 
736
+ // ---- Reemissão de NFS-e (feat-292) ----
737
+
738
+ export const zNfseReissueStatusSchema = z.enum([
739
+ "requesting",
740
+ "requested",
741
+ "failed",
742
+ ]);
743
+
744
+ export const zNfseReissueFieldSchema = z.enum([
745
+ "value",
746
+ "service_description",
747
+ "observations",
748
+ "deductions",
749
+ "taxes",
750
+ ]);
751
+
752
+ export const zNfseReissueStageSchema = z.enum(["get", "put", "authorize"]);
753
+
754
+ const zNfseReissueActorSchema = z
755
+ .object({
756
+ user_id: z.string(),
757
+ login_id: z.string().optional(),
758
+ name: z.string().optional(),
759
+ })
760
+ .passthrough();
761
+
762
+ export const zServiceInvoiceReissueSchema = z
763
+ .object({
764
+ status: zNfseReissueStatusSchema,
765
+ attempts: z.number().int().nonnegative(),
766
+ last_at: zFirestoreDateSchema,
767
+ last_by: zNfseReissueActorSchema,
768
+ previous_state: zServiceInvoiceStateSchema,
769
+ previous_error: zProviderInvoiceErrorSchema.nullable().optional(),
770
+ changes: z.array(
771
+ z
772
+ .object({
773
+ field: zNfseReissueFieldSchema,
774
+ from: z.unknown().optional(),
775
+ to: z.unknown().optional(),
776
+ })
777
+ .passthrough(),
778
+ ),
779
+ stage: zNfseReissueStageSchema.optional(),
780
+ provider_status_at_response: zProviderServiceInvoiceStatusSchema.optional(),
781
+ responded_at: zFirestoreDateSchema.optional(),
782
+ error: z
783
+ .object({
784
+ http_status: z.number().optional(),
785
+ code: z.string().optional(),
786
+ description: z.string().optional(),
787
+ })
788
+ .passthrough()
789
+ .optional(),
790
+ })
791
+ .passthrough();
792
+
793
+ export const zServiceInvoiceReissuedFromSchema = z
794
+ .object({
795
+ invoiceId: z.string(),
796
+ provider_invoice_id: z.string().optional(),
797
+ number: z.string().optional(),
798
+ state_at_reissue: zServiceInvoiceStateSchema,
799
+ at: zFirestoreDateSchema,
800
+ by: zNfseReissueActorSchema,
801
+ })
802
+ .passthrough();
803
+
804
+ export const zServiceInvoiceReplacedBySchema = z
805
+ .object({
806
+ status: z.enum(["pending", "done"]),
807
+ invoiceId: z.string().optional(),
808
+ provider_invoice_id: z.string().optional(),
809
+ requested_at: zFirestoreDateSchema,
810
+ requested_by: zNfseReissueActorSchema,
811
+ done_at: zFirestoreDateSchema.optional(),
812
+ })
813
+ .passthrough();
814
+
736
815
  export const zServiceInvoiceSchema = zFireDocSchema
737
816
  .extend({
738
817
  providerId: z.string(),
@@ -794,6 +873,15 @@ export const zServiceInvoiceSchema = zFireDocSchema
794
873
  canceled_at: zFirestoreDateSchema.optional(),
795
874
  error: zProviderInvoiceErrorSchema.nullable().optional(),
796
875
  cancellation: zServiceInvoiceCancellationSchema.optional(),
876
+ reissue: zServiceInvoiceReissueSchema.optional(),
877
+ reissued_from: zServiceInvoiceReissuedFromSchema.optional(),
878
+ replaced_by: zServiceInvoiceReplacedBySchema.optional(),
879
+ observations: z.string().optional(),
880
+ deductions: z.number().optional(),
881
+ effective_date: z
882
+ .string()
883
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
884
+ .optional(),
797
885
  trace: zProviderTraceSchema.optional(),
798
886
  snapshots: z.array(zProviderPayloadSnapshotSchema).optional(),
799
887
  })
package/dist/index.d.ts CHANGED
@@ -74,6 +74,7 @@ export * from "./apps/evo-task/zod-schemas";
74
74
  export * from "./apps/evo-survey/zod-schemas";
75
75
  export * from "./apps/evo-finops/zod-schemas";
76
76
  export * from "./apps/evo-finops/nfse-cancel";
77
+ export * from "./apps/evo-finops/nfse-reissue";
77
78
  export * from "./apps/evo-notif-user/zod-schemas";
78
79
  export * from "./apps/evo-notifications/zod-schemas";
79
80
  export * from "./apps/evo-notifications/quick-reply-action/zod-schemas";
package/dist/index.js CHANGED
@@ -92,6 +92,7 @@ __exportStar(require("./apps/evo-task/zod-schemas"), exports);
92
92
  __exportStar(require("./apps/evo-survey/zod-schemas"), exports);
93
93
  __exportStar(require("./apps/evo-finops/zod-schemas"), exports);
94
94
  __exportStar(require("./apps/evo-finops/nfse-cancel"), exports);
95
+ __exportStar(require("./apps/evo-finops/nfse-reissue"), exports);
95
96
  __exportStar(require("./apps/evo-notif-user/zod-schemas"), exports);
96
97
  __exportStar(require("./apps/evo-notifications/zod-schemas"), exports);
97
98
  __exportStar(require("./apps/evo-notifications/quick-reply-action/zod-schemas"), exports);
package/dist/index.ts CHANGED
@@ -77,6 +77,7 @@ export * from "./apps/evo-task/zod-schemas";
77
77
  export * from "./apps/evo-survey/zod-schemas";
78
78
  export * from "./apps/evo-finops/zod-schemas";
79
79
  export * from "./apps/evo-finops/nfse-cancel";
80
+ export * from "./apps/evo-finops/nfse-reissue";
80
81
  export * from "./apps/evo-notif-user/zod-schemas";
81
82
  export * from "./apps/evo-notifications/zod-schemas";
82
83
  export * from "./apps/evo-notifications/quick-reply-action/zod-schemas";
@@ -151,6 +151,116 @@ export interface INfseCancelResult {
151
151
  providerStatus?: ProviderServiceInvoiceStatus;
152
152
  message: string;
153
153
  }
154
+ /**
155
+ * Situação da correção no lugar ("Corrigir e reemitir") de uma nota em ERROR.
156
+ * - `requesting`: trava gravada, chamadas ao provedor (GET → PUT → authorize) em andamento.
157
+ * - `requested`: provedor aceitou a correção e a reemissão (o estado final chega pelo webhook).
158
+ * - `failed`: provedor recusou ou a chamada falhou; ver `stage` e `error`.
159
+ */
160
+ export type NfseReissueStatus = "requesting" | "requested" | "failed";
161
+ /** Campos que a correção no lugar pode alterar (o PUT do Asaas não muda tomador nem serviço municipal). */
162
+ export type NfseReissueField = "value" | "service_description" | "observations" | "deductions" | "taxes";
163
+ /** Etapa da correção no lugar em que a falha ocorreu. */
164
+ export type NfseReissueStage = "get" | "put" | "authorize";
165
+ /**
166
+ * Impostos enviados ao provedor (formato do Asaas). O PUT exige o objeto completo;
167
+ * o backend monta a partir do GET + `tax` local + edição, nunca zerando com defaults.
168
+ */
169
+ export interface INfseReissueTaxes {
170
+ retainIss?: boolean;
171
+ iss?: number;
172
+ pis?: number;
173
+ cofins?: number;
174
+ csll?: number;
175
+ inss?: number;
176
+ ir?: number;
177
+ }
178
+ /** Uma alteração aplicada na correção (auditoria). */
179
+ export interface INfseReissueChange {
180
+ field: NfseReissueField;
181
+ from?: unknown;
182
+ to?: unknown;
183
+ }
184
+ /** Registro da última correção no lugar ("Corrigir e reemitir") de uma nota em ERROR. */
185
+ export interface IServiceInvoiceReissue {
186
+ status: NfseReissueStatus;
187
+ /** Quantas vezes a correção foi pedida (inclui a tentativa atual). */
188
+ attempts: number;
189
+ last_at: Date;
190
+ last_by: {
191
+ user_id: string;
192
+ login_id?: string;
193
+ name?: string;
194
+ };
195
+ /** Estado da nota no momento do pedido (normalmente ERROR). */
196
+ previous_state: ServiceInvoiceState;
197
+ /** Erro da prefeitura que motivou a correção (o `error` da nota é apagado no sucesso). */
198
+ previous_error?: IProviderInvoiceError;
199
+ changes: INfseReissueChange[];
200
+ /** Etapa em que a falha ocorreu (só quando `status = failed`). */
201
+ stage?: NfseReissueStage;
202
+ provider_status_at_response?: ProviderServiceInvoiceStatus;
203
+ responded_at?: Date;
204
+ error?: {
205
+ http_status?: number;
206
+ code?: string;
207
+ description?: string;
208
+ };
209
+ }
210
+ /** Na nota NOVA: de qual nota ela é a reemissão ("Reemitir como nova"). */
211
+ export interface IServiceInvoiceReissuedFrom {
212
+ invoiceId: string;
213
+ provider_invoice_id?: string;
214
+ number?: string;
215
+ /** Estado da nota de origem no momento da reemissão (CANCELED ou ERROR). */
216
+ state_at_reissue: ServiceInvoiceState;
217
+ at: Date;
218
+ by: {
219
+ user_id: string;
220
+ login_id?: string;
221
+ name?: string;
222
+ };
223
+ }
224
+ /** Na nota de ORIGEM: qual nota a substituiu (uma substituição por origem). */
225
+ export interface IServiceInvoiceReplacedBy {
226
+ /** `pending` = trava gravada, emissão da nova em andamento; `done` = nova emitida. */
227
+ status: "pending" | "done";
228
+ invoiceId?: string;
229
+ provider_invoice_id?: string;
230
+ requested_at: Date;
231
+ requested_by: {
232
+ user_id: string;
233
+ login_id?: string;
234
+ name?: string;
235
+ };
236
+ done_at?: Date;
237
+ }
238
+ /** Alterações pedidas na correção no lugar (todas opcionais; ausente = mantém). */
239
+ export interface INfseReissueChanges {
240
+ value?: number;
241
+ service_description?: string;
242
+ observations?: string;
243
+ deductions?: number;
244
+ taxes?: INfseReissueTaxes;
245
+ }
246
+ /** Entrada do callable `finops_nfse-reissue`. */
247
+ export interface INfseReissueRequest {
248
+ tenant: string;
249
+ invoiceId: string;
250
+ changes: INfseReissueChanges;
251
+ }
252
+ /** Saída do callable `finops_nfse-reissue`. */
253
+ export interface INfseReissueResult {
254
+ invoiceId: string;
255
+ previousState: ServiceInvoiceState;
256
+ state: ServiceInvoiceState;
257
+ providerStatus?: ProviderServiceInvoiceStatus;
258
+ /** Campos efetivamente alterados (vazio = reenvio sem mudanças). */
259
+ changedFields?: NfseReissueField[];
260
+ message: string;
261
+ /** Presente quando o Asaas aceitou mas a gravação local falhou (o webhook reconcilia). */
262
+ warning?: string;
263
+ }
154
264
  export interface IServiceInvoice extends IFireDoc {
155
265
  providerId: string;
156
266
  provider_name?: string;
@@ -189,6 +299,18 @@ export interface IServiceInvoice extends IFireDoc {
189
299
  canceled_at?: Date;
190
300
  error?: IProviderInvoiceError;
191
301
  cancellation?: IServiceInvoiceCancellation;
302
+ /** Última correção no lugar ("Corrigir e reemitir") de nota em ERROR. */
303
+ reissue?: IServiceInvoiceReissue;
304
+ /** Nesta nota (nova): de qual nota ela é a reemissão. */
305
+ reissued_from?: IServiceInvoiceReissuedFrom;
306
+ /** Nesta nota (origem): qual nota a substituiu. */
307
+ replaced_by?: IServiceInvoiceReplacedBy;
308
+ /** Observações enviadas ao provedor (persistidas a partir da feat-292). */
309
+ observations?: string;
310
+ /** Deduções enviadas ao provedor (persistidas a partir da feat-292). */
311
+ deductions?: number;
312
+ /** Data de emissão enviada ao provedor, YYYY-MM-DD (fuso de Brasília). */
313
+ effective_date?: string;
192
314
  trace?: ProviderTrace;
193
315
  snapshots?: ProviderPayloadSnapshot[];
194
316
  [key: string]: unknown;
@@ -191,6 +191,134 @@ export interface INfseCancelResult {
191
191
  message: string;
192
192
  }
193
193
 
194
+ // ---- Reemissão de NFS-e (feat-292) ----
195
+
196
+ /**
197
+ * Situação da correção no lugar ("Corrigir e reemitir") de uma nota em ERROR.
198
+ * - `requesting`: trava gravada, chamadas ao provedor (GET → PUT → authorize) em andamento.
199
+ * - `requested`: provedor aceitou a correção e a reemissão (o estado final chega pelo webhook).
200
+ * - `failed`: provedor recusou ou a chamada falhou; ver `stage` e `error`.
201
+ */
202
+ export type NfseReissueStatus = "requesting" | "requested" | "failed";
203
+
204
+ /** Campos que a correção no lugar pode alterar (o PUT do Asaas não muda tomador nem serviço municipal). */
205
+ export type NfseReissueField =
206
+ | "value"
207
+ | "service_description"
208
+ | "observations"
209
+ | "deductions"
210
+ | "taxes";
211
+
212
+ /** Etapa da correção no lugar em que a falha ocorreu. */
213
+ export type NfseReissueStage = "get" | "put" | "authorize";
214
+
215
+ /**
216
+ * Impostos enviados ao provedor (formato do Asaas). O PUT exige o objeto completo;
217
+ * o backend monta a partir do GET + `tax` local + edição, nunca zerando com defaults.
218
+ */
219
+ export interface INfseReissueTaxes {
220
+ retainIss?: boolean;
221
+ iss?: number;
222
+ pis?: number;
223
+ cofins?: number;
224
+ csll?: number;
225
+ inss?: number;
226
+ ir?: number;
227
+ }
228
+
229
+ /** Uma alteração aplicada na correção (auditoria). */
230
+ export interface INfseReissueChange {
231
+ field: NfseReissueField;
232
+ from?: unknown;
233
+ to?: unknown;
234
+ }
235
+
236
+ /** Registro da última correção no lugar ("Corrigir e reemitir") de uma nota em ERROR. */
237
+ export interface IServiceInvoiceReissue {
238
+ status: NfseReissueStatus;
239
+ /** Quantas vezes a correção foi pedida (inclui a tentativa atual). */
240
+ attempts: number;
241
+ last_at: Date;
242
+ last_by: {
243
+ user_id: string;
244
+ login_id?: string;
245
+ name?: string;
246
+ };
247
+ /** Estado da nota no momento do pedido (normalmente ERROR). */
248
+ previous_state: ServiceInvoiceState;
249
+ /** Erro da prefeitura que motivou a correção (o `error` da nota é apagado no sucesso). */
250
+ previous_error?: IProviderInvoiceError;
251
+ changes: INfseReissueChange[];
252
+ /** Etapa em que a falha ocorreu (só quando `status = failed`). */
253
+ stage?: NfseReissueStage;
254
+ provider_status_at_response?: ProviderServiceInvoiceStatus;
255
+ responded_at?: Date;
256
+ error?: {
257
+ http_status?: number;
258
+ code?: string;
259
+ description?: string;
260
+ };
261
+ }
262
+
263
+ /** Na nota NOVA: de qual nota ela é a reemissão ("Reemitir como nova"). */
264
+ export interface IServiceInvoiceReissuedFrom {
265
+ invoiceId: string;
266
+ provider_invoice_id?: string;
267
+ number?: string;
268
+ /** Estado da nota de origem no momento da reemissão (CANCELED ou ERROR). */
269
+ state_at_reissue: ServiceInvoiceState;
270
+ at: Date;
271
+ by: {
272
+ user_id: string;
273
+ login_id?: string;
274
+ name?: string;
275
+ };
276
+ }
277
+
278
+ /** Na nota de ORIGEM: qual nota a substituiu (uma substituição por origem). */
279
+ export interface IServiceInvoiceReplacedBy {
280
+ /** `pending` = trava gravada, emissão da nova em andamento; `done` = nova emitida. */
281
+ status: "pending" | "done";
282
+ invoiceId?: string;
283
+ provider_invoice_id?: string;
284
+ requested_at: Date;
285
+ requested_by: {
286
+ user_id: string;
287
+ login_id?: string;
288
+ name?: string;
289
+ };
290
+ done_at?: Date;
291
+ }
292
+
293
+ /** Alterações pedidas na correção no lugar (todas opcionais; ausente = mantém). */
294
+ export interface INfseReissueChanges {
295
+ value?: number;
296
+ service_description?: string;
297
+ observations?: string;
298
+ deductions?: number;
299
+ taxes?: INfseReissueTaxes;
300
+ }
301
+
302
+ /** Entrada do callable `finops_nfse-reissue`. */
303
+ export interface INfseReissueRequest {
304
+ tenant: string;
305
+ invoiceId: string;
306
+ changes: INfseReissueChanges;
307
+ }
308
+
309
+ /** Saída do callable `finops_nfse-reissue`. */
310
+ export interface INfseReissueResult {
311
+ invoiceId: string;
312
+ previousState: ServiceInvoiceState;
313
+ state: ServiceInvoiceState;
314
+ providerStatus?: ProviderServiceInvoiceStatus;
315
+ /** Campos efetivamente alterados (vazio = reenvio sem mudanças). */
316
+ changedFields?: NfseReissueField[];
317
+ message: string;
318
+ /** Presente quando o Asaas aceitou mas a gravação local falhou (o webhook reconcilia). */
319
+ warning?: string;
320
+ }
321
+
194
322
  export interface IServiceInvoice extends IFireDoc {
195
323
  providerId: string;
196
324
  provider_name?: string;
@@ -257,6 +385,20 @@ export interface IServiceInvoice extends IFireDoc {
257
385
  // Último pedido de cancelamento feito pela plataforma (feat-291)
258
386
  cancellation?: IServiceInvoiceCancellation;
259
387
 
388
+ // Reemissão (feat-292)
389
+ /** Última correção no lugar ("Corrigir e reemitir") de nota em ERROR. */
390
+ reissue?: IServiceInvoiceReissue;
391
+ /** Nesta nota (nova): de qual nota ela é a reemissão. */
392
+ reissued_from?: IServiceInvoiceReissuedFrom;
393
+ /** Nesta nota (origem): qual nota a substituiu. */
394
+ replaced_by?: IServiceInvoiceReplacedBy;
395
+ /** Observações enviadas ao provedor (persistidas a partir da feat-292). */
396
+ observations?: string;
397
+ /** Deduções enviadas ao provedor (persistidas a partir da feat-292). */
398
+ deductions?: number;
399
+ /** Data de emissão enviada ao provedor, YYYY-MM-DD (fuso de Brasília). */
400
+ effective_date?: string;
401
+
260
402
  // Debug/audit
261
403
  trace?: ProviderTrace;
262
404
  snapshots?: ProviderPayloadSnapshot[]; // store last N snapshots (or store separately)
@@ -32,6 +32,16 @@ export interface IUsageCapabilities {
32
32
  * desenhada antes dessa data, porque ausência de medição não é consumo zero.
33
33
  */
34
34
  telemedicine_since: string | null;
35
+ /**
36
+ * feat-302 F2 — transcrição de áudio medida (evento `media.transcription`).
37
+ * Opcional: produtor antigo não envia; ausente = série não desenhada.
38
+ */
39
+ transcription?: boolean;
40
+ /**
41
+ * Data (`YYYY-MM-DD`) do primeiro evento de transcrição medido (sem
42
+ * backfill). `null`/ausente antes do deploy do emissor.
43
+ */
44
+ transcription_since?: string | null;
35
45
  }
36
46
  /**
37
47
  * Uma linha da abertura por departamento dentro de um mês.
@@ -94,6 +104,46 @@ export interface IUsageLlm {
94
104
  tokens_output: number;
95
105
  tokens_cache_write: number;
96
106
  tokens_cache_read: number;
107
+ /**
108
+ * feat-302 F2 — custo ESTIMADO em US$ (preço de lista, `cost_usd_est` dos
109
+ * eventos). Informativo, não é fatura. `null` quando nenhum evento do mês tem
110
+ * preço conhecido. Opcional: produtor antigo não envia.
111
+ */
112
+ cost_usd_est?: number | null;
113
+ /**
114
+ * feat-302 F2 — quebra por categoria de produto (visão de custo por tenant).
115
+ * Só categorias com uso no mês aparecem. A soma bate com o total do bloco.
116
+ * Opcional: produtor antigo não envia.
117
+ */
118
+ por_categoria?: Partial<Record<UsageAiCategory, IUsageLlmCategory>>;
119
+ }
120
+ /**
121
+ * feat-302 F2 — categorias de uso de IA do TENANT (espelho de
122
+ * `AiUsageCategory` do `@evo/hubia`, sem as internas como `csq_judge`).
123
+ * - `hubia`: atendimento (turnos do LLM, reativação, busca de família).
124
+ * - `attachment_analysis`: leitura de foto/PDF pelo classificador de anexos.
125
+ * - `audio_synthesis`: resposta em áudio (reservada; ainda sem emissor).
126
+ */
127
+ export type UsageAiCategory = "hubia" | "attachment_analysis" | "audio_synthesis";
128
+ export interface IUsageLlmCategory {
129
+ /** Chamadas ao LLM nesta categoria (execuções/análises, dedup por evento). */
130
+ turnos: number;
131
+ tokens_total: number;
132
+ /** US$ estimado (preço de lista); `null` sem preço conhecido. */
133
+ cost_usd_est: number | null;
134
+ }
135
+ /**
136
+ * feat-302 F2 — transcrição de áudio no mês (Whisper; evento
137
+ * `media.transcription`, 1 por áudio, dedup por mensagem). Informativo: não é
138
+ * cobrado. Bloco `null` = capability desligada (não é consumo zero).
139
+ */
140
+ export interface IUsageTranscription {
141
+ audios: number;
142
+ segundos: number;
143
+ /** `segundos / 60`, 2 casas. */
144
+ minutos: number;
145
+ /** US$ estimado (preço de lista); `null` sem duração/preço. */
146
+ cost_usd_est: number | null;
97
147
  }
98
148
  /**
99
149
  * Teleconsultas REALIZADAS no mês (feat-160 F18 / D33). Realizada = a consulta
@@ -119,6 +169,8 @@ export interface IMonthlyUsageRow {
119
169
  notificacoes: IUsageNotifications;
120
170
  ia: IUsageLlm | null;
121
171
  telemedicina: IUsageTelemedicine | null;
172
+ /** feat-302 F2 — opcional: produtor antigo não envia; `null` = capability desligada. */
173
+ transcricao?: IUsageTranscription | null;
122
174
  }
123
175
  export interface IMonthlyUsageResponse {
124
176
  ok: true;
@@ -48,6 +48,16 @@ export interface IUsageCapabilities {
48
48
  * desenhada antes dessa data, porque ausência de medição não é consumo zero.
49
49
  */
50
50
  telemedicine_since: string | null;
51
+ /**
52
+ * feat-302 F2 — transcrição de áudio medida (evento `media.transcription`).
53
+ * Opcional: produtor antigo não envia; ausente = série não desenhada.
54
+ */
55
+ transcription?: boolean;
56
+ /**
57
+ * Data (`YYYY-MM-DD`) do primeiro evento de transcrição medido (sem
58
+ * backfill). `null`/ausente antes do deploy do emissor.
59
+ */
60
+ transcription_since?: string | null;
51
61
  }
52
62
 
53
63
  /**
@@ -114,6 +124,49 @@ export interface IUsageLlm {
114
124
  tokens_output: number;
115
125
  tokens_cache_write: number;
116
126
  tokens_cache_read: number;
127
+ /**
128
+ * feat-302 F2 — custo ESTIMADO em US$ (preço de lista, `cost_usd_est` dos
129
+ * eventos). Informativo, não é fatura. `null` quando nenhum evento do mês tem
130
+ * preço conhecido. Opcional: produtor antigo não envia.
131
+ */
132
+ cost_usd_est?: number | null;
133
+ /**
134
+ * feat-302 F2 — quebra por categoria de produto (visão de custo por tenant).
135
+ * Só categorias com uso no mês aparecem. A soma bate com o total do bloco.
136
+ * Opcional: produtor antigo não envia.
137
+ */
138
+ por_categoria?: Partial<Record<UsageAiCategory, IUsageLlmCategory>>;
139
+ }
140
+
141
+ /**
142
+ * feat-302 F2 — categorias de uso de IA do TENANT (espelho de
143
+ * `AiUsageCategory` do `@evo/hubia`, sem as internas como `csq_judge`).
144
+ * - `hubia`: atendimento (turnos do LLM, reativação, busca de família).
145
+ * - `attachment_analysis`: leitura de foto/PDF pelo classificador de anexos.
146
+ * - `audio_synthesis`: resposta em áudio (reservada; ainda sem emissor).
147
+ */
148
+ export type UsageAiCategory = "hubia" | "attachment_analysis" | "audio_synthesis";
149
+
150
+ export interface IUsageLlmCategory {
151
+ /** Chamadas ao LLM nesta categoria (execuções/análises, dedup por evento). */
152
+ turnos: number;
153
+ tokens_total: number;
154
+ /** US$ estimado (preço de lista); `null` sem preço conhecido. */
155
+ cost_usd_est: number | null;
156
+ }
157
+
158
+ /**
159
+ * feat-302 F2 — transcrição de áudio no mês (Whisper; evento
160
+ * `media.transcription`, 1 por áudio, dedup por mensagem). Informativo: não é
161
+ * cobrado. Bloco `null` = capability desligada (não é consumo zero).
162
+ */
163
+ export interface IUsageTranscription {
164
+ audios: number;
165
+ segundos: number;
166
+ /** `segundos / 60`, 2 casas. */
167
+ minutos: number;
168
+ /** US$ estimado (preço de lista); `null` sem duração/preço. */
169
+ cost_usd_est: number | null;
117
170
  }
118
171
 
119
172
  /**
@@ -141,6 +194,8 @@ export interface IMonthlyUsageRow {
141
194
  notificacoes: IUsageNotifications;
142
195
  ia: IUsageLlm | null;
143
196
  telemedicina: IUsageTelemedicine | null;
197
+ /** feat-302 F2 — opcional: produtor antigo não envia; `null` = capability desligada. */
198
+ transcricao?: IUsageTranscription | null;
144
199
  }
145
200
 
146
201
  export interface IMonthlyUsageResponse {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.734",
3
+ "version": "1.3.746",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",