def test_parse_dte_xml_ok_1b(self) -> None:
        xml_doc = xml_utils.parse_untrusted_xml(self.dte_clean_xml_1b_xml_bytes)

        parsed_dte = parse_dte_xml(xml_doc)
        self.assertDictEqual(
            dict(parsed_dte.as_dict()),
            dict(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=cl_sii.dte.constants.TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
                fecha_emision_date=date(2019, 4, 1),
                receptor_rut=Rut('96790240-3'),
                monto_total=2996301,
                emisor_razon_social='INGENIERIA ENACON SPA',
                receptor_razon_social='MINERA LOS PELAMBRES',
                fecha_vencimiento_date=None,
                firma_documento_dt=tz_utils.convert_naive_dt_to_tz_aware(
                    dt=datetime(2019, 4, 1, 1, 36, 40),
                    tz=DteDataL2.DATETIME_FIELDS_TZ),
                signature_value=self._TEST_DTE_1_SIGNATURE_VALUE,
                signature_x509_cert_der=self.dte_clean_xml_1_cert_der,
                emisor_giro='Ingenieria y Construccion',
                emisor_email=None,
                receptor_email=None,
            ))
Example #2
0
    def test_as_cesion_l2_ok_1(self) -> None:
        obj = CesionesPeriodoEntry(**self.valid_kwargs)
        expected_output = CesionL2(
            dte_key=cl_sii.dte.data_models.DteNaturalKey(
                emisor_rut=Rut('51532520-4'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=3608460,
            ),
            seq=None,
            cedente_rut=Rut('51532520-4'),
            cesionario_rut=Rut('96667560-8'),
            fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 3, 7, 13, 32),
                tz=CesionL2.DATETIME_FIELDS_TZ,
            ),
            monto_cedido=256357,
            dte_receptor_rut=Rut('75320502-0'),
            dte_fecha_emision=date(2019, 2, 11),
            dte_monto_total=256357,
            fecha_ultimo_vencimiento=date(2019, 4, 12),
            cedente_razon_social='MI CAMPITO SA',
            cedente_email='*****@*****.**',
            cesionario_razon_social='POBRES SERVICIOS FINANCIEROS S.A.',
            cesionario_email='[email protected],[email protected]',
        )
        obj_cesion_l2 = obj.as_cesion_l2()
        self.assertEqual(obj_cesion_l2, expected_output)

        self.assertIsNone(obj_cesion_l2.natural_key)
        self.assertEqual(obj_cesion_l2.alt_natural_key.dte_key.emisor_rut, obj.dte_vendedor_rut)
        self.assertEqual(obj_cesion_l2.alt_natural_key.cedente_rut, obj.cedente_rut)
        self.assertEqual(obj_cesion_l2.alt_natural_key.cesionario_rut, obj.cesionario_rut)
        self.assertEqual(obj_cesion_l2.alt_natural_key.fecha_cesion_dt, obj.fecha_cesion_dt)

        self.assertEqual(obj_cesion_l2.dte_receptor_rut, obj.dte_deudor_rut)
    def _set_obj_1(self) -> None:
        obj_dte_natural_key = DteNaturalKey(
            emisor_rut=Rut('76354771-K'),
            tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
            folio=170,
        )

        obj = CesionL1(
            dte_key=obj_dte_natural_key,
            seq=32,
            cedente_rut=Rut('76389992-6'),
            cesionario_rut=Rut('76598556-0'),
            fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 4, 5, 12, 57, 32),
                tz=CesionL1.DATETIME_FIELDS_TZ,
            ),
            monto_cedido=2996301,
            fecha_ultimo_vencimiento=date(2019, 5, 1),
            dte_fecha_emision=date(2019, 4, 1),
            dte_receptor_rut=Rut('96790240-3'),
            dte_monto_total=2996301,
        )
        self.assertIsInstance(obj, CesionL1)

        self.obj_1_dte_natural_key = obj_dte_natural_key
        self.obj_1 = obj
    def test_parse_dte_xml_ok_2(self) -> None:
        xml_doc = xml_utils.parse_untrusted_xml(self.dte_clean_xml_2_xml_bytes)

        parsed_dte = parse_dte_xml(xml_doc)
        self.assertDictEqual(
            dict(parsed_dte.as_dict()),
            dict(
                emisor_rut=Rut('76399752-9'),
                tipo_dte=cl_sii.dte.constants.TipoDteEnum.FACTURA_ELECTRONICA,
                folio=25568,
                fecha_emision_date=date(2019, 3, 29),
                receptor_rut=Rut('96874030-K'),
                monto_total=230992,
                emisor_razon_social='COMERCIALIZADORA INNOVA MOBEL SPA',
                receptor_razon_social='EMPRESAS LA POLAR S.A.',
                fecha_vencimiento_date=None,
                firma_documento_dt=tz_utils.convert_naive_dt_to_tz_aware(
                    dt=datetime(2019, 3, 28, 13, 59, 52),
                    tz=DteDataL2.DATETIME_FIELDS_TZ),
                signature_value=self._TEST_DTE_2_SIGNATURE_VALUE,
                signature_x509_cert_der=self.dte_clean_xml_2_cert_der,
                emisor_giro='COMERCIALIZACION DE PRODUCTOS PARA EL HOGAR',
                emisor_email='*****@*****.**',
                receptor_email=None,
            ))
    def test_natural_key(self) -> None:
        self._set_obj_1()
        self._set_obj_2()

        obj = self.obj_1
        expected_output = CesionNaturalKey(
            dte_key=DteNaturalKey(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
            ),
            seq=1,
        )
        self.assertEqual(obj.natural_key, expected_output)

        obj = self.obj_2
        expected_output = CesionNaturalKey(
            dte_key=DteNaturalKey(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
            ),
            seq=2,
        )
        self.assertEqual(obj.natural_key, expected_output)
    def test_parse_dte_xml_ok_3(self) -> None:
        xml_doc = xml_utils.parse_untrusted_xml(self.dte_clean_xml_3_xml_bytes)

        parsed_dte = parse_dte_xml(xml_doc)
        self.assertDictEqual(
            dict(parsed_dte.as_dict()),
            dict(
                emisor_rut=Rut('60910000-1'),
                tipo_dte=cl_sii.dte.constants.TipoDteEnum.FACTURA_ELECTRONICA,
                folio=2336600,
                fecha_emision_date=date(2019, 8, 8),
                receptor_rut=Rut('76555835-2'),
                monto_total=10642,
                emisor_razon_social='Universidad de Chile',
                receptor_razon_social='FYNPAL SPA',
                fecha_vencimiento_date=date(2019, 8, 8),
                firma_documento_dt=tz_utils.convert_naive_dt_to_tz_aware(
                    dt=datetime(2019, 8, 9, 9, 41, 9),
                    tz=DteDataL2.DATETIME_FIELDS_TZ),
                signature_value=self._TEST_DTE_3_SIGNATURE_VALUE,
                signature_x509_cert_der=self.dte_clean_xml_3_cert_der,
                emisor_giro=
                'Corporación Educacional y Servicios                 Profesionales',
                emisor_email=None,
                receptor_email=None,
            ))
