@useinvio/nfse-sdk 0.2.0

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,144 @@
1
+ import type { Ambiente } from './config.js';
2
+ export interface PrestadorProfile {
3
+ cnpj: string;
4
+ /** tpInsc: 1 = CPF, 2 = CNPJ */
5
+ tpInsc?: '1' | '2' | string;
6
+ cLocEmi: string;
7
+ serie: string;
8
+ opSimpNac: string;
9
+ regApTribSN?: string;
10
+ regEspTrib: string;
11
+ }
12
+ export interface ServicoProfile {
13
+ cTribNac: string;
14
+ xDescServ: string;
15
+ cLocPrestacao: string;
16
+ cNBS?: string;
17
+ }
18
+ export interface ComExt {
19
+ mdPrestacao: string;
20
+ vincPrest: string;
21
+ tpMoeda: string;
22
+ vServMoeda: string;
23
+ mecAFComexP: string;
24
+ mecAFComexT: string;
25
+ movTempBens: string;
26
+ mdic: string;
27
+ cPaisResult?: string;
28
+ }
29
+ export interface Tomador {
30
+ CNPJ?: string;
31
+ CPF?: string;
32
+ NIF?: string;
33
+ cNaoNIF?: string;
34
+ xNome?: string;
35
+ end?: Record<string, string>;
36
+ fone?: string;
37
+ email?: string;
38
+ }
39
+ export interface Intermediario {
40
+ CNPJ?: string;
41
+ CPF?: string;
42
+ xNome?: string;
43
+ }
44
+ export interface TribMun {
45
+ tribISSQN?: string;
46
+ cPaisResult?: string;
47
+ tpRetISSQN?: string;
48
+ vISSQN?: string;
49
+ vBC?: string;
50
+ pAliq?: string;
51
+ tpImunidade?: string;
52
+ }
53
+ export interface TribFed {
54
+ piscofins?: {
55
+ CST: string;
56
+ vBCPisCofins?: string;
57
+ pAliqPis?: string;
58
+ pAliqCofins?: string;
59
+ vPis?: string;
60
+ vCofins?: string;
61
+ tpRetPisCofins?: string;
62
+ };
63
+ vRetCP?: string;
64
+ vRetIRRF?: string;
65
+ vRetCSLL?: string;
66
+ }
67
+ export interface TribNac {
68
+ IBS?: {
69
+ CST: string;
70
+ vBC?: string;
71
+ pAliqEstado?: string;
72
+ pAliqMunicipio?: string;
73
+ vIBSEstado?: string;
74
+ vIBSMunicipio?: string;
75
+ };
76
+ CBS?: {
77
+ CST: string;
78
+ vBC?: string;
79
+ pAliq?: string;
80
+ vCBS?: string;
81
+ };
82
+ }
83
+ export interface TotTrib {
84
+ pTotTribFed?: string;
85
+ pTotTribEst?: string;
86
+ pTotTribMun?: string;
87
+ vTotTrib?: string;
88
+ pTotTribSN?: string;
89
+ indTotTrib?: string;
90
+ }
91
+ export interface Obra {
92
+ cObra?: string;
93
+ inscImobFisc?: string;
94
+ cCM?: string;
95
+ }
96
+ export interface EventoServico {
97
+ xDesc?: string;
98
+ dtEvento?: string;
99
+ }
100
+ export interface Valores {
101
+ vServ?: string;
102
+ vServMoeda?: string;
103
+ cotacao?: number;
104
+ vDesc?: string;
105
+ vDedRed?: string;
106
+ }
107
+ export interface DpsJsonInput {
108
+ nDPS: string;
109
+ serie?: string;
110
+ dhEmi?: string;
111
+ dCompet?: string;
112
+ valores?: Valores;
113
+ vServMoeda?: string;
114
+ vServ?: string;
115
+ cotacao?: number;
116
+ servico?: {
117
+ xDescServ?: string;
118
+ cLocPrestacao?: string;
119
+ cNBS?: string;
120
+ };
121
+ tomador?: Tomador;
122
+ intermediario?: Intermediario;
123
+ tributacaoMunicipal?: TribMun;
124
+ tributacaoFederal?: TribFed;
125
+ tribNac?: TribNac;
126
+ comercioExterior?: Partial<ComExt>;
127
+ comExt?: Partial<ComExt>;
128
+ obra?: Obra;
129
+ evento?: EventoServico;
130
+ totTrib?: TotTrib;
131
+ xDescServ?: string;
132
+ }
133
+ export interface DpsJsonRequest {
134
+ ambiente?: Ambiente;
135
+ prestador: PrestadorProfile;
136
+ servico: ServicoProfile;
137
+ emissao: DpsJsonInput;
138
+ }
139
+ export interface BuiltDps {
140
+ id: string;
141
+ xml: string;
142
+ }
143
+ export declare function buildDpsId(prestador: PrestadorProfile, nDPS: string, serie?: string): string;
144
+ export declare function buildDpsFromJson(input: DpsJsonRequest | string): BuiltDps;
@@ -0,0 +1,252 @@
1
+ import { DEFAULT_AMBIENTE, TP_AMB } from './config.js';
2
+ import { validateDpsJsonRequest } from './fiscalValidation.js';
3
+ const NS = 'http://www.sped.fazenda.gov.br/nfse';
4
+ const VERSAO = '1.01';
5
+ const VER_APLIC = 'UseInvio';
6
+ function normalizeRequest(input) {
7
+ const parsed = typeof input === 'string' ? JSON.parse(input) : input;
8
+ if (!parsed?.prestador)
9
+ throw new Error('JSON da DPS deve informar prestador');
10
+ if (!parsed?.servico)
11
+ throw new Error('JSON da DPS deve informar servico');
12
+ if (!parsed?.emissao)
13
+ throw new Error('JSON da DPS deve informar emissao');
14
+ return parsed;
15
+ }
16
+ function escapeXml(value) {
17
+ return String(value)
18
+ .replace(/&/g, '&amp;')
19
+ .replace(/</g, '&lt;')
20
+ .replace(/>/g, '&gt;');
21
+ }
22
+ function escapeAttr(value) {
23
+ return escapeXml(value).replace(/"/g, '&quot;').replace(/'/g, '&apos;');
24
+ }
25
+ function attrs(values) {
26
+ return Object.entries(values)
27
+ .map(([key, value]) => ` ${key}="${escapeAttr(value)}"`)
28
+ .join('');
29
+ }
30
+ function el(name, content, attrValues = {}) {
31
+ return `<${name}${attrs(attrValues)}>${content}</${name}>`;
32
+ }
33
+ function textEl(name, value) {
34
+ if (value === undefined || value === null || value === '')
35
+ return '';
36
+ return el(name, escapeXml(value));
37
+ }
38
+ function requiredTextEl(name, value) {
39
+ if (value === undefined || value === null || value === '') {
40
+ throw new Error(`Campo obrigatorio ausente: ${name}`);
41
+ }
42
+ return el(name, escapeXml(value));
43
+ }
44
+ function onlyDigits(value) {
45
+ return value.replace(/\D/g, '');
46
+ }
47
+ function pad(value, length) {
48
+ return onlyDigits(value).padStart(length, '0');
49
+ }
50
+ function roundMoney(value) {
51
+ return Number(value).toFixed(2);
52
+ }
53
+ function roundRate(value) {
54
+ return Number(value).toFixed(4);
55
+ }
56
+ function roundTaxBurdenRate(value) {
57
+ return Number(value).toFixed(2);
58
+ }
59
+ function mulDecimal(a, b) {
60
+ const scale = 1_000_000;
61
+ const result = (Math.round(Number(a) * scale) * Math.round(b * scale)) / (scale * scale);
62
+ return result.toFixed(2);
63
+ }
64
+ function nowOffset(date = new Date()) {
65
+ const p = (n) => String(n).padStart(2, '0');
66
+ const tz = -date.getTimezoneOffset();
67
+ const sign = tz >= 0 ? '+' : '-';
68
+ const abs = Math.abs(tz);
69
+ const offset = `${sign}${p(Math.floor(abs / 60))}:${p(abs % 60)}`;
70
+ return (`${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())}` +
71
+ `T${p(date.getHours())}:${p(date.getMinutes())}:${p(date.getSeconds())}${offset}`);
72
+ }
73
+ function resolveVServ(input) {
74
+ const values = input.valores;
75
+ const vServ = values?.vServ ?? input.vServ;
76
+ if (vServ)
77
+ return roundMoney(vServ);
78
+ const vServMoeda = values?.vServMoeda ?? input.vServMoeda;
79
+ const cotacao = values?.cotacao ?? input.cotacao;
80
+ if (!vServMoeda || !cotacao) {
81
+ throw new Error('Informe valores.vServ ou (valores.vServMoeda + valores.cotacao) no JSON da DPS.');
82
+ }
83
+ return mulDecimal(vServMoeda, cotacao);
84
+ }
85
+ function resolveVServMoeda(input) {
86
+ return input.valores?.vServMoeda ?? input.vServMoeda ?? '0.00';
87
+ }
88
+ export function buildDpsId(prestador, nDPS, serie = prestador.serie) {
89
+ const cnpjDigits = prestador.cnpj.replace(/\D/g, '');
90
+ const tpInsc = cnpjDigits.length === 14 ? '2' : (prestador.tpInsc ?? '1');
91
+ const id = 'DPS' +
92
+ pad(prestador.cLocEmi, 7) +
93
+ tpInsc +
94
+ pad(cnpjDigits, 14) +
95
+ pad(serie, 5) +
96
+ pad(nDPS, 15);
97
+ if (id.length !== 45) {
98
+ throw new Error(`Id da DPS com tamanho invalido (${id.length}, esperado 45): ${id}`);
99
+ }
100
+ return id;
101
+ }
102
+ function buildTomador(tomador) {
103
+ const endereco = tomador.end
104
+ ? el('end', Object.entries(tomador.end)
105
+ .map(([key, value]) => textEl(key, value))
106
+ .join(''))
107
+ : '';
108
+ return el('toma', [
109
+ textEl('CNPJ', tomador.CNPJ),
110
+ textEl('CPF', tomador.CPF),
111
+ textEl('NIF', tomador.NIF),
112
+ textEl('cNaoNIF', tomador.cNaoNIF),
113
+ textEl('xNome', tomador.xNome),
114
+ endereco,
115
+ textEl('fone', tomador.fone),
116
+ textEl('email', tomador.email),
117
+ ].join(''));
118
+ }
119
+ function buildIntermediario(intermediario) {
120
+ return el('interm', [textEl('CNPJ', intermediario.CNPJ), textEl('CPF', intermediario.CPF), textEl('xNome', intermediario.xNome)].join(''));
121
+ }
122
+ function buildTribMun(trib) {
123
+ const tribISSQN = trib.tribISSQN;
124
+ let discriminator = '';
125
+ if (tribISSQN === '3') {
126
+ discriminator = requiredTextEl('cPaisResult', trib.cPaisResult);
127
+ }
128
+ else if (tribISSQN === '2') {
129
+ discriminator = requiredTextEl('tpImunidade', trib.tpImunidade);
130
+ }
131
+ return el('tribMun', [
132
+ requiredTextEl('tribISSQN', tribISSQN),
133
+ discriminator,
134
+ requiredTextEl('tpRetISSQN', trib.tpRetISSQN),
135
+ textEl('vBC', trib.vBC ? roundMoney(trib.vBC) : undefined),
136
+ textEl('pAliq', trib.pAliq ? roundRate(trib.pAliq) : undefined),
137
+ textEl('vISSQN', trib.vISSQN ? roundMoney(trib.vISSQN) : undefined),
138
+ ].join(''));
139
+ }
140
+ function buildTribFed(trib) {
141
+ const piscofins = trib.piscofins
142
+ ? el('piscofins', [
143
+ requiredTextEl('CST', trib.piscofins.CST),
144
+ textEl('vBCPisCofins', trib.piscofins.vBCPisCofins ? roundMoney(trib.piscofins.vBCPisCofins) : undefined),
145
+ textEl('pAliqPis', trib.piscofins.pAliqPis ? roundRate(trib.piscofins.pAliqPis) : undefined),
146
+ textEl('pAliqCofins', trib.piscofins.pAliqCofins ? roundRate(trib.piscofins.pAliqCofins) : undefined),
147
+ textEl('vPis', trib.piscofins.vPis ? roundMoney(trib.piscofins.vPis) : undefined),
148
+ textEl('vCofins', trib.piscofins.vCofins ? roundMoney(trib.piscofins.vCofins) : undefined),
149
+ textEl('tpRetPisCofins', trib.piscofins.tpRetPisCofins),
150
+ ].join(''))
151
+ : '';
152
+ return el('tribFed', [
153
+ piscofins,
154
+ textEl('vRetCP', trib.vRetCP ? roundMoney(trib.vRetCP) : undefined),
155
+ textEl('vRetIRRF', trib.vRetIRRF ? roundMoney(trib.vRetIRRF) : undefined),
156
+ textEl('vRetCSLL', trib.vRetCSLL ? roundMoney(trib.vRetCSLL) : undefined),
157
+ ].join(''));
158
+ }
159
+ function buildTotTrib(tot, opSimpNac) {
160
+ const hasExplicitValue = tot.vTotTrib !== undefined ||
161
+ tot.pTotTribFed !== undefined ||
162
+ tot.pTotTribEst !== undefined ||
163
+ tot.pTotTribMun !== undefined ||
164
+ tot.pTotTribSN !== undefined ||
165
+ tot.indTotTrib !== undefined;
166
+ if (hasExplicitValue) {
167
+ const pBlock = tot.pTotTribFed !== undefined || tot.pTotTribEst !== undefined || tot.pTotTribMun !== undefined
168
+ ? el('pTotTrib', [
169
+ textEl('pTotTribFed', tot.pTotTribFed !== undefined ? roundTaxBurdenRate(tot.pTotTribFed) : undefined),
170
+ textEl('pTotTribEst', tot.pTotTribEst !== undefined ? roundTaxBurdenRate(tot.pTotTribEst) : undefined),
171
+ textEl('pTotTribMun', tot.pTotTribMun !== undefined ? roundTaxBurdenRate(tot.pTotTribMun) : undefined),
172
+ ].join(''))
173
+ : '';
174
+ return el('totTrib', [
175
+ textEl('vTotTrib', tot.vTotTrib !== undefined ? roundMoney(tot.vTotTrib) : undefined),
176
+ pBlock,
177
+ textEl('pTotTribSN', tot.pTotTribSN !== undefined ? roundTaxBurdenRate(tot.pTotTribSN) : undefined),
178
+ textEl('indTotTrib', tot.indTotTrib),
179
+ ].join(''));
180
+ }
181
+ throw new Error(`Campo obrigatorio ausente: totTrib (${opSimpNac})`);
182
+ }
183
+ function buildComExt(input, comExt) {
184
+ return el('comExt', [
185
+ textEl('mdPrestacao', comExt.mdPrestacao),
186
+ textEl('vincPrest', comExt.vincPrest),
187
+ textEl('tpMoeda', comExt.tpMoeda),
188
+ requiredTextEl('vServMoeda', comExt.vServMoeda ?? resolveVServMoeda(input)),
189
+ textEl('mecAFComexP', comExt.mecAFComexP),
190
+ textEl('mecAFComexT', comExt.mecAFComexT),
191
+ textEl('movTempBens', comExt.movTempBens),
192
+ textEl('mdic', comExt.mdic),
193
+ ].join(''));
194
+ }
195
+ export function buildDpsFromJson(input) {
196
+ const request = normalizeRequest(input);
197
+ validateDpsJsonRequest(request);
198
+ const ambiente = request.ambiente ?? DEFAULT_AMBIENTE;
199
+ const { prestador, servico } = request;
200
+ const emissao = request.emissao;
201
+ const serie = emissao.serie ?? prestador.serie;
202
+ const id = buildDpsId(prestador, emissao.nDPS, serie);
203
+ const dhEmi = emissao.dhEmi ?? nowOffset();
204
+ const dCompet = emissao.dCompet ?? dhEmi.slice(0, 10);
205
+ const serviceOverride = emissao.servico;
206
+ const comExt = emissao.comercioExterior ?? emissao.comExt;
207
+ const vServ = resolveVServ(emissao);
208
+ const prest = el('prest', requiredTextEl('CNPJ', prestador.cnpj) +
209
+ el('regTrib', requiredTextEl('opSimpNac', prestador.opSimpNac) +
210
+ textEl('regApTribSN', prestador.regApTribSN) +
211
+ requiredTextEl('regEspTrib', prestador.regEspTrib)));
212
+ const cServ = el('cServ', [
213
+ requiredTextEl('cTribNac', servico.cTribNac),
214
+ requiredTextEl('xDescServ', serviceOverride?.xDescServ ?? emissao.xDescServ ?? servico.xDescServ),
215
+ textEl('cNBS', serviceOverride?.cNBS ?? servico.cNBS),
216
+ ].join(''));
217
+ const serv = el('serv', [
218
+ el('locPrest', requiredTextEl('cLocPrestacao', serviceOverride?.cLocPrestacao ?? servico.cLocPrestacao)),
219
+ cServ,
220
+ comExt ? buildComExt(emissao, comExt) : '',
221
+ emissao.obra ? el('obra', textEl('cObra', emissao.obra.cObra) + textEl('inscImobFisc', emissao.obra.inscImobFisc) + textEl('cCM', emissao.obra.cCM)) : '',
222
+ emissao.evento ? el('atvEvento', textEl('xDesc', emissao.evento.xDesc) + textEl('dtEvento', emissao.evento.dtEvento)) : '',
223
+ ].join(''));
224
+ const vServPrest = el('vServPrest', requiredTextEl('vServ', vServ) +
225
+ textEl('vDesc', emissao.valores?.vDesc ? roundMoney(emissao.valores.vDesc) : undefined) +
226
+ textEl('vDedRed', emissao.valores?.vDedRed ? roundMoney(emissao.valores.vDedRed) : undefined));
227
+ const trib = el('trib', [
228
+ buildTribMun(emissao.tributacaoMunicipal ?? {}),
229
+ emissao.tributacaoFederal ? buildTribFed(emissao.tributacaoFederal) : '',
230
+ buildTotTrib(emissao.totTrib ?? {}, prestador.opSimpNac),
231
+ ].join(''));
232
+ const infDps = el('infDPS', [
233
+ requiredTextEl('tpAmb', TP_AMB[ambiente]),
234
+ requiredTextEl('dhEmi', dhEmi),
235
+ requiredTextEl('verAplic', VER_APLIC),
236
+ requiredTextEl('serie', serie),
237
+ requiredTextEl('nDPS', emissao.nDPS),
238
+ requiredTextEl('dCompet', dCompet),
239
+ requiredTextEl('tpEmit', '1'),
240
+ requiredTextEl('cLocEmi', prestador.cLocEmi),
241
+ prest,
242
+ emissao.tomador ? buildTomador(emissao.tomador) : '',
243
+ emissao.intermediario ? buildIntermediario(emissao.intermediario) : '',
244
+ serv,
245
+ el('valores', vServPrest + trib),
246
+ ].join(''), { Id: id });
247
+ return {
248
+ id,
249
+ xml: el('DPS', infDps, { versao: VERSAO, xmlns: NS }),
250
+ };
251
+ }
252
+ //# sourceMappingURL=dpsJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dpsJson.js","sourceRoot":"","sources":["../dpsJson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Ambiente } from './config.js';
2
+ import type { DpsJsonRequest } from './dpsJson.js';
3
+ import type { PfxMaterial } from './loadPfx.js';
4
+ import type { SefinErro } from './sefinClient.js';
5
+ export type NotaInput = DpsJsonRequest | string;
6
+ export interface EmitirNotaOptions {
7
+ ambiente?: Ambiente;
8
+ /** Obrigatorio quando o input for XML sem Id em <infDPS>. */
9
+ dpsId?: string;
10
+ }
11
+ export interface ResultadoEmissaoNota {
12
+ chaveAcesso: string;
13
+ dpsId: string;
14
+ nfseXml: string;
15
+ status: number;
16
+ body: any;
17
+ }
18
+ export declare class EmitirNotaError extends Error {
19
+ readonly status: number;
20
+ readonly erros: SefinErro[];
21
+ readonly dpsId: string;
22
+ readonly body: any;
23
+ constructor(message: string, status: number, erros: SefinErro[], dpsId: string, body: any);
24
+ }
25
+ /**
26
+ * Emite uma NFS-e a partir de XML de DPS ou JSON declarativo.
27
+ *
28
+ * O metodo centraliza a burocracia do protocolo: monta XML quando recebe JSON,
29
+ * assina, compacta em GZip/Base64, envia por mTLS e normaliza rejeicoes.
30
+ */
31
+ export declare function emitirNfse(input: NotaInput, pfx: PfxMaterial, options?: EmitirNotaOptions): Promise<ResultadoEmissaoNota>;
@@ -0,0 +1,65 @@
1
+ import { DEFAULT_AMBIENTE } from './config.js';
2
+ import { buildDpsFromJson } from './dpsJson.js';
3
+ import { extrairErros, transmitirDpsCompactada } from './sefinClient.js';
4
+ import { gzipBase64, gunzipBase64 } from './gzipB64.js';
5
+ import { signDps } from './signXml.js';
6
+ export class EmitirNotaError extends Error {
7
+ status;
8
+ erros;
9
+ dpsId;
10
+ body;
11
+ constructor(message, status, erros, dpsId, body) {
12
+ super(message);
13
+ this.status = status;
14
+ this.erros = erros;
15
+ this.dpsId = dpsId;
16
+ this.body = body;
17
+ this.name = 'EmitirNotaError';
18
+ }
19
+ }
20
+ function isXmlString(input) {
21
+ return input.trimStart().startsWith('<');
22
+ }
23
+ function extractDpsId(xml) {
24
+ return xml.match(/<[^:>\s]*:?infDPS\b[^>]*\bId=["']([^"']+)["']/)?.[1];
25
+ }
26
+ function prepararNota(input, options = {}) {
27
+ if (typeof input === 'string' && isXmlString(input)) {
28
+ const dpsId = options.dpsId ?? extractDpsId(input);
29
+ if (!dpsId) {
30
+ throw new Error('Informe options.dpsId ou um XML com Id em <infDPS>.');
31
+ }
32
+ return {
33
+ ambiente: options.ambiente ?? DEFAULT_AMBIENTE,
34
+ dpsId,
35
+ xml: input,
36
+ };
37
+ }
38
+ const request = typeof input === 'string' ? JSON.parse(input) : input;
39
+ const { id, xml } = buildDpsFromJson(request);
40
+ return {
41
+ ambiente: options.ambiente ?? request.ambiente ?? DEFAULT_AMBIENTE,
42
+ dpsId: id,
43
+ xml,
44
+ };
45
+ }
46
+ /**
47
+ * Emite uma NFS-e a partir de XML de DPS ou JSON declarativo.
48
+ *
49
+ * O metodo centraliza a burocracia do protocolo: monta XML quando recebe JSON,
50
+ * assina, compacta em GZip/Base64, envia por mTLS e normaliza rejeicoes.
51
+ */
52
+ export async function emitirNfse(input, pfx, options = {}) {
53
+ const nota = prepararNota(input, options);
54
+ const signedXml = signDps(nota.xml, nota.dpsId, pfx);
55
+ const dpsXmlGZipB64 = gzipBase64(signedXml);
56
+ const { status, body } = await transmitirDpsCompactada(dpsXmlGZipB64, pfx, nota.ambiente);
57
+ const nfseB64 = body?.nfseXmlGZipB64 ?? body?.NfseXmlGZipB64;
58
+ if (status >= 200 && status < 300 && nfseB64) {
59
+ const nfseXml = gunzipBase64(nfseB64);
60
+ const chaveAcesso = body?.chaveAcesso ?? body?.ChaveAcesso ?? nfseXml.match(/Id="NFS(\d{50})"/)?.[1] ?? '';
61
+ return { chaveAcesso, dpsId: nota.dpsId, nfseXml, status, body };
62
+ }
63
+ throw new EmitirNotaError(`Emissao rejeitada (HTTP ${status})`, status, extrairErros(body), nota.dpsId, body);
64
+ }
65
+ //# sourceMappingURL=emissaoNota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emissaoNota.js","sourceRoot":"","sources":["../emissaoNota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DpsJsonRequest } from './dpsJson.js';
2
+ export declare class DpsFiscalValidationError extends Error {
3
+ readonly issues: string[];
4
+ constructor(issues: string[]);
5
+ }
6
+ export declare function validateDpsJsonRequest(request: DpsJsonRequest): void;