mtt-simple
Version:
Biblioteca de componentes y helpers para desarrollo de formularios en SIMPLE digital
410 lines (380 loc) • 22.5 kB
JavaScript
'use strict'
const core = require('./core')
const utils = require('./utils')
/**
* Datos del documento cargado a S3
* @typedef {Object} ArchivoRepositorioTypedef
* @property {string} name - filename
* @property {string} url - en S3
* @property {string} contentType - content type
*/
/**
* @typedef {Object} ObservacionExedocTypedef
* @property {string} texto
* @property {ArchivoRepositorioTypedef} archivo
*/
/**
* @typedef {Object} DatosExedocTypedef
* @property {number} idTramite
* @property {string} nombreTramite
* @property {string?} codigoCatalogacion - identificador del trámite en la catalogación de trámites RNT (usado tb por PET)
* @property {string} rutSolicitante - 12345678-K
* @property {string} nombreSolicitante
* @property {string} rutResponsable - 12345678-K
* @property {string} nombreResponsable
* @property {number?} tipoDocumentoExedoc - será inferido desde el idTipoServicio o ser especificado desde EXEDOC_CATEGORIA_TRAMITE
* @property {number?} tipoMateriaExedoc - será inferido desde el codigoCatalogacion o ser entregado usando EXEDOC_MATERIA
* @property {number} folio - Folio del servicio
* @property {string} codRegion - '01' ... '13' ... '16'
* @property {number} idTipoServicio - id registrado en RNT
* @property {string[]|string} ppus - arreglo de las ppus involugradas en el trámite
* @property {string} idTransaccion - identificador transacción, por ejemplo idExt de TGR
* @property {number} tipoComprobante - catalogación definida en EXEDOC_TIPO_COMPROBANTE
* @property {string} fechaHoraPago - formato yyyy-MM-dd
* @property {string} sucursalPago
* @property {number} monto
* @property {ArchivoRepositorioTypedef} archivo - datos caratula resumen
* @property {ObservacionExedocTypedef[]} observaciones - listado de documentos cargados por el solicitante con su respectivo texto a ser desplegado
*/
/**
* @typedef {Object} ConfiguracionesExedocTypedef
* @property {string} prefijoGrupoExedoc - prefijo usado para el grupo de destino en EXEDOC
* @property {string} emisor
* @property {string} documentoAutor
* @property {string} documentoNombreDestinatario
* @property {string} nivelUrgencia
* @property {string} destinatarioUsuario
* @property {boolean} destinatarioCopia
*/
/** @type {ConfiguracionesExedocTypedef} */
const CONFIGURACION_EXEDOC_DEFAULTS = {
prefijoGrupoExedoc: 'RegistroAtiende',
emisor: 'simple',
documentoAutor: 'simple',
documentoNombreDestinatario: "Secretario Regional Ministerial de Transporte y Telecomunicaciones",
nivelUrgencia: 'normal',
destinatarioUsuario: 'simple',
destinatarioCopia: false
}
/** catalogación de trámites */
const EXEDOC_CATEGORIA_TRAMITE = {
TRANSPORTE_PUBLICO: 91,
TRANSPORTE_PRIVADO: 92,
TRANSPORTE_ESCOLAR: 93
}
/**
* En base al tipo de servicio indicado entrega la catalogación del servicio
* @param {number} idTipoServicio
* @returns {number} - el valor de la catalogación desde EXEDOC_CATEGORIA_TRAMITE
*/
function categoriaTramite(idTipoServicio) {
switch (idTipoServicio) {
case 4: // RURAL BUS ESCOLAR
case 6: // URBANO BUS ESCOLAR
case 8: // RURAL MINIBUS ESCOLAR
case 10: // URBANO MINIBUS ESCOLAR
return EXEDOC_CATEGORIA_TRAMITE.TRANSPORTE_ESCOLAR
case 61: // INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 62: // RURAL BUS/MINIBUS GENERAL
case 63: // RURAL INTERURBANO BUS/MINIBUS GENERAL
case 64: // RURAL INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 65: // RURAL TURISMO BUS/MINIBUS GENERAL
case 66: // TURISMO ANFIBIO/EXPEDICION GENERAL
case 67: // TURISMO BUS/MINIBUS GENERAL
case 68: // TURISMO CAMIONETA 4X4 GENERAL
case 69: // TURISMO JEEP 4X4 GENERAL
case 70: // TURISMO LIMUSINA GENERAL
case 71: // TURISMO STATIONWAGON GENERAL
case 72: // URBANO BUS/MINIBUS GENERAL
case 73: // URBANO INTERURBANO BUS/MINIBUS GENERAL
case 74: // URBANO INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 75: // URBANO INTERURBANO TURISMO LIMUSINA GENERAL
case 76: // URBANO RURAL BUS/MINIBUS GENERAL
case 77: // URBANO RURAL LIMUSINA GENERAL
case 78: // URBANO RURAL INTERURBANO BUS/MINIBUS GENERAL
case 79: // URBANO RURAL INTERURBANO LIMUSINA GENERAL
case 80: // URBANO RURAL INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 81: // URBANO RURAL INTERURBANO TURISMO LIMUSINA GENERAL
case 82: // URBANO RURAL TURISMO BUS/MINIBUS GENERAL
case 83: // URBANO TURISMO BUS/MINIBUS GENERAL
case 101: // ESCOLAR BUS/MINIBUS ESPECIAL
case 121: // URBANO RURAL TURISMO LIMUSINA GENERAL
case 161: // INTERURBANO BUS/MINIBUS GENERAL
return EXEDOC_CATEGORIA_TRAMITE.TRANSPORTE_PRIVADO
case 2: // INTERURBANO BUS CORRIENTE
case 3: // RURAL BUS CORRIENTE
case 5: // URBANO BUS CORRIENTE
case 7: // RURAL MINIBUS CORRIENTE
case 9: // URBANO MINIBUS CORRIENTE
case 11: // URBANO BUS EXPRESO
case 12: // URBANO MINIBUS EXPRESO
case 13: // URBANO BUS LOCAL
case 14: // RURAL BUS PERIFÉRICO
case 15: // AEROPUERTO BUS RECORRIDO FIJO
case 16: // AEROPUERTO MINIBUS RECORRIDO FIJO
case 17: // AEROPUERTO BUS RECORRIDO VARIABLE
case 18: // AEROPUERTO MINIBUS RECORRIDO VARIABLE
case 19: // URBANO AUTOMOVIL TAXI BÁSICO
case 20: // INTERURBANO AUTOMOVIL TAXI COLECTIVO
case 21: // RURAL AUTOMOVIL TAXI COLECTIVO
case 22: // URBANO AUTOMOVIL TAXI COLECTIVO
case 23: // URBANO AUTOMOVIL TAXI EJECUTIVO
case 24: // URBANO AUTOMOVIL TAXI TURISMO
case 25: // URBANO BUS TMV
case 26: // URBANO BUS TRANSANTIAGO
case 181: // AUTORIZADO TRAMITE LINEA
return EXEDOC_CATEGORIA_TRAMITE.TRANSPORTE_PUBLICO
default: throw new Error(`Tipo de Servicio no catalogado '${idTipoServicio}'`)
}
}
/** materia referida del trámite en EXEDOC */
const EXEDOC_MATERIA = {
SIN_MATERIA: 1,
INSC_SERVICIO: 6,
INSC_SERVICIO_BUS_MINIBUS_TROLE: 7,
INSC_VEHICULO_BUS_MINIBUS_TROLE_REEMPLAZO: 8,
INSC_VEHICULO_BUS_MINIBUS_TROLE_DIRECTA: 9,
INSC_SERVICIO_BTE: 10,
INSC_SERVICIO_TAXI_COLECTIVO: 11,
INSC_VEHICULO_DIRECTA_20474_20867: 12,
REINSC_VEHICULO_TRASLADO: 13,
INSC_VEHICULO_RENUEVA_TU_TAXI: 14,
CERT_VEHICULO_DUPLICADO_INSCRIPCION: 27,
INSC_SERVICIOS: 36,
INSC_VEHICULOS: 37,
INCS_VEHICULO: 59,
}
/**
* entregar la catalogación de materia en EXEDOC según la catalogación del trámite en RNT de SEGPRES
* @param {string} idCatalogacion - id proceso (mismo usado como idPET para registro de acciones)
* @returns {number} el código catalogado en EXEDOC para el trámite
*/
function materiaTramite(idCatalogacion) {
const codigo = idCatalogacion.toString().padStart(10, '0')
switch (codigo) {
case '0100010029': return 7 // Inscripción de servicios de buses, minibuses y trolebuses en el RNSTP
case '0100010042': return 8 // Inscripción de servicios de taxis colectivos en el RNSTP
case '0100010030': return 9 // Inscripción de servicios de taxi básico, taxi turismo o taxi ejecutivo en el RNSTP
// case '0100010096': return 5 // Renovación de inscripción de servicios inscritos en el RNSTP
// case '0100010097': return 6 // Modificación de Información del responsable de un servicio inscrito en RNSTP
// case '0100010098': return 7 // Cambio de Domicilio Legal del Responsable de un Servicio inscrito en el RNSTP
// case '0100010025': return 8 // Modificación de representante(s) legal(es) en servicios inscritos RNSTP
case '0100010049': return 14 // Inscripción de un bus, trolebús minibús, por ingreso directo o primera inscripción, en un servicio de locomoción colectiva en el RNSTP
// case '0100010093': return 10 // Inscripción de un bus, trolebús minibús, por reemplazo o renovación por chatarrización, en un servicio inscrito en el RNSTP.
case '0100010005': return 16 // Inscripción de un taxi por reemplazo (general o por Ley o Siniestro) o por Programa Renueva Tu Taxi en el RNSTP
// case '0100010094': return 12 // Inscripción directa de taxis por Ley 20.474/20,867 en el Registro Nacional de Servicios de Transporte de Pasajero.
// case '0100010095': return 13 // Reinscripción de vehículos en un servicio inscrito en el RNSTP, que provienen de un traslado de región o de un traslado de servicio en la misma región.
// case '0100010048': return 14 // Cambio de propietario (transferencia) en vehículos de servicios inscritos en RNSTP
// case '0100010067': return 15 // Incorporación, Eliminación o modificación de conductor inscrito en servicios en el RNSTP.
// case '0100010056': return 16 // Cancelación por traslado de región de un vehículo inscrito en un servicio en el RNSTP
// case '0100010009': return 17 // Cancelación por traslado de servicio dentro de la misma región de un vehículo inscrito en un servicio en el RNSTP.
// case '0100010012': return 18 // Cambio modalidad de un taxi inscrito en un servicio en el RNSTP
// case '0100010003': return 19 // Otras cancelaciones temporales de un vehículo inscrito en un servicio en el RNSTP (voluntaria, por normas regionales, etc.)
// case '0100010099': return 20 // Cancelaciones definitivas (por reemplazo, antigüedad, etc.) de un vehículo inscrito en un servicio en el RNSTP.
// case '0100010050': return 21 // Cancelación de la inscripción de un servicio inscrito en el RNSTP
case '0100010007': return 27 // Duplicado de certificado inscripción y/o Logo (taxis RM) de un vehículo de un servicio inscrito en el RNSTP
case '0100010045': return 28 // Certificación del estado actual de un vehículo o servicio en el RNSTP
// case '0100010044': return 24 // Certificado para obtener revisión técnica de un vehículo inscrito en un servicio del RNSTP o de vehículo entrante en el proceso de reemplazo en la renovación de taxis.
case '0100010135': return 30 // Listado de Flota de servicios inscritos en el RNSTP
// case '0100010027': return 26 // Cambio o modificación de recorridos, trazados o itinerario con o sin cambio de terminal, en servicios de locomoción colectiva inscritos en el RNSTP.
// case '0100010026': return 27 // Cambio o modificación de horarios de atención por días de semana y/o de las frecuencias en los servicios de locomoción colectiva, inscritos en el RNSTP
// case '0100010043': return 28 // Modificación ubicación oficinas de ventas de pasajes en servicios interurbanos de locomoción colectiva inscritos en el RNSTP
// case '0100010100': return 29 // Informa modificación de tarifas servicios inscritos en el RNSTP
case '0100010016': return 35 // Inscripción de Servicios en el RENASTRE
// case '0100010137': return 31 // Renovación de inscripción de servicios inscritos en RENASTRE
// case '0100010136': return 32 // Modificación de Información del responsable de un servicio inscrito en el RENASTRE
// case '0100010109': return 34 // Modificación de representante(s) legal(es) en servicios inscritos en el RENASTRE
// case '0100010102': return 35 // Inscripción de vehículos en servicios inscritos en el RENASTRE
// case '0100010117': return 36 // Cambio de propietario (transferencia) en vehículos de servicios inscritos en el RENASTRE
// case '0100010119': return 37 // Cambio en la Capacidad de Asientos en un Vehículo inscrito en el RENASTRE
// case '0100010127': return 38 // Incorporación o Eliminación de conductor inscrito en RENASTRE.
// case '0100010068': return 39 // Incorporación/Eliminación de adulto acompañante en RENASTRE
// case '0100010123': return 40 // Cancelación por traslado de región de un vehículo inscrito en el RENASTRE
// case '0100010105': return 42 // Otras cancelaciones temporales de un vehículo inscrito en el RENASTRE (voluntaria, por normas regionales, etc.)
// case '0100010120': return 44 // Cancelación de la inscripción de un servicio inscrito en el RENASTRE
case '0100010107': return 50 // Duplicado de certificado inscripción de un vehículo de un servicio inscrito en el RENASTRE.
case '0100010113': return 51 // Certificación del estado actual de un vehículo o servicio en el RENASTRE
// case '0100010111': return 47 // Certificado para obtener revisión técnica de un vehículo inscrito o a inscribir en un servicio en el RENASTRE.
case '0100010134': return 53 // Listado de Flota de servicios inscritos en el RENASTRE
case '0100010023': return 60 // Inscripción de Servicios de TTEPRIV (Autorización General).
// case '0100010122': return 50 // Inscripción de Servicios de TTEPRIV con vehículos inscritos en RENASTRE (Autorización Especial)
// case '0100010126': return 52 // Modificación de Información del responsable de un servicio inscrito como TTEPRIV
// case '0100010130': return 53 // Cambio de Domicilio Legal del Responsable de un Servicio inscrito como TTEPRIV
// case '0100010110': return 54 // Modificación de representante(s) legal(es) en servicios inscritos como TTEPRIV
// case '0100010125': return 55 // Inscripción de vehículo en un servicio inscrito como TTEPRIV
// case '0100010118': return 56 // Cambio de propietario (transferencia) en vehículos de servicios inscritos como TTEPRIV
// case '0100010131': return 57 // Modificación a la Capacidad de Asientos en un Vehículo Que Presta Servicio de TTEPRIV (Autorización General).
// case '0100010128': return 58 // Incorporación o Eliminación de conductor en servicios inscritos como TTEPRIV
// case '0100010124': return 59 // Cancelación por traslado de región de un vehículo inscrito como TTEPRIV (Autorización General)
// case '0100010138': return 60 // Cancelación por traslado de servicio dentro de la misma región de un vehículo inscrito como TTEPRIV (Autorización General)
// case '0100010106': return 61 // Otras cancelaciones temporales de un vehículo inscrito como TTEPRIV (Autorización General) (voluntaria, por normas regionales, etc.)
// case '0100010139': return 62 // Cancelaciones definitivas de un vehículo inscrito como TTEPRIV (Autorización General)
// case '0100010140': return 63 // Cancelación de un vehículo inscrito en TTEPRIV (Autorización Especial)
// case '0100010121': return 64 // Cancelación de la inscripción de un servicio inscrito en TTEPRIV
case '0100010108': return 70 // Duplicado de constancia de autorización de un vehículo de un servicio inscrito como TTEPRIV.
case '0100010114': return 108 // Certificación del estado actual de un vehículo o servicio en TTEPRIV
// case '0100010112': return 67 // Certificado para obtener revisión técnica de un vehículo inscrito o por inscribir en TTEPRIV (Autorización General)
default:
console.warn(`no se identifica catalogación para proceso '${codigo}' (${idCatalogacion}) `)
return 0
}
}
/** tipo de comprobante del pago catalogado */
const EXEDOC_TIPO_COMPROBANTE = {
DEPOSITO_EFECTIVO: 1,
DEPOSITO_DOCUMENTOS: 2,
TRANSFERENCIA: 3,
BOTON_DE_PAGO: 4
}
/**
* Entrega la codificación de Tipo de Servicio asociado al trámite electrónico usando el id de Tipo de Servicio registrado en RNT
* @param {number} idTipoServicio - Id del tipo servicio en RNT
* @returns {number} - código de servicio registrado en EXEDOC
*/
function tipoServicioExedoc(idTipoServicio) {
switch (idTipoServicio) {
case 1: return 6 // INTERNACIONAL BUS CORRIENTE
case 2: return 9 // INTERURBANO BUS CORRIENTE
case 3: return 13 // RURAL BUS CORRIENTE
case 4: return 14 // RURAL BUS ESCOLAR
case 5: return 32 // URBANO BUS CORRIENTE
case 6: return 33 // URBANO BUS ESCOLAR
case 7: return 17 // RURAL MINIBUS CORRIENTE
case 8: return 18 // RURAL MINIBUS ESCOLAR
case 9: return 39 // URBANO MINIBUS CORRIENTE
case 10: return 40 // URBANO MINIBUS ESCOLAR
case 11: return 34 // URBANO BUS EXPRESO
case 12: return 41 // URBANO MINIBUS EXPRESO
case 13: return 35 // URBANO BUS LOCAL
case 14: return 15 // RURAL BUS PERIFÉRICO
case 15: return 1 // AEROPUERTO BUS RECORRIDO FIJO
case 16: return 3 // AEROPUERTO MINIBUS RECORRIDO FIJO
case 17: return 2 // AEROPUERTO BUS RECORRIDO VARIABLE
case 18: return 4 // AEROPUERTO MINIBUS RECORRIDO VARIABLE
case 19: return 28 // URBANO AUTOMOVIL TAXI BÁSICO
case 20: return 8 // INTERURBANO AUTOMOVIL TAXI COLECTIVO
case 21: return 12 // RURAL AUTOMOVIL TAXI COLECTIVO
case 22: return 29 // URBANO AUTOMOVIL TAXI COLECTIVO
case 23: return 30 // URBANO AUTOMOVIL TAXI EJECUTIVO
case 24: return 31 // URBANO AUTOMOVIL TAXI TURISMO
case 25: return 36 // URBANO BUS TMV
case 26: return 37 // URBANO BUS TRANSANTIAGO
case 61: return 11 // INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 62: return 16 // RURAL BUS/MINIBUS GENERAL
case 63: return 19 // RURAL INTERURBANO BUS/MINIBUS GENERAL
case 64: return 20 // RURAL INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 65: return 21 // RURAL TURISMO BUS/MINIBUS GENERAL
case 66: return 22 // TURISMO ANFIBIO/EXPEDICION GENERAL
case 67: return 23 // TURISMO BUS/MINIBUS GENERAL
case 68: return 24 // TURISMO CAMIONETA 4X4 GENERAL
case 69: return 25 // TURISMO JEEP 4X4 GENERAL
case 70: return 26 // TURISMO LIMUSINA GENERAL
case 71: return 27 // TURISMO STATIONWAGON GENERAL
case 72: return 38 // URBANO BUS/MINIBUS GENERAL
case 73: return 42 // URBANO INTERURBANO BUS/MINIBUS GENERAL
case 74: return 43 // URBANO INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 75: return 44 // URBANO INTERURBANO TURISMO LIMUSINA GENERAL
case 76: return 45 // URBANO RURAL BUS/MINIBUS GENERAL
case 77: return 46 // URBANO RURAL LIMUSINA GENERAL
case 78: return 47 // URBANO RURAL INTERURBANO BUS/MINIBUS GENERAL
case 79: return 48 // URBANO RURAL INTERURBANO LIMUSINA GENERAL
case 80: return 49 // URBANO RURAL INTERURBANO TURISMO BUS/MINIBUS GENERAL
case 81: return 50 // URBANO RURAL INTERURBANO TURISMO LIMUSINA GENERAL
case 82: return 51 // URBANO RURAL TURISMO BUS/MINIBUS GENERAL
case 83: return 53 // URBANO TURISMO BUS/MINIBUS GENERAL
case 101: return 5 // ESCOLAR BUS/MINIBUS ESPECIAL
case 121: return 52 // URBANO RURAL TURISMO LIMUSINA GENERAL
case 141: return 7 // INTERNACIONAL CAMION/VEH.APOYO CORRIENTE
case 161: return 10 // INTERURBANO BUS/MINIBUS GENERAL
default:
console.warn(`no se registra un código de servicio asociado al tipo de servicio ${idTipoServicio}`)
return 0
}
}
/**
* Convierte el listado de observaciones al formato json de EXEDOC
* @param {ObservacionExedocTypedef[]} obs
*/
function mapObservaciones(obs) {
return obs ? obs.map(o => ({
texto: o.texto,
archivo: o.archivo ? {
nombreArchivo: o.archivo.name,
contentType: o.archivo.contentType,
data: o.archivo.url
} : null,
adjuntadoPor: "simple"
})) : []
}
/**
* @param {DatosExedocTypedef} datos
* @param {ConfiguracionesExedocTypedef} opciones
*/
function crearObjetoExedoc(datos, opciones) {
try {
const fechaActual = new Date()
var objExe = {
"emisor": opciones.emisor,
"idSimple": datos.idTramite,
"identificadorServicio": (datos.folio || "s/n").toString(),
"idRegion": datos.codRegion,
"idTipoServicio": tipoServicioExedoc(datos.idTipoServicio),
"ppu": Array.isArray(datos.ppus) ? datos.ppus.join(';') : datos.ppus,
"rutResponsable": datos.rutResponsable,
"rutSolicitante": datos.rutSolicitante,
"nombreSolicitante": datos.nombreSolicitante,
"idTransaccion": datos.idTransaccion,
"monto": datos.monto || 0,
"tipoComprobante": datos.tipoComprobante || 0,
"fechaHoraPago": datos.fechaHoraPago || '',
"sucursalPago": datos.sucursalPago || '',
"urlCallbackSimple": `${window.location.protocol}//${window.location.host}/backend/api/notificar/${datos.idTramite}`,
"documento": {
"numero": "s/n",
"fecha": utils.toStrDatetime(fechaActual),
"autor": opciones.documentoAutor,
"tipoDocumento": datos.tipoDocumentoExedoc || categoriaTramite(datos.idTipoServicio),
"tipoMateria": datos.tipoMateriaExedoc || materiaTramite(datos.codigoCatalogacion),
"reservado": false,
"antecedentes": "s/a",
"materia": datos.nombreTramite,
"nivelUrgencia": datos.nivelUrgencia,
"emisor": datos.nombreResponsable,
"destinatario": [opciones.documentoNombreDestinatario],
"dataArchivo": datos.archivo.url,
"nombreArchivo": datos.archivo.name,
"contentType": datos.archivo.contentType
},
"destinatario": [{ "usuario": opciones.destinatarioUsuario, "copia": opciones.destinatarioCopia.toString() }],
"destinatarioGrupo": [
`${opciones.prefijoGrupoExedoc}${parseInt(datos.codRegion, 10)}`
],
"observacion": mapObservaciones(datos.observaciones)
}
return objExe
} catch (error) {
return { error: "Error al crear json exedoc: " + error.message, stacktrace: error.stackTrace }
}
}
/**
* Uso del campo indicado como destino del objeto deshidratado para enviar a EXEDOC
* @param {string} nombreCampo - nombre del campo en formulario simple
* @param {DatosExedocTypedef} datos
* @param {ConfiguracionesExedocTypedef} opciones
*/
function definirCampoJsonExedoc(nombreCampo, datos, opciones) {
const opts = Object.assign({}, CONFIGURACION_EXEDOC_DEFAULTS, opciones || {})
const $t = core.usarInputComoHidden(nombreCampo)
const objExedoc = crearObjetoExedoc(datos, opts)
console.debug('definirCampoJsonExedoc', objExedoc)
$t.val(utils.deshidratar(objExedoc))
}
module.exports = {
EXEDOC_CATEGORIA_TRAMITE,
EXEDOC_MATERIA,
EXEDOC_TIPO_COMPROBANTE,
definirCampoJsonExedoc,
tipoServicioExedoc,
categoriaTramite,
materiaTramite
}