Example #7
0
    def to_python(self, value: Optional[object]) -> Optional[Rut]:
        """
        Validate that the input can be converted to a Python object (:class:`Rut`).

        :raises django.core.exceptions.ValidationError:
            if the input can't be converted
        """

        if value in self.empty_values:
            converted_value = None
        elif isinstance(value, Rut):
            converted_value = value
        else:
            try:
                converted_value = Rut(value)  # type: ignore[arg-type]
            except (AttributeError, TypeError, ValueError):
                raise django.core.exceptions.ValidationError(
                    self.error_messages['invalid'],
                    code='invalid',
                )

        if (converted_value is not None and self.validate_dv
                and Rut.calc_dv(converted_value.digits) != converted_value.dv):
            raise django.core.exceptions.ValidationError(
                self.error_messages['invalid_dv'],
                code='invalid_dv',
            )

        return converted_value
Example #8
0
 def test_as_dict(self) -> None:
     self.assertDictEqual(
         self.dte_l1_1.as_dict(),
         dict(
             emisor_rut=Rut('76354771-K'),
             tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
             folio=170,
             fecha_emision_date=date(2019, 4, 1),
             receptor_rut=Rut('96790240-3'),
             monto_total=2996301,
         ))
Example #9
0
    def setUp(self) -> None:
        super().setUp()

        self.dte_l1_1 = DteDataL1(
            emisor_rut=Rut('76354771-K'),
            tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
            folio=170,
            fecha_emision_date=date(2019, 4, 1),
            receptor_rut=Rut('96790240-3'),
            monto_total=2996301,
        )
    def test_as_dte_data_l1(self):
        self._set_obj_1()

        obj = self.obj_1
        expected_output = DteDataL1(
            emisor_rut=Rut('76354771-K'),
            tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
            folio=170,
            fecha_emision_date=date(2019, 4, 1),
            receptor_rut=Rut('96790240-3'),
            monto_total=2996301,
        )
        self.assertEqual(obj.as_dte_data_l1(), expected_output)
    def test_as_cesion_l2(self) -> None:
        self._set_obj_1()

        obj = self.obj_1
        expected_output = CesionL2(
            dte_key=DteNaturalKey(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
            ),
            seq=2,
            cedente_rut=Rut('76389992-6'),
            cesionario_rut=Rut('76598556-0'),
            fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 4, 5, 12, 57, 32),
                tz=CesionL2.DATETIME_FIELDS_TZ,
            ),
            monto_cedido=2996301,
            fecha_firma_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 4, 5, 12, 57, 32),
                tz=CesionL2.DATETIME_FIELDS_TZ,
            ),
            dte_receptor_rut=Rut('96790240-3'),
            dte_fecha_emision=date(2019, 4, 1),
            dte_monto_total=2996301,
            fecha_ultimo_vencimiento=date(2019, 5, 1),
            cedente_razon_social='ST CAPITAL S.A.',
            cedente_email='*****@*****.**',
            cesionario_razon_social=
            'Fondo de Inversión Privado Deuda y Facturas',
            cesionario_email='*****@*****.**',
            dte_emisor_razon_social='INGENIERIA ENACON SPA',
            dte_receptor_razon_social='MINERA LOS PELAMBRES',
            dte_deudor_email=None,
            cedente_declaracion_jurada=
            ('Se declara bajo juramento que ST CAPITAL S.A., RUT 76389992-6 ha puesto '
             'a disposicion del cesionario Fondo de Inversión Privado Deuda y Facturas, '
             'RUT 76598556-0, el documento validamente emitido al deudor MINERA LOS '
             'PELAMBRES, RUT 96790240-3.'),
            dte_fecha_vencimiento=None,
            contacto_nombre='ST Capital Servicios Financieros',
            contacto_telefono=None,
            contacto_email='*****@*****.**',
        )
        obj_cesion_l2 = obj.as_cesion_l2()
        self.assertEqual(obj_cesion_l2, expected_output)
        self.assertEqual(obj_cesion_l2.natural_key, obj.natural_key)
        self.assertEqual(obj_cesion_l2.alt_natural_key, obj.alt_natural_key)
        self.assertEqual(obj_cesion_l2.dte_key, obj.dte.natural_key)
    def test_as_dict(self) -> None:
        self._set_obj_1()

        obj = self.obj_1
        expected_output = dict(
            dte_key=dict(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
            ),
            cedente_rut=Rut('76389992-6'),
            cesionario_rut=Rut('76598556-0'),
            fecha_cesion_dt=datetime.fromisoformat('2019-04-05T15:57+00:00'),
        )
        self.assertEqual(obj.as_dict(), expected_output)
