Impl cross_validate in progress

This commit is contained in:
Nitwix
2025-04-12 13:04:26 +02:00
parent 321217db60
commit a3b3e957b7
2 changed files with 48 additions and 14 deletions

View File

@ -0,0 +1,19 @@
from validation import FromAccount
account_data = FromAccount(
account_name="Astrid Janneke Willems",
account_holder_name="Astrid Janneke",
account_holder_surname="Willems",
passport_number="HW8642009",
reference_currency="EUR",
other_currency=None,
building_number="18",
street_name="Lijnbaan",
postal_code="7523 05",
city="Assen",
country="Netherlands",
name="Astrid Janneke Willems",
phone_number="+31 06 34579996",
email="astrid.willems@upcmail.nl"
)

View File

@ -1,17 +1,17 @@
from enum import StrEnum from enum import StrEnum
from typing import Any, Callable from typing import Any, Callable, Optional
from pydantic import BaseModel from pydantic import BaseModel
from validation import FromAccount, FromDescription, FromPassport, FromProfile from validation import FromAccount, FromDescription, FromPassport, FromProfile
class ExtractedData(BaseModel):
class ValidatedData(BaseModel):
account: FromAccount account: FromAccount
description: FromDescription description: FromDescription
passport: FromPassport passport: FromPassport
profile: FromProfile profile: FromProfile
class DocType(StrEnum): class DocType(StrEnum):
account = "account" account = "account"
description = "description" description = "description"
@ -19,7 +19,7 @@ class DocType(StrEnum):
profile = "profile" profile = "profile"
class ValidationFailure(BaseModel): class XValFailure(BaseModel):
doc1_type: DocType doc1_type: DocType
doc1_val: str doc1_val: str
@ -27,19 +27,34 @@ class ValidationFailure(BaseModel):
doc2_val: str doc2_val: str
def xval_name_account_description(data: ExtractedData) -> Optional[XValFailure]:
def xref_client_name(data: ValidatedData) -> ValidationFailure:
if data.account.account_holder_name != data.description.full_name: if data.account.account_holder_name != data.description.full_name:
return ValidationFailure( return XValFailure(
doc1_type=DocType.account, doc1_val=f"{data.account.account_holder_name=}", doc1_type=DocType.account,
doc2_type=DocType.description, doc2_val=f"{data.description.full_name=}" doc1_val=f"{data.account.account_holder_name=}",
doc2_type=DocType.description,
doc2_val=f"{data.description.full_name=}",
) )
# TODO CONTINUE
def xref_all(data: ValidatedData) -> list[ValidationFailure]:
xref_validators: list[Callable[[ValidatedData], ValidationFailure]] = [xref_client_name] def xval_email_account_profile(data: ExtractedData) -> Optional[XValFailure]:
if data.account.email != data.profile.email:
return XValFailure(
doc1_type=DocType.account,
doc1_val=f"{data.account.email=}",
doc2_type=DocType.profile,
doc2_val=f"{data.profile.email=}"
)
def xref_all(data: ExtractedData) -> list[XValFailure]:
xref_validators: list[Callable[[ExtractedData], Optional[XValFailure]]] = [
xval_name_account_description
]
validation_failures = [] validation_failures = []
for validator in xref_validators: for validator in xref_validators:
validation_failures.append(validator(data)) failure = validator(data)
return validation_failures if not failure is None:
validation_failures.append(failure)
return validation_failures