¡Esta es una revisión vieja del documento!
base de datos centralizada
db104_ADA = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.140.101)(PORT = 1521)) (CONNECT_DATA = SERVER = DEDICATED) (SERVICE_NAME = db104)))
base de datos de configuración
db101_NE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.140.101)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db101)))
En la base de datos db101 que va ser utilizada para liquidar la nomina y realizar el envió de los documentos se debe parametrizar el cliente según la empresa que se requiera habilitar
Con el siguiente UPDATE se va realizar la actualización de la configuración de la base datos, se ingresa el nit del la empresa a realiza el set de pruebas sin digito de verificación. El tipo de ambiente siempre es 2
UPDATE NOMINA.NE_PARAMETROS_VISTAS NPV SET NPV.NIT_PROVEEDOR_XML = 901273165 , --nit cliente que se requiere habilitar sin DV NPV.DV_NIT_PROVEEDOR_XML = 6 , -- dv del nit del cliente NPV.NIT_CLIENTE = 901273165 , -- nit del cliente que se requiere habilitar sin dv NPV.DV_NIT_CLIENTE = 6 , -- dv del nit del cliente NPV.CODIGO_CLIENTE = 'MADASS_TEST' -- nombre del cliente con el sinónimo _TEST para identificar que es habilitación WHERE AMBIENTE_ID = 2 -- ID 1 = producción 2 = pruebas o habilitación ; COMMIT;
Se debe crear el tercero de la empresa que se va habilitar En el modulo de nomina esta el maestro de terceros para realizar la creación del tercero - empresa
* Nomina / administrador del sistema / maestro de terceros
Se debe realizar la actualización del nit de la empresa en las tablas de configuración de nomina
UPDATE NOMINA.PARAMETROS_SISTEMA PS SET PS.NIT_EMPRESA = 901273165 -- Nit sin DV ; UPDATE NOMINA.EMPRESAS E SET E.K_N_NIT = 901273165 ,-- Nit sin DV E.SC_DIGITO_VERIFICACION = 6 --DV del nit ; UPDATE NOMINA.EMPRESAS_NOMINA EN SET EN.K_N_NIT = 901273165 -- Nit sin DV ; COMMIT;
Se deben ejecutar los ACL de habilitación solo si no están ejecutados
la ip de habilitación de nomina electrónica es 10.1.140.102:8081
La petición de validacion se debe realizar con el usuario SYS
SELECT UTL_HTTP.REQUEST('http://10.1.140.102:8081/NominaElectronica') FROM DUAL
La subconsulta debe visualizar la siguiente información
si la respuesta del servicio es diferente a la de la imagen se deben ejecutar los ACL con el usuario SYS
Inicialmente se debe validar que ACL hay creados en la base de datos solo se realiza en la db101
En la siguiente consulta se pueden visualizar; si ya existe un registro con el HOST 10.1.140.102 y LOWER_PORT 8081 no hay que ejecutarlos
SELECT * FROM DBA_NETWORK_ACLS
Si en la tabla no hay registros se ejecuta el siguiente query
grant execute on utl_http to NOMINA; grant execute on dbms_lock to NOMINA; ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN'; ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,'; BEGIN DBMS_NETWORK_ACL_ADMIN.create_acl ( acl => 'acls_ne_test.xml', description => 'Lista de control de acceso a los servicios de nomina electrónica', principal => 'NOMINA', is_grant => TRUE, privilege => 'connect', start_date => SYSDATE, end_date => NULL); COMMIT; end; BEGIN DBMS_NETWORK_ACL_ADMIN.add_privilege ( acl => 'acls_ne_test.xml', principal => 'NOMINA', is_grant => TRUE, privilege => 'connect', start_date => SYSTIMESTAMP, end_date => null ); COMMIT; END; BEGIN DBMS_NETWORK_ACL_ADMIN.add_privilege ( acl => 'acls_ne_test.xml', principal => 'NOMINA', is_grant => TRUE, privilege => 'resolve', start_date => SYSTIMESTAMP, end_date => null ); COMMIT; END; begin DBMS_NETWORK_ACL_ADMIN.assign_acl ( acl => 'acls_ne_test.xml', host => '10.1.140.102', lower_port => 8081, upper_port => NULL); COMMIT; end;
en la db104_ADA se debe parametrizar la empresa que va realizar el set de pruebas
En el siguiente INSERT solo se deben de modificar los datos que tienen comentarios y realizar el insert
INSERT INTO INTEGRACION.TBL_FE_CONEXION_CLIENTE (CODIGO_CLIENTE, NIT_CLIENTE, CODIGO_MEMPRESA, TYPE_SERVICE, TYPE_CLIENT, DB_PORT, DB_IP, DB_NAME, DB_USER, DB_PSWD, ESTADO, FECHA_REGISTRO, USUARIO_REGISTRO, ENVIRONMENT_SERVICE, DIAN_ID_SOFTWARE, DIAN_PIN, DIAN_NOMBRE_SOFTWARE, DIAN_ESTADO, DIAN_URL, DIAN_FECHA, PROFILEEXECUTIONID, HASH_SET_PRUEBAS, MODO_VALIDACION_PRUEBAS, URL_VAL_ACEPTACION, URL_VAL_ACEPTACION_FORM, EMAIL_NOTIFY, FORM_USER_LOGIN, FORM_USER_PASSWORD, MULTIEMPRESA, TIPO_SOFTWARE, NE_URL, NEV_URL, NUMERACION_URL, NOTIFICACION_ELECTRONICA) VALUES ( 'MADASS_TEST_1', --CODIGO CLIENTE QUE VA A REALIZAR EL SET DE PRUEBAS 901273165, -- NIT DE LA EMPRESA SIN DV '9999999999', 'WS-SOAP', 'DIAN', 1521, '10.1.140.101', 'db101', 'NOMINA', 'nomina',--CLAVE DEL USUARIO NOMINA DE LA BASE DE DATOS 'A', SYSDATE, 'INTEGRACION', 'DEVELOPMENT', '47099f8c-899d-4978-a4b0-1b2a85defede' --SOFTWARE ID DEL SET DE PRUEBAS || CHR (13) || CHR (10) || '', '73165', -- PIN DEL SET DE PRUEBAS 'SICOF', 'En Proceso', 'https://vpfe-hab.dian.gov.co/WcfDianCustomerServices.svc?wsdl', SYSDATE, 2, '30932093-9364-4919-8149-31988cb22a49',-- HAST DEL SET DE PRUEBAS 0, 'http://10.1.140.102:8080/ADAFE/webresources/forms/efevento/{codigo_cliente}/{nit_empresa}/{pst}/{cufe}', 'http://10.1.140.102:8080/ADAFE/webresources/forms/formulario/{codigo_cliente}/{nit_empresa}/{pst}/{cufe}', 'mesaservicios@ada.co', 'MADASS_TEST_1',--CODIGO CLIENTE QUE VA A REALIZAR EL SET DE PRUEBAS '50459d2dd34cad16a1de85e6a39d7a338539158cefa1d5d6edfbb13acaadcfdc1a9f7abe990729eb8867f54350160363', 'N', 'NE', 'http://127.0.0.1:8081/dianWsRest/v1/nomina', 'http://127.0.0.1:8081/dianWsRest/v1/habilitacion', 'http://127.0.0.1:8081/dianWsRest/v1/numeracion', 'S'); COMMIT;
Insertar el certificado en la tabla de la db104_ADA
Solo se deben modificar los campos comentariados
INSERT INTO PRESUP01.FE_CERTIFICATE_INFO ( FECHA_INICIO_VIGENCIA, FECHA_FIN_VIGENCIA, EMISOR_NIT, EMISOR_NOMBRE, EMISOR_DIRECCION, EMISOR_CORREO, EMISOR_CONTACTO, EMISOR_CEL_TEL, NOTIFICACION_EMAIL_WS, NOTIFICACION_EMAIL_ERP, NOTIFICACION_FRECU_DIAS, NOTIFICACION_FRECU_ENVIO, NOTIFICACION_MSG_PREVIO, NOTIFICACION_MSG_VENCIDO, ESTADO, FECHA_REGISTRO, CODIGO_USUARIO, CODIGO_MEMPRESA, NOTIFICACION_TRAS_VENCER, PATH_CLIENT_PROPERTIES, NIT_CLIENTE, TIPO_SOFTWARE, CODIGO_CLIENTE) VALUES ( TO_DATE ('21/02/2023 19:00:00', 'DD/MM/YYYY HH24:MI:SS'),--TENER PRESENTE LAS FECHA DE INICIO(LA FECHA REAL DE HABILITACION DEBE ESTAR EN EL RANGO) TO_DATE ('21/02/2025 19:00:00', 'DD/MM/YYYY HH24:MI:SS'),--TENER PRESENTE LA FECHA FINAL (LA FECHA REAL DE HABILITACION DEBE ESTAR EN EL RANGO) 900204272, 'GESTION DE SEGURIDAD ELECTRONICA S.A', 'CL 73 7 31 P3 TO B ED EL CAMINO', 'info@gse.com.co', 'ALVARO CARRERAS AMOROS', '4050082', 'contratosprogresar@gmail.com', 'contratosprogresar@gmail.com', 1, 2, 'Proximo a vencer', ' ', 'A', TO_DATE ('27/02/2023 15:51:38', 'DD/MM/YYYY HH24:MI:SS'), 1, '228', '0', 'adafe_home/com/ada/adafe/certificado/901273165/Cliente_NE.properties',--EN LA RUTA QUE ESTA EN LA LINEA SE DEBE REEMPLAZAR EL NIT DE LA EMPRESA 901273165,--NIT DE LA EMPRESA A REALIZAR EL SET DE PRUEBAS SIN DV 'NE', 'MADASS_TEST_1');--INGRESAR EL CODIGO DEL CLIENTE PREVIAMENTE SELECCIONADO E INSERTADO EN LA TABLA TBL_FE_CONEXION_CLIENTE COMMIT;
Se debe liquidar una nómina y marcarla como aprobada
Se toma el numero de la nomina que genero el sistema y se ejecuta
En la DB101 existe un tipo de liquidación denominado NOMINA ELECTRONICA TEST favor liquidar en esa nomina.
UPDATE NOMINA.MOVIMIENTOS_NOMINA SET SC_ESTADO = 'A' WHERE KA_NL_DCTO_NOMINA = 10292 --Reemplazar por el numero de nomina liquidada ; Commit;
Cuando se esté realizando el envió y se generan errores en los documentos enviados se debe eliminar los errores.
1. inicialmente validar que el periodo que se esta enviando exista en la siguiente tabla
SELECT T.*,ROWID FROM NOMINA.NE_PERIODOS_GENERADOS T ORDER BY PERIODO DESC
Al validar el registro el ESTADO tiene que ser B y se ejecuta el siguiente query.
DECLARE v_periodo NUMBER; BEGIN SELECT PERIODO INTO v_periodo FROM NOMINA.NE_PERIODOS_GENERADOS WHERE ESTADO = 'B'; MODIFICA.SP_ELIMINAR_ERRORES_NE(v_periodo, 1); END;COMMIT;
Si se genera error por que el procedimiento esta invalido
Se debe ejecutar el query que crea el procedimiento SP_ELIMINAR_ERRORES_NE y volver a ejecutar el proceso
CREATE OR REPLACE PROCEDURE MODIFICA.SP_ELIMINAR_ERRORES_NE ( AS_PERIODO VARCHAR2, AN_CEDULA NUMBER) /*1 si es todos los empleados*/ AS LL_REG NUMBER; LL_COD_EMPLEADO NUMBER; LS_ERROR VARCHAR2 (1000); /*------------------------------------- Se crea procedimiento ---------- Autor: Brahian Castañeda brahian.castañeda@ada.co Fecha: 12/10/2022 ---------- Descripcion: Se crea procedimiento, este procedimiento elimina uno o todos los registros de nomina electronica en un periodo, los cuales tienen un error durante su ejecucion (error tipo 1 o 2) -------------------------------------- Nota: la clasificacion de los errores es el siguiente: (Error: 0): Significa que proceso sin ningun percance. (Error: 1): Este error significa que nomina electronica no pudo ejecutarse ni en el inicio, por lo tanto no pudo generar un CUNE y no se proceso en la DIAN. (Error: 2): Este error significa 2 cosas: 1.Durante la ejecución se consume un CUNE, el llamado a la DIAN es exitoso, pero en la DIAN se encontro una inconsistencia, pero aun asi se recibio la informacion correctamente. 2.Durante la ejecución se consume un CUNE, pero al llamar a la DIAN no es exitoso, debido a que el certificado no esta vigente, los servicios estan caidos, el servidor demoro en responder, el servidor esta caido, ETC., debido a esto la DIAN no recibe la informacion del empleado enviado. -------------------------------------- */ BEGIN /*Si el parametro AN_CEDULA es 1 entonces es para hacer una limpieza general*/ IF AN_CEDULA = 1 THEN /*Validamos que si se ha procesado el periodo seleccionado*/ SELECT COUNT (*) INTO LL_REG FROM NOMINA.NE_ENVIADOS_WS WHERE PERIODO = AS_PERIODO; IF LL_REG = 0 THEN ROLLBACK; LS_ERROR := 'Error: El periodo ' || AS_PERIODO || ' no existe en los periodos procesados en Nomina Electronica (NE_ENVIADOS_WS)'; DBMS_OUTPUT.PUT_LINE (LS_ERROR); raise_application_error (-20001, LS_ERROR); ELSE /*Verificamos si hay errores en el periodo seleccionado*/ SELECT COUNT (*) INTO LL_REG FROM NOMINA.NE_ENVIADOS_WS WHERE PERIODO = AS_PERIODO AND ERROR IN (1, 2); IF LL_REG = 0 THEN ROLLBACK; LS_ERROR := 'Error: En el periodo ' || AS_PERIODO || ' no se registran errores en Nomina Electronica (NE_ENVIADOS_WS)'; DBMS_OUTPUT.PUT_LINE (LS_ERROR); raise_application_error (-20001, LS_ERROR); ELSE /*Borramos los registros con error tipo 1 y 2*/ DELETE FROM NOMINA.NE_ENVIADOS_WS WHERE PERIODO = AS_PERIODO AND ERROR IN (1, 2); END IF; END IF; ELSE /*Validamos que el empleado exista*/ SELECT NVL (CODIGO_TERCERO, 0) INTO LL_COD_EMPLEADO FROM TESORE01.MAESTRO_TERCEROS WHERE NITSD = AN_CEDULA; IF LL_COD_EMPLEADO = 0 THEN ROLLBACK; LS_ERROR := 'Error: El empleado con cedula ' || AN_CEDULA || ' no existe (MAESTRO_TERCEROS)'; DBMS_OUTPUT.PUT_LINE (LS_ERROR); raise_application_error (-20001, LS_ERROR); ELSE /*Validamos que durante el periodo el empleado si sse haya procesado al menos una vez en nomina electronica*/ SELECT COUNT (*) INTO LL_REG FROM NOMINA.NE_ENVIADOS_WS WHERE PERIODO = AS_PERIODO AND CODIGO_EMPLEADO = LL_COD_EMPLEADO; IF LL_REG = 0 THEN ROLLBACK; LS_ERROR := 'Error: El empleado con cedula ' || AN_CEDULA || ' no ha sido procesado en nomina electronica (NE_ENVIADOS_WS) en el periodo ' || AS_PERIODO; DBMS_OUTPUT.PUT_LINE (LS_ERROR); raise_application_error (-20001, LS_ERROR); ELSE /*Validamos si el empleado tuvo errores durante el periodo ejecutado*/ SELECT COUNT (*) INTO LL_REG FROM NOMINA.NE_ENVIADOS_WS WHERE PERIODO = AS_PERIODO AND CODIGO_EMPLEADO = LL_COD_EMPLEADO AND ERROR IN (1, 2); IF LL_REG = 0 THEN ROLLBACK; LS_ERROR := 'Error: El empleado con cedula ' || AN_CEDULA || ' no tiene registro de errores en nomina electronica (NE_ENVIADOS_WS) en el periodo ' || AS_PERIODO; DBMS_OUTPUT.PUT_LINE (LS_ERROR); raise_application_error (-20001, LS_ERROR); ELSE /*Borramos los registros con errores*/ DELETE FROM NOMINA.NE_ENVIADOS_WS WHERE PERIODO = AS_PERIODO AND CODIGO_EMPLEADO = LL_COD_EMPLEADO AND ERROR IN (1, 2); END IF; END IF; END IF; END IF; EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE ( 'Error durante la ejecucion del procedimiento SP_ELIMINAR_ERRORES_NE'); END; /