@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.
Files changed (61) hide show
  1. package/README.md +211 -179
  2. package/dist/arca-agro.d.ts +25 -140
  3. package/dist/arca-agro.d.ts.map +1 -1
  4. package/dist/arca-agro.js +69 -264
  5. package/dist/arca-agro.js.map +1 -1
  6. package/dist/constants.d.ts +34 -8
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +34 -11
  9. package/dist/constants.js.map +1 -1
  10. package/dist/context.d.ts +13 -0
  11. package/dist/context.d.ts.map +1 -0
  12. package/dist/context.js +2 -0
  13. package/dist/context.js.map +1 -0
  14. package/dist/cpe-client.d.ts +95 -51
  15. package/dist/cpe-client.d.ts.map +1 -1
  16. package/dist/cpe-client.js +236 -228
  17. package/dist/cpe-client.js.map +1 -1
  18. package/dist/cpe-schemas.d.ts +76 -0
  19. package/dist/cpe-schemas.d.ts.map +1 -0
  20. package/dist/cpe-schemas.js +512 -0
  21. package/dist/cpe-schemas.js.map +1 -0
  22. package/dist/cpe-types.d.ts +599 -0
  23. package/dist/cpe-types.d.ts.map +1 -0
  24. package/dist/cpe-types.js +2 -0
  25. package/dist/cpe-types.js.map +1 -0
  26. package/dist/errors.d.ts +38 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +53 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/index.d.ts +10 -10
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +8 -13
  33. package/dist/index.js.map +1 -1
  34. package/dist/lpg-client.d.ts +64 -43
  35. package/dist/lpg-client.d.ts.map +1 -1
  36. package/dist/lpg-client.js +215 -175
  37. package/dist/lpg-client.js.map +1 -1
  38. package/dist/lpg-schemas.d.ts +50 -0
  39. package/dist/lpg-schemas.d.ts.map +1 -0
  40. package/dist/lpg-schemas.js +478 -0
  41. package/dist/lpg-schemas.js.map +1 -0
  42. package/dist/lpg-types.d.ts +470 -0
  43. package/dist/lpg-types.d.ts.map +1 -0
  44. package/dist/lpg-types.js +2 -0
  45. package/dist/lpg-types.js.map +1 -0
  46. package/dist/schema.d.ts +90 -0
  47. package/dist/schema.d.ts.map +1 -0
  48. package/dist/schema.js +301 -0
  49. package/dist/schema.js.map +1 -0
  50. package/dist/types.d.ts +33 -455
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/validation.d.ts +22 -43
  53. package/dist/validation.d.ts.map +1 -1
  54. package/dist/validation.js +31 -134
  55. package/dist/validation.js.map +1 -1
  56. package/llms.txt +78 -159
  57. package/package.json +6 -7
  58. package/dist/ctg-client.d.ts +0 -56
  59. package/dist/ctg-client.d.ts.map +0 -1
  60. package/dist/ctg-client.js +0 -214
  61. package/dist/ctg-client.js.map +0 -1
