| """14: Contract date anomalies — A level, universal. |
| |
| * expiry_date < effective_date → HIGH (logically impossible) |
| * "indefinite" / "unlimited" string and null aliases skipped (NOT flagged) |
| """ |
|
|
| from __future__ import annotations |
|
|
| from domain_checks.base import make_risk |
| from graph.states.pipeline_state import Risk |
| from utils.numbers import is_null_alias |
|
|
|
|
| _REGULATION = "Contract date best practice" |
|
|
|
|
| _INDEFINITE_TOKENS = { |
| "indefinite", "unlimited", "perpetual", "open-ended", |
| "határozatlan", "unbefristet", |
| } |
|
|
|
|
| class ContractDatesCheck: |
| check_id = "check_14_contract_dates" |
| regulation = _REGULATION |
| is_hu_specific = False |
| applies_to = {"contract"} |
|
|
| def apply(self, extracted: dict) -> list[Risk]: |
| risks: list[Risk] = [] |
|
|
| effective_date = str(extracted.get("effective_date") or "") |
| expiry_date = str(extracted.get("expiry_date") or "") |
|
|
| |
| if (effective_date and expiry_date |
| and not is_null_alias(effective_date) and not is_null_alias(expiry_date) |
| and expiry_date.lower() not in _INDEFINITE_TOKENS |
| and expiry_date < effective_date): |
| risks.append(make_risk( |
| description=( |
| f"Date logic contradiction: expiry date ({expiry_date}) " |
| f"precedes effective date ({effective_date})" |
| ), |
| severity="high", |
| rationale=( |
| f"The contract's expiry date ({expiry_date}) is earlier than " |
| f"its effective date ({effective_date}). This is logically " |
| f"impossible and threatens the contract's enforceability." |
| ), |
| regulation=_REGULATION, |
| source_check_id=self.check_id, |
| )) |
|
|
| return risks |
|
|