feat(WIP): Modificacion para emision de Nomina de Ajuste

This commit is contained in:
2025-04-14 08:21:20 -05:00
parent e539f1e0a7
commit f97b3d8317
12 changed files with 759 additions and 35 deletions

View File

@@ -250,7 +250,7 @@ class InformacionGeneral:
# NIE202
# TABLA 5.5.2
# TODO(bit4bit) solo NominaIndividual
TipoXML = '102',
TipoXML = '103',
# NIE024
CUNE = None,
# NIE025
@@ -313,11 +313,30 @@ class DIANNominaXML:
self.informacion_general_version = None
self.tag_document = tag_document
self.fexml = fe.FeXML(tag_document, 'http://www.dian.gov.co/contratos/facturaelectronica/v1')
self.fexml = fe.FeXML(tag_document, "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste")
if schemaLocation is not None:
self.fexml.root.set("SchemaLocation", "")
self.fexml.root.set(
"SchemaLocation",
"dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
)
self.fexml.root.set("change", schemaLocation)
else:
schemaLocation = "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
self.fexml.root.set(
"SchemaLocation", "")
self.fexml.root.set(
"change", schemaLocation)
# self.fexml.root.set(
# "SchemaLocation",
# "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
#)
# self.fexml.root.set("change", schemaLocation)
# layout, la dian requiere que los elementos
# esten ordenados segun el anexo tecnico
@@ -538,14 +557,11 @@ class DIANNominaXML:
class DIANNominaIndividual(DIANNominaXML):
def __init__(self):
schema = "dian:gov:co:facturaelectronica:NominaIndividual NominaIndividualElectronicaXSD.xsd"
super().__init__('NominaIndividual', schemaLocation=schema)
self.informacion_general_version = 'V1.0: Documento Soporte de Pago de Nómina Electrónica'
# TODO(bit4bit) confirmar que no tienen en comun con NominaIndividual
class DIANNominaIndividualDeAjuste(DIANNominaXML):
class Reemplazar(DIANNominaXML):
@dataclass
class Predecesor:
@@ -554,6 +570,7 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
fecha_generacion: str
def apply(self, fragment):
fragment.set_element('./TipoNota', '1')
fragment.set_element('./Reemplazar/ReemplazandoPredecesor', None,
# NIAE090
NumeroPred = self.numero,
@@ -566,7 +583,7 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
def __init__(self):
super().__init__('NominaIndividualDeAjuste', './Reemplazar')
# NIAE214
self.root_fragment.set_element('./TipoNota', '1')
# self.root_fragment.set_element('./TipoNota', '1')
def asignar_predecesor(self, predecesor):
if not isinstance(predecesor, self.Predecesor):
@@ -583,6 +600,7 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
fecha_generacion: str
def apply(self, fragment):
fragment.set_element('./TipoNota', '2')
fragment.set_element('./Eliminar/EliminandoPredecesor', None,
# NIAE090
NumeroPred = self.numero,
@@ -593,16 +611,17 @@ class DIANNominaIndividualDeAjuste(DIANNominaXML):
)
def __init__(self):
schema = "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
super().__init__('NominaIndividualDeAjuste', './Eliminar')
self.root_fragment.set_element('./TipoNota', '2')
# self.root_fragment.set_element('./TipoNota', '2')
self.informacion_general_version = "V1.0: Nota de Ajuste de Documento Soporte de Pago de Nómina Electrónica"
def asignar_predecesor(self, predecesor):
if not isinstance(predecesor, self.Predecesor):
raise ValueError("se espera tipo Eliminar.Predecesor")
predecesor.apply(self.fexml)
def __init__(self):
super().__init__('NominaIndividualDeAjuste')
def __init__(self):
schema = "dian:gov:co:facturaelectronica:NominaIndividualDeAjuste NominaIndividualDeAjusteElectronicaXSD.xsd"
super().__init__('NominaIndividualDeAjuste')