@devlas/dte-sii 2.13.1 → 2.13.2
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/DTE.js +6 -2
- package/package.json +1 -1
- package/utils/sanitize.js +12 -4
package/DTE.js
CHANGED
|
@@ -270,8 +270,12 @@ class DTE {
|
|
|
270
270
|
// va firmado, el SII valida la firma sobre lo que él leyó → "TED - Firma invalida".
|
|
271
271
|
// Se aplica ANTES de firmar, así la firma cubre exactamente los bytes del barcode.
|
|
272
272
|
// El DTE conserva el texto real con acentos; esto solo afecta al timbre.
|
|
273
|
-
|
|
274
|
-
|
|
273
|
+
// ⚠️ Truncar DESPUÉS de plegar, no antes: el plegado puede ALARGAR el texto, porque
|
|
274
|
+
// algunos caracteres se expanden de 1 a 2 (ß→ss, Æ→AE, Þ→TH, fi→fi). Si el corte de 40
|
|
275
|
+
// caía justo en uno de esos, el resultado quedaba en 41-42 caracteres y desbordaba el
|
|
276
|
+
// límite de <RSR> e <IT1> del SII, con riesgo de rechazo del timbre.
|
|
277
|
+
const rznRecepRaw = sanitizeTedText(enc.Receptor.RznSocRecep || '').substring(0, 40);
|
|
278
|
+
const it1Raw = sanitizeTedText(primerItem.NmbItem || 'Producto').substring(0, 40);
|
|
275
279
|
const rznRecepXml = this._escapeXmlText(rznRecepRaw);
|
|
276
280
|
const it1Xml = this._escapeXmlText(it1Raw);
|
|
277
281
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devlas/dte-sii",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.2",
|
|
4
4
|
"description": "Facturación y boletas electrónicas para el SII de Chile. Genera, timbra, firma y envía DTEs, libros electrónicos y automatiza la certificación.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "dte-sii.d.ts",
|
package/utils/sanitize.js
CHANGED
|
@@ -72,19 +72,27 @@ function sanitizeSiiText(text) {
|
|
|
72
72
|
* @returns {string} - Texto sin caracteres fuera de ASCII
|
|
73
73
|
*/
|
|
74
74
|
function sanitizeTedText(text) {
|
|
75
|
-
|
|
75
|
+
// ⚠️ El plegado va ANTES de `sanitizeSiiText`, no después.
|
|
76
|
+
//
|
|
77
|
+
// `sanitizeSiiText` descarta lo que no reconoce, así que si corre primero se lleva las
|
|
78
|
+
// ligaduras (fi, ff, Œ…) y el mapeo de más abajo nunca llega a verlas: quedaba como código
|
|
79
|
+
// muerto y esos caracteres desaparecían del timbre en vez de expandirse.
|
|
80
|
+
return String(text ?? '')
|
|
76
81
|
// Descompone en letra base + diacrítico y descarta el diacrítico.
|
|
77
82
|
.normalize('NFD')
|
|
78
83
|
.replace(/[\u0300-\u036f]/g, '')
|
|
79
84
|
// Lo que NFD no separa (ligaduras y símbolos con forma propia).
|
|
80
|
-
.replace(/[
|
|
85
|
+
.replace(/[fffiflffifflŒœ]/g, m => ({
|
|
86
|
+
'ff': 'ff', 'fi': 'fi', 'fl': 'fl', 'ffi': 'ffi', 'ffl': 'ffl', 'Œ': 'OE', 'œ': 'oe',
|
|
87
|
+
})[m])
|
|
81
88
|
.replace(/Æ/g, 'AE').replace(/æ/g, 'ae')
|
|
82
89
|
.replace(/Ø/g, 'O').replace(/ø/g, 'o')
|
|
83
90
|
.replace(/Ð/g, 'D').replace(/ð/g, 'd')
|
|
84
91
|
.replace(/Þ/g, 'TH').replace(/þ/g, 'th')
|
|
85
92
|
.replace(/ß/g, 'ss')
|
|
86
|
-
//
|
|
87
|
-
.replace(/[^\x20-\x7E]/g, '')
|
|
93
|
+
// Recién ahora las reglas del SII, sobre texto ya plegado a ASCII.
|
|
94
|
+
.replace(/[^\x20-\x7E]/g, '')
|
|
95
|
+
.trim();
|
|
88
96
|
}
|
|
89
97
|
|
|
90
98
|
/**
|