Files
oc-facho/facho/fe/nomina/devengado/horas_extras.py
aserrador 93a3d18e32 Compatibilidad con Python 3.13
- Actualiza dependencias: cryptography>=41.0.0, pyOpenSSL>=23.2.0,
  xmlsec>=1.3.12, xmlsig>=0.1.9, zeep>=4.2.1, lxml>=5.2.2
- Anade monkey-patch para xades.load_pkcs12 con pyOpenSSL >= 24
  (PKCS12 eliminado de OpenSSL.crypto)
- Reemplaza datetime.utcnow() por datetime.now(timezone.utc)
- Reemplaza APIs deprecadas de lxml en facho.py y codelist
- Migra verificacion PKCS12 de pyOpenSSL a cryptography API en fe.py
- Moderniza typing: Union/Optional/List a sintaxis | y list[]
- Actualiza requirements_dev.txt con versiones recientes
- Actualiza tox.ini y Makefile.dev para Python 3.13
2026-07-02 22:45:33 -05:00

94 lines
2.9 KiB
Python

from dataclasses import dataclass
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=str(round(self.porcentaje, 2)),
# 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)