xval_age_description_passport

This commit is contained in:
Nitwix
2025-04-12 15:56:29 +02:00
parent 7d8b34210c
commit 4cc4098220
4 changed files with 31 additions and 5 deletions

View File

@ -1,5 +1,5 @@
from tests.dummy import dummy_data from tests.dummy import dummy_data
from validation.cross_validate import xval_all, xval_email_account_profile, xval_name_account_description from validation.cross_validate import xval_age_description_passport, xval_all, xval_email_account_profile, xval_name_account_description
@ -11,6 +11,16 @@ def test_xval_email_account_profile() -> None:
failure = xval_email_account_profile(dummy_data()) failure = xval_email_account_profile(dummy_data())
assert failure is None assert failure is None
def test_xval_age_description_passport() -> None:
failure = xval_age_description_passport(dummy_data())
assert failure is None
def test_xval_age_description_passport_failure() -> None:
dummy = dummy_data()
dummy.description.age = 99 # should not correspond to dummy age from birth_date
failure = xval_age_description_passport(dummy)
assert not failure is None
def test_xval_all() -> None: def test_xval_all() -> None:
failures = xval_all(dummy_data()) failures = xval_all(dummy_data())
assert len(failures) == 0 assert len(failures) == 0

View File

@ -1,3 +1,4 @@
from datetime import date, timedelta
from enum import StrEnum from enum import StrEnum
from typing import Any, Callable, Optional from typing import Any, Callable, Optional
from pydantic import BaseModel from pydantic import BaseModel
@ -59,11 +60,26 @@ def xval_passport_no_account_passport(data: ExtractedData) -> Optional[XValFailu
doc2_val=f"{data.passport.passport_number=}" doc2_val=f"{data.passport.passport_number=}"
) )
def birth_date_to_age(birth_date: date) -> int:
today = date.today()
return today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day))
def xval_age_description_passport(data: ExtractedData) -> Optional[XValFailure]:
age_from_birth_date = birth_date_to_age(data.passport.birth_date)
if data.description.age != age_from_birth_date:
return XValFailure(
doc1_type=DocType.description,
doc1_val=f"{data.description.age=}",
doc2_type=DocType.passport,
doc2_val=f"{data.passport.birth_date=}"
)
def xval_all(data: ExtractedData) -> list[XValFailure]: def xval_all(data: ExtractedData) -> list[XValFailure]:
xref_validators: list[Callable[[ExtractedData], Optional[XValFailure]]] = [ xref_validators: list[Callable[[ExtractedData], Optional[XValFailure]]] = [
xval_name_account_description, xval_name_account_description,
xval_email_account_profile, xval_email_account_profile,
xval_passport_no_account_passport xval_passport_no_account_passport,
xval_age_description_passport
] ]
validation_failures = [] validation_failures = []

View File

@ -1,5 +1,5 @@
from typing import Literal, Optional from typing import Literal
from pydantic import BaseModel, ConfigDict, EmailStr, Field from pydantic import BaseModel, ConfigDict, Field
class FromDescription(BaseModel): class FromDescription(BaseModel):

View File

@ -2,6 +2,6 @@
# account.reference_currency corresponds to passport.country # account.reference_currency corresponds to passport.country
# account.country ~ passport.country # account.country ~ passport.country
# account.country ~ description.nationality
# account.city is in account.country # account.city is in account.country