from dataclasses import dataclass import datetime from facho import fe class Habilitacion: @dataclass class Metadata: software_pin: str software_id: str nit: str dv: str def __init__(self, metadata): self.metadata = metadata def generar(self, zipname, fecha): fe.DianZIP(open(zipname, 'w')) fechabase = datetime.datetime.now() consecutivo = 0 for _ in range(1, 11): consecutivo += 1 fechabase += datetime.timedelta(days=1) self._crear_nomina_individual() # pag 96 "nie%010d%s%08x.xml" % ( int(self.nit), fecha.strftime('%s'), consecutivo) def _crear_nomina_individual_reemplazar(self, nomina, fechabase): metadata = self.metadata fecha = fechabase.strftime('%Y-%m-%d') nomina_ajuste = fe.nomina.DIANNominaIndividualDeAjuste.Reemplazar() self._poblar_nomina(nomina_ajuste, metadata, fecha, prefijo='R') nomina.informacion_general() def _poblar_nomina( self, nomina, metadata, fecha, prefijo='N', consecutivo='0001'): nomina.asignar_fecha_pago(fecha) nomina.asignar_metadata(fe.nomina.Metadata( secuencia=fe.nomina.NumeroSecuencia( prefijo=prefijo, consecutivo=consecutivo ), 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( nit=metadata.nit, dv=metadata.dv, software_id=metadata.software_id, software_pin=metadata.software_pin ) )) nomina.asignar_periodo(fe.nomina.Periodo( fecha_ingreso=fecha, fecha_liquidacion_inicio=fecha, fecha_liquidacion_fin=fecha, fecha_generacion=fecha, )) nomina.asignar_informacion_general(fe.nomina.InformacionGeneral( fecha_generacion=fecha, hora_generacion='20:09:00-05:00', tipo_ambiente=fe.nomina.InformacionGeneral.AMBIENTE_PRUEBAS, software_pin=metadata.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( nit=metadata.nit, dv='0', 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='gnu', segundo_apellido='emacs', primer_nombre='facho', lugar_trabajo=fe.nomina.LugarTrabajo( pais=fe.nomina.Pais(code='CO'), departamento=fe.nomina.Departamento(code='05'), municipio=fe.nomina.Municipio(code='05001'), direccion='calle facho' ), numero_documento=metadata.nit, tipo=fe.nomina.TipoTrabajador( code='01' ), salario_integral=True, sueldo=fe.nomina.Amount(1_500_000) )) nomina.adicionar_devengado(fe.nomina.DevengadoBasico( dias_trabajados=60, sueldo_trabajado=fe.nomina.Amount(3_500_000) )) nomina.adicionar_deduccion(fe.nomina.DeduccionSalud( porcentaje=fe.nomina.Amount(19), deduccion=fe.nomina.Amount(1_000_000) )) nomina.adicionar_deduccion(fe.nomina.DeduccionFondoPension( porcentaje=fe.nomina.Amount(1), deduccion=fe.nomina.Amount(10) )) def _crear_nomina_individual(self, fechabase): metadata = self.metadata fecha = fechabase.strftime('%Y-%m-%d') nomina = fe.nomina.DIANNominaIndividual() self._poblar_nomina(nomina, metadata, fecha)