Herramientas de usuario

Herramientas del sitio


ada:habilitacion_nomina_electronica

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
ada:habilitacion_nomina_electronica [2024/05/02 16:17]
192.168.175.87
ada:habilitacion_nomina_electronica [2024/10/09 19:59] (actual)
192.168.175.167
Línea 5: Línea 5:
  
 ** base de datos centralizada ** ** base de datos centralizada **
-   * ** //db104//**              ​+   * ** //db104_ADA//**              ​
 db104_ADA ​     = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.140.101)(PORT = 1521)) (CONNECT_DATA = SERVER = DEDICATED) (SERVICE_NAME = db104))) db104_ADA ​     = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.140.101)(PORT = 1521)) (CONNECT_DATA = SERVER = DEDICATED) (SERVICE_NAME = db104)))
  
Línea 14: Línea 14:
  
 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 ​ 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 ​
 +
 +====== TENER EN CUENTA ======
 +
 +Antes de iniciar con el paso 1, el ticket sobre el cual se realizó la solicitud de la habilitación se debe enviar al área de fabrica con el fin de que se cree la carpeta en el servidor de pruebas y producción de nómina electrónica y se deben enviar los siguientes documentos.
 +
 +  - Certificado de facturación electrónica (se utiliza el mismo certificado para nomina y facturación) se debe enviar en extensión P12 ó pfx 
 +  - Clave del certificado
 +  - Nit de la empresa sin dv
 +
  
 ==== Paso 1 ==== ==== Paso 1 ====
 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. 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 El tipo de ambiente siempre es 2
 +
 +Tener presente que siempre para nomina electrónica el nombre debe de ser {cliente}_NE_PROD con el fin de identificar el servicio de nómina y facturación. ejemplo FALVA_NE_PROD
  
 <​code>​ <​code>​
Línea 27: Línea 38:
     NPV.CODIGO_CLIENTE = '​MADASS_TEST'​ -- nombre del cliente con el sinónimo _TEST para identificar que es habilitación     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 WHERE AMBIENTE_ID = 2 -- ID 1 = producción 2 = pruebas o habilitación
 +;
 +COMMIT;
 </​code>​ </​code>​
  
Línea 51: Línea 64:
 UPDATE NOMINA.EMPRESAS_NOMINA EN UPDATE NOMINA.EMPRESAS_NOMINA EN
 SET EN.K_N_NIT = 901273165 -- Nit sin DV SET EN.K_N_NIT = 901273165 -- Nit sin DV
 +;
 +COMMIT;
 </​code>​ </​code>​
  
Línea 278: Línea 293:
 ==== Paso 7==== ==== Paso 7====
  
-Se debe liquidar una nómina ​marcarla como aprobada+Se deben borrar los registros de las dos tablas que tienen la sentencia **DELETE** ​actualizar el periodo 202401 a estado borrador con el **UPDATE**
  
-Se toma el numero ​de la nomina que genero ​el sistema y se ejecuta +En caso de que en la tabla NE_PERIODOS_GENERADOS no exista ​el periodo 202401 ​se ejecuta ​el insert
- +
-En la DB101 existe un tipo de liquidación denominado **NOMINA ELECTRONICA TEST** favor liquidar en esa nomina.+
  
 <​code>​ <​code>​
-UPDATE ​NOMINA.MOVIMIENTOS_NOMINA +DELETE FROM NOMINA.NE_WS_INFORME_ERROR
-SET SC_ESTADO = '​A'​ +
-WHERE KA_NL_DCTO_NOMINA = 10292 --Reemplazar por el numero de nomina liquidada+
 ; ;
