se adicionan archivos faltantes
FossilOrigin-Name: 85fd66cb6f56b56c71826cb1cc02afa625c277c1f12dc92cfbc741b3808cf646
This commit is contained in:
		
							
								
								
									
										93
									
								
								facho/fe/nomina/devengado/horas_extras.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								facho/fe/nomina/devengado/horas_extras.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| from dataclasses import dataclass | ||||
| from typing import List | ||||
|  | ||||
| from ..amount import Amount | ||||
| from .devengado import Devengado | ||||
|  | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHoraExtra: | ||||
|     hora_inicio: str | ||||
|     hora_fin: str | ||||
|     cantidad: int | ||||
|     porcentaje: Amount | ||||
|     pago: Amount | ||||
|  | ||||
|     def apply(self, child_path, fragment): | ||||
|         fragment.set_element(child_path, None, | ||||
|                              append_=True, | ||||
|                              # NIE074 | ||||
|                              HoraInicio=self.hora_inicio, | ||||
|                              # NIE075 | ||||
|                              HoraFin=self.hora_fin, | ||||
|                              # NIE076 | ||||
|                              Cantidad=self.cantidad, | ||||
|                              # NIE077 | ||||
|                              Porcentaje=self.porcentaje, | ||||
|                              # NIE078 | ||||
|                              Pago=str(round(self.pago, 2))) | ||||
|  | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHorasExtrasDiarias(Devengado): | ||||
|     horas_extras: List[DevengadoHoraExtra] | ||||
|      | ||||
|     def apply(self, fragment): | ||||
|         hora_extra_xml = fragment.fragment('./HEDs') | ||||
|         for hora_extra in self.horas_extras: | ||||
|             hora_extra.apply('./HED', hora_extra_xml) | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHorasExtrasNocturnas(Devengado): | ||||
|     horas_extras: List[DevengadoHoraExtra] | ||||
|      | ||||
|     def apply(self, fragment): | ||||
|         hora_extra_xml = fragment.fragment('./HENs') | ||||
|         for hora_extra in self.horas_extras: | ||||
|             hora_extra.apply('./HEN', hora_extra_xml) | ||||
|  | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHorasRecargoNocturno(Devengado): | ||||
|     horas_extras: List[DevengadoHoraExtra] | ||||
|      | ||||
|     def apply(self, fragment): | ||||
|         hora_extra_xml = fragment.fragment('./HRNs') | ||||
|         for hora_extra in self.horas_extras: | ||||
|             hora_extra.apply('./HRN', hora_extra_xml) | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHorasExtrasDiariasDominicalesYFestivos(Devengado): | ||||
|     horas_extras: List[DevengadoHoraExtra] | ||||
|      | ||||
|     def apply(self, fragment): | ||||
|         hora_extra_xml = fragment.fragment('./HEDDFs') | ||||
|         for hora_extra in self.horas_extras: | ||||
|             hora_extra.apply('./HEDDF', hora_extra_xml) | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHorasRecargoDiariasDominicalesYFestivos(Devengado): | ||||
|     horas_extras: List[DevengadoHoraExtra] | ||||
|      | ||||
|     def apply(self, fragment): | ||||
|         hora_extra_xml = fragment.fragment('./HRDDFs') | ||||
|         for hora_extra in self.horas_extras: | ||||
|             hora_extra.apply('./HRDDF', hora_extra_xml) | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHorasExtrasNocturnasDominicalesYFestivos(Devengado): | ||||
|     horas_extras: List[DevengadoHoraExtra] | ||||
|      | ||||
|     def apply(self, fragment): | ||||
|         hora_extra_xml = fragment.fragment('./HENDFs') | ||||
|         for hora_extra in self.horas_extras: | ||||
|             hora_extra.apply('./HENDF', hora_extra_xml) | ||||
|  | ||||
| @dataclass | ||||
| class DevengadoHorasRecargoNocturnoDominicalesYFestivos(Devengado): | ||||
|     horas_extras: List[DevengadoHoraExtra] | ||||
|      | ||||
|     def apply(self, fragment): | ||||
|         hora_extra_xml = fragment.fragment('./HRNDFs') | ||||
|         for hora_extra in self.horas_extras: | ||||
|             hora_extra.apply('./HRNDF', hora_extra_xml) | ||||
							
								
								
									
										155
									
								
								facho/fe/nomina/hablitacion.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								facho/fe/nomina/hablitacion.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | ||||
| 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): | ||||
|         nominas = [] | ||||
|         dianzip = fe.DianZIP(open(zipname, 'w')) | ||||
|  | ||||
|         fechabase = datetime.datetime.now() | ||||
|         consecutivo = 0 | ||||
|         for _ in range(1, 11): | ||||
|             consecutivo += 1 | ||||
|             fechabase += datetime.timedelta(days=1) | ||||
|             nomina = self._crear_nomina_individual() | ||||
|  | ||||
|             # pag 96 | ||||
|             nombre = "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') | ||||
|         informacion_general = 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) | ||||
|                  | ||||
		Reference in New Issue
	
	Block a user