@ramiidv/arca-agro 0.2.0 → 0.3.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.
- package/README.md +211 -179
- package/dist/arca-agro.d.ts +25 -140
- package/dist/arca-agro.d.ts.map +1 -1
- package/dist/arca-agro.js +69 -264
- package/dist/arca-agro.js.map +1 -1
- package/dist/constants.d.ts +34 -8
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +34 -11
- package/dist/constants.js.map +1 -1
- package/dist/context.d.ts +13 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +2 -0
- package/dist/context.js.map +1 -0
- package/dist/cpe-client.d.ts +95 -51
- package/dist/cpe-client.d.ts.map +1 -1
- package/dist/cpe-client.js +236 -228
- package/dist/cpe-client.js.map +1 -1
- package/dist/cpe-schemas.d.ts +76 -0
- package/dist/cpe-schemas.d.ts.map +1 -0
- package/dist/cpe-schemas.js +512 -0
- package/dist/cpe-schemas.js.map +1 -0
- package/dist/cpe-types.d.ts +599 -0
- package/dist/cpe-types.d.ts.map +1 -0
- package/dist/cpe-types.js +2 -0
- package/dist/cpe-types.js.map +1 -0
- package/dist/errors.d.ts +38 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +53 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -13
- package/dist/index.js.map +1 -1
- package/dist/lpg-client.d.ts +64 -43
- package/dist/lpg-client.d.ts.map +1 -1
- package/dist/lpg-client.js +215 -175
- package/dist/lpg-client.js.map +1 -1
- package/dist/lpg-schemas.d.ts +50 -0
- package/dist/lpg-schemas.d.ts.map +1 -0
- package/dist/lpg-schemas.js +478 -0
- package/dist/lpg-schemas.js.map +1 -0
- package/dist/lpg-types.d.ts +470 -0
- package/dist/lpg-types.d.ts.map +1 -0
- package/dist/lpg-types.js +2 -0
- package/dist/lpg-types.js.map +1 -0
- package/dist/schema.d.ts +90 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +301 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +33 -455
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +22 -43
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +31 -134
- package/dist/validation.js.map +1 -1
- package/llms.txt +78 -159
- package/package.json +6 -7
- package/dist/ctg-client.d.ts +0 -56
- package/dist/ctg-client.d.ts.map +0 -1
- package/dist/ctg-client.js +0 -214
- package/dist/ctg-client.js.map +0 -1
package/dist/validation.js
CHANGED
|
@@ -1,145 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
function
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
errors.push({
|
|
13
|
-
field: fieldName,
|
|
14
|
-
message: `${fieldName} debe tener exactamente 11 digitos numericos`,
|
|
15
|
-
value,
|
|
16
|
-
});
|
|
1
|
+
import { encodeRequest } from './schema.js';
|
|
2
|
+
import { AUTORIZAR_AUTOMOTOR, AUTORIZAR_FERROVIARIA } from './cpe-schemas.js';
|
|
3
|
+
import { AJUSTE_UNIFICADO, LIQUIDACION_AUTORIZAR } from './lpg-schemas.js';
|
|
4
|
+
/** @internal `origen` debe tener `operador` o `productor`. */
|
|
5
|
+
export function requireOrigen(input, errors) {
|
|
6
|
+
const origen = input['origen'];
|
|
7
|
+
if (origen !== null && typeof origen === 'object') {
|
|
8
|
+
const o = origen;
|
|
9
|
+
if (o['operador'] == null && o['productor'] == null) {
|
|
10
|
+
errors.push({ field: 'origen', message: 'origen: se debe informar operador o productor', value: origen });
|
|
11
|
+
}
|
|
17
12
|
}
|
|
18
13
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
if (typeof value !== 'number' || value <= 0) {
|
|
25
|
-
errors.push({
|
|
26
|
-
field: fieldName,
|
|
27
|
-
message: `${fieldName} debe ser un numero mayor a 0`,
|
|
28
|
-
value,
|
|
29
|
-
});
|
|
14
|
+
/** @internal Las consultas de una CPE necesitan `cartaPorte` o `nroCTG`. */
|
|
15
|
+
export function requireCartaPorteOCtg(input, errors) {
|
|
16
|
+
if (input['cartaPorte'] == null && input['nroCTG'] == null) {
|
|
17
|
+
errors.push({ field: 'cartaPorte', message: 'se debe informar cartaPorte o nroCTG' });
|
|
30
18
|
}
|
|
31
19
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
if (typeof value !== 'number' || value < 0) {
|
|
38
|
-
errors.push({
|
|
39
|
-
field: fieldName,
|
|
40
|
-
message: `${fieldName} debe ser un numero mayor o igual a 0`,
|
|
41
|
-
value,
|
|
42
|
-
});
|
|
20
|
+
/** @internal El ajuste unificado necesita `ajusteCredito` y/o `ajusteDebito`. */
|
|
21
|
+
export function requireAjuste(input, errors) {
|
|
22
|
+
if (input['ajusteCredito'] == null && input['ajusteDebito'] == null) {
|
|
23
|
+
errors.push({ field: 'ajusteCredito', message: 'se debe informar ajusteCredito y/o ajusteDebito' });
|
|
43
24
|
}
|
|
44
25
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
26
|
+
/** Valida una solicitud de `autorizarCPEAutomotor`. @throws ArcaValidationError */
|
|
27
|
+
export function validateAutorizarCPEAutomotor(params) {
|
|
28
|
+
encodeRequest(params, AUTORIZAR_AUTOMOTOR, 'autorizarCPEAutomotor', requireOrigen);
|
|
49
29
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Valida los datos de una Carta de Porte Electronica antes de enviar al servicio WSCPE.
|
|
55
|
-
*
|
|
56
|
-
* Campos validados:
|
|
57
|
-
* - cuitTitularCartaPorte: 11 digitos
|
|
58
|
-
* - sucursal: > 0
|
|
59
|
-
* - nroOrden: >= 0
|
|
60
|
-
* - codGrano: > 0
|
|
61
|
-
* - pesoNeto: > 0
|
|
62
|
-
* - cuitDestino: 11 digitos
|
|
63
|
-
* - codLocalidadDestino: > 0
|
|
64
|
-
* - cuitTransportista: 11 digitos
|
|
65
|
-
*
|
|
66
|
-
* @throws ArcaValidationError con detalles de todos los campos invalidos.
|
|
67
|
-
*/
|
|
68
|
-
export function validateCPE(cpe) {
|
|
69
|
-
const errors = [];
|
|
70
|
-
validateCuitField(cpe.cuitTitularCartaPorte, 'cuitTitularCartaPorte', errors);
|
|
71
|
-
requirePositive(cpe.sucursal, 'sucursal', errors);
|
|
72
|
-
requireNonNegative(cpe.nroOrden, 'nroOrden', errors);
|
|
73
|
-
requirePositive(cpe.codGrano, 'codGrano', errors);
|
|
74
|
-
requirePositive(cpe.pesoNeto, 'pesoNeto', errors);
|
|
75
|
-
validateCuitField(cpe.cuitDestino, 'cuitDestino', errors);
|
|
76
|
-
requirePositive(cpe.codLocalidadDestino, 'codLocalidadDestino', errors);
|
|
77
|
-
validateCuitField(cpe.cuitTransportista, 'cuitTransportista', errors);
|
|
78
|
-
throwIfErrors(errors, 'CartaPorteAutomotor');
|
|
30
|
+
/** Valida una solicitud de `autorizarCPEFerroviaria`. @throws ArcaValidationError */
|
|
31
|
+
export function validateAutorizarCPEFerroviaria(params) {
|
|
32
|
+
encodeRequest(params, AUTORIZAR_FERROVIARIA, 'autorizarCPEFerroviaria');
|
|
79
33
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Valida los datos de una solicitud de CTG antes de enviar al servicio WSCTG.
|
|
85
|
-
*
|
|
86
|
-
* Campos validados:
|
|
87
|
-
* - nroCartaPorte: > 0
|
|
88
|
-
* - codEspecie: > 0
|
|
89
|
-
* - pesoNeto: > 0
|
|
90
|
-
* - cuitDestino: 11 digitos
|
|
91
|
-
* - cuitDestinatario: 11 digitos
|
|
92
|
-
* - codLocalidadOrigen: > 0
|
|
93
|
-
* - codLocalidadDestino: > 0
|
|
94
|
-
* - codCosecha: > 0
|
|
95
|
-
*
|
|
96
|
-
* @throws ArcaValidationError con detalles de todos los campos invalidos.
|
|
97
|
-
*/
|
|
98
|
-
export function validateCTG(ctg) {
|
|
99
|
-
const errors = [];
|
|
100
|
-
requirePositive(ctg.nroCartaPorte, 'nroCartaPorte', errors);
|
|
101
|
-
requirePositive(ctg.codEspecie, 'codEspecie', errors);
|
|
102
|
-
requirePositive(ctg.pesoNeto, 'pesoNeto', errors);
|
|
103
|
-
validateCuitField(ctg.cuitDestino, 'cuitDestino', errors);
|
|
104
|
-
validateCuitField(ctg.cuitDestinatario, 'cuitDestinatario', errors);
|
|
105
|
-
requirePositive(ctg.codLocalidadOrigen, 'codLocalidadOrigen', errors);
|
|
106
|
-
requirePositive(ctg.codLocalidadDestino, 'codLocalidadDestino', errors);
|
|
107
|
-
requirePositive(ctg.codCosecha, 'codCosecha', errors);
|
|
108
|
-
if (ctg.cuitTransportista != null) {
|
|
109
|
-
validateCuitField(ctg.cuitTransportista, 'cuitTransportista', errors);
|
|
110
|
-
}
|
|
111
|
-
throwIfErrors(errors, 'SolicitudCTG');
|
|
34
|
+
/** Valida una solicitud de `liquidacionAutorizar`. @throws ArcaValidationError */
|
|
35
|
+
export function validateLiquidacion(params) {
|
|
36
|
+
encodeRequest(params, LIQUIDACION_AUTORIZAR, 'liquidacionAutorizar');
|
|
112
37
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Valida los datos de una liquidacion primaria de granos antes de enviar al servicio WSLPG.
|
|
118
|
-
*
|
|
119
|
-
* Campos validados:
|
|
120
|
-
* - cuitComprador: 11 digitos
|
|
121
|
-
* - cuitVendedor: 11 digitos
|
|
122
|
-
* - codGrano: > 0
|
|
123
|
-
* - pesoNeto: > 0
|
|
124
|
-
* - precioRefTn: >= 0 (si presente)
|
|
125
|
-
*
|
|
126
|
-
* @throws ArcaValidationError con detalles de todos los campos invalidos.
|
|
127
|
-
*/
|
|
128
|
-
export function validateLiquidacion(liq) {
|
|
129
|
-
const errors = [];
|
|
130
|
-
validateCuitField(liq.cuitComprador, 'cuitComprador', errors);
|
|
131
|
-
validateCuitField(liq.cuitVendedor, 'cuitVendedor', errors);
|
|
132
|
-
requirePositive(liq.codGrano, 'codGrano', errors);
|
|
133
|
-
requirePositive(liq.pesoNeto, 'pesoNeto', errors);
|
|
134
|
-
if (liq.precioRefTn != null) {
|
|
135
|
-
requireNonNegative(liq.precioRefTn, 'precioRefTn', errors);
|
|
136
|
-
}
|
|
137
|
-
if (liq.cuitCorredorVendedor != null) {
|
|
138
|
-
validateCuitField(liq.cuitCorredorVendedor, 'cuitCorredorVendedor', errors);
|
|
139
|
-
}
|
|
140
|
-
if (liq.cuitCorredorComprador != null) {
|
|
141
|
-
validateCuitField(liq.cuitCorredorComprador, 'cuitCorredorComprador', errors);
|
|
142
|
-
}
|
|
143
|
-
throwIfErrors(errors, 'Liquidacion');
|
|
38
|
+
/** Valida una solicitud de `liquidacionAjustarUnificado`. @throws ArcaValidationError */
|
|
39
|
+
export function validateAjusteUnificado(params) {
|
|
40
|
+
encodeRequest(params, AJUSTE_UNIFICADO, 'liquidacionAjustarUnificado', requireAjuste);
|
|
144
41
|
}
|
|
145
42
|
//# sourceMappingURL=validation.js.map
|
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAI3E,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,KAA8B,EAAE,MAA+B;IAC3F,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,MAAiC,CAAC;QAC5C,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,+CAA+C,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAC,KAA8B,EAAE,MAA+B;IACnG,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,KAA8B,EAAE,MAA+B;IAC3F,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,6BAA6B,CAAC,MAAmC;IAC/E,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,aAAa,CAAC,CAAC;AACrF,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,+BAA+B,CAAC,MAAqC;IACnF,aAAa,CAAC,MAAM,EAAE,qBAAqB,EAAE,yBAAyB,CAAC,CAAC;AAC1E,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,MAAkC;IACpE,aAAa,CAAC,MAAM,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AACvE,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CAAC,MAA6B;IACnE,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,aAAa,CAAC,CAAC;AACxF,CAAC"}
|
package/llms.txt
CHANGED
|
@@ -1,187 +1,106 @@
|
|
|
1
|
-
# @ramiidv/arca-agro - Technical Reference
|
|
1
|
+
# @ramiidv/arca-agro - Technical Reference (v0.3.0)
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
TypeScript SDK for ARCA (Argentina's tax authority, formerly AFIP) agricultural web services
|
|
5
|
+
TypeScript SDK for ARCA (Argentina's tax authority, formerly AFIP) agricultural SOAP web services, with automatic WSAA authentication (via @ramiidv/arca-common ^0.4.0).
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
7
|
+
- WSCPE - Carta de Porte Electrónica (grain bill of lading; road "automotor" and rail "ferroviaria")
|
|
8
|
+
- WSLPG - Liquidación Primaria de Granos (primary grain settlement) and certificación primaria (cg*)
|
|
9
|
+
|
|
10
|
+
WSCTG (Código de Trazabilidad de Granos) is NOT included: it was repealed on 2021-11-01 (RG 5017/2021) and its endpoints return 404. The CTG number is now returned by WSCPE (`cabecera.nroCTG`).
|
|
10
11
|
|
|
11
12
|
## Architecture
|
|
12
13
|
|
|
13
14
|
```
|
|
14
|
-
ArcaAgro
|
|
15
|
-
├── .cpe
|
|
16
|
-
|
|
17
|
-
└── .lpg → LpgClient (WSLPG) → WSAA service: "wslpg"
|
|
15
|
+
ArcaAgro
|
|
16
|
+
├── .cpe → CpeClient (WSCPE) → WSAA service "wscpe"
|
|
17
|
+
└── .lpg → LpgClient (WSLPG) → WSAA service "wslpg"
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
## WSAA Service Identifiers
|
|
23
|
-
|
|
24
|
-
| Service | WSAA ID |
|
|
25
|
-
|---------|---------|
|
|
26
|
-
| WSCPE | `wscpe` |
|
|
27
|
-
| WSCTG | `wsctg` |
|
|
28
|
-
| WSLPG | `wslpg` |
|
|
29
|
-
|
|
30
|
-
## Endpoints
|
|
31
|
-
|
|
32
|
-
### WSCPE
|
|
33
|
-
- Testing: `https://fwshomo.afip.gov.ar/wscpe/services/soap`
|
|
34
|
-
- Production: `https://serviciosjava.afip.gob.ar/wscpe/services/soap`
|
|
35
|
-
|
|
36
|
-
### WSCTG
|
|
37
|
-
- Testing: `https://fwshomo.afip.gov.ar/wsctg/services/CTGService_v4.0`
|
|
38
|
-
- Production: `https://serviciosjava.afip.gob.ar/wsctg/services/CTGService_v4.0`
|
|
39
|
-
|
|
40
|
-
### WSLPG
|
|
41
|
-
- Testing: `https://fwshomo.afip.gov.ar/wslpg/LpgService`
|
|
42
|
-
- Production: `https://serviciosjava.afip.gob.ar/wslpg/LpgService`
|
|
43
|
-
|
|
44
|
-
## API Methods
|
|
45
|
-
|
|
46
|
-
### agro.cpe.* (WSCPE)
|
|
47
|
-
|
|
48
|
-
| Method | Description |
|
|
49
|
-
|--------|-------------|
|
|
50
|
-
| `autorizarCPEAutomotor(cpe)` | Authorize electronic bill of lading for road transport |
|
|
51
|
-
| `confirmadoArriboCPE(params)` | Confirm arrival at destination |
|
|
52
|
-
| `rechazoCPE(params)` | Reject a CPE |
|
|
53
|
-
| `anularCPE(params)` | Cancel a CPE |
|
|
54
|
-
| `editarCPE(params)` | Edit fields of an authorized CPE |
|
|
55
|
-
| `informarContingencia(params)` | Report a contingency on a CPE |
|
|
56
|
-
| `consultarCPE(params)` | Query CPEs by search criteria |
|
|
57
|
-
| `consultarCPEPorDestino(params)` | Query CPEs by destination |
|
|
58
|
-
| `consultarUltNroOrden(sucursal)` | Get last order number for a branch |
|
|
59
|
-
| `siguienteNroOrden(sucursal)` | Get next order number (last + 1) |
|
|
60
|
-
| `consultarConstanciaCPEPDF(nroCTG)` | Get CPE certificate as base64 PDF |
|
|
61
|
-
| `dummy()` | Check WSCPE server status |
|
|
62
|
-
|
|
63
|
-
### agro.ctg.* (WSCTG)
|
|
64
|
-
|
|
65
|
-
| Method | Description |
|
|
66
|
-
|--------|-------------|
|
|
67
|
-
| `solicitarCTGInicial(solicitud)` | Request initial CTG for grain transport |
|
|
68
|
-
| `confirmarArribo(params)` | Confirm CTG arrival at destination |
|
|
69
|
-
| `rechazarCTG(params)` | Reject a CTG |
|
|
70
|
-
| `anularCTG(params)` | Cancel a CTG |
|
|
71
|
-
| `consultarCTG(params)` | Query CTGs by search criteria |
|
|
72
|
-
| `consultarCTGExcel(params)` | Query CTGs and get Excel export (base64) |
|
|
73
|
-
| `consultarConstanciaCTGPDF(nroCTG)` | Get CTG certificate as base64 PDF |
|
|
74
|
-
| `obtenerCTGActivos()` | Get active (pending) CTGs |
|
|
75
|
-
| `dummy()` | Check WSCTG server status |
|
|
76
|
-
|
|
77
|
-
### agro.lpg.* (WSLPG)
|
|
78
|
-
|
|
79
|
-
| Method | Description |
|
|
80
|
-
|--------|-------------|
|
|
81
|
-
| `liquidacionAutorizar(liquidacion)` | Authorize a primary grain settlement |
|
|
82
|
-
| `liquidacionConsultar(params)` | Query authorized settlements |
|
|
83
|
-
| `liquidacionAnular(ptoEmision, nroOrden)` | Cancel a settlement |
|
|
84
|
-
| `liquidacionAjustarUnificado(params)` | Unified adjustment (debit/credit) |
|
|
85
|
-
| `certificacionAutorizar(certificacion)` | Authorize a grain certification |
|
|
86
|
-
| `certificacionAnular(tipo, nro)` | Cancel a certification |
|
|
87
|
-
| `consultarParametros(tipo, params?)` | Query WSLPG parameters (grain types, grades, ports, etc.) |
|
|
88
|
-
| `dummy()` | Check WSLPG server status |
|
|
89
|
-
|
|
90
|
-
### Global
|
|
91
|
-
|
|
92
|
-
| Method | Description |
|
|
93
|
-
|--------|-------------|
|
|
94
|
-
| `serverStatus()` | Check all 3 services at once |
|
|
95
|
-
| `clearAuthCache()` | Invalidate all cached WSAA tokens |
|
|
96
|
-
| `on(event, handler)` | Subscribe to SDK events |
|
|
97
|
-
| `off(event, handler)` | Unsubscribe from events |
|
|
98
|
-
|
|
99
|
-
## Key Types
|
|
100
|
-
|
|
101
|
-
### Configuration
|
|
102
|
-
|
|
103
|
-
```ts
|
|
104
|
-
interface ArcaAgroConfig {
|
|
105
|
-
cuit: number;
|
|
106
|
-
cert: string; // PEM certificate
|
|
107
|
-
key: string; // PEM private key
|
|
108
|
-
production?: boolean; // default: false
|
|
109
|
-
tokenTTLMinutes?: number; // default: 720
|
|
110
|
-
requestTimeoutMs?: number; // default: 30000
|
|
111
|
-
retries?: number; // default: 1
|
|
112
|
-
retryDelayMs?: number; // default: 1000
|
|
113
|
-
onEvent?: (event: ArcaEvent) => void;
|
|
114
|
-
}
|
|
115
|
-
```
|
|
20
|
+
Sub-clients are only obtained from `ArcaAgro` (their classes are exported as types). Every public method takes an optional last argument `opts?: { signal?: AbortSignal }`.
|
|
116
21
|
|
|
117
|
-
|
|
22
|
+
## Endpoints and namespaces
|
|
118
23
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
- `RechazoAnulacionCPEParams` - Rejection/cancellation input
|
|
124
|
-
- `EditarCPEParams` - Edit input
|
|
125
|
-
- `ContingenciaCPEParams` - Contingency report input
|
|
24
|
+
| Service | Testing | Production | Namespace |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| WSCPE | https://cpea-ws-qaext.afip.gob.ar/wscpe/services/soap | https://cpea-ws.afip.gob.ar/wscpe/services/soap | https://serviciosjava.afip.gob.ar/wscpe/ |
|
|
27
|
+
| WSLPG | https://fwshomo.afip.gov.ar/wslpg/LpgService | https://serviciosjava.afip.gob.ar/wslpg/LpgService | http://serviciosjava.afip.gob.ar/wslpg/ (http!) |
|
|
126
28
|
|
|
127
|
-
|
|
29
|
+
SOAP details (from the official WSDLs):
|
|
30
|
+
- WSCPE: request element `<Op>Req` (capitalized operation, e.g. `AutorizarCPEAutomotorReq`), response `<Op>Resp` with a `respuesta` child; SOAPAction = namespace + operation; auth `{token, sign, cuitRepresentada}`; business errors in `respuesta.errores.error[]{codigo,descripcion}`.
|
|
31
|
+
- WSLPG: request/response elements per WSDL (e.g. `liquidacionReq`/`liquidacionResp` → `liqReturn`); SOAPAction = namespace + operation; auth `{token, sign, cuit}`; errors in `errores.error[]` and `erroresFormato.error[]`; info in `eventos.evento[]`.
|
|
32
|
+
- `dummy` (both): empty SOAP Body, no auth.
|
|
128
33
|
|
|
129
|
-
|
|
130
|
-
- `CTGResult` - CTG operation result (nroCTG, estado, vigencia, errores, raw)
|
|
131
|
-
- `ConsultaCTGParams` - CTG query parameters
|
|
132
|
-
- `ConfirmarArriboCTGParams` - Arrival confirmation input
|
|
133
|
-
- `RechazoCTGParams` - Rejection input
|
|
134
|
-
- `AnulacionCTGParams` - Cancellation input
|
|
135
|
-
- `CTGActivosResult` - Active CTGs result
|
|
34
|
+
## Configuration (ArcaAgroConfig extends ArcaBaseConfig)
|
|
136
35
|
|
|
137
|
-
|
|
36
|
+
cuit (number|string, validated with check digit), cert, key, production=false, timeout=30000, retries=1 (queries only), retryDelayMs=1000, tokenTTLMinutes=720, ticketStorage, clockOffsetMs, autoClockSkew, loginErrorCooldownMs, fetch, legacyTls, onEvent, endpoints?: { cpe?, lpg?, wsaa? }.
|
|
138
37
|
|
|
139
|
-
|
|
140
|
-
- `LiquidacionResult` - Settlement result (codOperacion, nroOrden, totalPagar, errores, raw)
|
|
141
|
-
- `ConsultaLiquidacionParams` - Settlement query parameters
|
|
142
|
-
- `AjusteUnificadoParams` - Unified adjustment input
|
|
143
|
-
- `Certificacion` - Certification input
|
|
144
|
-
- `CertificacionResult` - Certification result
|
|
38
|
+
## ArcaAgro
|
|
145
39
|
|
|
146
|
-
|
|
40
|
+
- `cpe: CpeClient`, `lpg: LpgClient`
|
|
41
|
+
- `serverStatus(opts?)` → `{ cpe: AgroServiceStatus, lpg: AgroServiceStatus }` where `AgroServiceStatus = { ok: true, status: ServerStatus } | { ok: false, error: Error }` (Promise.allSettled)
|
|
42
|
+
- `clearAuthCache(): Promise<void>`
|
|
43
|
+
- `on(type, handler)`, `off(type, handler)`
|
|
147
44
|
|
|
148
|
-
|
|
45
|
+
## CpeClient (agro.cpe)
|
|
149
46
|
|
|
150
|
-
|
|
151
|
-
- `ArcaSoapError` - HTTP/SOAP transport errors (includes `statusCode`)
|
|
152
|
-
- `ArcaServiceError` - Business logic errors from ARCA (includes `errors[]` with code + msg)
|
|
153
|
-
- `ArcaValidationError` - Input validation errors
|
|
47
|
+
Constants: `TIPO_CPE = { AUTOMOTOR: 74, FERROVIARIA: 75, AUTOMOTOR_FLETE_CORTO: 274 }`, `ESTADOS_CPE` (AC, AN, BR, CF, CN, CO, DE, RE, PA, AP, DD, PE, IN, PO).
|
|
154
48
|
|
|
155
|
-
|
|
49
|
+
Requests mirror the XSD (`solicitud` content). `CartaPorteId = { tipoCPE, sucursal, nroOrden }`.
|
|
156
50
|
|
|
157
|
-
|
|
51
|
+
Emissions (kind 'emision', never retried):
|
|
52
|
+
- `autorizarCPEAutomotor(AutorizarCPEAutomotorParams)` → `CPEAutomotorDetalle` (requires `cabecera.nroCTG`)
|
|
53
|
+
- params: `{ cabecera: {tipoCP, cuitSolicitante, sucursal, nroOrden}, origen: {operador?|productor?}, correspondeRetiroProductor, esSolicitanteCampo, retiroProductor?, intervinientes?, datosCarga: {codGrano, cosecha, semilla?, pesoBruto, pesoTara}, destino: {cuit, esDestinoCampo, codProvincia, codLocalidad, planta?}, destinatario: {cuit}, transporte: {cuitTransportista, dominio[], fechaHoraPartida, kmRecorrer, codigoTurno?, cuitChofer, tarifa?, cuitPagadorFlete, cuitIntermediarioFlete?, mercaderiaFumigada}, observaciones? }`
|
|
54
|
+
- `autorizarCPEFerroviaria(AutorizarCPEFerroviariaParams)` → `CPEFerroviariaDetalle`
|
|
55
|
+
- returning `CPEResultado { cabecera?, pdf?, metadata? }`: `editarCPEAutomotor`, `editarCPEConfirmadaAutomotor`, `confirmarArriboCPE`, `confirmacionDefinitivaCPEAutomotor`, `descargadoDestinoCPE`, `rechazoCPE`, `anularCPE`, `nuevoDestinoDestinatarioCPEAutomotor`, `regresoOrigenCPEAutomotor`, `desvioCPEAutomotor`, `informarContingencia`, `cerrarContingenciaCPE`, `editarCPEFerroviaria`, `editarCPEConfirmadaFerroviaria`, `confirmacionDefinitivaCPEFerroviaria`, `nuevoDestinoDestinatarioCPEFerroviaria`, `regresoOrigenCPEFerroviaria`, `desvioCPEFerroviaria`
|
|
158
56
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
57
|
+
Queries:
|
|
58
|
+
- `consultarCPEAutomotor({cuitSolicitante?, cartaPorte? | nroCTG?})` → `CPEAutomotorDetalle`
|
|
59
|
+
- `consultarCPEFerroviaria(...)` → `CPEFerroviariaDetalle`
|
|
60
|
+
- `consultaCPEFerroviariaPorNroOperativo(nroOperativo)` → `OperativoFerroviarioCPE`
|
|
61
|
+
- `consultarCPEPorDestino({planta, fechaPartidaDesde, fechaPartidaHasta, tipoCartaPorte?})` → `CPEResumen[]`
|
|
62
|
+
- `consultarCPEPPendientesDeResolucion({perfil: 'S'|'D', planta?})` → `CPEResumen[]`
|
|
63
|
+
- `consultarUltNroOrden(sucursal, tipoCPE)` → number (throws if missing)
|
|
64
|
+
- `siguienteNroOrden(sucursal, tipoCPE)` → number (NOT atomic: concurrent callers get the same number)
|
|
65
|
+
- `consultarProvincias()`, `consultarLocalidadesPorProvincia(codProvincia)`, `consultarTiposGrano()`, `consultarCategoriasSemillas()` → `CodigoDescripcion[]` (`codigo` is string)
|
|
66
|
+
- `consultarPlantas(cuit)` → `PlantaCPE[]`; `consultarLocalidadesProductor(cuit)` → `LocalidadProductorCPE[]`; `consultarVariedadesSemillas(codGrano?)` → `VariedadSemillaCPE[]`
|
|
67
|
+
- `dummy()` → ServerStatus
|
|
162
68
|
|
|
163
|
-
|
|
164
|
-
const ctg = new CtgClient(production, { ... });
|
|
165
|
-
const lpg = new LpgClient(production, { ... });
|
|
166
|
-
```
|
|
69
|
+
Not supported: derivados granarios (DG, types 284-287), ductos, consultarRenspa, consultarDomiciliosPorCUIT, DG parametrics.
|
|
167
70
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
71
|
+
## LpgClient (agro.lpg)
|
|
72
|
+
|
|
73
|
+
Emissions:
|
|
74
|
+
- `liquidacionAutorizar({ liquidacion: LiquidacionLpg, deducciones?, retenciones?, percepciones? })` → `{ autorizacion: LiquidacionAutorizadaLpg (coe: string), eventos }`
|
|
75
|
+
- `liquidacionAnular(coe)` → `{ coe?, resultado, pdf?, eventos }`
|
|
76
|
+
- `liquidacionAjustarUnificado({ ajusteBase, ajusteCredito?, ajusteDebito? })` → `{ ajusteUnificado (coe: string), eventos }`
|
|
77
|
+
- `cgAutorizar(CgAutorizarParams)` → `{ autorizacion (coe: string), eventos }`
|
|
78
|
+
- `cgSolicitarAnulacion(coe, {pdf?})`, `cgConfirmarAnulacion(coe, {pdf?})` → `{ estadoCertificado, pdf?, eventos }`
|
|
79
|
+
|
|
80
|
+
Queries:
|
|
81
|
+
- `liquidacionXCoeConsultar(coe, {pdf?})`, `liquidacionXNroOrdenConsultar(ptoEmision, nroOrden)` → `{ liquidacion?, autorizacion, pdf?, eventos }`
|
|
82
|
+
- `liquidacionUltimoNroOrdenConsultar(ptoEmision)`, `cgConsultarUltimoNroOrden(ptoEmision)` → number
|
|
83
|
+
- parametrics → `CodigoDescripcion[]`: `provinciasConsultar`, `localidadXProvinciaConsultar(codProvincia)`, `tipoOperacionXActividadConsultar(nroActLiquida)`, `puertoConsultar`, `tipoActividadConsultar`, `tipoActividadRepresentadoConsultar`, `tipoCertificadoDepositoConsultar`, `tipoRetencionConsultar`, `tipoDeduccionConsultar`, `tipoGranoConsultar`, `codigoGradoReferenciaConsultar`, `campaniasConsultar`; `codigoGradoEntregadoXTipoGranoConsultar(codGrano)` → `GradoEntregadoLpg[]`
|
|
84
|
+
- `dummy()`
|
|
85
|
+
|
|
86
|
+
`LiquidacionLpg` (LpgLiquidacionBaseType, XSD order): ptoEmision, nroOrden, numeroContrato?, cuitComprador, nroActComprador, nroIngBrutoComprador, codTipoOperacion, esLiquidacionPropia?, esCanje?, codPuerto, desPuertoLocalidad?, codGrano, pesoNetoSinCertificado?, codLocalidadProcedenciaSinCertificado?, codProvProcedenciaSinCertificado?, cuitVendedor, nroIngBrutoVendedor, actuaCorredor?, liquidaCorredor, cuitCorredor?, comisionCorredor?, nroIngBrutoCorredor?, fechaPrecioOperacion, precioRefTn, codGradoRef?, codGradoEnt?, valGradoEnt?, factorEnt?, precioFleteTn, contProteico?, alicIvaOperacion?, campaniaPPal, codLocalidadProcedencia, codProvProcedencia, datosAdicionales?, certificados?[], opcionales?[].
|
|
87
|
+
|
|
88
|
+
Not supported: lsg*, anticipos, anulación contra documento, ajuste por contrato, cgBuscarCtg, cgBuscarCertConSaldoDisponible, cgConsultarXCoe/XNroOrden, cgInformarCalidad.
|
|
89
|
+
|
|
90
|
+
## Validation
|
|
91
|
+
|
|
92
|
+
All requests are validated locally against the XSD before sending (ArcaValidationError with all `details[]`): required fields, unknown fields, ranges/lengths/enums, CUIT check digit (validateCuit), finite numbers, decimals rounded to `fractionDigits`, `xsd:date` (Date | AAAAMMDD | AAAA-MM-DD → AAAA-MM-DD), `xsd:dateTime` (Date → Argentina time -03:00, or ISO string). Exported: `validateAutorizarCPEAutomotor`, `validateAutorizarCPEFerroviaria`, `validateLiquidacion`, `validateAjusteUnificado`.
|
|
172
93
|
|
|
173
|
-
##
|
|
94
|
+
## Errors
|
|
174
95
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
| `src/ctg-client.ts` | Low-level WSCTG SOAP client |
|
|
181
|
-
| `src/lpg-client.ts` | Low-level WSLPG SOAP client |
|
|
182
|
-
| `src/arca-agro.ts` | Main orchestrator with auto-auth and namespaced API |
|
|
183
|
-
| `src/index.ts` | Public exports |
|
|
96
|
+
- `ArcaValidationError` - invalid input (no request sent)
|
|
97
|
+
- `ArcaAgroServiceError extends ArcaServiceError` - ARCA business errors; `errors[]`, `service`, `method`, `response`
|
|
98
|
+
- `ArcaSoapError` - transport/HTTP/SOAP Fault; `uncertain` for emissions
|
|
99
|
+
- `ArcaAgroResponseError` - response missing a required datum (nroCTG, coe, nroOrden); `uncertain` for emissions
|
|
100
|
+
- `ArcaAuthError`, `ArcaTicketVigenteError` - WSAA
|
|
184
101
|
|
|
185
|
-
##
|
|
102
|
+
## Recovering an uncertain emission
|
|
186
103
|
|
|
187
|
-
-
|
|
104
|
+
- CPE: `consultarUltNroOrden(sucursal, tipoCPE) >= nroOrden` → it was authorized; fetch it with `consultarCPEAutomotor({cartaPorte})`. Otherwise retry with the same nroOrden.
|
|
105
|
+
- LPG: `liquidacionUltimoNroOrdenConsultar(ptoEmision)` + `liquidacionXNroOrdenConsultar`; for anular/ajuste use `liquidacionXCoeConsultar(coe)`.
|
|
106
|
+
- CG: `cgConsultarUltimoNroOrden(ptoEmision)`.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ramiidv/arca-agro",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "SDK para servicios agropecuarios de ARCA (ex AFIP) - WSCPE
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "SDK para servicios agropecuarios de ARCA (ex AFIP) - WSCPE (Carta de Porte Electrónica) y WSLPG (Liquidación Primaria de Granos)",
|
|
5
5
|
"author": "ramiidv",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"typecheck": "tsc --noEmit",
|
|
29
29
|
"test": "vitest run",
|
|
30
30
|
"test:watch": "vitest",
|
|
31
|
-
"prepublishOnly": "npm run clean && npm run build"
|
|
31
|
+
"prepublishOnly": "npm run clean && npm run build && npm test"
|
|
32
32
|
},
|
|
33
33
|
"keywords": [
|
|
34
34
|
"arca",
|
|
@@ -36,15 +36,14 @@
|
|
|
36
36
|
"agro",
|
|
37
37
|
"granos",
|
|
38
38
|
"carta-de-porte",
|
|
39
|
-
"ctg",
|
|
40
39
|
"liquidacion",
|
|
41
40
|
"argentina",
|
|
42
41
|
"wscpe",
|
|
43
|
-
"wsctg",
|
|
44
42
|
"wslpg",
|
|
45
43
|
"soap",
|
|
46
44
|
"sdk",
|
|
47
|
-
"typescript"
|
|
45
|
+
"typescript",
|
|
46
|
+
"cpe"
|
|
48
47
|
],
|
|
49
48
|
"repository": {
|
|
50
49
|
"type": "git",
|
|
@@ -61,7 +60,7 @@
|
|
|
61
60
|
"node": ">=18.0.0"
|
|
62
61
|
},
|
|
63
62
|
"dependencies": {
|
|
64
|
-
"@ramiidv/arca-common": "^0.
|
|
63
|
+
"@ramiidv/arca-common": "^0.4.0"
|
|
65
64
|
},
|
|
66
65
|
"devDependencies": {
|
|
67
66
|
"@types/node": "^22.0.0",
|
package/dist/ctg-client.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { ArcaEvent, ServerStatus } from '@ramiidv/arca-common';
|
|
2
|
-
import type { AgroAuth, SolicitudCTG, CTGResult, ConsultaCTGParams, ConfirmarArriboCTGParams, RechazoCTGParams, AnulacionCTGParams, CTGActivosResult } from './types.js';
|
|
3
|
-
export interface CtgClientOptions {
|
|
4
|
-
timeoutMs?: number;
|
|
5
|
-
retries?: number;
|
|
6
|
-
retryDelayMs?: number;
|
|
7
|
-
onEvent?: (event: ArcaEvent) => void;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Cliente de bajo nivel para WSCTG (Código de Trazabilidad de Granos).
|
|
11
|
-
* Gestiona CTGs para el seguimiento del transporte de granos.
|
|
12
|
-
*/
|
|
13
|
-
export declare class CtgClient {
|
|
14
|
-
private readonly endpoint;
|
|
15
|
-
private readonly soapOpts;
|
|
16
|
-
constructor(production: boolean, opts?: CtgClientOptions);
|
|
17
|
-
private call;
|
|
18
|
-
private parseResult;
|
|
19
|
-
/**
|
|
20
|
-
* Solicita un CTG inicial para el transporte de granos.
|
|
21
|
-
*/
|
|
22
|
-
solicitarCTGInicial(auth: AgroAuth, solicitud: SolicitudCTG): Promise<CTGResult>;
|
|
23
|
-
/**
|
|
24
|
-
* Confirma el arribo de un CTG en destino.
|
|
25
|
-
*/
|
|
26
|
-
confirmarArribo(auth: AgroAuth, params: ConfirmarArriboCTGParams): Promise<CTGResult>;
|
|
27
|
-
/**
|
|
28
|
-
* Rechaza un CTG.
|
|
29
|
-
*/
|
|
30
|
-
rechazarCTG(auth: AgroAuth, params: RechazoCTGParams): Promise<CTGResult>;
|
|
31
|
-
/**
|
|
32
|
-
* Anula un CTG.
|
|
33
|
-
*/
|
|
34
|
-
anularCTG(auth: AgroAuth, params: AnulacionCTGParams): Promise<CTGResult>;
|
|
35
|
-
/**
|
|
36
|
-
* Consulta CTGs según criterios de búsqueda.
|
|
37
|
-
*/
|
|
38
|
-
consultarCTG(auth: AgroAuth, params: ConsultaCTGParams): Promise<CTGResult[]>;
|
|
39
|
-
/**
|
|
40
|
-
* Consulta CTGs y retorna el resultado en formato Excel (base64).
|
|
41
|
-
*/
|
|
42
|
-
consultarCTGExcel(auth: AgroAuth, params: ConsultaCTGParams): Promise<string>;
|
|
43
|
-
/**
|
|
44
|
-
* Obtiene la constancia PDF de un CTG en base64.
|
|
45
|
-
*/
|
|
46
|
-
consultarConstanciaCTGPDF(auth: AgroAuth, nroCTG: number): Promise<string>;
|
|
47
|
-
/**
|
|
48
|
-
* Obtiene los CTGs activos (pendientes).
|
|
49
|
-
*/
|
|
50
|
-
obtenerCTGActivos(auth: AgroAuth): Promise<CTGActivosResult>;
|
|
51
|
-
/**
|
|
52
|
-
* Verifica el estado de los servidores del WSCTG.
|
|
53
|
-
*/
|
|
54
|
-
dummy(): Promise<ServerStatus>;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=ctg-client.d.ts.map
|
package/dist/ctg-client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ctg-client.d.ts","sourceRoot":"","sources":["../src/ctg-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAmB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4E;gBAEzF,UAAU,EAAE,OAAO,EAAE,IAAI,GAAE,gBAAqB;YAY9C,IAAI;IAYlB,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAgBtF;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB3F;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAqB/E;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAqB/E;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAenF;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAYnF;;OAEG;IACG,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAchF;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBlE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CAcrC"}
|