import type { DPS } from './domain.js'; import { OpcaoSimplesNacional } from './enums.js'; import type { IndicadorTotalTributos, RegimeApuracaoSimplesNacional, RegimeEspecialTributacao, TipoAmbienteDps, TipoRetISSQN, TipoTribISSQN } from './enums.js'; /** Regime tributário do emitente. Casa com os grupos do `TCRegTrib`. */ export interface RegimeTributario { readonly opSimpNac: OpcaoSimplesNacional; readonly regEspTrib: RegimeEspecialTributacao; /** Obrigatório quando `opSimpNac === MeEpp`. */ readonly regApTribSN?: RegimeApuracaoSimplesNacional; } /** Endereço nacional na forma ergonômica aceita pelo builder. */ export interface EnderecoBr { /** Código IBGE do município (7 dígitos). */ readonly codMunicipio: string; /** CEP (8 dígitos sem máscara). */ readonly cep: string; readonly logradouro: string; readonly numero: string; readonly bairro: string; readonly complemento?: string; } /** * Identificação do emitente prestador. * * `xNome` (nome/razão social) e endereço **não** são aceitos aqui de propósito: * `buildDps` sempre usa `tpEmit='1'` (prestador é o próprio emitente), e a SEFIN * rejeita esses campos no bloco `prest` nesse cenário — eles são preenchidos a * partir do cadastro do CNPJ. Os mesmos dados aparecem no `NFSe` retornado. */ export interface EmitenteInput { readonly cnpj: string; /** Código IBGE do município emissor (7 dígitos). */ readonly codMunicipio: string; readonly inscricaoMunicipal?: string; readonly regime: RegimeTributario; readonly email?: string; readonly fone?: string; } /** Identificação do tomador. */ export interface TomadorInput { readonly documento: { readonly CNPJ: string; } | { readonly CPF: string; }; readonly nome: string; readonly inscricaoMunicipal?: string; readonly email?: string; readonly fone?: string; readonly endereco?: EnderecoBr; } /** Descrição do serviço. */ export interface ServicoInput { /** Código nacional do serviço (LC 116 + Anexo). */ readonly cTribNac: string; /** * Código NBS do serviço. Opcional — apesar da NT04 declarar o elemento sem * `minOccurs`, a SEFIN não rejeita DPS sem `cNBS`. Quando omitido, o * `` não é serializado. */ readonly cNBS?: string; readonly descricao: string; /** Default: `emitente.codMunicipio`. */ readonly codMunicipioPrestacao?: string; readonly cTribMun?: string; /** Código interno do contribuinte para essa linha de serviço. */ readonly codigoInterno?: string; } /** Valores e tributação do serviço. */ export interface ValoresInput { readonly vServ: number; readonly vReceb?: number; /** * Alíquota ISS em **percentual** (ex: `2.5` = 2,5%, NÃO `0.025`). Preenche * `tribMun.pAliq` (`TCTribMunicipal`, `minOccurs="0"`). Pelo XSD: se o * município de incidência pertence ao Sistema Nacional NFS-e a alíquota é * parametrizada e fornecida pelo sistema — nesse caso omita (`undefined`); * fora do Sistema Nacional, o emitente fornece. Valores `0 < x < 0.5` são * rejeitados em tempo de build (quase sempre erro de fração-vs-percentual). * * Em termos de serialização: `undefined` não emite ``; um valor * definido (inclusive `0`) emite `` com aquele valor. */ readonly aliqIss?: number; /** Default `'1'` (operação tributável). */ readonly tribISSQN?: TipoTribISSQN; /** Default `'1'` (sem retenção). */ readonly tpRetISSQN?: TipoRetISSQN; /** Default `'0'` (não informado). Ignorado se `pTotTribSN` for fornecido. */ readonly indTotTrib?: IndicadorTotalTributos; /** Alíquota aproximada do Simples Nacional (%). Quando fornecido, prevalece sobre `indTotTrib`. */ readonly pTotTribSN?: number; } export interface BuildDpsParams { readonly emitente: EmitenteInput; readonly serie: string; /** * Identificador sequencial da DPS na série, como string. **Não preencher com * zeros à esquerda** — o `Id` da DPS é composto a partir da string passada * aqui, então `'1'` e `'00001'` produzem `Id`s diferentes mesmo representando * o mesmo número. O `DpsCounter` (acionado por `NfseClient.emitir`) já segue * a convenção sem padding. */ readonly nDPS: string; /** Default `'2'` (Homologação). */ readonly tpAmb?: TipoAmbienteDps; /** Default `new Date()`. */ readonly dhEmi?: Date; /** * Competência (mês/ano) da prestação do serviço. Default `new Date()` (hoje). * Para notas com competência retroativa (ex.: serviço prestado no mês anterior) * informe explicitamente — o default não deduz nada de `dhEmi`. */ readonly dCompet?: Date; /** Versão do aplicativo emissor. Default `open-nfse/`. */ readonly verAplic?: string; readonly servico: ServicoInput; readonly valores: ValoresInput; readonly tomador?: TomadorInput; } /** * Constrói uma `DPS` completa a partir de um subconjunto ergonômico de campos. * Cobre o caso comum (prestador brasileiro, serviço único, tomador BR opcional) * preenchendo todo o boilerplate do layout RTC v1.01. * * Para cenários avançados — exterior, obra, atvEvento, dedução/redução, IBSCBS — * construa `InfDPS` manualmente (todos os tipos da RTC estão exportados). */ export declare function buildDps(params: BuildDpsParams): DPS; //# sourceMappingURL=build-dps.d.ts.map