diff --git a/facho/fe/nomina/__init__.py b/facho/fe/nomina/__init__.py index 07708fb..c970a1c 100644 --- a/facho/fe/nomina/__init__.py +++ b/facho/fe/nomina/__init__.py @@ -1,3 +1,11 @@ +# +# Para esta implementacion se usa BDD +# ver **test_nomina.py**. +# +# La idea en general es validar comportamiento desde el XML, +# creando las estructuras minimas necesaras. + + from .. import fe from .. import form @@ -87,7 +95,7 @@ class DIANNominaIndividual: self.devengados = self.fexml.fragment('./Devengados') self.deducciones = self.fexml.fragment('./Deducciones') - + def adicionar_devengado(self, devengado): if not isinstance(devengado, Devengado): raise ValueError('se espera tipo Devengado') @@ -106,18 +114,36 @@ class DIANNominaIndividual: """ errors = [] - def add_error(xpath, msg): + def check_element(xpath, msg): if not self.fexml.exist_element(xpath): errors.append(DIANNominaIndividualError(msg)) - add_error('/fe:NominaIndividual/Devengados/Basico', - 'se requiere DevengadoBasico') + def check_attribute(xpath, key, msg): + err = DIANNominaIndividualError(msg) + elem = self.fexml.get_element(xpath) - add_error('/fe:NominaIndividual/Deducciones/Salud', - 'se requiere DeduccionSalud') + if elem is None: + return errors.append(err) - add_error('/fe:NominaIndividual/Deducciones/FondoPension', - 'se requiere DeduccionFondoPension') + if elem.get(key, None) is None: + return errors.append(err) + + check_attribute('/fe:NominaIndividual/Periodo', 'FechaIngreso', 'se requiere Periodo') + + check_element( + '/fe:NominaIndividual/Devengados/Basico', + 'se requiere DevengadoBasico' + ) + + check_element( + '/fe:NominaIndividual/Deducciones/Salud', + 'se requiere DeduccionSalud' + ) + + check_element( + '/fe:NominaIndividual/Deducciones/FondoPension', + 'se requiere DeduccionFondoPension' + ) return errors diff --git a/tests/test_nomina.py b/tests/test_nomina.py index 007c5fc..516dba4 100644 --- a/tests/test_nomina.py +++ b/tests/test_nomina.py @@ -65,6 +65,7 @@ def test_nomina_obligatorios_segun_anexo_tecnico(): errors = nomina.validate() + assert_error(errors, 'se requiere Periodo') assert_error(errors, 'se requiere DevengadoBasico') assert_error(errors, 'se requiere DeduccionSalud') assert_error(errors, 'se requiere DeduccionFondoPension')