import type { A1Certificate } from '../certificate/types.js'; import type { HttpClient } from '../http/client.js'; import type { DPS } from '../nfse/domain.js'; import { type NfseEmitResult } from '../nfse/emit.js'; import { JustificativaCancelamento, JustificativaSubstituicao, type TipoAmbienteDps } from '../nfse/enums.js'; import type { RetryPolicy } from '../retry/policy.js'; import { type PendingEvent, type RetryStore } from '../retry/store.js'; import { type AutorEvento } from './build-event-xml.js'; import { type EventoResult } from './post-evento.js'; export interface CancelarParams { readonly chaveAcesso: string; readonly autor: AutorEvento; readonly cMotivo: JustificativaCancelamento; readonly xMotivo: string; readonly tpAmb?: TipoAmbienteDps; readonly verAplic?: string; readonly dhEvento?: Date; /** * Store para persistir pendentes se o POST falhar transitoriamente. * Se omitido e o caminho transiente for acionado, lança * `MissingRetryStoreError` para forçar decisão consciente. */ readonly retryStore?: RetryStore; /** Classificador custom. Default: `defaultIsTransient`. */ readonly isTransient?: (err: unknown) => boolean; } /** Estado do resultado de `cancelar` — discriminated union sobre `status`. */ export type CancelarResult = { readonly status: 'ok'; readonly evento: EventoResult; } | { readonly status: 'retry_pending'; readonly pending: PendingEvent; readonly error: Error; }; export declare function cancelar(httpClient: HttpClient, certificate: A1Certificate, retryPolicy: RetryPolicy, params: CancelarParams): Promise; export interface SubstituirParams { /** Chave da NFS-e a ser substituída (a antiga). */ readonly chaveOriginal: string; /** Nova DPS a ser emitida. Se não tiver `subst` preenchido, será auto-completado. */ readonly novaDps: DPS; readonly autor: AutorEvento; readonly cMotivo: JustificativaSubstituicao; readonly xMotivo?: string; readonly tpAmb?: TipoAmbienteDps; readonly verAplic?: string; readonly dhEvento?: Date; /** * Store para persistir eventos pendentes quando cancelamento transitório * falhar. Se omitido e um erro transiente ocorrer, lança * `MissingRetryStoreError` para forçar o consumidor a decidir conscientemente. */ readonly retryStore?: RetryStore; /** Classificador custom. Default: `defaultIsTransient`. */ readonly isTransient?: (err: unknown) => boolean; } /** Estado do resultado da substituição — discriminated union sobre `status`. */ export type SubstituirResult = { readonly status: 'ok'; readonly novaNfse: NfseEmitResult; readonly cancelamento: EventoResult; } | { readonly status: 'retry_pending'; readonly novaNfse: NfseEmitResult; readonly pending: PendingEvent; readonly cancelamentoError: Error; } | { readonly status: 'rolled_back'; readonly novaNfse: NfseEmitResult; readonly cancelamentoError: Error; readonly rollback: EventoResult; } | { readonly status: 'rollback_pending'; readonly novaNfse: NfseEmitResult; readonly cancelamentoError: Error; readonly rollbackError: Error; readonly pendingRollback: PendingEvent; } | { /** * Rollback falhou **permanentemente** (erro não-transiente). Não há o * que retentar, então nada é persistido no `RetryStore` (mantém o modelo * "RetryStore = transientes"). Estado terminal que exige intervenção * manual: a NFS-e nova foi emitida, a original **não** foi cancelada, e o * cancelamento da nova também foi rejeitado em definitivo. */ readonly status: 'rollback_failed'; readonly novaNfse: NfseEmitResult; readonly cancelamentoError: Error; readonly rollbackError: Error; }; export declare function substituir(httpClient: HttpClient, certificate: A1Certificate, retryPolicy: RetryPolicy, params: SubstituirParams): Promise; //# sourceMappingURL=cancelar.d.ts.map