Skip to content

Commit 4ea7417

Browse files
authored
Merge pull request #1040 from cordada/task/sc-20626--lib-cl-sii-python-add-tipodte-110-111-and-112
dte: Add TipoDte 110, 111, 112
2 parents b430243 + 8ad7c95 commit 4ea7417

4 files changed

Lines changed: 128 additions & 8 deletions

File tree

src/cl_sii/dte/constants.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,20 @@ class TipoDte(enum.IntEnum):
147147
"""Nota electrónica de crédito."""
148148
# aka 'Nota de Crédito Electrónica'
149149

150-
# TODO: add
151-
# 110 Factura de exportación electrónica
152-
# 111 Nota de débito de exportación electrónica
153-
# 112 Nota de crédito de exportación electrónica
154-
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L58-L60
155-
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L708-L717
156-
# See 'cl_sii.rcv.constants.RcvTipoDocto'
157-
# Should 'is_factura' be true for a "Factura de exportación electrónica" (110) ?
150+
FACTURA_EXPORTACION_ELECTRONICA = 110
151+
"""Factura de exportación electrónica."""
152+
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L58
153+
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L713
154+
155+
NOTA_DEBITO_EXPORTACION_ELECTRONICA = 111
156+
"""Nota de débito de exportación electrónica."""
157+
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L59
158+
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L714
159+
160+
NOTA_CREDITO_EXPORTACION_ELECTRONICA = 112
161+
"""Nota de crédito de exportación electrónica."""
162+
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L60
163+
# https://github.com/fyntex/lib-cl-sii-python/blob/f57a326/cl_sii/data/ref/factura_electronica/schemas-xml/SiiTypes_v10.xsd#L715
158164

159165
@property
160166
def is_factura(self) -> bool:
@@ -166,6 +172,8 @@ def is_factura(self) -> bool:
166172
result = True
167173
elif self is TipoDte.LIQUIDACION_FACTURA_ELECTRONICA:
168174
result = True
175+
elif self is TipoDte.FACTURA_EXPORTACION_ELECTRONICA:
176+
result = True
169177
else:
170178
result = False
171179

@@ -179,6 +187,8 @@ def is_factura_venta(self) -> bool:
179187
result = True
180188
elif self is TipoDte.LIQUIDACION_FACTURA_ELECTRONICA:
181189
result = True
190+
elif self is TipoDte.FACTURA_EXPORTACION_ELECTRONICA:
191+
result = True
182192
else:
183193
result = False
184194

@@ -199,6 +209,10 @@ def is_nota(self) -> bool:
199209
result = True
200210
elif self is TipoDte.NOTA_CREDITO_ELECTRONICA:
201211
result = True
212+
elif self is TipoDte.NOTA_DEBITO_EXPORTACION_ELECTRONICA:
213+
result = True
214+
elif self is TipoDte.NOTA_CREDITO_EXPORTACION_ELECTRONICA:
215+
result = True
202216
else:
203217
result = False
204218

@@ -295,6 +309,9 @@ def receptor_is_vendedor(self) -> bool:
295309
TipoDte.NOTA_CREDITO_ELECTRONICA,
296310
TipoDte.NOTA_DEBITO_ELECTRONICA,
297311
TipoDte.FACTURA_COMPRA_ELECTRONICA,
312+
TipoDte.FACTURA_EXPORTACION_ELECTRONICA,
313+
TipoDte.NOTA_DEBITO_EXPORTACION_ELECTRONICA,
314+
TipoDte.NOTA_CREDITO_EXPORTACION_ELECTRONICA,
298315
}
299316
)
300317

@@ -345,6 +362,8 @@ def receptor_is_vendedor(self) -> bool:
345362
{
346363
TipoDte.NOTA_CREDITO_ELECTRONICA,
347364
TipoDte.NOTA_DEBITO_ELECTRONICA,
365+
TipoDte.NOTA_DEBITO_EXPORTACION_ELECTRONICA,
366+
TipoDte.NOTA_CREDITO_EXPORTACION_ELECTRONICA,
348367
}
349368
)
350369

src/tests/test_dte_constants.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,57 @@ def test_NOTA_CREDITO_ELECTRONICA(self) -> None:
152152

