Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 0.67.0
current_version = 0.68.0
commit = True
tag = False
message = chore: Bump version from {current_version} to {new_version}
Expand Down
5 changes: 5 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# History

## 0.68.0 (2025-12-29)

- (PR #962, 2025-12-29) rcv: Update RV fields optional in schemas and data models
- (PR #961, 2025-12-29) rcv: Introduce DocumentoReferencias for improved data handling

## 0.67.0 (2025-12-02)

- (PR #956, 2025-12-02) rcv: `RvDetalleEntry.get_documento_referencia_dte_natural_key()`
Expand Down
2 changes: 1 addition & 1 deletion src/cl_sii/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
"""

__version__ = '0.67.0'
__version__ = '0.68.0'
101 changes: 60 additions & 41 deletions src/cl_sii/rcv/data_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,18 @@ class OtrosImpuestos(TypedDict):
"""


class DocumentoReferencia(TypedDict):
tipo_documento_referencia: int
"""
Tipo Docto. Referencia
"""

folio_documento_referencia: int
"""
Folio Docto. Referencia
"""


@pydantic.dataclasses.dataclass(
frozen=True,
config=pydantic.ConfigDict(
Expand Down Expand Up @@ -344,17 +356,17 @@ class RvDetalleEntry(RcvDetalleEntry):
Fecha Reclamo (must be timezone aware)
"""

monto_exento: int
monto_exento: Optional[int]
"""
Monto Exento
"""

monto_neto: int
monto_neto: Optional[int]
"""
Monto Neto
"""

monto_iva: int
monto_iva: Optional[int]
"""
Monto IVA
"""
Expand Down Expand Up @@ -389,34 +401,31 @@ class RvDetalleEntry(RcvDetalleEntry):
RUT Emisor Liquid. Factura
"""

neto_comision_liquidacion_factura: int
neto_comision_liquidacion_factura: Optional[int]
"""
Neto Comision Liquid. Factura
"""

exento_comision_liquidacion_factura: int
exento_comision_liquidacion_factura: Optional[int]
"""
Exento Comision Liquid. Factura
"""

iva_comision_liquidacion_factura: int
iva_comision_liquidacion_factura: Optional[int]
"""
IVA Comision Liquid. Factura
"""

iva_fuera_de_plazo: int
iva_fuera_de_plazo: Optional[int]
"""
IVA fuera de plazo
"""

tipo_documento_referencia: Optional[int]
"""
Tipo Docto. Referencia
"""

folio_documento_referencia: Optional[int]
documento_referencias: Optional[Sequence[DocumentoReferencia]]
"""
Folio Docto. Referencia
List of:
- Tipo Docto. Referencia
- Folio Docto. Referencia
"""

num_ident_receptor_extranjero: Optional[str]
Expand All @@ -429,7 +438,7 @@ class RvDetalleEntry(RcvDetalleEntry):
Nacionalidad Receptor Extranjero
"""

credito_empresa_constructora: int
credito_empresa_constructora: Optional[int]
"""
Credito empresa constructora
"""
Expand All @@ -439,27 +448,27 @@ class RvDetalleEntry(RcvDetalleEntry):
Impto. Zona Franca (Ley 18211)
"""

garantia_dep_envases: int
garantia_dep_envases: Optional[int]
"""
Garantia Dep. Envases
"""

indicador_venta_sin_costo: int
indicador_venta_sin_costo: Optional[int]
"""
Indicador Venta sin Costo
"""

indicador_servicio_periodico: int
indicador_servicio_periodico: Optional[int]
"""
Indicador Servicio Periodico
"""

monto_no_facturable: int
monto_no_facturable: Optional[int]
"""
Monto No facturable
"""

total_monto_periodo: int
total_monto_periodo: Optional[int]
"""
Total Monto Periodo
"""
Expand Down Expand Up @@ -495,33 +504,43 @@ class RvDetalleEntry(RcvDetalleEntry):
# Custom Methods
###########################################################################

def get_documento_referencia_dte_natural_key(
def get_documento_referencia_dte_natural_keys(
self,
) -> cl_sii.dte.data_models.DteNaturalKey | None:
if self.tipo_documento_referencia is None or self.folio_documento_referencia is None:
) -> Sequence[cl_sii.dte.data_models.DteNaturalKey] | None:
if self.documento_referencias is None:
return None

try:
tipo_documento_referencia = RcvTipoDocto(self.tipo_documento_referencia)
except ValueError:
# Not a valid RCV Tipo de Documento, but it could still be a valid Tipo de DTE.
try:
tipo_dte_referencia = cl_sii.dte.constants.TipoDte(self.tipo_documento_referencia)
except ValueError:
# Not a DTE.
return None
else:
documento_referencia_natural_keys = []

for documento_referencia in self.documento_referencias:
tipo_documento_referencia = documento_referencia['tipo_documento_referencia']
folio_documento_referencia = documento_referencia['folio_documento_referencia']

try:
tipo_dte_referencia = tipo_documento_referencia.as_tipo_dte()
tipo_documento_referencia = RcvTipoDocto(tipo_documento_referencia)
except ValueError:
# Not a DTE.
return None
# Not a valid RCV Tipo de Documento, but it could still be a valid Tipo de DTE.
try:
tipo_dte_referencia = cl_sii.dte.constants.TipoDte(tipo_documento_referencia)
except ValueError:
# Not a DTE.
return None
else:
try:
tipo_dte_referencia = tipo_documento_referencia.as_tipo_dte()
except ValueError:
# Not a DTE.
return None

documento_referencia_natural_keys.append(
cl_sii.dte.data_models.DteNaturalKey(
emisor_rut=self.contribuyente_rut,
tipo_dte=tipo_dte_referencia,
folio=folio_documento_referencia,
)
)

return cl_sii.dte.data_models.DteNaturalKey(
emisor_rut=self.contribuyente_rut,
tipo_dte=tipo_dte_referencia,
folio=self.folio_documento_referencia,
)
return documento_referencia_natural_keys

###########################################################################
# Validators
Expand Down
Loading
Loading