Example #13
0
    def test_as_dte_data_l1_ok_1(self) -> None:
        obj = CesionesPeriodoEntry(**self.valid_kwargs)
        dte_obj = cl_sii.dte.data_models.DteDataL1(
            emisor_rut=Rut('51532520-4'),
            tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
            folio=3608460,
            receptor_rut=Rut('75320502-0'),
            fecha_emision_date=date(2019, 2, 11),
            monto_total=256357,
        )

        self.assertEqual(obj.as_dte_data_l1(), dte_obj)
        self.assertEqual(dte_obj.emisor_rut, obj.dte_vendedor_rut)
        self.assertEqual(dte_obj.vendedor_rut, obj.dte_vendedor_rut)
        self.assertEqual(dte_obj.receptor_rut, obj.dte_deudor_rut)
        self.assertEqual(dte_obj.comprador_rut, obj.dte_deudor_rut)
    def test_as_dte_data_l2(self):
        self._set_obj_1()

        obj = self.obj_1
        expected_output = DteDataL2(
            emisor_rut=Rut('76354771-K'),
            tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
            folio=170,
            fecha_emision_date=date(2019, 4, 1),
            receptor_rut=Rut('96790240-3'),
            monto_total=2996301,
            emisor_razon_social='INGENIERIA ENACON SPA',
            receptor_razon_social='MINERA LOS PELAMBRES',
            fecha_vencimiento_date=None,
        )
        self.assertEqual(obj.as_dte_data_l2(), expected_output)
