@@ -47,6 +47,23 @@ def validate_cesion_seq(value: int) -> None:
47
47
raise ValueError ("Value is out of the valid range." , value )
48
48
49
49
50
+ def validate_cesion_fecha (value : datetime , tz : tz_utils .PytzTimezone ) -> None :
51
+ """
52
+ Validate value of date and time when the "cesión" happened.
53
+
54
+ :raises ValueError:
55
+ """
56
+
57
+ tz_utils .validate_dt_tz (value , tz )
58
+
59
+ current_date_in_tz = tz_utils .get_now_tz_aware ().astimezone (tz )
60
+
61
+ if not (value .date () <= current_date_in_tz .date ()):
62
+ raise ValueError (
63
+ 'Value of "fecha_cesion_dt" must be before or equal to the current day.' , value
64
+ )
65
+
66
+
50
67
def validate_cesion_monto (value : int ) -> None :
51
68
"""
52
69
Validate amount of the "cesión".
@@ -245,9 +262,9 @@ def validate_dte_tipo_dte(cls, v: object) -> object:
245
262
return v
246
263
247
264
@pydantic .validator ('fecha_cesion_dt' )
248
- def validate_datetime_tz (cls , v : object ) -> object :
265
+ def validate_fecha_cesion_dt (cls , v : object ) -> object :
249
266
if isinstance (v , datetime ):
250
- tz_utils . validate_dt_tz (v , cls .DATETIME_FIELDS_TZ )
267
+ validate_cesion_fecha (v , cls .DATETIME_FIELDS_TZ )
251
268
return v
252
269
253
270
@pydantic .validator ('fecha_cesion_dt' )
@@ -321,6 +338,9 @@ class CesionL0:
321
338
- Same timestamp as the "Registro AoR DTE" event ``DTE Cedido``.
322
339
- The above statements were empirically verified for
323
340
``CesionNaturalKey(dte_key=DteNaturalKey(Rut('99***140-4'), 33, 3105), seq=2)``.
341
+ - When receiving an XML AEC document, the SII validates this date is before or
342
+ equal to the current day.
343
+ Source: (https://www.sii.cl/factura_electronica/ins_tecnico.pdf)
324
344
325
345
.. warning:: The timestamp is generated by the signer of the AEC so it
326
346
cannot be fully trusted. It is not clear how much validation is
@@ -392,9 +412,9 @@ def validate_seq(cls, v: object) -> object:
392
412
return v
393
413
394
414
@pydantic .validator ('fecha_cesion_dt' )
395
- def validate_datetime_tz (cls , v : object ) -> object :
415
+ def validate_fecha_cesion_dt (cls , v : object ) -> object :
396
416
if isinstance (v , datetime ):
397
- tz_utils . validate_dt_tz (v , cls .DATETIME_FIELDS_TZ )
417
+ validate_cesion_fecha (v , cls .DATETIME_FIELDS_TZ )
398
418
return v
399
419
400
420
@@ -676,10 +696,13 @@ def as_dte_data_l2(self) -> dte_data_models.DteDataL2:
676
696
677
697
# TODO: Validate value of 'fecha_ultimo_vencimiento' in relation to the DTE data.
678
698
679
- @pydantic .validator (
680
- 'fecha_cesion_dt' ,
681
- 'fecha_firma_dt' ,
682
- )
699
+ @pydantic .validator ('fecha_cesion_dt' )
700
+ def validate_fecha_cesion_dt (cls , v : object ) -> object :
701
+ if isinstance (v , datetime ):
702
+ validate_cesion_fecha (v , cls .DATETIME_FIELDS_TZ )
703
+ return v
704
+
705
+ @pydantic .validator ('fecha_firma_dt' )
683
706
def validate_datetime_tz (cls , v : object ) -> object :
684
707
if isinstance (v , datetime ):
685
708
tz_utils .validate_dt_tz (v , cls .DATETIME_FIELDS_TZ )
0 commit comments