@facturacr/atv-sdk 2.0.3-alpha → 2.0.5-alpha
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.
- package/__tests__/stubs/commonExpectedXml.xml +98 -97
- package/__tests__/stubs/createDocument.data.ts +19 -19
- package/__tests__/tests/ATV/__snapshots__/create-document.test.ts.snap +1 -1
- package/dist/src/ATV/mappers/billDocToAtv.js +37 -25
- package/dist/src/ATV/mappers/billDocToAtv.js.map +1 -1
- package/dist/src/types/facturaInterfaces.d.ts +5 -8
- package/package.json +1 -1
- package/src/ATV/mappers/billDocToAtv.ts +36 -14
- package/src/types/facturaInterfaces.ts +6 -9
|
@@ -1,99 +1,100 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8"?>
|
|
2
2
|
<FacturaElectronica xmlns="https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.4/facturaElectronica" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
</
|
|
3
|
+
<Clave>50601042400020692014200100001010000000002100000001</Clave>
|
|
4
|
+
<ProveedorSistemas>206920142</ProveedorSistemas>
|
|
5
|
+
<CodigoActividadEmisor>930903</CodigoActividadEmisor>
|
|
6
|
+
<CodigoActividadReceptor>526005</CodigoActividadReceptor>
|
|
7
|
+
<NumeroConsecutivo>00100001010000000002</NumeroConsecutivo>
|
|
8
|
+
<FechaEmision>2024-04-01T00:00:00.000Z</FechaEmision>
|
|
9
|
+
<Emisor>
|
|
10
|
+
<Nombre>Tek rocks</Nombre>
|
|
11
|
+
<Identificacion>
|
|
12
|
+
<Tipo>01</Tipo>
|
|
13
|
+
<Numero>206920142</Numero>
|
|
14
|
+
</Identificacion>
|
|
15
|
+
<NombreComercial>Ciencia del sabor</NombreComercial>
|
|
16
|
+
<Ubicacion>
|
|
17
|
+
<Provincia>2</Provincia>
|
|
18
|
+
<Canton>06</Canton>
|
|
19
|
+
<Distrito>04</Distrito>
|
|
20
|
+
<Barrio>00006</Barrio>
|
|
21
|
+
<OtrasSenas>Calle Arrieta</OtrasSenas>
|
|
22
|
+
</Ubicacion>
|
|
23
|
+
<Telefono>
|
|
24
|
+
<CodigoPais>506</CodigoPais>
|
|
25
|
+
<NumTelefono>88122479</NumTelefono>
|
|
26
|
+
</Telefono>
|
|
27
|
+
<CorreoElectronico>cienciadelsabor@gmail.com</CorreoElectronico>
|
|
28
|
+
</Emisor>
|
|
29
|
+
<Receptor>
|
|
30
|
+
<Nombre>Roy</Nombre>
|
|
31
|
+
<Identificacion>
|
|
32
|
+
<Tipo>01</Tipo>
|
|
33
|
+
<Numero>204500331</Numero>
|
|
34
|
+
</Identificacion>
|
|
35
|
+
<NombreComercial>Roy Arrieta Soto</NombreComercial>
|
|
36
|
+
<Ubicacion>
|
|
37
|
+
<Provincia>2</Provincia>
|
|
38
|
+
<Canton>06</Canton>
|
|
39
|
+
<Distrito>04</Distrito>
|
|
40
|
+
<Barrio>00003</Barrio>
|
|
41
|
+
<OtrasSenas>500 m oeste Súper Don Jorge, casa mano izquierda</OtrasSenas>
|
|
42
|
+
</Ubicacion>
|
|
43
|
+
<Telefono>
|
|
44
|
+
<CodigoPais>506</CodigoPais>
|
|
45
|
+
<NumTelefono>87206063</NumTelefono>
|
|
46
|
+
</Telefono>
|
|
47
|
+
<CorreoElectronico>sercoe1@hotmail.com</CorreoElectronico>
|
|
48
|
+
</Receptor>
|
|
49
|
+
<CondicionVenta>01</CondicionVenta>
|
|
50
|
+
<DetalleServicio>
|
|
51
|
+
<LineaDetalle>
|
|
52
|
+
<NumeroLinea>1</NumeroLinea>
|
|
53
|
+
<CodigoCABYS>9799000000000</CodigoCABYS>
|
|
54
|
+
<Cantidad>1</Cantidad>
|
|
55
|
+
<UnidadMedida>Sp</UnidadMedida>
|
|
56
|
+
<Detalle>detalle</Detalle>
|
|
57
|
+
<PrecioUnitario>10</PrecioUnitario>
|
|
58
|
+
<MontoTotal>10</MontoTotal>
|
|
59
|
+
<SubTotal>10</SubTotal>
|
|
60
|
+
<BaseImponible>10</BaseImponible>
|
|
61
|
+
<Impuesto>
|
|
62
|
+
<Codigo>01</Codigo>
|
|
63
|
+
<CodigoTarifaIVA>08</CodigoTarifaIVA>
|
|
64
|
+
<Tarifa>13</Tarifa>
|
|
65
|
+
<Monto>1.3</Monto>
|
|
66
|
+
</Impuesto>
|
|
67
|
+
<ImpuestoAsumidoEmisorFabrica>0</ImpuestoAsumidoEmisorFabrica>
|
|
68
|
+
<ImpuestoNeto>1.3</ImpuestoNeto>
|
|
69
|
+
<MontoTotalLinea>11.3</MontoTotalLinea>
|
|
70
|
+
</LineaDetalle>
|
|
71
|
+
</DetalleServicio>
|
|
72
|
+
<ResumenFactura>
|
|
73
|
+
<CodigoTipoMoneda>
|
|
74
|
+
<CodigoMoneda>CRC</CodigoMoneda>
|
|
75
|
+
<TipoCambio>1</TipoCambio>
|
|
76
|
+
</CodigoTipoMoneda>
|
|
77
|
+
<TotalServGravados>10</TotalServGravados>
|
|
78
|
+
<TotalServExentos>0</TotalServExentos>
|
|
79
|
+
<TotalMercanciasGravadas>0</TotalMercanciasGravadas>
|
|
80
|
+
<TotalMercanciasExentas>0</TotalMercanciasExentas>
|
|
81
|
+
<TotalGravado>10</TotalGravado>
|
|
82
|
+
<TotalExento>0</TotalExento>
|
|
83
|
+
<TotalExonerado>0</TotalExonerado>
|
|
84
|
+
<TotalVenta>10</TotalVenta>
|
|
85
|
+
<TotalDescuentos>0</TotalDescuentos>
|
|
86
|
+
<TotalVentaNeta>10</TotalVentaNeta>
|
|
87
|
+
<TotalDesgloseImpuesto>
|
|
88
|
+
<Codigo>01</Codigo>
|
|
89
|
+
<CodigoTarifaIVA>08</CodigoTarifaIVA>
|
|
90
|
+
<TotalMontoImpuesto>1.3</TotalMontoImpuesto>
|
|
91
|
+
</TotalDesgloseImpuesto>
|
|
92
|
+
<TotalImpuesto>1.3</TotalImpuesto>
|
|
93
|
+
<TotalImpAsumEmisorFabrica>0</TotalImpAsumEmisorFabrica>
|
|
94
|
+
<TotalOtrosCargos>0</TotalOtrosCargos>
|
|
95
|
+
<MedioPago>
|
|
96
|
+
<TipoMedioPago>03</TipoMedioPago>
|
|
97
|
+
</MedioPago>
|
|
98
|
+
<TotalComprobante>11.3</TotalComprobante>
|
|
99
|
+
</ResumenFactura>
|
|
100
|
+
</FacturaElectronica>
|
|
@@ -8,44 +8,44 @@ const taxStub: CreateDocumentInput['document']['orderLines'][0]['tax'] = {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
const orderLines: CreateDocumentInput['document']['orderLines'] = [{
|
|
11
|
-
code: '
|
|
11
|
+
code: '9799000000000',
|
|
12
12
|
quantity: 1,
|
|
13
|
-
measureUnit: '
|
|
13
|
+
measureUnit: 'Sp',
|
|
14
14
|
detail: 'detalle',
|
|
15
15
|
unitaryPrice: 10,
|
|
16
16
|
tax: taxStub
|
|
17
17
|
}]
|
|
18
18
|
|
|
19
19
|
const receiverStub: CreateDocumentInput['document']['emitter'] = {
|
|
20
|
-
fullName: '
|
|
21
|
-
commercialName: '
|
|
22
|
-
activityCode: '
|
|
20
|
+
fullName: 'Roy',
|
|
21
|
+
commercialName: 'Roy Arrieta Soto',
|
|
22
|
+
activityCode: '526005',
|
|
23
23
|
identifier: {
|
|
24
24
|
type: '01',
|
|
25
|
-
id: '
|
|
25
|
+
id: '204500331'
|
|
26
26
|
},
|
|
27
27
|
location: {
|
|
28
28
|
province: '2',
|
|
29
29
|
canton: '06',
|
|
30
30
|
district: '04',
|
|
31
|
-
neighborhood: '
|
|
32
|
-
details: '
|
|
31
|
+
neighborhood: '3',
|
|
32
|
+
details: '500 m oeste Súper Don Jorge, casa mano izquierda'
|
|
33
33
|
},
|
|
34
34
|
phone: {
|
|
35
35
|
countryCode: '506',
|
|
36
|
-
number: '
|
|
36
|
+
number: '87206063'
|
|
37
37
|
},
|
|
38
|
-
email: '
|
|
38
|
+
email: 'sercoe1@hotmail.com',
|
|
39
39
|
fax: {
|
|
40
40
|
countryCode: '506',
|
|
41
|
-
number: '
|
|
41
|
+
number: '87206063'
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
const emitterStub: CreateDocumentInput['document']['receiver'] = {
|
|
46
|
-
fullName: '
|
|
47
|
-
commercialName: '
|
|
48
|
-
activityCode: '
|
|
46
|
+
fullName: 'Tek rocks',
|
|
47
|
+
commercialName: 'Ciencia del sabor',
|
|
48
|
+
activityCode: '930903',
|
|
49
49
|
identifier: {
|
|
50
50
|
type: '01',
|
|
51
51
|
id: '206920142'
|
|
@@ -55,16 +55,16 @@ const emitterStub: CreateDocumentInput['document']['receiver'] = {
|
|
|
55
55
|
canton: '06',
|
|
56
56
|
district: '04',
|
|
57
57
|
neighborhood: '06',
|
|
58
|
-
details: '
|
|
58
|
+
details: 'Calle Arrieta'
|
|
59
59
|
},
|
|
60
|
-
email: '
|
|
60
|
+
email: 'cienciadelsabor@gmail.com',
|
|
61
61
|
fax: {
|
|
62
62
|
countryCode: '506',
|
|
63
|
-
number: '
|
|
63
|
+
number: '88122479'
|
|
64
64
|
},
|
|
65
65
|
phone: {
|
|
66
66
|
countryCode: '506',
|
|
67
|
-
number: '
|
|
67
|
+
number: '88122479'
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -78,7 +78,7 @@ export const creditNoteReferenceInfoExample: CreateDocumentInput['document']['re
|
|
|
78
78
|
|
|
79
79
|
export const FEInputExample: DocumentInputWithReceiver = {
|
|
80
80
|
consecutiveIdentifier: '2',
|
|
81
|
-
activityCode: '
|
|
81
|
+
activityCode: '930903',
|
|
82
82
|
providerId: emitterStub.identifier.id,
|
|
83
83
|
documentName: 'FacturaElectronica',
|
|
84
84
|
branch: '1', // '001'
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
-
exports[`Create Document (Invoice) should create document and match to snapshot 1`] = `"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RmFjdHVyYUVsZWN0cm9uaWNhIHhtbG5zPSJodHRwczovL2Nkbi5jb21wcm9iYW50ZXNlbGVjdHJvbmljb3MuZ28uY3IveG1sLXNjaGVtYXMvdjQuNC9mYWN0dXJhRWxlY3Ryb25pY2EiIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KICA8Q2xhdmU+NTA2MDEwNDI0MDAwMjA2OTIwMTQyMDAxMDAwMDEwMTAwMDAwMDAwMDIxMDAwMDAwMDE8L0NsYXZlPgogIDxQcm92ZWVkb3JTaXN0ZW1hcz4yMDY5MjAxNDI8L1Byb3ZlZWRvclNpc3RlbWFzPgogIDxDb2RpZ29BY3RpdmlkYWRFbWlzb3I+
|
|
3
|
+
exports[`Create Document (Invoice) should create document and match to snapshot 1`] = `"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RmFjdHVyYUVsZWN0cm9uaWNhIHhtbG5zPSJodHRwczovL2Nkbi5jb21wcm9iYW50ZXNlbGVjdHJvbmljb3MuZ28uY3IveG1sLXNjaGVtYXMvdjQuNC9mYWN0dXJhRWxlY3Ryb25pY2EiIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KICA8Q2xhdmU+NTA2MDEwNDI0MDAwMjA2OTIwMTQyMDAxMDAwMDEwMTAwMDAwMDAwMDIxMDAwMDAwMDE8L0NsYXZlPgogIDxQcm92ZWVkb3JTaXN0ZW1hcz4yMDY5MjAxNDI8L1Byb3ZlZWRvclNpc3RlbWFzPgogIDxDb2RpZ29BY3RpdmlkYWRFbWlzb3I+OTMwOTAzPC9Db2RpZ29BY3RpdmlkYWRFbWlzb3I+CiAgPENvZGlnb0FjdGl2aWRhZFJlY2VwdG9yPjUyNjAwNTwvQ29kaWdvQWN0aXZpZGFkUmVjZXB0b3I+CiAgPE51bWVyb0NvbnNlY3V0aXZvPjAwMTAwMDAxMDEwMDAwMDAwMDAyPC9OdW1lcm9Db25zZWN1dGl2bz4KICA8RmVjaGFFbWlzaW9uPjIwMjQtMDQtMDFUMDA6MDA6MDAuMDAwWjwvRmVjaGFFbWlzaW9uPgogIDxFbWlzb3I+CiAgICA8Tm9tYnJlPlRlayByb2NrczwvTm9tYnJlPgogICAgPElkZW50aWZpY2FjaW9uPgogICAgICA8VGlwbz4wMTwvVGlwbz4KICAgICAgPE51bWVybz4yMDY5MjAxNDI8L051bWVybz4KICAgIDwvSWRlbnRpZmljYWNpb24+CiAgICA8Tm9tYnJlQ29tZXJjaWFsPkNpZW5jaWEgZGVsIHNhYm9yPC9Ob21icmVDb21lcmNpYWw+CiAgICA8VWJpY2FjaW9uPgogICAgICA8UHJvdmluY2lhPjI8L1Byb3ZpbmNpYT4KICAgICAgPENhbnRvbj4wNjwvQ2FudG9uPgogICAgICA8RGlzdHJpdG8+MDQ8L0Rpc3RyaXRvPgogICAgICA8QmFycmlvPjAwMDA2PC9CYXJyaW8+CiAgICAgIDxPdHJhc1NlbmFzPkNhbGxlIEFycmlldGE8L090cmFzU2VuYXM+CiAgICA8L1ViaWNhY2lvbj4KICAgIDxUZWxlZm9ubz4KICAgICAgPENvZGlnb1BhaXM+NTA2PC9Db2RpZ29QYWlzPgogICAgICA8TnVtVGVsZWZvbm8+ODgxMjI0Nzk8L051bVRlbGVmb25vPgogICAgPC9UZWxlZm9ubz4KICAgIDxDb3JyZW9FbGVjdHJvbmljbz5jaWVuY2lhZGVsc2Fib3JAZ21haWwuY29tPC9Db3JyZW9FbGVjdHJvbmljbz4KICA8L0VtaXNvcj4KICA8UmVjZXB0b3I+CiAgICA8Tm9tYnJlPlJveTwvTm9tYnJlPgogICAgPElkZW50aWZpY2FjaW9uPgogICAgICA8VGlwbz4wMTwvVGlwbz4KICAgICAgPE51bWVybz4yMDQ1MDAzMzE8L051bWVybz4KICAgIDwvSWRlbnRpZmljYWNpb24+CiAgICA8Tm9tYnJlQ29tZXJjaWFsPlJveSBBcnJpZXRhIFNvdG88L05vbWJyZUNvbWVyY2lhbD4KICAgIDxVYmljYWNpb24+CiAgICAgIDxQcm92aW5jaWE+MjwvUHJvdmluY2lhPgogICAgICA8Q2FudG9uPjA2PC9DYW50b24+CiAgICAgIDxEaXN0cml0bz4wNDwvRGlzdHJpdG8+CiAgICAgIDxCYXJyaW8+MDAwMDM8L0JhcnJpbz4KICAgICAgPE90cmFzU2VuYXM+NTAwIG0gb2VzdGUgU8O6cGVyIERvbiBKb3JnZSwgY2FzYSBtYW5vIGl6cXVpZXJkYTwvT3RyYXNTZW5hcz4KICAgIDwvVWJpY2FjaW9uPgogICAgPFRlbGVmb25vPgogICAgICA8Q29kaWdvUGFpcz41MDY8L0NvZGlnb1BhaXM+CiAgICAgIDxOdW1UZWxlZm9ubz44NzIwNjA2MzwvTnVtVGVsZWZvbm8+CiAgICA8L1RlbGVmb25vPgogICAgPENvcnJlb0VsZWN0cm9uaWNvPnNlcmNvZTFAaG90bWFpbC5jb208L0NvcnJlb0VsZWN0cm9uaWNvPgogIDwvUmVjZXB0b3I+CiAgPENvbmRpY2lvblZlbnRhPjAxPC9Db25kaWNpb25WZW50YT4KICA8RGV0YWxsZVNlcnZpY2lvPgogICAgPExpbmVhRGV0YWxsZT4KICAgICAgPE51bWVyb0xpbmVhPjE8L051bWVyb0xpbmVhPgogICAgICA8Q29kaWdvQ0FCWVM+OTc5OTAwMDAwMDAwMDwvQ29kaWdvQ0FCWVM+CiAgICAgIDxDYW50aWRhZD4xPC9DYW50aWRhZD4KICAgICAgPFVuaWRhZE1lZGlkYT5TcDwvVW5pZGFkTWVkaWRhPgogICAgICA8RGV0YWxsZT5kZXRhbGxlPC9EZXRhbGxlPgogICAgICA8UHJlY2lvVW5pdGFyaW8+MTA8L1ByZWNpb1VuaXRhcmlvPgogICAgICA8TW9udG9Ub3RhbD4xMDwvTW9udG9Ub3RhbD4KICAgICAgPFN1YlRvdGFsPjEwPC9TdWJUb3RhbD4KICAgICAgPEJhc2VJbXBvbmlibGU+MTA8L0Jhc2VJbXBvbmlibGU+CiAgICAgIDxJbXB1ZXN0bz4KICAgICAgICA8Q29kaWdvPjAxPC9Db2RpZ28+CiAgICAgICAgPENvZGlnb1RhcmlmYUlWQT4wODwvQ29kaWdvVGFyaWZhSVZBPgogICAgICAgIDxUYXJpZmE+MTM8L1RhcmlmYT4KICAgICAgICA8TW9udG8+MS4zPC9Nb250bz4KICAgICAgPC9JbXB1ZXN0bz4KICAgICAgPEltcHVlc3RvQXN1bWlkb0VtaXNvckZhYnJpY2E+MDwvSW1wdWVzdG9Bc3VtaWRvRW1pc29yRmFicmljYT4KICAgICAgPEltcHVlc3RvTmV0bz4xLjM8L0ltcHVlc3RvTmV0bz4KICAgICAgPE1vbnRvVG90YWxMaW5lYT4xMS4zPC9Nb250b1RvdGFsTGluZWE+CiAgICA8L0xpbmVhRGV0YWxsZT4KICA8L0RldGFsbGVTZXJ2aWNpbz4KICA8UmVzdW1lbkZhY3R1cmE+CiAgICA8Q29kaWdvVGlwb01vbmVkYT4KICAgICAgPENvZGlnb01vbmVkYT5DUkM8L0NvZGlnb01vbmVkYT4KICAgICAgPFRpcG9DYW1iaW8+MTwvVGlwb0NhbWJpbz4KICAgIDwvQ29kaWdvVGlwb01vbmVkYT4KICAgIDxUb3RhbFNlcnZHcmF2YWRvcz4xMDwvVG90YWxTZXJ2R3JhdmFkb3M+CiAgICA8VG90YWxTZXJ2RXhlbnRvcz4wPC9Ub3RhbFNlcnZFeGVudG9zPgogICAgPFRvdGFsTWVyY2FuY2lhc0dyYXZhZGFzPjA8L1RvdGFsTWVyY2FuY2lhc0dyYXZhZGFzPgogICAgPFRvdGFsTWVyY2FuY2lhc0V4ZW50YXM+MDwvVG90YWxNZXJjYW5jaWFzRXhlbnRhcz4KICAgIDxUb3RhbEdyYXZhZG8+MTA8L1RvdGFsR3JhdmFkbz4KICAgIDxUb3RhbEV4ZW50bz4wPC9Ub3RhbEV4ZW50bz4KICAgIDxUb3RhbEV4b25lcmFkbz4wPC9Ub3RhbEV4b25lcmFkbz4KICAgIDxUb3RhbFZlbnRhPjEwPC9Ub3RhbFZlbnRhPgogICAgPFRvdGFsRGVzY3VlbnRvcz4wPC9Ub3RhbERlc2N1ZW50b3M+CiAgICA8VG90YWxWZW50YU5ldGE+MTA8L1RvdGFsVmVudGFOZXRhPgogICAgPFRvdGFsRGVzZ2xvc2VJbXB1ZXN0bz4KICAgICAgPENvZGlnbz4wMTwvQ29kaWdvPgogICAgICA8Q29kaWdvVGFyaWZhSVZBPjA4PC9Db2RpZ29UYXJpZmFJVkE+CiAgICAgIDxUb3RhbE1vbnRvSW1wdWVzdG8+MS4zPC9Ub3RhbE1vbnRvSW1wdWVzdG8+CiAgICA8L1RvdGFsRGVzZ2xvc2VJbXB1ZXN0bz4KICAgIDxUb3RhbEltcHVlc3RvPjEuMzwvVG90YWxJbXB1ZXN0bz4KICAgIDxUb3RhbEltcEFzdW1FbWlzb3JGYWJyaWNhPjA8L1RvdGFsSW1wQXN1bUVtaXNvckZhYnJpY2E+CiAgICA8VG90YWxPdHJvc0Nhcmdvcz4wPC9Ub3RhbE90cm9zQ2FyZ29zPgogICAgPE1lZGlvUGFnbz4KICAgICAgPFRpcG9NZWRpb1BhZ28+MDM8L1RpcG9NZWRpb1BhZ28+CiAgICA8L01lZGlvUGFnbz4KICAgIDxUb3RhbENvbXByb2JhbnRlPjExLjM8L1RvdGFsQ29tcHJvYmFudGU+CiAgPC9SZXN1bWVuRmFjdHVyYT4KPC9GYWN0dXJhRWxlY3Ryb25pY2E+Cg=="`;
|
|
@@ -6,35 +6,50 @@ const parseAtvMoneyFormat = (amount) => {
|
|
|
6
6
|
};
|
|
7
7
|
const mapOrderLinesToAtvFormat = (orderLines) => {
|
|
8
8
|
const LineaDetalle = orderLines.map((orderLine) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
var _a;
|
|
10
|
+
const impuestoMonto = orderLine.tax ? parseAtvMoneyFormat((_a = orderLine.tax.amount) !== null && _a !== void 0 ? _a : 0) : 0;
|
|
11
|
+
return Object.assign(Object.assign({ NumeroLinea: orderLine.lineNumber, CodigoCABYS: orderLine.code,
|
|
12
12
|
// CodigoComercial
|
|
13
|
-
Cantidad: orderLine.quantity,
|
|
14
|
-
UnidadMedida: orderLine.measureUnit,
|
|
13
|
+
Cantidad: orderLine.quantity, UnidadMedida: orderLine.measureUnit,
|
|
15
14
|
// UnidadMedidaComercial
|
|
16
|
-
Detalle: orderLine.detail,
|
|
17
|
-
PrecioUnitario: orderLine.unitaryPrice,
|
|
18
|
-
MontoTotal: orderLine.totalAmount,
|
|
15
|
+
Detalle: orderLine.detail, PrecioUnitario: orderLine.unitaryPrice, MontoTotal: orderLine.totalAmount,
|
|
19
16
|
// Descuento
|
|
20
|
-
SubTotal: orderLine.subTotal,
|
|
21
|
-
BaseImponible: orderLine.subTotal,
|
|
17
|
+
SubTotal: orderLine.subTotal, BaseImponible: orderLine.subTotal }, (orderLine.tax && {
|
|
22
18
|
Impuesto: {
|
|
23
19
|
Codigo: orderLine.tax.code,
|
|
20
|
+
CodigoTarifaIVA: orderLine.tax.rateCode,
|
|
24
21
|
Tarifa: orderLine.tax.rate,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
22
|
+
Monto: impuestoMonto
|
|
23
|
+
// Exoneracion is explicitly excluded here
|
|
24
|
+
}
|
|
25
|
+
})), { ImpuestoAsumidoEmisorFabrica: 0,
|
|
29
26
|
// @ts-expect-error pending-to-fix
|
|
30
|
-
ImpuestoNeto: parseAtvMoneyFormat(orderLine.tax.amount),
|
|
31
|
-
MontoTotalLinea: parseAtvMoneyFormat(orderLine.totalOrderLineAmount)
|
|
32
|
-
};
|
|
27
|
+
ImpuestoNeto: parseAtvMoneyFormat(orderLine.tax.amount), MontoTotalLinea: parseAtvMoneyFormat(orderLine.totalOrderLineAmount) });
|
|
33
28
|
});
|
|
34
29
|
return { LineaDetalle };
|
|
35
30
|
};
|
|
36
31
|
const mapSummaryInvoice = (document) => {
|
|
37
32
|
const summaryInvoice = document.summaryInvoice;
|
|
33
|
+
const orderLines = document.orderLines; // Still need access to order lines for breakdown
|
|
34
|
+
// --- Lógica para TotalDesgloseImpuesto (sin considerar exoneraciones) ---
|
|
35
|
+
const taxBreakdownMap = new Map();
|
|
36
|
+
orderLines.forEach(orderLine => {
|
|
37
|
+
var _a;
|
|
38
|
+
if (((_a = orderLine.tax) === null || _a === void 0 ? void 0 : _a.amount) !== undefined && orderLine.tax.amount !== null && orderLine.tax.amount > 0) {
|
|
39
|
+
const key = `${orderLine.tax.code}-${orderLine.tax.rateCode}`;
|
|
40
|
+
const currentTotal = taxBreakdownMap.get(key) || 0;
|
|
41
|
+
taxBreakdownMap.set(key, currentTotal + orderLine.tax.amount);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const TotalDesgloseImpuesto = Array.from(taxBreakdownMap.entries()).map(([key, totalMonto]) => {
|
|
45
|
+
const [Codigo, CodigoTarifaIVA, Tarifa] = key.split('-');
|
|
46
|
+
return {
|
|
47
|
+
Codigo,
|
|
48
|
+
CodigoTarifaIVA,
|
|
49
|
+
Tarifa,
|
|
50
|
+
TotalMontoImpuesto: parseAtvMoneyFormat(totalMonto)
|
|
51
|
+
};
|
|
52
|
+
});
|
|
38
53
|
return {
|
|
39
54
|
CodigoTipoMoneda: {
|
|
40
55
|
// @ts-expect-error pending-to-fix
|
|
@@ -56,14 +71,10 @@ const mapSummaryInvoice = (document) => {
|
|
|
56
71
|
TotalDescuentos: parseAtvMoneyFormat(summaryInvoice.totalDiscounts),
|
|
57
72
|
// @ts-expect-error pending-to-fix
|
|
58
73
|
TotalVentaNeta: parseAtvMoneyFormat(summaryInvoice.totalNetSale),
|
|
74
|
+
TotalDesgloseImpuesto,
|
|
59
75
|
TotalImpuesto: parseAtvMoneyFormat(summaryInvoice.totalTaxes),
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
Codigo: '01', // Tax code
|
|
63
|
-
CodigoTarifaIVA: '13', // IVA rate code
|
|
64
|
-
MontoImpuesto: parseAtvMoneyFormat(summaryInvoice.totalTaxes)
|
|
65
|
-
}
|
|
66
|
-
},
|
|
76
|
+
TotalImpAsumEmisorFabrica: 0,
|
|
77
|
+
TotalOtrosCargos: 0,
|
|
67
78
|
MedioPago: {
|
|
68
79
|
// @ts-expect-error pending-to-fix
|
|
69
80
|
TipoMedioPago: document.paymentMethod
|
|
@@ -115,9 +126,10 @@ const mapReferenceInformation = (referenceInfo) => {
|
|
|
115
126
|
};
|
|
116
127
|
};
|
|
117
128
|
const mapDocumentToAtvFormat = (docName, document) => {
|
|
129
|
+
var _a, _b;
|
|
118
130
|
const key = docName;
|
|
119
131
|
const doc = Object.assign(Object.assign(Object.assign(Object.assign({ Clave: document.clave, ProveedorSistemas: document.providerId, CodigoActividadEmisor: document.emitter.activityCode.padStart(6, '0') }, (document.receiver && {
|
|
120
|
-
CodigoActividadReceptor: document.receiver.activityCode.padStart(6, '0')
|
|
132
|
+
CodigoActividadReceptor: (_b = (_a = document.receiver) === null || _a === void 0 ? void 0 : _a.activityCode) === null || _b === void 0 ? void 0 : _b.padStart(6, '0')
|
|
121
133
|
})), { NumeroConsecutivo: document.fullConsecutive, FechaEmision: document.issueDate.toISOString(), Emisor: mapPerson(document.emitter) }), (document.receiver && {
|
|
122
134
|
Receptor: mapPerson(document.receiver)
|
|
123
135
|
})), { CondicionVenta: document.conditionSale, PlazoCredito: document.deadlineCredit, DetalleServicio: mapOrderLinesToAtvFormat(document.orderLines), ResumenFactura: mapSummaryInvoice(document), Otros: document.others });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billDocToAtv.js","sourceRoot":"","sources":["../../../../src/ATV/mappers/billDocToAtv.ts"],"names":[],"mappings":";;;AASA,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,EAAE;IAC7C,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,wBAAwB,GAAG,CAAC,UAAuB,EAAmB,EAAE;IAC5E,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAqC,CAAC,SAAS,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"billDocToAtv.js","sourceRoot":"","sources":["../../../../src/ATV/mappers/billDocToAtv.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface Impuesto {
|
|
2
2
|
Codigo: string;
|
|
3
|
-
Tarifa
|
|
3
|
+
Tarifa?: number;
|
|
4
4
|
Monto?: number;
|
|
5
5
|
}
|
|
6
6
|
export interface LineaDetalle {
|
|
@@ -20,13 +20,10 @@ export interface LineaDetalle {
|
|
|
20
20
|
export interface DetalleServicio {
|
|
21
21
|
LineaDetalle: Array<LineaDetalle>;
|
|
22
22
|
}
|
|
23
|
-
export interface DetalleImpuesto {
|
|
24
|
-
Codigo: string;
|
|
25
|
-
CodigoTarifaIVA?: string;
|
|
26
|
-
MontoImpuesto: number;
|
|
27
|
-
}
|
|
28
23
|
export interface TotalDesgloseImpuesto {
|
|
29
|
-
|
|
24
|
+
Codigo: string;
|
|
25
|
+
CodigoTarifaIVA: string;
|
|
26
|
+
TotalMontoImpuesto: number;
|
|
30
27
|
}
|
|
31
28
|
export interface Resumen {
|
|
32
29
|
CodigoTipoMoneda?: {
|
|
@@ -44,11 +41,11 @@ export interface Resumen {
|
|
|
44
41
|
TotalDescuentos?: number;
|
|
45
42
|
TotalVentaNeta?: number;
|
|
46
43
|
TotalImpuesto: number;
|
|
44
|
+
TotalDesgloseImpuesto?: TotalDesgloseImpuesto[];
|
|
47
45
|
MedioPago?: {
|
|
48
46
|
TipoMedioPago: string;
|
|
49
47
|
};
|
|
50
48
|
TotalComprobante: number;
|
|
51
|
-
TotalDesgloseImpuesto?: TotalDesgloseImpuesto;
|
|
52
49
|
}
|
|
53
50
|
export interface Persona {
|
|
54
51
|
Nombre: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@facturacr/atv-sdk",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5-alpha",
|
|
4
4
|
"description": "Librería (SDK) de Javascript/NodeJS para acceder al API de Administración Tributaria Virtual (ATV) del Ministerio de Hacienda.",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -13,6 +13,7 @@ const parseAtvMoneyFormat = (amount: number) => {
|
|
|
13
13
|
|
|
14
14
|
const mapOrderLinesToAtvFormat = (orderLines: OrderLine[]): DetalleServicio => {
|
|
15
15
|
const LineaDetalle = orderLines.map<DetalleServicio['LineaDetalle'][0]>((orderLine) => {
|
|
16
|
+
const impuestoMonto = orderLine.tax ? parseAtvMoneyFormat(orderLine.tax.amount ?? 0) : 0
|
|
16
17
|
return {
|
|
17
18
|
NumeroLinea: orderLine.lineNumber,
|
|
18
19
|
CodigoCABYS: orderLine.code,
|
|
@@ -26,12 +27,15 @@ const mapOrderLinesToAtvFormat = (orderLines: OrderLine[]): DetalleServicio => {
|
|
|
26
27
|
// Descuento
|
|
27
28
|
SubTotal: orderLine.subTotal,
|
|
28
29
|
BaseImponible: orderLine.subTotal,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
...(orderLine.tax && {
|
|
31
|
+
Impuesto: {
|
|
32
|
+
Codigo: orderLine.tax.code,
|
|
33
|
+
CodigoTarifaIVA: orderLine.tax.rateCode,
|
|
34
|
+
Tarifa: orderLine.tax.rate,
|
|
35
|
+
Monto: impuestoMonto
|
|
36
|
+
// Exoneracion is explicitly excluded here
|
|
37
|
+
}
|
|
38
|
+
}),
|
|
35
39
|
ImpuestoAsumidoEmisorFabrica: 0,
|
|
36
40
|
// @ts-expect-error pending-to-fix
|
|
37
41
|
ImpuestoNeto: parseAtvMoneyFormat(orderLine.tax.amount),
|
|
@@ -43,6 +47,28 @@ const mapOrderLinesToAtvFormat = (orderLines: OrderLine[]): DetalleServicio => {
|
|
|
43
47
|
|
|
44
48
|
const mapSummaryInvoice = (document: DomainDocument): Resumen => {
|
|
45
49
|
const summaryInvoice = document.summaryInvoice
|
|
50
|
+
const orderLines = document.orderLines // Still need access to order lines for breakdown
|
|
51
|
+
|
|
52
|
+
// --- Lógica para TotalDesgloseImpuesto (sin considerar exoneraciones) ---
|
|
53
|
+
const taxBreakdownMap = new Map<string, number>()
|
|
54
|
+
|
|
55
|
+
orderLines.forEach(orderLine => {
|
|
56
|
+
if (orderLine.tax?.amount !== undefined && orderLine.tax.amount !== null && orderLine.tax.amount > 0) {
|
|
57
|
+
const key = `${orderLine.tax.code}-${orderLine.tax.rateCode}`
|
|
58
|
+
const currentTotal = taxBreakdownMap.get(key) || 0
|
|
59
|
+
taxBreakdownMap.set(key, currentTotal + orderLine.tax.amount)
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const TotalDesgloseImpuesto = Array.from(taxBreakdownMap.entries()).map(([key, totalMonto]) => {
|
|
64
|
+
const [Codigo, CodigoTarifaIVA, Tarifa] = key.split('-')
|
|
65
|
+
return {
|
|
66
|
+
Codigo,
|
|
67
|
+
CodigoTarifaIVA,
|
|
68
|
+
Tarifa,
|
|
69
|
+
TotalMontoImpuesto: parseAtvMoneyFormat(totalMonto)
|
|
70
|
+
}
|
|
71
|
+
})
|
|
46
72
|
return {
|
|
47
73
|
CodigoTipoMoneda: {
|
|
48
74
|
// @ts-expect-error pending-to-fix
|
|
@@ -64,14 +90,10 @@ const mapSummaryInvoice = (document: DomainDocument): Resumen => {
|
|
|
64
90
|
TotalDescuentos: parseAtvMoneyFormat(summaryInvoice.totalDiscounts),
|
|
65
91
|
// @ts-expect-error pending-to-fix
|
|
66
92
|
TotalVentaNeta: parseAtvMoneyFormat(summaryInvoice.totalNetSale),
|
|
93
|
+
TotalDesgloseImpuesto,
|
|
67
94
|
TotalImpuesto: parseAtvMoneyFormat(summaryInvoice.totalTaxes),
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
Codigo: '01', // Tax code
|
|
71
|
-
CodigoTarifaIVA: '13', // IVA rate code
|
|
72
|
-
MontoImpuesto: parseAtvMoneyFormat(summaryInvoice.totalTaxes)
|
|
73
|
-
}
|
|
74
|
-
},
|
|
95
|
+
TotalImpAsumEmisorFabrica: 0,
|
|
96
|
+
TotalOtrosCargos: 0,
|
|
75
97
|
MedioPago: {
|
|
76
98
|
// @ts-expect-error pending-to-fix
|
|
77
99
|
TipoMedioPago: document.paymentMethod
|
|
@@ -132,7 +154,7 @@ export const mapDocumentToAtvFormat = (docName: string, document: DomainDocument
|
|
|
132
154
|
ProveedorSistemas: document.providerId,
|
|
133
155
|
CodigoActividadEmisor: document.emitter.activityCode.padStart(6, '0'),
|
|
134
156
|
...(document.receiver && { // TODO add && document.name === 'FacturaElectronica'
|
|
135
|
-
CodigoActividadReceptor: document.receiver
|
|
157
|
+
CodigoActividadReceptor: document.receiver?.activityCode?.padStart(6, '0')
|
|
136
158
|
}),
|
|
137
159
|
NumeroConsecutivo: document.fullConsecutive,
|
|
138
160
|
FechaEmision: document.issueDate.toISOString(),
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
export interface Impuesto {
|
|
7
7
|
Codigo: string;
|
|
8
|
-
Tarifa
|
|
8
|
+
Tarifa?: number;
|
|
9
9
|
Monto?: number;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -28,14 +28,11 @@ export interface DetalleServicio {
|
|
|
28
28
|
LineaDetalle: Array<LineaDetalle>;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
export interface DetalleImpuesto {
|
|
32
|
-
Codigo: string; // Representa el tipo "CodigoImpuestoType"
|
|
33
|
-
CodigoTarifaIVA?: string; // Representa el tipo "CodigoTarifaIVAType"
|
|
34
|
-
MontoImpuesto: number; // Representa el tipo "DecimalDineroType"
|
|
35
|
-
}
|
|
36
|
-
|
|
37
31
|
export interface TotalDesgloseImpuesto {
|
|
38
|
-
|
|
32
|
+
Codigo: string;
|
|
33
|
+
CodigoTarifaIVA: string;
|
|
34
|
+
// ... other properties
|
|
35
|
+
TotalMontoImpuesto: number;
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
export interface Resumen {
|
|
@@ -55,11 +52,11 @@ export interface Resumen {
|
|
|
55
52
|
TotalDescuentos?: number;
|
|
56
53
|
TotalVentaNeta?: number;
|
|
57
54
|
TotalImpuesto: number;
|
|
55
|
+
TotalDesgloseImpuesto?: TotalDesgloseImpuesto[];
|
|
58
56
|
MedioPago?: {
|
|
59
57
|
TipoMedioPago: string;
|
|
60
58
|
};
|
|
61
59
|
TotalComprobante: number;
|
|
62
|
-
TotalDesgloseImpuesto?: TotalDesgloseImpuesto; // Agregado aquí
|
|
63
60
|
}
|
|
64
61
|
|
|
65
62
|
export interface Persona {
|