Example #15
0
    def to_python(self, value: Optional[object]) -> Optional[Rut]:
        """
        Convert the input value to the correct Python object (:class:`Rut`).

        > It acts as the reverse of :meth:`value_to_string`, and is also
        called in :meth`clean`.

        It needs to be able to process ``None``.

        .. seealso::
            https://docs.djangoproject.com/en/2.1/howto/custom-model-fields/#converting-values-to-python-objects
            https://docs.djangoproject.com/en/2.1/ref/models/fields/#django.db.models.Field.to_python

        :raises django.core.exceptions.ValidationError:
            if the data can't be converted

        """
        if value is None or isinstance(value, Rut):
            converted_value = value
        else:
            try:
                converted_value = Rut(value, validate_dv=False)  # type: ignore
            except (AttributeError, TypeError, ValueError):
                raise django.core.exceptions.ValidationError(
                    self.error_messages['invalid'],
                    code='invalid',
                    params={'value': value},
                )

        return converted_value
    def _test_parse_rcv_compra_csv_file_emisor_rz_leading_trailing_whitespace(
        self,
        parse_rcv_compra_csv_file_function: Callable,
        rcv_file_path: str,
    ) -> None:
        rcv_file_path = get_test_file_path(rcv_file_path)

        items = parse_rcv_compra_csv_file_function(
            rut=Rut('1-9'),
            input_file_path=rcv_file_path,
            n_rows_offset=0,
            max_n_rows=None,
        )

        # Test trailing whitespace
        entry_struct, row_ix, row_data, row_parsing_errors = next(items)
        self.assertEqual(row_data['Razon Social'], 'Fake Company S.A. ')
        self.assertEqual(entry_struct.emisor_razon_social, 'Fake Company S.A.')
        self.assertEqual(len(row_parsing_errors), 0)

        # Test leading whitespace
        entry_struct, row_ix, row_data, row_parsing_errors = next(items)
        self.assertEqual(row_data['Razon Social'], '  Fake Company S.A.')
        self.assertEqual(entry_struct.emisor_razon_social, 'Fake Company S.A.')
        self.assertEqual(len(row_parsing_errors), 0)
    def test_parse_rcv_venta_csv_file_receptor_rz_leading_trailing_whitespace(
            self) -> None:
        rcv_file_path = get_test_file_path(
            'test_data/sii-rcv/RCV-venta-rz_leading_trailing_whitespace.csv', )

        items = parse_rcv_venta_csv_file(
            rut=Rut('1-9'),
            input_file_path=rcv_file_path,
            n_rows_offset=0,
            max_n_rows=None,
        )

        # Test trailing whitespace
        entry_struct, row_ix, row_data, row_parsing_errors = next(items)
        self.assertEqual(row_data['Razon Social'], 'Fake Company S.A. ')
        self.assertEqual(entry_struct.receptor_razon_social,
                         'Fake Company S.A.')
        self.assertEqual(len(row_parsing_errors), 0)

        # Test leading whitespace
        entry_struct, row_ix, row_data, row_parsing_errors = next(items)
        self.assertEqual(row_data['Razon Social'], '  Fake Company S.A.')
        self.assertEqual(entry_struct.receptor_razon_social,
                         'Fake Company S.A.')
        self.assertEqual(len(row_parsing_errors), 0)
