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, ))
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, ))
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 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, ))
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)
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)
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 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 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
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)
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
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, ))
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, ))
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, ))
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 _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, ))
def test_as_dict(self) -> None: self.assertDictEqual( self.dte_l2_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, 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.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, ))