@@ -1,214 +0,0 @@
1
- import { afipSoapCall, ensureArray, checkServiceErrors, } from '@ramiidv/arca-common';
2
- import { CTG_ENDPOINTS, CTG_NAMESPACE } from './constants.js';
3
- /**
4
- * Cliente de bajo nivel para WSCTG (Código de Trazabilidad de Granos).
5
- * Gestiona CTGs para el seguimiento del transporte de granos.
6
- */
7
- export class CtgClient {
8
- endpoint;
9
- soapOpts;
10
- constructor(production, opts = {}) {
11
- this.endpoint = production
12
- ? CTG_ENDPOINTS.production
13
- : CTG_ENDPOINTS.testing;
14
- this.soapOpts = {
15
- timeout: opts.timeoutMs,
16
- retries: opts.retries,
17
- retryDelayMs: opts.retryDelayMs,
18
- onEvent: opts.onEvent,
19
- };
20
- }
21
- async call(method, params) {
22
- const result = await afipSoapCall(this.endpoint, CTG_NAMESPACE, method, params, this.soapOpts);
23
- checkServiceErrors(result, 'WSCTG');
24
- return result;
25
- }
26
- parseResult(raw) {
27
- const errores = ensureArray((raw['errores'] ?? raw['arrayErrores'])).map((e) => ({
28
- Code: Number(e['codigo'] ?? e['Code'] ?? 0),
29
- Msg: String(e['descripcion'] ?? e['Msg'] ?? ''),
30
- }));
31
- const eventos = ensureArray((raw['eventos'] ?? raw['arrayEventos'])).map((e) => ({
32
- Code: Number(e['codigo'] ?? e['Code'] ?? 0),
33
- Msg: String(e['descripcion'] ?? e['Msg'] ?? ''),
34
- }));
35
- return {
36
- nroCTG: raw['nroCTG'],
37
- fechaEmision: raw['fechaEmision'],
38
- vigenciaDesde: raw['vigenciaDesde'],
39
- vigenciaHasta: raw['vigenciaHasta'],
40
- tarifaReferencia: raw['tarifaReferencia'],
41
- estado: raw['estado'],
42
- nroCartaPorte: raw['nroCartaPorte'],
43
- errores: errores.length > 0 ? errores : undefined,
44
- eventos: eventos.length > 0 ? eventos : undefined,
45
- raw,
46
- };
47
- }
48
- // ============================================================
49
- // Solicitud de CTG
50
- // ============================================================
51
- /**
52
- * Solicita un CTG inicial para el transporte de granos.
53
- */
54
- async solicitarCTGInicial(auth, solicitud) {
55
- const result = await this.call('solicitarCTGInicial', {
56
- auth: {
57
- token: auth.Token,
58
- sign: auth.Sign,
59
- cuitRepresentada: auth.Cuit,
60
- },
61
- solicitud,
62
- });
63
- return this.parseResult(result);
64
- }
65
- // ============================================================
66
- // Confirmación de arribo
67
- // ============================================================
68
- /**
69
- * Confirma el arribo de un CTG en destino.
70
- */
71
- async confirmarArribo(auth, params) {
72
- const result = await this.call('confirmarArribo', {
73
- auth: {
74
- token: auth.Token,
75
- sign: auth.Sign,
76
- cuitRepresentada: auth.Cuit,
77
- },
78
- solicitud: {
79
- nroCTG: params.nroCTG,
80
- nroCartaPorte: params.nroCartaPorte,
81
- cuitDestino: params.cuitDestino,
82
- pesoNeto: params.pesoNeto,
83
- fechaArribo: params.fechaArribo,
84
- ...(params.codCosecha !== undefined && { codCosecha: params.codCosecha }),
85
- },
86
- });
87
- return this.parseResult(result);
88
- }
89
- // ============================================================
90
- // Rechazo
91
- // ============================================================
92
- /**
93
- * Rechaza un CTG.
94
- */
95
- async rechazarCTG(auth, params) {
96
- const result = await this.call('rechazarCTG', {
97
- auth: {
98
- token: auth.Token,
99
- sign: auth.Sign,
100
- cuitRepresentada: auth.Cuit,
101
- },
102
- solicitud: {
103
- nroCTG: params.nroCTG,
104
- nroCartaPorte: params.nroCartaPorte,
105
- codMotivo: params.codMotivo,
106
- ...(params.observaciones !== undefined && { observaciones: params.observaciones }),
107
- },
108
- });
109
- return this.parseResult(result);
110
- }
111
- // ============================================================
112
- // Anulación
113
- // ============================================================
114
- /**
115
- * Anula un CTG.
116
- */
117
- async anularCTG(auth, params) {
118
- const result = await this.call('anularCTG', {
119
- auth: {
120
- token: auth.Token,
121
- sign: auth.Sign,
122
- cuitRepresentada: auth.Cuit,
123
- },
124
- solicitud: {
125
- nroCTG: params.nroCTG,
126
- nroCartaPorte: params.nroCartaPorte,
127
- codMotivo: params.codMotivo,
128
- ...(params.observaciones !== undefined && { observaciones: params.observaciones }),
129
- },
130
- });
131
- return this.parseResult(result);
132
- }
133
- // ============================================================
134
- // Consultas
135
- // ============================================================
136
- /**
137
- * Consulta CTGs según criterios de búsqueda.
138
- */
139
- async consultarCTG(auth, params) {
140
- const result = await this.call('consultarCTG', {
141
- auth: {
142
- token: auth.Token,
143
- sign: auth.Sign,
144
- cuitRepresentada: auth.Cuit,
145
- },
146
- solicitud: params,
147
- });
148
- const items = ensureArray((result['consultarCTGDatos'] ?? result['resultado'] ?? result));
149
- return items.map((item) => this.parseResult(item));
150
- }
151
- /**
152
- * Consulta CTGs y retorna el resultado en formato Excel (base64).
153
- */
154
- async consultarCTGExcel(auth, params) {
155
- const result = await this.call('consultarCTGExcel', {
156
- auth: {
157
- token: auth.Token,
158
- sign: auth.Sign,
159
- cuitRepresentada: auth.Cuit,
160
- },
161
- solicitud: params,
162
- });
163
- return String(result['excel'] ?? result['archivo'] ?? '');
164
- }
165
- /**
166
- * Obtiene la constancia PDF de un CTG en base64.
167
- */
168
- async consultarConstanciaCTGPDF(auth, nroCTG) {
169
- const result = await this.call('consultarConstanciaCTGPDF', {
170
- auth: {
171
- token: auth.Token,
172
- sign: auth.Sign,
173
- cuitRepresentada: auth.Cuit,
174
- },
175
- solicitud: {
176
- nroCTG,
177
- },
178
- });
179
- return String(result['pdf'] ?? result['constancia'] ?? '');
180
- }
181
- /**
182
- * Obtiene los CTGs activos (pendientes).
183
- */
184
- async obtenerCTGActivos(auth) {
185
- const result = await this.call('obtenerCTGActivos', {
186
- auth: {
187
- token: auth.Token,
188
- sign: auth.Sign,
189
- cuitRepresentada: auth.Cuit,
190
- },
191
- });
192
- const ctgs = ensureArray((result['ctgActivo'] ?? result['resultado']));
193
- return {
194
- ctgs,
195
- errores: undefined,
196
- raw: result,
197
- };
198
- }
199
- // ============================================================
200
- // Estado del servicio
201
- // ============================================================
202
- /**
203
- * Verifica el estado de los servidores del WSCTG.
204
- */
205
- async dummy() {
206
- const result = await afipSoapCall(this.endpoint, CTG_NAMESPACE, 'dummy', {}, this.soapOpts);
207
- return {
208
- appserver: String(result['appserver'] ?? result['AppServer'] ?? ''),
209
- dbserver: String(result['dbserver'] ?? result['DbServer'] ?? ''),
210
- authserver: String(result['authserver'] ?? result['AuthServer'] ?? ''),
211
- };
212
- }
213
- }
214
- //# sourceMappingURL=ctg-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ctg-client.js","sourceRoot":"","sources":["../src/ctg-client.ts"],"names":[],"mappings":"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"}