Example #18
0
def _validate_rut(v: object) -> object:
    """
    Reusable Pydantic validator for fields of type :class:`Rut`.
    """
    if isinstance(v, str):
        v = Rut(value=v, validate_dv=False)  # Raises ValueError if invalid.
    return v
def _deserialize_cte_f29_datos_obj_campo(campo_value: object,
                                         tipo: str) -> object:
    """
    Convert raw values from the ``datos`` object to the corresponding Python
    data type.

    :param campo_value: Raw value from 'campos'.
    :param tipo: Data type code from 'tipos'.
    """
    if not isinstance(campo_value, str):
        return campo_value

    deserialized_value: object

    if tipo == 'R':
        deserialized_value = Rut(campo_value)
    elif tipo == 'F':
        deserialized_value = datetime.strptime(campo_value, '%d/%m/%Y').date()
    elif tipo == 'C':
        deserialized_value = campo_value
    elif tipo in ('N', 'M'):
        deserialized_value = int(campo_value)
    elif tipo == 'D':
        deserialized_value = Decimal(campo_value)
    else:
        raise ValueError(f"Invalid or unknown tipo of campo: '{tipo}'")

    return deserialized_value
Example #20
0
 def test_as_dict(self) -> None:
     self.assertDictEqual(
         self.dte_l0_1.as_dict(),
         dict(
             emisor_rut=Rut('76354771-K'),
             tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
             folio=170,
         ))
Example #21
0
 def test_natural_key(self) -> None:
     self.assertEqual(
         self.dte_l0_1.natural_key,
         DteNaturalKey(
             emisor_rut=Rut('76354771-K'),
             tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
             folio=170,
         ))