153153
for result, expected in assertions:
154154
self.assertTrue(result is expected)
155+
156+
def test_FACTURA_EXPORTACION_ELECTRONICA(self) -> None:
157+
value = self.TipoDte.FACTURA_EXPORTACION_ELECTRONICA
158+
159+
self.assertEqual(value.name, 'FACTURA_EXPORTACION_ELECTRONICA')
160+
self.assertEqual(value.value, 110)
161+
162+
assertions = [
163+
(value.is_factura, True),
164+
(value.is_factura_venta, True),
165+
(value.is_factura_compra, False),
166+
(value.is_nota, False),
167+
(value.emisor_is_vendedor, True),
168+
(value.receptor_is_vendedor, False),
169+
]
170+
171+
for result, expected in assertions:
172+
self.assertTrue(result is expected)
173+
174+
def test_NOTA_DEBITO_EXPORTACION_ELECTRONICA(self) -> None:
175+
value = self.TipoDte.NOTA_DEBITO_EXPORTACION_ELECTRONICA
176+
177+
self.assertEqual(value.name, 'NOTA_DEBITO_EXPORTACION_ELECTRONICA')
178+
self.assertEqual(value.value, 111)
179+
180+
assertions = [
181+
(value.is_factura, False),
182+
(value.is_factura_venta, False),
183+
(value.is_factura_compra, False),
184+
(value.is_nota, True),
185+
(value.emisor_is_vendedor, False),
186+
(value.receptor_is_vendedor, False),
187+
]
188+
189+
for result, expected in assertions:
190+
self.assertTrue(result is expected)
191+
192+
def test_NOTA_CREDITO_EXPORTACION_ELECTRONICA(self) -> None:
193+
value = self.TipoDte.NOTA_CREDITO_EXPORTACION_ELECTRONICA
194+
195+
self.assertEqual(value.name, 'NOTA_CREDITO_EXPORTACION_ELECTRONICA')
196+
self.assertEqual(value.value, 112)
197+
198+
assertions = [
199+
(value.is_factura, False),
200+
(value.is_factura_venta, False),
201+
(value.is_factura_compra, False),
202+
(value.is_nota, True),
203+
(value.emisor_is_vendedor, False),
204+
(value.receptor_is_vendedor, False),
205+
]
206+
207+
for result, expected in assertions:
208+
self.assertTrue(result is expected)

src/tests/test_rcv_constants.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,18 @@ def test_as_tipo_dte(self) -> None:
118118
self.RcvTipoDocto.FACTURA_ELECTRONICA.as_tipo_dte(),
119119
TipoDte.FACTURA_ELECTRONICA,
120120
)
121+
self.assertEqual(
122+
self.RcvTipoDocto.FACTURA_EXPORTACION_ELECTRONICA.as_tipo_dte(),
123+
TipoDte.FACTURA_EXPORTACION_ELECTRONICA,
124+
)
125+
self.assertEqual(
126+
self.RcvTipoDocto.NOTA_DEBITO_EXPORTACION_ELECTRONICA.as_tipo_dte(),
127+
TipoDte.NOTA_DEBITO_EXPORTACION_ELECTRONICA,
128+
)
129+
self.assertEqual(
130+
self.RcvTipoDocto.NOTA_CREDITO_EXPORTACION_ELECTRONICA.as_tipo_dte(),
131+
TipoDte.NOTA_CREDITO_EXPORTACION_ELECTRONICA,
132+
)
121133

122134
with self.assertRaises(ValueError) as cm:
123135
self.RcvTipoDocto.FACTURA.as_tipo_dte()

src/tests/test_rcv_data_models.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,41 @@ def test_get_documento_referencia_dte_natural_keys(self) -> None:
450450

451451
self.assertEqual(expected_doc_ref_dte_natural_key, actual_doc_ref_dte_natural_key)
452452

453+
# Detalle Entry that references an export DTE:
454+
455+
rv_detalle_entry_with_export_doc_ref = dataclasses.replace(
456+
rv_detalle_entry,
457+
tipo_docto=RcvTipoDocto.FACTURA_EXPORTACION_ELECTRONICA,
458+
folio=2233,
459+
documento_referencias=[
460+
DocumentoReferencia(
461+
tipo_documento_referencia=RcvTipoDocto.FACTURA_EXPORTACION_ELECTRONICA,
462+
folio_documento_referencia=12345,
463+
)
464+
],
465+
)
466+
self.assertEqual(
467+
cl_sii.dte.data_models.DteNaturalKey(
468+
emisor_rut=Rut('76354771-K'),
469+
tipo_dte=cl_sii.dte.constants.TipoDte.FACTURA_EXPORTACION_ELECTRONICA,
470+
folio=2233,
471+
),
472+
rv_detalle_entry_with_export_doc_ref.as_dte_data_l2().natural_key,
473+
)
474+
475+
expected_doc_ref_dte_natural_key = [
476+
cl_sii.dte.data_models.DteNaturalKey(
477+
emisor_rut=Rut('76354771-K'),
478+
tipo_dte=cl_sii.dte.constants.TipoDte.FACTURA_EXPORTACION_ELECTRONICA,
479+
folio=12345,
480+
)
481+
]
482+
actual_doc_ref_dte_natural_key = (
483+
rv_detalle_entry_with_export_doc_ref.get_documento_referencia_dte_natural_keys()
484+
)
485+
486+
self.assertEqual(expected_doc_ref_dte_natural_key, actual_doc_ref_dte_natural_key)
487+
453488
# Detalle Entry that references a documento that is a valid DTE
454489
# but not a valid RCV Tipo de Documento:
455490

0 commit comments

Comments
 (0)