@veriko-mx/sdk 0.4.7 → 0.4.8

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/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ versiones según [SemVer](https://semver.org/lang/es/).
7
7
 
8
8
  Sin cambios todavía.
9
9
 
10
+ ## [0.4.8] — 2026-09-27
11
+
12
+ ### Cambiado
13
+
14
+ - `validations.validateOcr()` y `validations.enqueueOcr()` documentan el comprobante en PDF, de 1 a
15
+ 3 páginas.
16
+ - `validations.image()` acepta un comprobante en PDF y lo nombra con la extensión `.pdf`.
17
+
10
18
  ## [0.4.7] — 2026-09-26
11
19
 
12
20
  ### Añadido
package/README.md CHANGED
@@ -128,7 +128,7 @@ conserva el suyo (`banxico_status`, `processing_time_ms`), porque es el tipo gen
128
128
 
129
129
  Cada llamada consume cuota del plan, y se descuenta al aceptar la petición.
130
130
 
131
- ### Desde la imagen del comprobante
131
+ ### Desde el comprobante
132
132
 
133
133
  ```ts
134
134
  const validation = await client.validations.validateOcr({
@@ -137,11 +137,11 @@ const validation = await client.validations.validateOcr({
137
137
  });
138
138
  ```
139
139
 
140
- El SDK lee el archivo y lo codifica en base64. `imageUrl` recibe una imagen ya publicada en HTTPS, y
141
- si se envían `image` e `imageUrl`, la API sólo considera `image`. Formatos: JPEG, PNG o WebP, de
142
- hasta 12 MB.
140
+ El SDK lee el archivo y lo codifica en base64. `imageUrl` recibe un comprobante ya publicado en
141
+ HTTPS, y si se envían `image` e `imageUrl`, la API sólo considera `image`. Formatos: JPEG, PNG, WebP
142
+ o PDF de 1 a 3 páginas, de hasta 12 MB.
143
143
 
144
- La imagen de una validación por OCR se descarga con `client.validations.image(id)`.
144
+ El comprobante de una validación por OCR se descarga con `client.validations.image(id)`.
145
145
 
146
146
  ### Sin esperar al veredicto
147
147
 
@@ -7,7 +7,7 @@ export declare const DEFAULT_TIMEOUT_MS = 30000;
7
7
  export declare const API_KEY_ENV_VAR = "VERIKO_API_KEY";
8
8
  export declare const BASE_URL_ENV_VAR = "VERIKO_BASE_URL";
9
9
  /** La versión que viaja en el `User-Agent`. `test/client.test.ts` la compara con `package.json`. */
10
- export declare const VERSION = "0.4.7";
10
+ export declare const VERSION = "0.4.8";
11
11
  export interface VerikoOptions {
12
12
  /** La clave de API. Por omisión, `VERIKO_API_KEY`. */
13
13
  apiKey?: string;
@@ -9,7 +9,7 @@ exports.DEFAULT_TIMEOUT_MS = 30_000;
9
9
  exports.API_KEY_ENV_VAR = 'VERIKO_API_KEY';
10
10
  exports.BASE_URL_ENV_VAR = 'VERIKO_BASE_URL';
11
11
  /** La versión que viaja en el `User-Agent`. `test/client.test.ts` la compara con `package.json`. */
12
- exports.VERSION = '0.4.7';
12
+ exports.VERSION = '0.4.8';
13
13
  /**
14
14
  * Cliente de la API de Veriko.
15
15
  *
@@ -117,9 +117,19 @@ export interface paths {
117
117
  put?: never;
118
118
  /**
119
119
  * Validar una transferencia SPEI (OCR)
120
- * @description Valida una transferencia SPEI a partir de la imagen de su comprobante. Extrae mediante reconocimiento óptico (OCR) los datos de la imagen y los valida en **Banxico** para obtener el CEP de la transacción.
120
+ * @description Valida una transferencia SPEI a partir de su comprobante, en imagen o en PDF. Extrae mediante reconocimiento óptico (OCR) los datos del comprobante y los valida en **Banxico** para obtener el CEP de la transacción.
121
121
  *
122
- * La imagen se envía como `image` o `image_url`. Si es enviada mediante una URL, el host destino deberá contar con protocolo seguro (SSL/HTTPS).
122
+ * El comprobante se envía como `image` o `image_url`. Si es enviado mediante una URL, el host destino deberá contar con protocolo seguro (SSL/HTTPS).
123
+ *
124
+ * {% callout type="info" %}
125
+ * **Comprobante en PDF:**\
126
+ * Se acepta un PDF de 1 a 3 páginas, con el mismo máximo de `12 MB` que una imagen.
127
+ * Se rechaza si está cifrado, si se modificó después de emitirse o si trae contenido activo u oculto.\
128
+ * Si el PDF es el CEP de Banxico, sus datos se leen de su texto sin OCR y `banxico_result._cep_upload` indica
129
+ * si su sello y su cadena original coinciden con los del CEP oficial. El veredicto no cambia por esa comparación.\
130
+ * Un PDF con más de un comprobante se rechaza con `pdf_multiple_receipts`.
131
+ *
132
+ * {% /callout %}
123
133
  *
124
134
  * {% callout type="info" %}
125
135
  * El campo `cuenta_beneficiaria` permite enviar explícitamente la cuenta receptora de la transferencia, enviarlo es especialmente útil cuando la imagen no lleva este dato o lo lleva incompleto.\
@@ -137,7 +147,7 @@ export interface paths {
137
147
  *
138
148
  * {% callout type="info" %}
139
149
  * **Modo asíncrono:**\
140
- * Enviando `?async=1` en la URL, la imagen se comprueba antes de aceptar el trabajo y la respuesta es un estado HTTP `202` inmediato con el ID de la validación en el cuerpo.\
150
+ * Enviando `?async=1` en la URL, el comprobante se comprueba antes de aceptar el trabajo y la respuesta es un estado HTTP `202` inmediato con el ID de la validación en el cuerpo.\
141
151
  * \
142
152
  * El veredicto se recoge sondeando `GET /v1/validations/{id}` hasta un estado terminal, como describe {% concept slug="async-validations" %}las operaciones asíncronas{% /concept %}.
143
153
  *
@@ -153,10 +163,12 @@ export interface paths {
153
163
  *
154
164
  * {% callout type="warning" %}
155
165
  * **Políticas de cobro (cuota):**\
156
- * — Modo síncrono: Se descuenta la validación de la cuota al aceptar la petición, antes de comprobar la imagen. Es decir, una imagen inválida consume una validación.\
157
- * — Modo asíncrono: La imagen se comprueba primero, así que una imagen inválida no consume nada.\
166
+ * — Modo síncrono: Se descuenta la validación de la cuota al aceptar la petición, antes de comprobar el archivo. Es decir, un archivo inválido consume una validación.\
167
+ * — Modo asíncrono: El archivo se comprueba primero, así que un archivo inválido no consume nada.\
168
+ * \
169
+ * Un CEP en PDF que se lee sin OCR cuenta como una validación, igual que uno leído por OCR.\
158
170
  * \
159
- * La cuota no se devuelve en ningún caso. Los reintentos automáticos posteriores no consumen una validación adicional, y el cómputo está en {% concept slug="quotas-and-plans" %}cuotas y planes{% /concept %}.
171
+ * La cuota sólo se devuelve cuando la validación termina en `error` por un fallo de la plataforma. Los reintentos automáticos posteriores no consumen una validación adicional, y el cómputo está en {% concept slug="quotas-and-plans" %}cuotas y planes{% /concept %}.
160
172
  *
161
173
  * {% /callout %}
162
174
  */
@@ -343,7 +355,11 @@ export interface paths {
343
355
  };
344
356
  /**
345
357
  * Obtener la imagen del comprobante
346
- * @description Devuelve la imagen conservada de una validación por OCR, con disposición `inline` y caché privada.
358
+ * @description Devuelve el comprobante conservado de una validación por OCR, con caché privada:
359
+ *
360
+ * - Imagen: se entrega con disposición `inline`.
361
+ * - PDF: se entrega siempre como adjunto (`attachment`) y con `Content-Security-Policy: sandbox`,
362
+ * para que un navegador no lo abra dentro del propio origen.
347
363
  *
348
364
  * Si la validación no tiene imagen disponible, responde con un estado HTTP `404` (con `image_not_available` en el cuerpo).
349
365
  */
@@ -2339,11 +2355,16 @@ export interface components {
2339
2355
  */
2340
2356
  etag_version?: number | null;
2341
2357
  /**
2342
- * @description Referencia relativa de la imagen del comprobante (solo si `validation_type` es del tipo `ocr`).
2358
+ * @description Referencia relativa del comprobante, imagen o PDF (solo si `validation_type` es del tipo `ocr`).
2343
2359
  * @example ocr/2026/04/a1b2c3d4.jpg
2344
2360
  */
2345
2361
  image_path?: string | null;
2346
- /** @description Campos extraídos mediante OCR (solo si `validation_type` es del tipo `ocr`). */
2362
+ /**
2363
+ * @description Campos extraídos del comprobante (solo si `validation_type` es del tipo `ocr`).
2364
+ *
2365
+ * `extraction_source` vale `cep_pdf` cuando el comprobante era el CEP de Banxico en PDF y sus datos se leyeron
2366
+ * de su texto, sin OCR. `comprobantes_detectados` es el número de comprobantes que se encontraron en un PDF.
2367
+ */
2347
2368
  ocr_result?: {
2348
2369
  [key: string]: unknown;
2349
2370
  } | null;
@@ -2365,11 +2386,16 @@ export interface components {
2365
2386
  * @description Datos devueltos por Banxico. Las propiedades tipadas abajo son las 20 que declara el esquema oficial del complemento SPEI.
2366
2387
  *
2367
2388
  * `_ocr_correction` conserva los campos corregidos, su lectura original (`requested`), el valor consultado (`used`) y la confirmación (`confirmed_by`). `status_query` indica una hipótesis confirmada por la consulta de estado; `cep` indica que también se obtuvo el comprobante. La consulta de estado por sí sola no verifica una transferencia.
2389
+ *
2390
+ * `_cep_upload` aparece cuando el comprobante subido era el CEP en PDF y Banxico confirmó el pago.
2391
+ * `authenticated` es `true` cuando su sello y su cadena original coinciden con los del CEP oficial;
2392
+ * con `false`, `differing_fields` lista los campos que difieren y `normalization_warnings` lo avisa.
2393
+ * El veredicto sigue siendo el de Banxico.
2368
2394
  */
2369
2395
  banxico_result?: ({
2370
2396
  /**
2371
- * @description Fecha de la operación tal como la reporta el CEP de Banxico (`DD-MM-AAAA`).
2372
- * @example 15-03-2025
2397
+ * @description Fecha de la operación tal como la reporta el CEP de Banxico (`AAAA-MM-DD`).
2398
+ * @example 2025-03-15
2373
2399
  */
2374
2400
  operationDate?: string;
2375
2401
  /**
@@ -2530,17 +2556,17 @@ export interface components {
2530
2556
  playground?: boolean;
2531
2557
  };
2532
2558
  };
2533
- /** @description Cuerpo de `POST /v1/validate-ocr` con la imagen en `image` o `image_url`; exige al menos uno de ambos campos. */
2559
+ /** @description Cuerpo de `POST /v1/validate-ocr` con el comprobante en `image` o `image_url`; exige al menos uno de ambos campos. */
2534
2560
  OcrValidationRequest: {
2535
2561
  /**
2536
2562
  * Format: byte
2537
- * @description Imagen del comprobante codificada en base64. Si también se proporciona `image_url`, solo se considera `image`. Formatos aceptados: JPEG, PNG o WebP. Tamaño máximo: `12 MB`. Dimensiones máximas: `12000px` por lado.
2563
+ * @description Comprobante codificado en base64, en imagen o en PDF. Si también se proporciona `image_url`, solo se considera `image`. Formatos aceptados: JPEG, PNG, WebP o PDF de 1 a 3 páginas. Tamaño máximo: `12 MB`. Dimensiones máximas de una imagen: `12000px` por lado. Admite el prefijo `data:image/...;base64,` o `data:application/pdf;base64,`.
2538
2564
  * @example iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==
2539
2565
  */
2540
2566
  image?: string;
2541
2567
  /**
2542
2568
  * Format: uri
2543
- * @description URL pública (HTTPS) de la imagen del comprobante. La imagen sigue los mismos límites de formato y tamaño que `image` (JPEG, PNG o WebP. Con un máximo de 12 MB).
2569
+ * @description URL pública (HTTPS) del comprobante. Sigue los mismos límites de formato y tamaño que `image`: JPEG, PNG, WebP o PDF de 1 a 3 páginas, con un máximo de `12 MB`.
2544
2570
  * @example https://storage.example.com/receipts/comprobante-2025-03.jpg
2545
2571
  */
2546
2572
  image_url?: string;
@@ -5371,7 +5397,7 @@ export interface operations {
5371
5397
  401: components["responses"]["Unauthorized"];
5372
5398
  409: components["responses"]["IdempotencyKeyInProgress"];
5373
5399
  413: components["responses"]["PayloadTooLarge"];
5374
- /** @description La imagen o los datos de la petición no son válidos. Códigos posibles: `image_or_image_url_required`, `invalid_image`, `invalid_image_format`, `image_too_large`, `invalid_url`, `invalid_url_scheme`, `url_ssrf_blocked`, `invalid_clabe_checksum`. También puede devolver: `image_too_small`, `image_mime_mismatch`, `image_dimensions_too_large`, `image_decompression_bomb`, `image_polyglot_detected`, `image_url_unreachable`, `image_url_too_large`, `image_url_too_many_redirects`. En modo asíncrono, un fallo genérico de la imagen se reporta como `image_invalid`. Reutilizar `Idempotency-Key` con un cuerpo distinto produce `idempotency_key_reused`. */
5400
+ /** @description La imagen o los datos de la petición no son válidos. Códigos posibles: `image_or_image_url_required`, `invalid_image`, `invalid_image_format`, `image_too_large`, `invalid_url`, `invalid_url_scheme`, `url_ssrf_blocked`, `invalid_clabe_checksum`. También puede devolver: `image_too_small`, `image_mime_mismatch`, `image_dimensions_too_large`, `image_decompression_bomb`, `image_polyglot_detected`, `image_url_unreachable`, `image_url_too_large`, `image_url_too_many_redirects`. Con un PDF: `pdf_invalid_structure`, `pdf_encrypted`, `pdf_active_content`, `pdf_hidden_content`, `pdf_modified_after_issue`, `pdf_too_many_pages`, `pdf_unsupported_image`, `pdf_text_layer_too_large` y `pdf_multiple_receipts`. En modo asíncrono, un fallo genérico de la imagen se reporta como `image_invalid`. Reutilizar `Idempotency-Key` con un cuerpo distinto produce `idempotency_key_reused`. */
5375
5401
  422: {
5376
5402
  headers: {
5377
5403
  [name: string]: unknown;
@@ -5946,15 +5972,17 @@ export interface operations {
5946
5972
  };
5947
5973
  requestBody?: never;
5948
5974
  responses: {
5949
- /** @description Imagen del comprobante. `Content-Type` indica `image/png`, `image/jpeg` o `image/webp` según el formato; cualquier otro contenido se entrega como `application/octet-stream`. */
5975
+ /** @description Comprobante. `Content-Type` indica `image/png`, `image/jpeg`, `image/webp` o `application/pdf` según el formato; cualquier otro contenido se entrega como `application/octet-stream`. */
5950
5976
  200: {
5951
5977
  headers: {
5952
- /** @description Presentación en línea con un nombre derivado del identificador de la validación y la extensión del formato. */
5978
+ /** @description `inline` para una imagen y `attachment` para un PDF, con un nombre derivado del identificador de la validación y la extensión del formato. */
5953
5979
  "Content-Disposition"?: string;
5954
5980
  /** @description Permite un caché privado durante 1 hora. */
5955
5981
  "Cache-Control"?: string;
5956
5982
  /** @description Restringe el uso del recurso al mismo origen. */
5957
5983
  "Cross-Origin-Resource-Policy"?: string;
5984
+ /** @description Sólo con un PDF. `sandbox` impide ejecutar scripts y trata el documento como de otro origen si un visor lo abre. */
5985
+ "Content-Security-Policy"?: string;
5958
5986
  /** @description Impide que el navegador deduzca un tipo de contenido distinto. */
5959
5987
  "X-Content-Type-Options"?: string;
5960
5988
  [name: string]: unknown;
@@ -5963,6 +5991,7 @@ export interface operations {
5963
5991
  "image/png": string;
5964
5992
  "image/jpeg": string;
5965
5993
  "image/webp": string;
5994
+ "application/pdf": string;
5966
5995
  "application/octet-stream": string;
5967
5996
  };
5968
5997
  };