Example #22
0
    def setUp(self) -> None:
        super().setUp()

        self.dte_l0_1 = DteDataL0(
            emisor_rut=Rut('76354771-K'),
            tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
            folio=170,
        )
    def test_alt_natural_key(self) -> None:
        self._set_obj_1()

        obj = self.obj_1
        expected_output = CesionAltNaturalKey(
            dte_key=DteNaturalKey(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
            ),
            cedente_rut=Rut('76389992-6'),
            cesionario_rut=Rut('76598556-0'),
            fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 4, 5, 12, 57),
                tz=CesionAltNaturalKey.DATETIME_FIELDS_TZ,
            ),
        )
        self.assertEqual(obj.alt_natural_key, expected_output)
 def test_as_dte_data_l2(self) -> None:
     self.assertEqual(
         self.dte_xml_data_1.as_dte_data_l2(),
         DteDataL2(
             emisor_rut=Rut('76354771-K'),
             tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
             folio=170,
             fecha_emision_date=date(2019, 4, 1),
             receptor_rut=Rut('96790240-3'),
             monto_total=2996301,
             emisor_razon_social='INGENIERIA ENACON SPA',
             receptor_razon_social='MINERA LOS PELAMBRES',
             fecha_vencimiento_date=None,
             firma_documento_dt=tz_utils.convert_naive_dt_to_tz_aware(
                 dt=datetime(2019, 4, 1, 1, 36, 40),
                 tz=DteXmlData.DATETIME_FIELDS_TZ),
             signature_value=self.dte_1_xml_signature_value,
             signature_x509_cert_der=self.dte_1_xml_cert_der,
             emisor_giro='Ingenieria y Construccion',
             emisor_email='*****@*****.**',
             receptor_email=None,
         ))
     self.assertEqual(
         self.dte_xml_data_2.as_dte_data_l2(),
         DteDataL2(
             emisor_rut=Rut('60910000-1'),
             tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
             folio=2336600,
             fecha_emision_date=date(2019, 8, 8),
             receptor_rut=Rut('76555835-2'),
             monto_total=10642,
             emisor_razon_social='Universidad de Chile',
             receptor_razon_social='FYNPAL SPA',
             fecha_vencimiento_date=date(2019, 8, 8),
             firma_documento_dt=tz_utils.convert_naive_dt_to_tz_aware(
                 dt=datetime(2019, 8, 9, 9, 41, 9),
                 tz=DteXmlData.DATETIME_FIELDS_TZ),
             signature_value=self.dte_2_xml_signature_value,
             signature_x509_cert_der=self.dte_2_xml_cert_der,
             emisor_giro=
             'Corporación Educacional y Servicios                 Profesionales',
             emisor_email=None,
             receptor_email=None,
         ))
Example #25
0
 def _validated(self, value: Optional[object]) -> Optional[Rut]:
     if value is None or isinstance(value, Rut):
         validated = value
     else:
         try:
             validated = Rut(value, validate_dv=False)  # type: ignore
         except TypeError:
             self.fail('type')
         except ValueError:
             self.fail('invalid')
     return validated
    def _set_obj_1(self) -> None:
        obj_dte_natural_key = DteNaturalKey(
            emisor_rut=Rut('76354771-K'),
            tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
            folio=170,
        )

        obj = CesionAltNaturalKey(
            dte_key=obj_dte_natural_key,
            cedente_rut=Rut('76389992-6'),
            cesionario_rut=Rut('76598556-0'),
            fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 4, 5, 12, 57),
                tz=CesionAltNaturalKey.DATETIME_FIELDS_TZ,
            ),
        )
        self.assertIsInstance(obj, CesionAltNaturalKey)

        self.obj_1_dte_natural_key = obj_dte_natural_key
        self.obj_1 = obj
