From e539f1e0a76f6964cec2fbd0dc4646f94f9f974f Mon Sep 17 00:00:00 2001 From: cosmos Date: Sun, 16 Mar 2025 17:27:18 -0500 Subject: [PATCH] =?UTF-8?q?A=C3=B1ade=20nomina.sh=20y=20nomina.csv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scrips/nomina.csv | 3 + scrips/nomina.sh | 177 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 scrips/nomina.csv create mode 100644 scrips/nomina.sh diff --git a/scrips/nomina.csv b/scrips/nomina.csv new file mode 100644 index 0000000..aa28bf6 --- /dev/null +++ b/scrips/nomina.csv @@ -0,0 +1,3 @@ +P,#,Nombre,P_Apellido,S_Apellido,Cédula,Dirección,Salario,Días,Salud,Pension,Aux Transpo,Sueldo,Fecha_pago,Fecha_Ingreso,Fecha_inicio,Fecha_fin,Fecha_generación,hora_generacion +N,000005,JUAN,GONZALEZ,CARDONA,71380802,CL 35C 102-17 BL 7 AP 101,2400000,30,96000,96000,140606,2400000,2024-04-30,2022-01-05,2024-04-01,2024-04-30,2024-04-30,08:01:00 +N,000006,VIVIANA,GIRALDO,VASQUEZ,32257132,CL 35C 102-17 BL 7 AP 101,1160000,30,46400,46400,140606,1160000,2024-04-30,2022-09-05,2024-04-01,2024-04-30,2024-04-30,08:01:00 diff --git a/scrips/nomina.sh b/scrips/nomina.sh new file mode 100644 index 0000000..7b190b0 --- /dev/null +++ b/scrips/nomina.sh @@ -0,0 +1,177 @@ +#!/bin/bash + +SOFTWARE_PIN='20234' +SOFTWARE_ID='100b0d10-0ca0-4ad4-a894-b704a568cbf3' +NIT='901575528' +DV='2' +TIPO_AMBIENTE='AMBIENTE_PRUEBAS' +RAZON_SOCIAL='BICI PIZZA S.A.S' +SET_PRUEBAS='be4d232c-9c7b-4542-b24d-6044c4e316ce' +PASSPHARASE='7U3XbtZ76W' +#La ruta donde se encuentren estos archivos +LLAVE_PRIVADA='privada.pem' +LLAVE_PUBLICA='publica.pem' +CERTIFICADO='Certificado.pfx' +HABILITACION='True' +ARCHIVO_CSV='nomina.csv' + +IFS=, +while read line; do + + field=( $line ) + + Prefijo=${field[0]} + Numero=${field[1]} + Nombre=${field[2]} + P_Apellido=${field[3]} + S_Apellifo=${field[4]} + Cedula=${field[5]} + Direccion=${field[6]} + Salario=${field[7]} + Sueldo=${field[12]} + Dias=${field[8]} + Salud=${field[9]} + Pension=${field[10]} + AuxTp=${field[11]} + Pago=${field[13]} + Ingreso=${field[14]} + Inicio=${field[15]} + Fin=${field[16]} + Generacion=${field[17]} + Hora=${field[18]} + + echo " +from facho import fe + +SOFTWARE_PIN='${SOFTWARE_PIN}' +SOFTWARE_ID='${SOFTWARE_ID}' +NIT='${NIT}' +DV='${DV}' + +def extensions(nomina): + return [] + +def nomina(): + nomina = fe.nomina.DIANNominaIndividual() + + nomina.asignar_fecha_pago('${Pago}') + + nomina.asignar_metadata(fe.nomina.Metadata( + novedad=fe.nomina.Novedad(value='false'), + secuencia=fe.nomina.NumeroSecuencia( + prefijo='${Prefijo}', + consecutivo='${Numero}' + ), + lugar_generacion=fe.nomina.Lugar( + pais = fe.nomina.Pais( + code = 'CO' + ), + departamento = fe.nomina.Departamento( + code = '05' + ), + municipio = fe.nomina.Municipio( + code = '05001' + ), + ), + proveedor=fe.nomina.Proveedor( + razon_social='${RAZON_SOCIAL}', + nit=NIT, + dv=DV, + software_id=SOFTWARE_ID, + software_pin=SOFTWARE_PIN + ) + )) + + nomina.asignar_periodo(fe.nomina.Periodo( + fecha_ingreso= '${Ingreso}', + fecha_liquidacion_inicio='${Inicio}', + fecha_liquidacion_fin='${Fin}', + fecha_generacion='${Generacion}' + )) + + nomina.asignar_informacion_general(fe.nomina.InformacionGeneral( + fecha_generacion = '${Generacion}', + hora_generacion = '${Hora}-05:00', + tipo_ambiente = fe.nomina.InformacionGeneral.${TIPO_AMBIENTE}, + software_pin = SOFTWARE_PIN, + periodo_nomina = fe.nomina.PeriodoNomina(code='1'), + tipo_moneda = fe.nomina.TipoMoneda(code='COP') + )) + + nomina.asignar_pago(fe.nomina.Pago( + forma=fe.nomina.FormaPago( + code='1', + ), + metodo=fe.nomina.MetodoPago( + code='10' + ) + )) + nomina.asignar_empleador(fe.nomina.Empleador( + razon_social='${RAZON_SOCIAL}', + nit = NIT, + dv = DV, + pais = fe.nomina.Pais( + code = 'CO' + ), + departamento = fe.nomina.Departamento( + code = '05' + ), + municipio = fe.nomina.Municipio( + code = '05001' + ), + direccion = 'calle etrivial' + )) + + nomina.asignar_trabajador(fe.nomina.Trabajador( + tipo_contrato = fe.nomina.TipoContrato( + code = '1' + ), + alto_riesgo = False, + tipo_documento = fe.nomina.TipoDocumento( + code = '11' + ), + primer_apellido = '${P_Apellido}', + segundo_apellido = '${S_Apellido}', + primer_nombre = '${Nombre}', + lugar_trabajo = fe.nomina.LugarTrabajo( + pais = fe.nomina.Pais(code='CO'), + departamento = fe.nomina.Departamento(code='05'), + municipio = fe.nomina.Municipio(code='05001'), + direccion = '${Direccion}' + ), + numero_documento = NIT, + tipo = fe.nomina.TipoTrabajador( + code = '01' + ), + salario_integral = False, + sueldo = fe.nomina.Amount(${Sueldo}) + )) + + nomina.adicionar_devengado(fe.nomina.DevengadoBasico( + dias_trabajados = ${field[8]}, + sueldo_trabajado = fe.nomina.Amount(${Salario}) + )) + + nomina.adicionar_deduccion(fe.nomina.DeduccionSalud( + porcentaje = fe.nomina.Amount(4), + deduccion = fe.nomina.Amount(${Salud}) + )) + + nomina.adicionar_deduccion(fe.nomina.DeduccionFondoPension( + porcentaje=fe.nomina.Amount(4), + deduccion = fe.nomina.Amount(${Pension}) + )) + return nomina + " > "${Prefijo}${Numero}".py + facho generate-nomina --private-key ${CERTIFICADO} --passphrase ${PASSPHARASE} --use-cache-policy --sign "${field[0]}${field[1]}".py "${Prefijo}${Numero}".xml + CUNE=`grep -oP "(.*)" "${Prefijo}${Numero}".xml | sed -n 's/.*documentkey=\([^<]*\)<\/CodigoQR>.*/\1/p'` + zip "${field[0]}${field[1]}".zip "${field[0]}${field[1]}".xml + if [ "$HABILITACION" == "True" ];then + facho soap-send-test-set-async --private-key ${LLAVE_PRIVADA} --public-key ${LLAVE_PUBLICA} --habilitacion --password ${PASSPHARASE} --test-setid ${SET_PRUEBAS} "${field[0]}${field[1]}".xml "${field[0]}${field[1]}".zip + else + facho soap-send-nomina-sync --private-key ${LLAVE_PRIVADA} --public-key ${LLAVE_PUBLICA} --password ${PASSPHARASE} "${field[0]}${field[1]}".xml "${field[0]}${field[1]}".zip --produccion + fi + + +done < ${ARCHIVO_CSV} +