PageSourceSearch

https://plataforma.goiener.com/assets.axd/63919698130000/pub/Libraries/js/validaciones.js

js goiener.com collected 2026-10-03 19:06:21 UTC 17,889 bytes, 490 lines download raw bytes

1function cif_letra_fisica(cif) {
2    'use strict';
3    cif = cif.toUpperCase();
4    var patt = /^[0-9XYZ][0-9]{7}$/;
5    if (!patt.test(cif)) {
6        throw new Error('El formato de CIF sin letra no es correcto "' + cif + '"');
7    }
8    var primera_letra = cif.charAt(0);
9    if (/^[XYZ]/.test(primera_letra)) {
10        cif = '012'.charAt('XYZ'.indexOf(primera_letra)) + cif.substr(1);
11    }
12    return 'TRWAGMYFPDXBNJZSQVHLCKET'.charAt(parseInt(cif) % 23);
13}
14
15
16function cif_control_juridica(cif) {
17    // http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
18
19    cif = cif.toUpperCase();
20    if(! /^[ABCDEFGHJNPQRSUVW][0-9]{7}$/.test(cif)){
21        throw new Error('El formato de CIF sin letra no es correcto para una persona jurídica "' + cif + '"');
22    }
23    var sumadoble = new Array(0, 2, 4, 6, 8, 1, 3, 5, 7, 9);
24    var digitos = new Array();
25    digitos[1] = parseInt(cif.charAt(1));
26    digitos[2] = parseInt(cif.charAt(2));
27    digitos[3] = parseInt(cif.charAt(3));
28    digitos[4] = parseInt(cif.charAt(4));
29    digitos[5] = parseInt(cif.charAt(5));
30    digitos[6] = parseInt(cif.charAt(6));
31    digitos[7] = parseInt(cif.charAt(7));
32    var SumaA = digitos[2] + digitos[4] + digitos[6];
33    var SumaB = sumadoble[digitos[1]] + sumadoble[digitos[3]] + sumadoble[digitos[5]] + sumadoble[digitos[7]];
34    var SumaC = SumaA + SumaB;
35    var E = SumaC % 10;
36    if (E == 0) {
37        var D = 0;
38    } else {
39        var D = 10 - E;
40    }
41
42    return D;
43}
44
45function cif_validar(nif, pais, tipo_documentacion) {
46    //  Mantener sincronizado la restriccion de NIF de C#, JS y DDBB
47    var condition_extranjero = ((pais ?? "ES") == "ES") && ((tipo_documentacion ?? "1") == "1");
48    var cif_validar = cif_validar_es(nif);
49    return (!(condition_extranjero) || cif_validar);
50}
51
52function cif_validar_fr(nif) {
53    var country_code = nif.substring(0, 2);
54    if (country_code !== 'FR') {
55        return false;
56    }
57
58    if (/^FR[0-9]{13}$/.test(nif)) {
59        // NIF persona física
60        return true;
61    }
62
63    if (nif.length != 13) {
64        return false;
65    }
66
67    if (! /^FR..[0-9]+$/.test(nif)) {
68        return false;
69    }
70
71    var numero_txt = nif.substr(4);
72    var check_code = nif.substr(2,2);
73
74    if(  /^[0-9][0-9]$/.test(check_code)){
75        // Codigo formato viejo
76        // numero*100 + 12 
77        
78        //  Numero más grande en JS: 9007199254740991 (15 posiciones de enteros)
79        numero_txt =  numero_txt + '12';
80        var codigo_check_calculado = modulo(numero_txt,97);
81        return check_code === codigo_check_calculado;
82    }else {
83        // Código formato nuevo
84        var c1 = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(check_code[0]);
85        var c2 = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(check_code[1]);
86
87        var s = 0;
88        
89        if(c1<10) {
90            s = c1 * 24 + c2 - 10;
91        }else{
92            s = c1 * 34 + c2 - 100;
93        }
94        
95        var x = modulo(s,11);
96        s = s/11+1;
97        var y = modulo(( parseInt(numero_txt)+s),11);
98        return x === y;
99    }
100}
101
102function cif_validar_es(cif) {
103    cif = cif.replace(/\s+/g, '');
104    if (! /^[A-Z0-9][0-9]{7}[A-Z0-9]$/.test(cif)) {
105        return false;
106    }
107
108    if (/^[0-9KLMXYZ]/.test(cif)) {
109        /*Persona física*/
110        // VER: https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal
111        return cif_letra_fisica(cif.substr(0, 8)) == cif[8];
112    } else {
113        /*Persona juridica*/
114        var digito_control = cif_control_juridica(cif.substr(0, 8));
115        if (cif[8] >= "0" && cif[8] <= "9") {
116            return digito_control == cif[8];
117        } else {
118            digito_control = 'JABCDEFGHI'.charAt(digito_control);
119            return digito_control == cif[8];
120        }
121    }
122    return false;
123}
124
125function cif_fisica(cif) {
126    cif = cif.replace(/\s+/g, '');
127
128    if ( /^FR/.test(cif)) {
129        return cif_validar_fr(cif);
130    }
131    
132    return cif_fisica_es(cif);
133}
134
135function cif_fisica_es(cif) {
136    if (! /^[A-Z0-9][0-9]{7}[A-Z0-9]$/.test(cif)) {
137        return false;
138    }
139
140    if (/^[0-9KLMXYZ]/.test(cif)) {
141        /*Persona física*/
142        // VER: https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal
143        return cif_letra_fisica(cif.substr(0, 8)) == cif[8];
144    }
145    return false;
146}
147
148function cif_juridico(cif) {
149    cif = cif.replace(/\s+/g, '');
150
151    if (/^FR/.test(cif)) {
152        return cif_validar_fr(cif);
153    }
154
155    return cif_juridico_es(cif);
156}
157    
158function cif_juridico_es(cif){
159    // http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
160
161    cif = cif.toUpperCase();
162    cif = cif.replace(/\s+/g, '');
163    if(! /^[ABCDEFGHJNPQRSUVW][0-9]{7}[A-Z0-9]$/.test(cif)){
164        return false;
165    }
166
167    var digito_control = cif_control_juridica(cif.substr(0, 8));
168
169    if ('ABEH'.indexOf(cif[0]) >= 0) {
170        return (digito_control == cif[8]);
171    } else if ('KPQSW'.indexOf(cif[0]) >= 0) {
172        return ('JABCDEFGHI'.charAt(digito_control) == cif[8]);
173    } else {
174    	return ((digito_control == cif[8]) || ('JABCDEFGHI'.charAt(digito_control) == cif[8]));
175    }
176    
177    return false;
178}
179
180function cups_control(cups){
181    cups = cups.toUpperCase();
182    if(! /^[A-Z][A-Z][0-9]{4}[0-9]{12}$/.test(cups)){
183        throw new Error('El formato de CUPS sin codigos de control "' + cups + '"');
184    }
185    var num = cups.substring(2,18);
186
187    var cc_entero =  parseInt(modulo(num,529));
188
189    var cc1 = cc_entero / 23;
190    var cc2 = cc_entero % 23;
191
192    var caracter = 'TRWAGMYFPDXBNJZSQVHLCKE';
193
194    return caracter.charAt(cc1) + caracter.charAt(cc2);
195}
196
197function cups_validar(cups) {
198    cups = cups.toUpperCase();
199    cups = cups.replace(/\s+/g, '');
200    if(! /^[A-Z][A-Z][0-9]{4}[0-9]{12}[A-Z]{2}([0-9][FPRCXYZ])?$/.test(cups)){
201        return false;
202    }
203    if(cups.substring(0, 2) != "ES"){
204        return false;
205    }
206
207    var digito_control = cups_control(cups.substr(0, 18));
208    return digito_control == cups.substr(18, 2);
209}
210
211function limpiar_codigo(codigo){
212        codigo = codigo.toUpperCase();
213        codigo = codigo.replace(/[^0-9A-Z]/g, "");
214        return codigo;
215}
216
217function validar_iban_o_ccc(codigo){
218    iban = limpiar_codigo(codigo);
219    if(ccc_validar_ES(iban)){
220        return true;
221    }
222    return iban_validar(iban);
223}
224
225function iban_calcular(codigo_cc, cod_pais){
226    codigo_cc = codigo_cc.toUpperCase();
227    cod_pais = cod_pais.toUpperCase();
228    if(! /^[A-Z][A-Z]$/.test(cod_pais)){
229        throw new Error('El codigo de pais deben ser 2 caracteres en mayusculas "' + cod_pais + '"');
230    }
231    if(! /^[0-9A-Z]+$/.test(codigo_cc)){
232        throw new Error('El codigo de de cuenta deben ser letras y números "' + codigo_cc + '"');
233    }
234    //Paso preliminar: Crear un código previo de IBAN compuesto del código de país (ES) seguido de “00” y el C.C.C.
235    //Ejemplo: ES0000120345030000067890
236    //Paso 1: Trasladar los cuatro primeros caracteres del IBAN a la derecha del Código:
237    //Resultado: 00120345030000067890ES00
238    var IBAN_inicial = "" + codigo_cc + cod_pais + "00";
239
240    //Paso 2: Convertir las letras en números aplicando: A = 10; B = 11 ... Z = 35
241    //Resultado: 00120345030000067890142800
242    var IBAN_numerico = "";
243    char_array = IBAN_inicial.split('')
244    for (var i = 0; ch = char_array[i++];) {
245        if(ch >= '0' && ch <= '9' ){
246            IBAN_numerico = IBAN_numerico + ch;
247        }else{
248            var num =   10 + (ch.charCodeAt(0)  - 'A'.charCodeAt(0));
249            IBAN_numerico =  IBAN_numerico +  num;
250        }
251    }
252
253    var num = modulo(IBAN_numerico,97);
254    num = modulo(IBAN_numerico,97);
255    var control_iban = 98 - num;
256
257    return "" + cod_pais + ("00" + control_iban).slice(-2) + codigo_cc;
258}
259
260function iban_validar(iban){
261    iban = iban.toUpperCase();
262    iban = iban.replace(/\s+/g, '');
263    if(! /^[A-Z][A-Z][0-9][A-Z0-9]+$/.test(iban)){
264        return false;
265    }
266    var pais = iban.substr(0,2);
267    var cuenta = iban.substring(4);
268    if(iban != iban_calcular(cuenta,pais)){
269        return false;
270    }
271
272    if(pais == 'ES'){
273        return ccc_validar_ES(cuenta);
274    }
275
276    return true;
277
278}
279
280function ccc_validar_ES(ccc){
281    //http://es.wikipedia.org/wiki/C%C3%B3digo_cuenta_cliente
282    if(! /^[0-9]{20}$/.test(ccc)){
283        //throw new Error('El codigo cuenta cliente (ccc) son 20 digitos sin espacios "' + ccc + '"');
284        return false;
285    }
286
287    var cod_entidad = ccc.substr(0,4);
288    var cod_sucursal = ccc.substr(4,4);
289    var cod_control = ccc.substr(8,2);
290    var cod_cuenta =ccc.substr(10,10);
291
292    var v1=0, v2=0;
293    var vDC1=0, vDC2=0;
294
295    v1=0;
296    v1 = v1 + cod_entidad[0] * 4;
297    v1 = v1 + cod_entidad[1] * 8;
298    v1 = v1 + cod_entidad[2] * 5;
299    v1 = v1 + cod_entidad[3] * 10;
300
301    v1 = v1 + cod_sucursal[0] * 9;
302    v1 = v1 + cod_sucursal[1] * 7;
303    v1 = v1 + cod_sucursal[2] * 3;
304    v1 = v1 + cod_sucursal[3] * 6;
305
306    vDC1 = 11-(v1%11);
307    
308    if(vDC1 == 11){
309        vDC1 = 0;
310    }else if(vDC1 == 10){
311        vDC1 = 1;
312    }    
313
314    v2=0;
315    v2 = v2 + cod_cuenta[0] * 1;
316    v2 = v2 + cod_cuenta[1] * 2;
317    v2 = v2 + cod_cuenta[2] * 4;
318    v2 = v2 + cod_cuenta[3] * 8;
319    v2 = v2 + cod_cuenta[4] * 5;
320    v2 = v2 + cod_cuenta[5] * 10;
321    v2 = v2 + cod_cuenta[6] * 9;
322    v2 = v2 + cod_cuenta[7] * 7;
323    v2 = v2 + cod_cuenta[8] * 3;
324    v2 = v2 + cod_cuenta[9] * 6;
325
326    vDC2 = 11-(v2%11);
327    
328    if(vDC2 == 11){
329        vDC2 = 0;
330    }else if(vDC2 == 10){
331        vDC2 = 1;
332    } 
333
334    var es_cc_correcta = (cod_control == ("" + vDC1 + vDC2));
335
336    return es_cc_correcta;
337}
338
339function modulo (divident, divisor) {
340	var divident = divident + '';
341    var cDivident = '';
342    var cRest = '';
343
344    for (var i = 0, len = divident.length; i < len; i++) {
345        var cChar = divident.charAt(i);
346        var cOperator = cRest + '' + cDivident + '' + cChar;
347
348        if ( cOperator < parseInt(divisor) ) {
349            cDivident += '' + cChar;
350        } else {
351            cRest = cOperator % divisor;
352            if ( cRest == 0 ) {
353                cRest = '';
354            }
355            cDivident = '';
356        }
357
358    }
359    cRest += '' + cDivident;
360    if (cRest == '') {
361        cRest = 0;
362    }
363    return cRest;
364}
365
366/*
367    Las validaciones deberian coincidir en todos los niveles con las validaciones de la bbdd
368    /web/mod/00_general/model/email_check.sql
369
370    /web/mod/00_general/class/VerificacionesEmail.cs
371    /web/pub/Libraries/js/extras.js
372*/
373function email_validar(email)
374{        
375    if (! /^[A-z0-9ñN]+([-+.ñN][A-z0-9]+)*([.-]+)?@[A-z0-9]+([-.][A-z0-9]+)*\.[A-z0-9]+([-.][A-z0-9]+)*([,;\\S][A-z0-9ñN]+([-+.ñN][A-z0-9]+)*([.-]+)?@[A-z0-9]+([-.][A-z0-9]+)*\.[A-z0-9]+([-.][A-z0-9]+)*)*$/.test(email)) {
376        return false;
377    }
378	return true;
379	
380}
381
382function cp_validar(cp) {
383    return /^[0-9]{5}$/.test(cp);
384}
385
386function validar_municipio_pertenece_provincia(provincia_ref, municipio_provincia_ref) {
387    if (!municipio_provincia_ref) return true;
388
389    return provincia_ref === municipio_provincia_ref;
390}
391
392/*
393*### RECLAMACIONES
394*/
395
396const cambos_obligatorios =  ["distribuidora","cliente","cliente.nif", "cliente.nombre", "contacto_telefono", "cups", "fecha_incidente", "nuevo_comentario_comercializadora", 
397    "codigo_incidencia","contacto_nombre", "factura_distribuidora", "tipo_concepto_factura","lectura", "fecha_lectura", 
398    "fecha_desde", "fecha_hasta", "codigo_proceso_reclamado", "parametro_contratacion", "IBAN", "num_expediente_acometida",
399    "codigo_solicitud_reclamacion", "importe_reclamado", "tipo_atencion_incorrecta", "num_expediente_fraude",
400    "ubicacion_incidencia_descripcion","ubicacion_incidencia_provincia","ubicacion_incidencia_municipio","contacto_email",
401    "tipo_disconformidad_autoconsumo_facturado","motivo_consulta","cau"];
402
403const definicion_obligatorio = {
404"001": [1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,],
405"002": [1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
406"003": [1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,],
407"004": [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,],
408"005": [1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
409"006": [1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
410"007": [1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
411"008": [1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
412"009": [1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
413"010": [1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
414"011": [1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
415"012": [1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
416"013": [1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
417"014": [1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,],
418"015": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
419"018": [1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,],
420"019": [1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,],
421"020": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
422"021": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,],
423"022": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
424"023": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,],
425"024": [1,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,],
426"026": [1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,],
427"028": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
428"029": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,],
429"031": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,],
430"032": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
431"034": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,],
432"035": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
433"037": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
434"038": [1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
435"039": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
436"040": [1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
437"041": [1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,],
438"043": [1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
439"044": [1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
440"045": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
441"046": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
442"048": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
443"049": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
444// "055": [1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,], // Fecha baja: 2025-03-10
445// "056": [1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,], // Fecha baja: 2025-03-10
446"057": [1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,],
447"058": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
448"059": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
449"060": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
450"061": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
451"062": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
452"063": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
453"064": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
454"065": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
455"066": [1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,],
456"067": [1,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
457"070": [1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,],
458"071": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
459"072": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
460"073": [1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
461"074": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,],
462"075": [1,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,],
463"076": [1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,],
464"077": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,],
465"078": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
466"079": [1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
467"080": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
468"081": [1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
469"082": [1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,],
470"083": [1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,],
471// Rellenar a partir de "CNMC - E - R1 Campos Min 2024.05.16.xlsx" cuando haya nuevos subtipos o cambios en la obligatoriedad de los antiguos.
472// OJO: Hay diferencias entre las columnas de "CNMC - E - R1 Campos Min 2024.05.16.xlsx" y las de este array:
473// - El orden de las columnas no es el mismo, mirar una por una.
474// - distribuidora y cliente siempre obligatorios: 1
475// - UBICACIÓN INCIDENCIA => ubicacion_incidencia_descripcion, ubicacion_incidencia_provincia, ubicacion_incidencia_municipio
476// - ¿contacto_email no existe en el .xlsx de la CNMC y solo esta marcado obligatorio en subt
476ipo 003 INCIDENCIA EN EQUIPOS DE MEDIDA?
477// OJO: Mantener sincronizados:
478// - web/mod/procesos_atr/data/REMPLACE_subtipo_reclamacion.csv
479// - web/pub/Libraries/js/validaciones.js => definicion_obligatorio[]
480// - web/vuebridge/Controllers/Verificaciones.cs => definicion_obligatorio[]
481};
482
483function verificarObligatoriedad(subtipo_reclamacion_ref, campo)
484{
485    if (subtipo_reclamacion_ref == null)
486    {
487            return false;
488    }
489    return (definicion_obligatorio[subtipo_reclamacion_ref][cambos_obligatorios.indexOf(campo)] != 1);
490}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.