se adicionan restantes obligatorios para NominaIndividual

FossilOrigin-Name: 428f40698c252453c5b6ae39f35553c6484d90568b1d31f097115a88d94fadd9
This commit is contained in:
bit4bit 2021-11-10 01:58:59 +00:00
parent 080014cbb6
commit f7a29b6daa
3 changed files with 55 additions and 1 deletions

View File

@ -84,6 +84,7 @@ TipoImpuesto = CodeList(path_for_codelist('TipoImpuesto-2.1.gc'), 'code', 'name'
.update(CodeList(path_for_codelist('TipoImpuesto-2.1.custom.gc'), 'code', 'name'))
CodigoPrecioReferencia = CodeList(path_for_codelist('CodigoPrecioReferencia-2.1.gc'), 'code', 'name')
MediosPago = CodeList(path_for_codelist('MediosPago-2.1.gc'), 'code', 'name')
FormasPago = CodeList(path_for_codelist('FormasPago-2.1.gc'), 'code', 'name')
RegimenFiscal = CodeList(path_for_codelist('RegimenFiscal-2.1.custom.gc'), 'code', 'name')
TipoOperacionNC = CodeList(path_for_codelist('TipoOperacionNC-2.1.gc'), 'code', 'name')
TipoOperacionND = CodeList(path_for_codelist('TipoOperacionND-2.1 - copia.gc'), 'code', 'name')

View File

@ -240,6 +240,40 @@ class Trabajador:
CodigoTrabajador = self.codigo_trabajador
)
@dataclass
class FormaPago:
code: str
name: str = ''
def __post_init__(self):
if self.code not in codelist.FormasPago:
raise ValueError("code [%s] not found" % (self.code))
self.name = codelist.FormasPago[self.code]['name']
@dataclass
class MetodoPago:
code: str
name: str = ''
def __post_init__(self):
if self.code not in codelist.MediosPago:
raise ValueError("code [%s] not found" % (self.code))
self.name = codelist.MediosPago[self.code]['name']
@dataclass
class Pago:
forma: FormaPago
metodo: MetodoPago
def apply(self, fragment):
fragment.set_attributes('./Pago',
# NIE064
Forma = self.forma.code,
# NIE065
Metodo = self.metodo.code)
class DIANNominaXML:
def __init__(self, tag_document):
self.tag_document = tag_document
@ -251,6 +285,7 @@ class DIANNominaXML:
self.fexml.placeholder_for('./InformacionGeneral')
self.fexml.placeholder_for('./Empleador')
self.fexml.placeholder_for('./Trabajador')
self.fexml.placeholder_for('./Pago')
self.fexml.placeholder_for('./Devengados/Basico')
self.fexml.placeholder_for('./Devengados/Transporte', optional=True)
@ -259,6 +294,7 @@ class DIANNominaXML:
self.numero_secuencia_xml = self.fexml.fragment('./NumeroSecuenciaXML')
self.empleador = self.fexml.fragment('./Empleador')
self.trabajador = self.fexml.fragment('./Trabajador')
self.pago_xml = self.fexml.fragment('./Pago')
self.devengados = self.fexml.fragment('./Devengados')
self.deducciones = self.fexml.fragment('./Deducciones')
@ -275,6 +311,11 @@ class DIANNominaXML:
self.informacion_general = general
self.informacion_general.apply(self.informacion_general_xml)
def asignar_pago(self, pago):
if not isinstance(pago, Pago):
raise ValueError('se espera tipo Pago')
pago.apply(self.pago_xml)
def asignar_empleador(self, empleador):
if not isinstance(empleador, Empleador):
raise ValueError('se espera tipo Empleador')
@ -321,7 +362,12 @@ class DIANNominaXML:
self.fexml.xpath_from_root('/Periodo'),
'FechaIngreso',
'se requiere Periodo')
check_element(
self.fexml.xpath_from_root('/Pago'),
'se requiere Pago'
)
check_element(
self.fexml.xpath_from_root('/Devengados/Basico'),
'se requiere DevengadoBasico'

View File

@ -185,3 +185,10 @@ def assert_error(errors, msg):
raise "wants error: %s" % (msg)
def test_asignar_pago():
nomina = fe.nomina.DIANNominaIndividual()
nomina.asignar_pago(fe.nomina.Pago(
forma = fe.nomina.FormaPago(code='1'),
metodo = fe.nomina.MetodoPago(code='1')
))