-Commit;+DELETE FROM NOMINA.NE_ENVIADOS_WS 
 +; 
 +UPDATE NOMINA.NE_PERIODOS_GENERADOS  
 +SET ESTADO = '​B'​ 
 +WHERE PERIODO = 202401 
 +
 +COMMIT 
 +
 +--El insert solo se debe ejecutar si en NE_PERIODOS_GENERADOS no esta el periodo 202401 
 +INSERT INTO NOMINA.NE_PERIODOS_GENERADOS (ID, 
 +                                          PERIODO, 
 +                                          ANO, 
 +                                          MES, 
 +                                          FECHA_INICIAL,​ 
 +                                          FECHA_FINAL,​ 
 +                                          TIPO_ARCHIVO,​ 
 +                                          ESTADO, 
 +                                          CODIGO_MEMPRESA,​ 
 +                                          FECHA_REGISTRO,​ 
 +                                          USUARIO_REGISTRO) 
 +     ​VALUES (2, 
 +             '​202401',​ 
 +             ​2024,​ 
 +             1, 
 +             ​TO_DATE ('​01/​01/​2024',​ '​DD/​MM/​YYYY'​),​ 
 +             ​TO_DATE ('​31/​01/​2024',​ '​DD/​MM/​YYYY'​),​ 
 +             1, 
 +             '​B',​ 
 +             '​9999999999',​ 
 +             ​SYSDATE,​ 
 +             '​NOMINA'​) 
 +
 +COMMIT
 </​code>​ </​code>​
 +
 +
 +==== paso 8 ====
 +
 +En la base de datos existe una nómina liquidada en el periodo 202401 con el número de nómina 10628 con el tipo liquidación denominado **NOMINA ELECTRONICA TEST** la cual tiene 11 empleados, la nómina está en estado aprobada ya que lo requiere el proceso para poder que se visualice en las vistas de envió.
 +
 +para validar que la nómina si este correcta ejecutar la consulta y debe retomar datos de los empleados y conceptos
 +
 +<​code>​
 +SELECT MT.CODIGO_TERCERO, ​
 +     ​MT.NIT ​                         AS NUMERO_DOCUMENTO,​
 +     ​MT.NOMBRE ​                      AS NOMBRE,
 +     ​TL.SS_TIPO_LIQUIDACION ​         AS TIPO_LIQUIDACION,​
 +     ​MN.KA_NL_DCTO_NOMINA ​           AS NUMERO_NOMINA,​
 +     ​CPTO.SS_CODIGO ​                 AS CODIGO_CONCEPTO,​
 +     ​CPTO.SS_CONCEPTO ​               AS DESCRIPCION_CONCEPTO,​
 +     ​NETC.TIPO,​
 +     ​NETC.DESCRIPCION ​               AS DESCRIPCION_TIPO_CONCEPTO,​
 +     ​CPTO.SC_SIGNO ​                  AS SIGNO,
 +     SUM (ROUND (MNCC.ND_VALOR)) ​    AS VALOR
 +FROM NOMINA.MOVIMIENTOS_NOMINA ​       MN,
 +     ​NOMINA.MOVIMIENTOS_NOMINA_DETALLE MND,
 +     ​NOMINA.CONCEPTOS ​                CPTO,
 +     ​NOMINA.MAESTRO_TERCEROS ​         MT,
 +     ​NOMINA.TIPOS_LIQUIDACIONES ​      TL,
 +     ​NOMINA.NE_TIPOS_CONCEPTO ​        NETC,
 +     ​NOMINA.NE_CONCEPTOS_RELACION ​    NECR,
 +     ​NOMINA.EMPLEADOS ​                E,
 +     ​NOMINA.MOVIMIENTOS_NOMINA_CCOSTO MNCC
 +WHERE     ​MN.KA_NL_MOVIMIENTO = MND.KA_NL_MOVIMIENTO
 +     AND MND.KA_NL_MOVIMIENTO_NOMINA = MNCC.KA_NL_MOVIMIENTO_DETALLE
 +     AND MN.SC_ESTADO = '​A'​
 +     AND CPTO.KA_NL_CONCEPTO = MND.KA_NL_CONCEPTO
 +     AND MN.KA_NL_TERCERO = MT.CODIGO_TERCERO
 +     AND MN.KA_NL_TIPO_LIQUIDACION = TL.KA_NL_TIPO_LIQUIDACION
 +     AND MN.KA_NL_TERCERO = E.KA_NL_TERCERO
 +     AND TO_CHAR (MN.DD_DESDE,​ '​yyyymm'​) = 202401
 +     AND MND.KA_NL_CONCEPTO = NECR.CONCEPTO_ID(+)
 +     AND NECR.TIPO_CONCEPTO_ID = NETC.ID(+)
 +     AND MN.KA_NL_TERCERO NOT IN
 +             ​(SELECT CODIGO_EMPLEADO
 +                FROM NOMINA.NE_ENVIADOS_WS
 +               WHERE PERIODO = 202401 AND TIPO_ARCHIVO = 1 AND ERROR = 0)
 +GROUP BY MT.CODIGO_TERCERO,​
 +      MT.NIT,
 +     ​MT.NOMBRE,​
 +     ​TL.SS_TIPO_LIQUIDACION,​
 +     ​MN.KA_NL_DCTO_NOMINA,​
 +     ​CPTO.SS_CODIGO,​
 +     ​CPTO.SS_CONCEPTO,​
 +     ​NETC.TIPO,​
 +     ​NETC.DESCRIPCION,​
 +     ​CPTO.SC_SIGNO
 +ORDER BY MT.NIT ​  
 +</​code>​
 +
 +
 +==== Paso 9 ====
 +
 +Cuando se esté realizando el envió y se generan errores se deben consultar en la siguiente tabla la cual tiene la descripción del error generado por el envió.
 +
 +<​code>​
 +SELECT * FROM NOMINA.NE_WS_INFORME_ERROR
 +</​code>​
 +
 +Después de validado los errores se deben eliminar para poder continuar con el proceso.
 +
 +1. inicialmente validar que el periodo que se está enviando exista en la siguiente tabla 
 +
 +<​code>​
 +SELECT T.*,ROWID FROM NOMINA.NE_PERIODOS_GENERADOS T ORDER BY PERIODO DESC
 +</​code>​
 +
 +Al validar el registro el ESTADO tiene que ser **B** y se ejecuta el siguiente query.
 +
 +<​code>​
 +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;
 +</​code>​
 +
 +Si se genera error por que el procedimiento esta invalido ​
 +
 +{{ :​ada:​procedimiento.png?​direct&​600 |}}
 +
 +Se debe ejecutar el query que crea el procedimiento **SP_ELIMINAR_ERRORES_NE** y volver a ejecutar el proceso
 +
 +<​code>​
 +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;
 +/
 +</​code>​
 +
 +
 +==== Paso 10 envió - Nomina de ajuste====
 +
 +Para enviar la nómina de ajuste (Eliminar un registro el cual ya esta en al Dian)
 +
 +  - En la Pestaña de nomina de ajuste se debe seleccionar el periodo para el cual corresponde el ajuste
 +  - Se da en VALIDAR para cargar los registros correspondientes a los envíos
 +  - En el tipo de nota se debe seleccionar eliminar a los registros que corresponda.
 +  - Se debe ejecutar los dos update con los datos que solicita el query en la base de datos con el periodo que corresponda.
 +  - En la ventana del modulo de nomina se hace el ultimo paso que es enviar los registros.
 +
 +
 +{{ :​ada:​sicoferp:​nomina_electronica.png?​direct&​600 |}}
 +
 +
 +<​code>​
 +UPDATE NOMINA.NE_PERIODOS_GENERADOS
 +SET TIPO_ARCHIVO = 2 , ESTADO = '​B'​
 +WHERE PERIODO = 
 +/*Ingrese el periodo correspondiente al ajuste*/
 +</​code>​
 +
 +
 +<​code>​
 +UPDATE NOMINA.NE_ENVIADOS_WS
 +SET TIPO_ARCHIVO = 2 , TIPO_NOTA = 2
 +WHERE PERIODO = /*Ingrese el periodo correspondiente al ajuste*/
 +AND CODIGO_TERCERO = /*Ingrese el codigo del empleado del cual se va realizar la eliminacion del registro en la dian*/
 +</​code>​
 +
 +Después de enviados los registros se debe restablecer los registros modificados con el siguiente update
 +
 +<​code>​
 +UPDATE NOMINA.NE_ENVIADOS_WS
 +SET TIPO_ARCHIVO = 1 , TIPO_NOTA = 9
 +WHERE PERIODO = /*Ingrese el periodo correspondiente al ajuste*/
 +AND CODIGO_TERCERO = /*Ingrese el codigo del empleado del cual se va realizar la eliminacion del registro en la dian*/
 +AND TIPO_XML = 102
 +</​code>​
 +
 +
 +<​code>​
 +UPDATE NOMINA.NE_PERIODOS_GENERADOS
 +SET TIPO_ARCHIVO = 1 , ESTADO = '​T'​
 +WHERE PERIODO = /*Ingrese el periodo correspondiente al ajuste*/
 +</​code>​
 +
 +
 +
ada/habilitacion_nomina_electronica.1714666676.txt.gz · Última modificación: 2024/05/02 16:17 por 192.168.175.87