def create_CteForm29(**kwargs: Any) -> data_models.CteForm29:
    defaults = dict(
        contribuyente_rut=Rut.random(),
        periodo_tributario=PeriodoTributario(year=2018,
                                             month=random.randint(1, 12)),
        folio=random.randint(1, 9999999999),
    )
    defaults.update(kwargs)

    obj = data_models.CteForm29(**defaults)
    return obj
    def _set_obj_1(self) -> None:
        obj = CesionAecXml(
            dte=DteDataL1(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
                fecha_emision_date=date(2019, 4, 1),
                receptor_rut=Rut('96790240-3'),
                monto_total=2996301,
            ),
            seq=1,
            cedente_rut=Rut('76354771-K'),
            cesionario_rut=Rut('76389992-6'),
            monto_cesion=2996301,
            fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 4, 1, 10, 22, 2),
                tz=CesionAecXml.DATETIME_FIELDS_TZ,
            ),
            fecha_ultimo_vencimiento=date(2019, 5, 1),
            cedente_razon_social=
            'SERVICIOS BONILLA Y LOPEZ Y COMPAÑIA LIMITADA',
            cedente_direccion='MERCED 753  16 ARBOLEDA DE QUIILOTA',
            cedente_email='*****@*****.**',
            cedente_persona_autorizada_rut=Rut('76354771-K'),
            cedente_persona_autorizada_nombre=
            'SERVICIOS BONILLA Y LOPEZ Y COMPAÑIA LIM',
            cesionario_razon_social='ST CAPITAL S.A.',
            cesionario_direccion='Isidora Goyenechea 2939 Oficina 602',
            cesionario_email='*****@*****.**',
            dte_deudor_email=None,
            cedente_declaracion_jurada=
            ('Se declara bajo juramento que SERVICIOS BONILLA Y LOPEZ Y COMPAÑIA '
             'LIMITADA, RUT 76354771-K ha puesto a disposición del cesionario ST '
             'CAPITAL S.A., RUT 76389992-6, el o los documentos donde constan los '
             'recibos de las mercaderías entregadas o servicios prestados, entregados '
             'por parte del deudor de la factura MINERA LOS PELAMBRES, RUT 96790240-3, '
             'deacuerdo a lo establecido en la Ley N°19.983.'),
        )
        self.assertIsInstance(obj, CesionAecXml)

        self.obj_1 = obj
    def test_as_cesion_l2(self) -> None:
        self._set_obj_1()

        obj = self.obj_1
        expected_output = CesionL2(
            dte_key=DteNaturalKey(
                emisor_rut=Rut('76354771-K'),
                tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
                folio=170,
            ),
            seq=1,
            cedente_rut=Rut('76354771-K'),
            cesionario_rut=Rut('76389992-6'),
            fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware(
                dt=datetime(2019, 4, 1, 10, 22, 2),
                tz=CesionL2.DATETIME_FIELDS_TZ,
            ),
            monto_cedido=2996301,
            dte_receptor_rut=Rut('96790240-3'),
            dte_fecha_emision=date(2019, 4, 1),
            dte_monto_total=2996301,
            fecha_ultimo_vencimiento=date(2019, 5, 1),
            cedente_razon_social=
            'SERVICIOS BONILLA Y LOPEZ Y COMPAÑIA LIMITADA',
            cedente_email='*****@*****.**',
            cesionario_razon_social='ST CAPITAL S.A.',
            cesionario_email='*****@*****.**',
            dte_deudor_email=None,
            cedente_declaracion_jurada=
            ('Se declara bajo juramento que SERVICIOS BONILLA Y LOPEZ Y COMPAÑIA '
             'LIMITADA, RUT 76354771-K ha puesto a disposición del cesionario ST '
             'CAPITAL S.A., RUT 76389992-6, el o los documentos donde constan los '
             'recibos de las mercaderías entregadas o servicios prestados, entregados '
             'por parte del deudor de la factura MINERA LOS PELAMBRES, RUT 96790240-3, '
             'deacuerdo a lo establecido en la Ley N°19.983.'),
        )
        obj_cesion_l2 = obj.as_cesion_l2()
        self.assertEqual(obj_cesion_l2, expected_output)
        self.assertEqual(obj_cesion_l2.natural_key, obj.natural_key)
        self.assertEqual(obj_cesion_l2.alt_natural_key, obj.alt_natural_key)
        self.assertEqual(obj_cesion_l2.dte_key, obj.dte.natural_key)
 def test_as_dte_data_l1(self) -> None:
     self.assertEqual(
         self.dte_xml_data_1.as_dte_data_l1(),
         DteDataL1(
             emisor_rut=Rut('76354771-K'),
             tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
             folio=170,
             fecha_emision_date=date(2019, 4, 1),
             receptor_rut=Rut('96790240-3'),
             monto_total=2996301,
         ))
     self.assertEqual(
         self.dte_xml_data_2.as_dte_data_l1(),
         DteDataL1(
             emisor_rut=Rut('60910000-1'),
             tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA,
             folio=2336600,
             fecha_emision_date=date(2019, 8, 8),
             receptor_rut=Rut('76555835-2'),
             monto_total=10642,
         ))