row-validator

Validator for rows of surveys

Usage no npm install needed!

<script type="module">
  import rowValidator from 'https://cdn.skypack.dev/row-validator';
</script>

README

row-validator

Validator de registros provenientes de formularios

Especialmente diseñado para encuestas

extending npm-version downloads Node.js CI Coverage Status

Estructura

El validador necesita conocer la estructura de la encuesta:

export type Valor = string | number | boolean | null

export interface Opcion<V>{
    salto?:V|null         // Destino del salto para la opción seleccionada
}

export interface Variable<V, FH, FIN>{
    optativa?:boolean     // Obligatoriedad el ingreso de la variable
    salto?:V|FIN|null     // Destino del salto en caso de saltos icondicionales
    tipo:'opciones'|'numerico'|'texto'|string
    opciones?:{[k in string|number]:Opcion<V|FIN>}
    maximo?:number|null   // Máximo valor válido
    minimo?:number|null   // Míximo valor válido
    // Para variables de especifique dependientes de una opción:
        subordinadaVar?:V|null           // variable de la que depende
        subordinadaValor?:Valor|null     // valor que la activa
    saltoNsNr?:V|FIN|null       // Salto en el caso de no respuesta o NS/NC
    calculada?:boolean|null     // Si la variable es calculada (no ingresada)
    funcionHabilitar?:FH|null   // Determina la habilitación dinámica
    libre?:boolean|null         // Posibilidad de ingresarla aunque esté salteada
}

Ejemplo

import { getRowValidator, Structure } from "../lib/row-validator";

type SimpleRow={v1:string|null, v2:number|null, v3:number|null, v4:string|null}

var rowValidator = getRowValidator({});
var simpleStruct:Structure<keyof SimpleRow>={
    marcaFin:'FIN',
    variables:{
        v1:{tipo:'texto'},
        v2:{tipo:'opciones', opciones:{1:{salto:'v4'}, 2:{}}},
        v3:{tipo:'numerico', minimo:0, maximo:98},
        v4:{tipo:'texto'}
    }
}

var row:SimpleRow = {v1:'alpha', v2:1, v3:null, v4:'b'}
var state = rowValidator(simpleStruct, rowVacia);
console.log(state);
/*
{
    resumen:'ok',
    estados:{v1:'valida', v2:'valida', v3:'salteada', v4:'valida'},
    siguientes:{v1:'v2', v2:'v4', v3:'v4', v4:null},
    actual:null,
    primeraFalla:null,
}
*/