From 7bbeb32b7145d82365f6c303b729c8b56fa99ae5 Mon Sep 17 00:00:00 2001 From: carlsremy Date: Wed, 21 Aug 2024 20:50:38 -0400 Subject: [PATCH] 1.1.0 --- README.md | 33 +++++++++++++++---- dist/dgii-utils.min.js | 2 +- dist/dgii-valid.min.js | 2 +- package.json | 16 ++++++++- src/dgii-utils.js | 75 +++++++++++++++++++++++++++++++++++++++--- src/dgii-valid.js | 21 ++++++++---- test/CarPlate.spec.js | 2 +- 7 files changed, 131 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 6bd282d..3c0b12b 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,38 @@ DGII-Utils es un paquete de herramientas diseñado para simplificar la interacci ## Consultas -### consultRNC +### consultRNC(RNC) Esta función realiza consultas sobre el Registro Nacional de Contribuyentes (RNC), obteniendo información relevante sobre un contribuyente específico según su RNC. Es útil para verificar la validez y detalles de un RNC en sistemas fiscales o administrativos. -### consultCuidadanos +### consultCuidadanos(RNC) Esta función realiza consulta que muestran a las personas inscritas en el RNC como: Propietario de Vehículos/Inmuebles, Empleado/Asalariado, Diplomático/Cónsul, Participación en Empresas, Sucesiones y Otras ocupaciones +### consultCarPlate(RNC, CarPlate) +Esta función realiza consultas que muestran informacion sobre el Vehiculo al cual esta Asociado la Cedula e placa proporcionadas para la busqueda + +#### Ejemplo: +```js + const result = await consultCarPlate("049xxxxxxxx", "L196XXX") + + console.log(result) +/*{ + placa: 'L196XXX', + marca: 'TOYOTA', + modelo: 'RN34L-KRA', + color: 'AMARILLO', + fabricacion: '1983', + estado: 'ACTIVO / CON OPOSICION', + oposiciones: [ 'ADMINISTRATIVA', '(No puede renovar)' ] +}*/ + +``` + **Nota:** No todas las Cedulas o RNC funcionan -### consultNCF +### consultNCF(RNC, NCF) Esta función permite consultar información sobre Números de Comprobantes Fiscales (NCF). Es utilizada para verificar la validez de un NCF y para obtener detalles relacionados con los comprobantes fiscales emitidos. -### consultENCF +### consultENCF(RNC, ENCF) Función que realiza consultas sobre Números de Comprobantes Fiscales Electrónicos (e-CF). Proporciona detalles y verifica la autenticidad de un e-CF, asegurando que cumple con las normativas y está correctamente registrado. ## Objetos @@ -43,8 +63,9 @@ Este objeto está diseñado para gestionar funciones relacionadas con los Númer ### CarPlate Este objeto ofrece herramientas para manejar y validar placas de vehículos. Sus funciones principales incluyen: -**valid:** Verifica si una placa de vehículo es válida según los formatos y reglas establecidos. -**getType:** Identifica y devuelve el tipo de placa de vehículo basándose en su código. +- **valid:** Verifica si una placa de vehículo es válida según los formatos y reglas establecidos. +- **getType:** Identifica y devuelve el tipo de placa de vehículo basándose en su código. +- **clear:** Limpia la placa de caracteres no esenciales. ### isSecureCode Esta función valida el formato del Código de Seguridad de un e-CF. diff --git a/dist/dgii-utils.min.js b/dist/dgii-utils.min.js index 2fbbeb0..d19621c 100644 --- a/dist/dgii-utils.min.js +++ b/dist/dgii-utils.min.js @@ -1 +1 @@ -const{clearRNC:clearRNC,clearNCF:clearNCF,isRNC:isRNC,isENCF:isENCF,isNCF:isNCF,isSecureCode:isSecureCode,isCarPlate:isCarPlate}=require("./dgii-valid.min.js"),{formatNCF:formatNCF,formatRNC:formatRNC,DGIIReceiptTypes:DGIIReceiptTypes,vehiclePlateTypes:vehiclePlateTypes,TypeCarPlate:TypeCarPlate}=require("./dgii-format.min.js"),axios=require("axios"),cheerio=require("cheerio"),clearText=(e="")=>e.replace(/\s+/g," ").trim(),RNC=Object.freeze({valid:isRNC,format:formatRNC,clear:clearRNC}),NCF=Object.freeze({valid:isNCF,format:formatNCF,clear:clearNCF}),ENCF=Object.freeze({valid:isENCF,format:formatNCF,clear:clearNCF}),CarPlate=Object.freeze({valid:isCarPlate,getType:TypeCarPlate}),axiosInstance=axios.create({baseURL:"https://www.dgii.gov.do/app/WebApps/ConsultasWeb2/ConsultasWeb/consultas",timeout:13e3,headers:{"Content-Type":"application/x-www-form-urlencoded; charset=utf-8","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36"}});async function consultRNC(e=""){if(e=clearRNC(e),!isRNC(e))throw new Error("El RNC o Cedula debe tener 9 o 11 digitos.");const a=new URLSearchParams({ctl00$smMain:"ctl00$cphMain$upBusqueda|ctl00$cphMain$btnBuscarPorRNC",__EVENTTARGET:"ctl00$cphMain$btnBuscarPorRNC",__VIEWSTATEGENERATOR:"4F4BAA71",__EVENTARGUMENT:"",__VIEWSTATE:"cmJAurOULC9dG0bI8Oz0bAXSeuLRRkRr3zXxlLme0a01Xjet+nK7/2lHxlCV2b1fQW5KW2TzKWEEaRM8lXaTIvsB7P8P0sRWzojCm51iaZRNniwXmZU+/MhDuIt/ilnU7hbrkFQr+roUuVHtZyZA2pLsTKC256NftxcEto9TtS4DQ9noKFP66JeXt9LaGc3R4YcWlA3RedIetRLi5Jut4PnIp684jXn61DgpUzkm/dTJuWIUFe5fcApgy+l0dWPEd3TBuyJxXYMzH+7ilkzTGQif5e+LQmh9r2Rt1xzw30UL2kLlIhrd1Q0U3/GG2CjrJyy/ei03tCj9CZ1oK5BCaoW/JHS0/c4Smow6FOC9or15QJChQChXFOmvX9fpBZg91bVVEA==",__EVENTVALIDATION:"CjLylaRlNSCrMI4OAlCzjSprgPSns7lo+1vND45LdQYi/ZQnHhGgHT2F4mfsEnqMFxfWMxnlyLFr3aSE6UXIr4u7kkouBQAtbsCWjO1SsnR/znmBtVODFxHV1pu/MAoBuv/rpJjYGY8v+yNfGdoTAozVlWr0UIHZ0ygM70NByQaLTCuWA90ftJbHpSY1rll2DdASHB8h9P/C8bzW5/3rHwdGYuE2cWboLwz02A2aBj8Myxe+dGWc1TaDDNf53JMHHFkqjq/ABbr+qH5PSvIlVxUJD1Y=",ctl00$cphMain$txtRNCCedula:e,ctl00$cphMain$txtRazonSocial:"",ctl00$cphMain$hidActiveTab:"",__ASYNCPOST:!0});return axiosInstance.post("/rnc.aspx",a).then((async e=>{const a=await e.data,t={},c=cheerio.load(a);if(c){c("tr>td:nth-child(2)","tbody").each(((e,a)=>{switch(t.facturacion_electronica="NO",t.licencias_vhm="N/A",e){case 0:t.RNC=clearText(c(a).text());break;case 1:t.nombre=clearText(c(a).text());break;case 2:t.nombre_comercial=clearText(c(a).text());break;case 3:t.categoria=clearText(c(a).text());break;case 4:t.regimen_pagos=clearText(c(a).text());break;case 5:t.estado=clearText(c(a).text());break;case 6:t.actividad_economica=clearText(c(a).text());break;case 7:t.administracion_local=clearText(c(a).text());break;case 8:t.facturacion_electronica=clearText(c(a).text());break;case 9:t.licencias_vhm=clearText(c(a).text())}}))}return t})).catch((e=>e))}async function consultCuidadanos(e=""){if(e=clearRNC(e),!isRNC(e))throw new Error("El RNC o Cedula debe tener 9 o 11 digitos.");const a=new URLSearchParams({ctl00$smMain:"ctl00$cphMain$upBusqueda|ctl00$cphMain$btnBuscarCedula",__VIEWSTATEGENERATOR:"C8A53969",__EVENTARGUMENT:"",__VIEWSTATE:"INBOPhFTWza2+0135J7r2u2PE8yqzRvCc2euJq0jXM/nibpkcKdcGTsgVFInaRQYG3q623lxgmNJTc8Zenqd732featAv+6xaGECzv/rSAd1NL8uHNkGlj+ynuIcXHqk9ghizcuFWZ5hnf5e7pkSAfduinDwt2443M4GDdlCMMb+RHBuYdYNsr3sZ4ZR8ioz9jRG5uTv7z4aAuaQK7GBdYL20TOsFvr3xu5cOw2/UbVL1RDMduAfMFGJOE9eTw+2NG4yOIVplaH7wVsNG2UyiUuPZfKh8gUGItiI18PMZ4pgUj2tsLcnei02FjVTnNlkUVi1rpeaAvVKCLtj6o5VvKAWYANdOYwIhuGNUJ/24MWIDRC7zKFvn2Ysg5Pt0FF23Eepe4HPycH2PXUgWzSwW8mVesU=",__EVENTVALIDATION:"BY9Sp0yI3eq0nrdkX/evlB6WRkFN4c0BNzNx7WxZsOPXY47RWUV3t6ZzeTJJt3iMSXAqTavMMWTWQ8+Gm9TyhCi9iWi7QhNNS7K6++85tFpB3yazSUA2GJRw8ElHUHDVu/bddheieCMyH+sRKoSy4A8tzCWaaaIm0corZndU0xlLDlMN",ctl00$cphMain$txtCedula:e,ctl00$cphMain$btnBuscarCedula:"Buscar",__ASYNCPOST:!0});return axiosInstance.post("/ciudadanos.aspx",a).then((async e=>{const a=await e.data,t={},c=cheerio.load(a);if(c){c("tr>td:nth-child(2)","tbody").each(((e,a)=>{switch(e){case 0:t.nombre=clearText(c(a).text());break;case 1:t.estado=clearText(c(a).text());break;case 2:t.tipo=clearText(c(a).text());break;case 3:t.RNC=clearText(c(a).text());break;case 4:t.marca=clearText(c(a).text())}}))}return t})).catch((e=>e))}async function _consultNCF(e="",a="",t="",c=""){if(e=clearRNC(e),a=clearNCF(a),t=clearRNC(t),!isRNC(e))throw new Error("El RNC o Cedula debe tener 9 o 11 digitos.");if(!isNCF(a)&&!isENCF(a))throw new Error("El NCF debe tener 11 o 13 digitos.");if(isENCF(a)){if(!isRNC(t))throw new Error("El RNC o Cedula del comprador debe tener 9 o 11 digitos.");if(!isSecureCode(c))throw new Error("El Codigo de Seguridad debe tener 6 caracteres alfanumericos.")}else t="",c="";const r=new URLSearchParams({ctl00$smMain:"ctl00$upMainMaster|ctl00$cphMain$btnConsultar",ctl00$cphMain$txtRNC:e,ctl00$cphMain$txtNCF:a,ctl00$cphMain$txtRncComprador:t,ctl00$cphMain$txtCodigoSeg:c,__EVENTTARGET:"",__EVENTARGUMENT:"",__VIEWSTATE:"pxnVanPQem/C/Zqg4vmdhAuTkdIPB8KP+q9AJ6Us4Oq0Mr1cJzPrCAuAE9G9c3hqm1kwACtIqN7ew5o5ImKFH4reFIvuBM23dZqMj/CxwktO+H2Td/f2LXmb6zYoIkuY7edLaUlsse9DDJZCstX4eNrKq0DmWQAjvrJcmz+K3hprNCtofctCr/C+tCHSoe5blSGl2E+1gcUqKdn4pKOEYuHUidFPfcX9k2UQWFJMDGnf2iTy4/rRnGgbWno4aNNfOkJx4N+JFTRLbp6oq/6yOujWheKYOZbvJ9usT5YedgeZZWsXP14ZEwaK92EIvtZZRmbwcsp4/+IfEABFEOtxgXEigg/nkHtxZ2v7z9mCc53NYklN+g1XrSKRdWdwzhpzgdZ0VSNSpekpr4ZEFUzivrA1kAIVkQYnesadrGsy4WMslqCSoZeUl8nU8dd0WtbxOTzE4E/nlJMk0TFDLTSGWospDG2GSjbTOkTyHrIv1t63ZyBZVqWJd5JS0W0VBGB+J6RNMf+VqKaYqYncsWLb4ehEka0=",__VIEWSTATEGENERATOR:"43758EFE",__EVENTVALIDATION:"w/vZnN4oakS1pbjmnlg6591RbWD3KHfEhCQHpjSAkrGa4R7+PQpfrikWM6vTMMm2KfCHSkIgct85BeyToMc7nvrq9kWAz1g47ZxqmYreUTvIVIp/x7Txq+aFEQffUyi6AjdU6Atza81kzZ4oEzRFyy6Qk4DdXUbMTaeUIay+1eyfFF3BmYRV4zpmFnE2/Iki0dHMVFKapjzmJKB5+AxVymP8P+UGIVjEdTtPFZaBqwCx2qan",__ASYNCPOST:!0,ctl00$cphMain$btnConsultar:"Buscar"});return axiosInstance.post("/ncf.aspx",r).then((async e=>{const a=await e.data,t={},c=cheerio.load(a);return c&&c("td","tbody").each(((e,a)=>{switch(e){case 0:t.RNC=clearText(c(a).text());break;case 1:t.nombre=clearText(c(a).text());break;case 2:t.comprobante=clearText(c(a).text());break;case 3:t.NCF=clearText(c(a).text());break;case 4:t.estado=clearText(c(a).text());break;case 5:t.vigencia=clearText(c(a).text())}})),t})).catch((e=>e))}async function consultNCF(e="",a=""){return _consultNCF(e,a)}async function consultENCF(e="",a="",t="",c=""){return _consultNCF(e,a,t,c)}module.exports={DGIIReceiptTypes:DGIIReceiptTypes,RNC:RNC,NCF:NCF,ENCF:ENCF,CarPlate:CarPlate,isSecureCode:isSecureCode,consultRNC:consultRNC,consultCuidadanos:consultCuidadanos,consultNCF:consultNCF,consultENCF:consultENCF}; \ No newline at end of file +const{clearRNC:clearRNC,clearNCF:clearNCF,clearCarPlate:clearCarPlate,isRNC:isRNC,isENCF:isENCF,isNCF:isNCF,isSecureCode:isSecureCode,isCarPlate:isCarPlate}=require("./dgii-valid.min.js"),{formatNCF:formatNCF,formatRNC:formatRNC,DGIIReceiptTypes:DGIIReceiptTypes,vehiclePlateTypes:vehiclePlateTypes,TypeCarPlate:TypeCarPlate}=require("./dgii-format.min.js"),axios=require("axios"),cheerio=require("cheerio"),clearText=(e="")=>e.replace(/\s+/g," ").trim(),RNC=Object.freeze({valid:isRNC,format:formatRNC,clear:clearRNC}),NCF=Object.freeze({valid:isNCF,format:formatNCF,clear:clearNCF}),ENCF=Object.freeze({valid:isENCF,format:formatNCF,clear:clearNCF}),CarPlate=Object.freeze({valid:isCarPlate,getType:TypeCarPlate,clear:clearCarPlate}),axiosInstance=axios.create({baseURL:"https://www.dgii.gov.do/app/WebApps/ConsultasWeb2/ConsultasWeb/consultas",timeout:13e3,headers:{"Content-Type":"application/x-www-form-urlencoded; charset=utf-8","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36"}});async function consultRNC(e=""){if(e=clearRNC(e),!isRNC(e))throw new Error("El RNC o Cedula debe tener 9 o 11 digitos.");const a=new URLSearchParams({ctl00$smMain:"ctl00$cphMain$upBusqueda|ctl00$cphMain$btnBuscarPorRNC",__EVENTTARGET:"ctl00$cphMain$btnBuscarPorRNC",__VIEWSTATEGENERATOR:"4F4BAA71",__EVENTARGUMENT:"",__VIEWSTATE:"cmJAurOULC9dG0bI8Oz0bAXSeuLRRkRr3zXxlLme0a01Xjet+nK7/2lHxlCV2b1fQW5KW2TzKWEEaRM8lXaTIvsB7P8P0sRWzojCm51iaZRNniwXmZU+/MhDuIt/ilnU7hbrkFQr+roUuVHtZyZA2pLsTKC256NftxcEto9TtS4DQ9noKFP66JeXt9LaGc3R4YcWlA3RedIetRLi5Jut4PnIp684jXn61DgpUzkm/dTJuWIUFe5fcApgy+l0dWPEd3TBuyJxXYMzH+7ilkzTGQif5e+LQmh9r2Rt1xzw30UL2kLlIhrd1Q0U3/GG2CjrJyy/ei03tCj9CZ1oK5BCaoW/JHS0/c4Smow6FOC9or15QJChQChXFOmvX9fpBZg91bVVEA==",__EVENTVALIDATION:"CjLylaRlNSCrMI4OAlCzjSprgPSns7lo+1vND45LdQYi/ZQnHhGgHT2F4mfsEnqMFxfWMxnlyLFr3aSE6UXIr4u7kkouBQAtbsCWjO1SsnR/znmBtVODFxHV1pu/MAoBuv/rpJjYGY8v+yNfGdoTAozVlWr0UIHZ0ygM70NByQaLTCuWA90ftJbHpSY1rll2DdASHB8h9P/C8bzW5/3rHwdGYuE2cWboLwz02A2aBj8Myxe+dGWc1TaDDNf53JMHHFkqjq/ABbr+qH5PSvIlVxUJD1Y=",ctl00$cphMain$txtRNCCedula:e,ctl00$cphMain$txtRazonSocial:"",ctl00$cphMain$hidActiveTab:"",__ASYNCPOST:!0});return axiosInstance.post("/rnc.aspx",a).then((async e=>{const a=await e.data,t={},c=cheerio.load(a);if(c){c("tr>td:nth-child(2)","tbody").each(((e,a)=>{switch(t.facturacion_electronica="NO",t.licencias_vhm="N/A",e){case 0:t.RNC=clearText(c(a).text());break;case 1:t.nombre=clearText(c(a).text());break;case 2:t.nombre_comercial=clearText(c(a).text());break;case 3:t.categoria=clearText(c(a).text());break;case 4:t.regimen_pagos=clearText(c(a).text());break;case 5:t.estado=clearText(c(a).text());break;case 6:t.actividad_economica=clearText(c(a).text());break;case 7:t.administracion_local=clearText(c(a).text());break;case 8:t.facturacion_electronica=clearText(c(a).text());break;case 9:t.licencias_vhm=clearText(c(a).text())}}))}return t})).catch((e=>e))}async function consultCuidadanos(e=""){if(e=clearRNC(e),!isRNC(e))throw new Error("El RNC o Cedula debe tener 9 o 11 digitos.");const a=new URLSearchParams({ctl00$smMain:"ctl00$cphMain$upBusqueda|ctl00$cphMain$btnBuscarCedula",__VIEWSTATEGENERATOR:"C8A53969",__EVENTARGUMENT:"",__VIEWSTATE:"INBOPhFTWza2+0135J7r2u2PE8yqzRvCc2euJq0jXM/nibpkcKdcGTsgVFInaRQYG3q623lxgmNJTc8Zenqd732featAv+6xaGECzv/rSAd1NL8uHNkGlj+ynuIcXHqk9ghizcuFWZ5hnf5e7pkSAfduinDwt2443M4GDdlCMMb+RHBuYdYNsr3sZ4ZR8ioz9jRG5uTv7z4aAuaQK7GBdYL20TOsFvr3xu5cOw2/UbVL1RDMduAfMFGJOE9eTw+2NG4yOIVplaH7wVsNG2UyiUuPZfKh8gUGItiI18PMZ4pgUj2tsLcnei02FjVTnNlkUVi1rpeaAvVKCLtj6o5VvKAWYANdOYwIhuGNUJ/24MWIDRC7zKFvn2Ysg5Pt0FF23Eepe4HPycH2PXUgWzSwW8mVesU=",__EVENTVALIDATION:"BY9Sp0yI3eq0nrdkX/evlB6WRkFN4c0BNzNx7WxZsOPXY47RWUV3t6ZzeTJJt3iMSXAqTavMMWTWQ8+Gm9TyhCi9iWi7QhNNS7K6++85tFpB3yazSUA2GJRw8ElHUHDVu/bddheieCMyH+sRKoSy4A8tzCWaaaIm0corZndU0xlLDlMN",ctl00$cphMain$txtCedula:e,ctl00$cphMain$btnBuscarCedula:"Buscar",__ASYNCPOST:!0});return axiosInstance.post("/ciudadanos.aspx",a).then((async e=>{const a=await e.data,t={},c=cheerio.load(a);if(c){c("tr>td:nth-child(2)","tbody").each(((e,a)=>{switch(e){case 0:t.nombre=clearText(c(a).text());break;case 1:t.estado=clearText(c(a).text());break;case 2:t.tipo=clearText(c(a).text());break;case 3:t.RNC=clearText(c(a).text());break;case 4:t.marca=clearText(c(a).text())}}))}return t})).catch((e=>e))}async function _consultNCF(e="",a="",t="",c=""){if(e=clearRNC(e),a=clearNCF(a),t=clearRNC(t),!isRNC(e))throw new Error("El RNC o Cedula debe tener 9 o 11 digitos.");if(!isNCF(a)&&!isENCF(a))throw new Error("El NCF debe tener 11 o 13 digitos.");if(isENCF(a)){if(!isRNC(t))throw new Error("El RNC o Cedula del comprador debe tener 9 o 11 digitos.");if(!isSecureCode(c))throw new Error("El Codigo de Seguridad debe tener 6 caracteres alfanumericos.")}else t="",c="";const r=new URLSearchParams({ctl00$smMain:"ctl00$upMainMaster|ctl00$cphMain$btnConsultar",ctl00$cphMain$txtRNC:e,ctl00$cphMain$txtNCF:a,ctl00$cphMain$txtRncComprador:t,ctl00$cphMain$txtCodigoSeg:c,__EVENTTARGET:"",__EVENTARGUMENT:"",__VIEWSTATE:"pxnVanPQem/C/Zqg4vmdhAuTkdIPB8KP+q9AJ6Us4Oq0Mr1cJzPrCAuAE9G9c3hqm1kwACtIqN7ew5o5ImKFH4reFIvuBM23dZqMj/CxwktO+H2Td/f2LXmb6zYoIkuY7edLaUlsse9DDJZCstX4eNrKq0DmWQAjvrJcmz+K3hprNCtofctCr/C+tCHSoe5blSGl2E+1gcUqKdn4pKOEYuHUidFPfcX9k2UQWFJMDGnf2iTy4/rRnGgbWno4aNNfOkJx4N+JFTRLbp6oq/6yOujWheKYOZbvJ9usT5YedgeZZWsXP14ZEwaK92EIvtZZRmbwcsp4/+IfEABFEOtxgXEigg/nkHtxZ2v7z9mCc53NYklN+g1XrSKRdWdwzhpzgdZ0VSNSpekpr4ZEFUzivrA1kAIVkQYnesadrGsy4WMslqCSoZeUl8nU8dd0WtbxOTzE4E/nlJMk0TFDLTSGWospDG2GSjbTOkTyHrIv1t63ZyBZVqWJd5JS0W0VBGB+J6RNMf+VqKaYqYncsWLb4ehEka0=",__VIEWSTATEGENERATOR:"43758EFE",__EVENTVALIDATION:"w/vZnN4oakS1pbjmnlg6591RbWD3KHfEhCQHpjSAkrGa4R7+PQpfrikWM6vTMMm2KfCHSkIgct85BeyToMc7nvrq9kWAz1g47ZxqmYreUTvIVIp/x7Txq+aFEQffUyi6AjdU6Atza81kzZ4oEzRFyy6Qk4DdXUbMTaeUIay+1eyfFF3BmYRV4zpmFnE2/Iki0dHMVFKapjzmJKB5+AxVymP8P+UGIVjEdTtPFZaBqwCx2qan",__ASYNCPOST:!0,ctl00$cphMain$btnConsultar:"Buscar"});return axiosInstance.post("/ncf.aspx",r).then((async e=>{const a=await e.data,t={},c=cheerio.load(a);return c&&c("td","tbody").each(((e,a)=>{switch(e){case 0:t.RNC=clearText(c(a).text());break;case 1:t.nombre=clearText(c(a).text());break;case 2:t.comprobante=clearText(c(a).text());break;case 3:t.NCF=clearText(c(a).text());break;case 4:t.estado=clearText(c(a).text());break;case 5:t.vigencia=clearText(c(a).text())}})),t})).catch((e=>e))}async function consultNCF(e="",a=""){return _consultNCF(e,a)}async function consultENCF(e="",a="",t="",c=""){return _consultNCF(e,a,t,c)}async function consultCarPlate(e="",a=""){if(e=clearRNC(e),!isRNC(e))throw new Error("El RNC o Cedula debe tener 9 o 11 digitos.");if(a=clearCarPlate(a),!isCarPlate(a))throw new Error("La placa de vehiculo no es valida.");const t=new URLSearchParams({ctl00$smMain:"ctl00$upMainMaster|ctl00$cphMain$btnConsultar",ctl00$cphMain$txtRNC:e,ctl00$cphMain$txtPlaca:a,__EVENTTARGET:"",__EVENTARGUMENT:"",__VIEWSTATE:"U+HFsdofOzsyWH4HLkslQ7aOjxFpFmXKSFruNOClbmUXUVfYSn+CzaFOn90eitGPIsdY42DFfd11oKkKsqclyGAim8Qt6zcP1MSligQmscKDJD4V0PaVEhE6szrE93geATHItk1X5aBu/wVchZeZjtiGph6iPJ0uSys4nAOYT/XE0zOdhcdZHoSKboI1kkpNuyr2Qrhu2Tzy9eg443+pjrAlurv8AMA+xScUXpaCuY8Z96LqLSPDx8oKt4G2izr2BiahYHWedLIoDQBF5DFmx8wjPDDqZWB7Xr+DYw+6L6R5yJ/99RL+n2atUKIJ8sJSvClXUSwNeEshsEOQdrWmquycq8sYrth541io+HXCnXbZHYCM+sLSDzVcx89xVdjrYvsm8ICpyqibzofimBC+8Cjj0EBIRWufczUl4aP3pDYy1bZGYVXlaz3jFgVoCHNNIsVFLPEuav0S43t7UkGZTEfl5UJDb1fAWH+K9PhZ/N+nCvbZJ2pwBP3SgyqHpirXBYUHVgF3+vBDccOTTN6aEcITby1PLqwKY3HWQs9dUNOcVXCcFFXQC5CCKVePQVSfLk6PShowUpHWfsKf95Ee2nGOg40GNe/yzRgFCNyw2eKj5xGxrM3N5anGxDRlDS78J7TmdFeyq3zP1I05Eab742GFh41JjPoV7Bt47KbR8Y0J+9foYGzi10wwjIpFyvY2onC7qUSa5ZCMi6ycxwztg0xMlb/OX+f4IHlFcZiM8+NgUW5+MI5UJiSKzx6dMU1BDY5i12RlI5bAKXSH7A610Kf1fl4MQ5wl0Q4XkDSWHrPK4E7+fWyPqRxvvTWTKTwFQ0PoQzdKp7noK2xDnuI3igWdGZZFFWY3kEN3Kx1wWwIgzcNvSUIAutbWxrGDVvYo+uN0reypfYm2FMhA+nlvF8JNONI8ow30KO6SFldGPXphm3r308RUYI44mCrjNoP33YBCDFfghSS2dChJvTX+KL5gVwiCtu7JFq3wkJLyq2dfrOQAgSSB0vIQtXL3r0v5yAIpJvItqwFdHyOGiWRlyXsGPJAgXJMbN0A5iZub+c/zzJKkLIQUPYpoVrm3YcHITFt29KTVIOY/Fn4xAwP1dOeu/cVuiK70SVz7PZN7Uvxo6ITi53F4vgOsbmy9C/o81Y/cG19Tb0f4eD35ZlrCuhjH0PCpmaBI/ClG2TPbEZeAZs4L+ENRMgfHMhQ5O1woB+NrKRuuHpm95Vv8HDs4gNDwvP2rUgmimnW75xgzBEVxmOIjgz5sU/iuQKUF0AfHKzQrg6UcRU7Snhcvaa/pSGGc/IbGFPafPApM52PZnpU1IxZ+",__VIEWSTATEGENERATOR:"D99DA1C5",__EVENTVALIDATION:"bTFEsYrDtu8R6Hl+RGlHYeSAVyBNCxPOIg2YLHxtfB1p8dpCrzXWIyW9eKXTxe4Q2vXXB71ZRnuoN0MIlAdXDlRuziccKqqDpVJDY+e44EllGeSxmmECOvOoO5mtqyB2Vh2cFwUiH60eVOIyKkfPRASsFD22vL1ddegG7ePl8G2c4Y2xrufK8o0bidD4KwGTZ9a1Iw==",ctl00$cphMain$btnConsultar:"Consultar",__ASYNCPOST:!0});return axiosInstance.post("/placa.aspx",t).then((async e=>{const a=await e.data,t={},c=cheerio.load(a);if(c){let e=c("tr>td","tbody");if(e.each(((e,a)=>{switch(e){case 0:t.placa=clearText(c(a).text());break;case 1:t.marca=clearText(c(a).text());break;case 2:t.modelo=clearText(c(a).text());break;case 3:t.color=clearText(c(a).text());break;case 4:t.fabricacion=clearText(c(a).text());break;case 5:t.estado=clearText(c(a).text())}})),null!=e&&e.length>0){t.oposiciones=[],c("span","#cphMain_gvOposiciones>tbody>tr>td").each(((e,a)=>{t.oposiciones.push(clearText(c(a).text()))}))}}return t})).catch((e=>e))}module.exports={DGIIReceiptTypes:DGIIReceiptTypes,RNC:RNC,NCF:NCF,ENCF:ENCF,CarPlate:CarPlate,isSecureCode:isSecureCode,consultRNC:consultRNC,consultCuidadanos:consultCuidadanos,consultNCF:consultNCF,consultENCF:consultENCF,consultCarPlate:consultCarPlate}; \ No newline at end of file diff --git a/dist/dgii-valid.min.js b/dist/dgii-valid.min.js index 6dbb86e..7fa4276 100644 --- a/dist/dgii-valid.min.js +++ b/dist/dgii-valid.min.js @@ -1 +1 @@ -function clearRNC(e=""){return e.replace(/\D/g,"")}function clearNCF(e=""){return e.replace(/[^BE0-9]/g,"")}function isRNC(e=""){e=clearRNC(e);return/^[0-9]{9,11}$/.test(e)}function isENCF(e=""){e=clearNCF(e);return/^E(?:3[1-4]{1}|41|4[3-7]{1})[0-9]{10}$/.test(e)}function isNCF(e=""){e=clearNCF(e);return/^B(?:0[1-4]{1}|1[1-7]{1})[0-9]{8}$/.test(e)}function isCarPlate(e=""){return/^(A|AA|B|C|D|F|G|L|H|I|T|P|U|J|R|S|M|OE|OF|OM|OP|EA|EG|EL|EM|ED|EI|VC|WD|OI|EX|YX|Z|NZ|DD|PP|K)\d{4,6}$/.test(e)}function isSecureCode(e=""){return/^[a-zA-Z0-9]{6}$/.test(e)}exports.clearRNC=clearRNC,exports.clearNCF=clearNCF,exports.isRNC=isRNC,exports.isENCF=isENCF,exports.isNCF=isNCF,module.exports={clearRNC:clearRNC,clearNCF:clearNCF,isRNC:isRNC,isENCF:isENCF,isNCF:isNCF,isCarPlate:isCarPlate,isSecureCode:isSecureCode}; \ No newline at end of file +function clearRNC(e=""){return e.replace(/\D/g,"")}function clearNCF(e=""){return e.replace(/[^BE0-9]/g,"")}function clearCarPlate(e=""){return e.replace(/[^A-Z0-9]/gi,"")}function isRNC(e=""){e=clearRNC(e);return/^[0-9]{9,11}$/.test(e)}function isENCF(e=""){e=clearNCF(e);return/^E(?:3[1-4]{1}|41|4[3-7]{1})[0-9]{10}$/.test(e)}function isNCF(e=""){e=clearNCF(e);return/^B(?:0[1-4]{1}|1[1-7]{1})[0-9]{8}$/.test(e)}function isCarPlate(e=""){clearCarPlate(e);return/^(A|AA|B|C|D|F|G|L|H|I|T|P|U|J|R|S|M|OE|OF|OM|OP|EA|EG|EL|EM|ED|EI|VC|WD|OI|EX|YX|Z|NZ|DD|PP|K)\d{4,6}$/i.test(e)}function isSecureCode(e=""){return/^[a-zA-Z0-9]{6}$/.test(e)}exports.clearRNC=clearRNC,exports.clearNCF=clearNCF,exports.clearCarPlate=clearCarPlate,exports.isRNC=isRNC,exports.isENCF=isENCF,exports.isNCF=isNCF,module.exports={clearRNC:clearRNC,clearNCF:clearNCF,clearCarPlate:clearCarPlate,isRNC:isRNC,isENCF:isENCF,isNCF:isNCF,isCarPlate:isCarPlate,isSecureCode:isSecureCode}; \ No newline at end of file diff --git a/package.json b/package.json index 0b00dd3..1273029 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dgii-utils", - "version": "1.0.0", + "version": "1.1.0", "description": "DGII-Utils es un paquete de herramientas diseñado para simplificar la interacción con las aplicaciones web de la Dirección General de Impuestos Internos (DGII) en la República Dominicana. Este paquete incluye funciones para validar formatos fiscales como RNCs, cédulas, y comprobantes fiscales.", "main": "./dist/dgii-utils.min.js", "scripts": { @@ -14,6 +14,20 @@ }, "author": "Carlos Ismael .Y .R", "license": "MIT", + "keywords": [ + "dgii", + "rnc", + "cédula", + "comprobante", + "NCF", + "e-NCF", + "Placas", + "RD", + "Servicios web", + "API DGII", + "Comprobantes", + "dominican-developers" + ], "bugs": { "url": "https://github.com/CarlsRemy/DGII-UTILS/issues" }, diff --git a/src/dgii-utils.js b/src/dgii-utils.js index b9755b3..d6f0bec 100644 --- a/src/dgii-utils.js +++ b/src/dgii-utils.js @@ -1,4 +1,4 @@ -const { clearRNC, clearNCF, isRNC, isENCF, isNCF, isSecureCode , isCarPlate} = require('./dgii-valid.js') +const { clearRNC, clearNCF, clearCarPlate, isRNC, isENCF, isNCF, isSecureCode, isCarPlate } = require('./dgii-valid.js') const { formatNCF, formatRNC, DGIIReceiptTypes, vehiclePlateTypes, TypeCarPlate } = require('./dgii-format.js') const axios = require('axios'); const cheerio = require('cheerio'); @@ -27,7 +27,8 @@ const ENCF = Object.freeze({ const CarPlate = Object.freeze({ valid: isCarPlate, - getType: TypeCarPlate + getType: TypeCarPlate, + clear: clearCarPlate, }) const axiosInstance = axios.create({ @@ -161,7 +162,7 @@ async function _consultNCF(RNC = "", NCF = "", RNCComprador = "", CodigoSegurida throw new Error("El Codigo de Seguridad debe tener 6 caracteres alfanumericos."); } - }else{ + } else { RNCComprador = "" CodigoSeguridad = "" } @@ -214,4 +215,70 @@ async function consultENCF(RNC = "", NCF = "", RNCComprador = "", codigoSegurida return _consultNCF(RNC, NCF, RNCComprador, codigoSeguridad) } -module.exports = { DGIIReceiptTypes, RNC, NCF, ENCF, CarPlate,isSecureCode, consultRNC, consultCuidadanos, consultNCF , consultENCF}; \ No newline at end of file +async function consultCarPlate(RNC = "", CarPlate = "") { + RNC = clearRNC(RNC) + + if (!isRNC(RNC)) { + throw new Error("El RNC o Cedula debe tener 9 o 11 digitos."); + } + + CarPlate = clearCarPlate(CarPlate) + + if (!isCarPlate(CarPlate)) { + throw new Error("La placa de vehiculo no es valida."); + } + + const viewState = "U+HFsdofOzsyWH4HLkslQ7aOjxFpFmXKSFruNOClbmUXUVfYSn+CzaFOn90eitGPIsdY42DFfd11oKkKsqclyGAim8Qt6zcP1MSligQmscKDJD4V0PaVEhE6szrE93geATHItk1X5aBu/wVchZeZjtiGph6iPJ0uSys4nAOYT/XE0zOdhcdZHoSKboI1kkpNuyr2Qrhu2Tzy9eg443+pjrAlurv8AMA+xScUXpaCuY8Z96LqLSPDx8oKt4G2izr2BiahYHWedLIoDQBF5DFmx8wjPDDqZWB7Xr+DYw+6L6R5yJ/99RL+n2atUKIJ8sJSvClXUSwNeEshsEOQdrWmquycq8sYrth541io+HXCnXbZHYCM+sLSDzVcx89xVdjrYvsm8ICpyqibzofimBC+8Cjj0EBIRWufczUl4aP3pDYy1bZGYVXlaz3jFgVoCHNNIsVFLPEuav0S43t7UkGZTEfl5UJDb1fAWH+K9PhZ/N+nCvbZJ2pwBP3SgyqHpirXBYUHVgF3+vBDccOTTN6aEcITby1PLqwKY3HWQs9dUNOcVXCcFFXQC5CCKVePQVSfLk6PShowUpHWfsKf95Ee2nGOg40GNe/yzRgFCNyw2eKj5xGxrM3N5anGxDRlDS78J7TmdFeyq3zP1I05Eab742GFh41JjPoV7Bt47KbR8Y0J+9foYGzi10wwjIpFyvY2onC7qUSa5ZCMi6ycxwztg0xMlb/OX+f4IHlFcZiM8+NgUW5+MI5UJiSKzx6dMU1BDY5i12RlI5bAKXSH7A610Kf1fl4MQ5wl0Q4XkDSWHrPK4E7+fWyPqRxvvTWTKTwFQ0PoQzdKp7noK2xDnuI3igWdGZZFFWY3kEN3Kx1wWwIgzcNvSUIAutbWxrGDVvYo+uN0reypfYm2FMhA+nlvF8JNONI8ow30KO6SFldGPXphm3r308RUYI44mCrjNoP33YBCDFfghSS2dChJvTX+KL5gVwiCtu7JFq3wkJLyq2dfrOQAgSSB0vIQtXL3r0v5yAIpJvItqwFdHyOGiWRlyXsGPJAgXJMbN0A5iZub+c/zzJKkLIQUPYpoVrm3YcHITFt29KTVIOY/Fn4xAwP1dOeu/cVuiK70SVz7PZN7Uvxo6ITi53F4vgOsbmy9C/o81Y/cG19Tb0f4eD35ZlrCuhjH0PCpmaBI/ClG2TPbEZeAZs4L+ENRMgfHMhQ5O1woB+NrKRuuHpm95Vv8HDs4gNDwvP2rUgmimnW75xgzBEVxmOIjgz5sU/iuQKUF0AfHKzQrg6UcRU7Snhcvaa/pSGGc/IbGFPafPApM52PZnpU1IxZ+" + const eventValidation = "bTFEsYrDtu8R6Hl+RGlHYeSAVyBNCxPOIg2YLHxtfB1p8dpCrzXWIyW9eKXTxe4Q2vXXB71ZRnuoN0MIlAdXDlRuziccKqqDpVJDY+e44EllGeSxmmECOvOoO5mtqyB2Vh2cFwUiH60eVOIyKkfPRASsFD22vL1ddegG7ePl8G2c4Y2xrufK8o0bidD4KwGTZ9a1Iw==" + + const data = new URLSearchParams({ + ctl00$smMain: "ctl00$upMainMaster|ctl00$cphMain$btnConsultar", + ctl00$cphMain$txtRNC: RNC, + ctl00$cphMain$txtPlaca: CarPlate, + __EVENTTARGET: "", + __EVENTARGUMENT: "", + __VIEWSTATE: viewState, + __VIEWSTATEGENERATOR: "D99DA1C5", + + __EVENTVALIDATION: eventValidation, + ctl00$cphMain$btnConsultar: "Consultar", + __ASYNCPOST: true + }); + + return axiosInstance.post(`/placa.aspx`, data) + .then(async response => { + const html = await response.data + const results = {} + const $ = cheerio.load(html); + + + if ($) { + let Elements = $("tr>td", "tbody") + Elements.each((i, elem) => { + switch (i) { + case 0: results.placa = clearText($(elem).text()); break; + case 1: results.marca = clearText($(elem).text()); break; + case 2: results.modelo = clearText($(elem).text()); break; + case 3: results.color = clearText($(elem).text()); break; + case 4: results.fabricacion = clearText($(elem).text()); break; + case 5: results.estado = clearText($(elem).text()); break; + } + }); + + if (Elements != null && Elements.length > 0) { + results.oposiciones = []; + + let Oposiciones = $("span", "#cphMain_gvOposiciones>tbody>tr>td") + Oposiciones.each((i, elem) => { + results.oposiciones.push(clearText($(elem).text())); + }); + + } + } + return results + }) + .catch(error => error); +} + + +module.exports = { DGIIReceiptTypes, RNC, NCF, ENCF, CarPlate, isSecureCode, consultRNC, consultCuidadanos, consultNCF, consultENCF, consultCarPlate }; \ No newline at end of file diff --git a/src/dgii-valid.js b/src/dgii-valid.js index 0986a40..f13c423 100644 --- a/src/dgii-valid.js +++ b/src/dgii-valid.js @@ -14,6 +14,15 @@ function clearNCF (NCF = "") { return NCF.replace(/[^BE0-9]/g, ''); } + +/** + * @param {string} CarPlate + * @returns {string} CarPlate +*/ +function clearCarPlate (CarPlate = "") { + return CarPlate.replace(/[^A-Z0-9]/gi, ''); +} + /** * @param {string} RNC * @returns {boolean} isRNC @@ -43,13 +52,12 @@ function isNCF(NCF = "") { return ncfRegex.test(NCF); } -function isCarPlate(Code=""){ - const regexPlaca = /^(A|AA|B|C|D|F|G|L|H|I|T|P|U|J|R|S|M|OE|OF|OM|OP|EA|EG|EL|EM|ED|EI|VC|WD|OI|EX|YX|Z|NZ|DD|PP|K)\d{4,6}$/; - return regexPlaca.test(Code); +function isCarPlate(CarPlate=""){ + clearCarPlate(CarPlate) + const regexPlaca = /^(A|AA|B|C|D|F|G|L|H|I|T|P|U|J|R|S|M|OE|OF|OM|OP|EA|EG|EL|EM|ED|EI|VC|WD|OI|EX|YX|Z|NZ|DD|PP|K)\d{4,6}$/i; + return regexPlaca.test(CarPlate); } - - function isSecureCode(Code=""){ const secureCodeRegex = /^[a-zA-Z0-9]{6}$/; return secureCodeRegex.test(Code); @@ -57,7 +65,8 @@ function isSecureCode(Code=""){ exports.clearRNC = clearRNC; exports.clearNCF = clearNCF; +exports.clearCarPlate = clearCarPlate; exports.isRNC = isRNC; exports.isENCF = isENCF; exports.isNCF = isNCF -module.exports = { clearRNC, clearNCF, isRNC , isENCF, isNCF, isCarPlate, isSecureCode}; \ No newline at end of file +module.exports = { clearRNC, clearNCF,clearCarPlate, isRNC , isENCF, isNCF, isCarPlate, isSecureCode}; \ No newline at end of file diff --git a/test/CarPlate.spec.js b/test/CarPlate.spec.js index 9111a54..761c529 100644 --- a/test/CarPlate.spec.js +++ b/test/CarPlate.spec.js @@ -1,7 +1,7 @@ // test.ts const { expect, assert } = require("chai"); const { describe, it } = require("mocha"); -const { CarPlate } = require("../src/dgii-utils"); +const { CarPlate,consultCarPlate } = require("../src/dgii-utils"); describe('CarPlate', () => {