xval_age_description_passport
This commit is contained in:
@ -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
|
@ -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 = []
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user