from typing import Literal
from pydantic import BaseModel, Field
BureauName = Literal[
"equifax",
"experian",
"transunion",
"innovis",
"lexisnexis",
"other",
]
AccountType = Literal["revolving", "installment", "mortgage", "charge", "other"]
CollateralType = Literal[
"unsecured",
"real_estate",
"vehicle",
"cash_deposit",
"education",
"misc_asset",
]
AccountStatus = Literal[
"current",
"delinquent",
"charged_off",
"collection",
"bankruptcy",
"foreclosure",
"repossession",
"settled",
"closed",
"unknown",
]
class CRAddress(BaseModel):
address_line_1: str | None = None
city: str | None = None
state: str | None = None
zip_code: str | None = None
country: str | None = None
is_primary: bool | None = None
class CREntity(BaseModel):
full_name: str | None = None
address: list[CRAddress] | None = None
date_of_birth: str | None = None
has_fraud_alert: bool | None = None
has_security_freeze: bool | None = None
class CreditInquiry(BaseModel):
creditor_name: str | None = None
inquiry_date: str | None = None
class CreditBureau(BaseModel):
name: BureauName
display_name: str | None = None
inquiries: list[CreditInquiry] | None = None
class CreditAccount(BaseModel):
account_name: str | None = None
account_number: str | None = None
is_open: bool | None = None
is_authorized_user: bool | None = None
is_self_reported: bool | None = None
account_type_normalized: AccountType | None = None
account_status_normalized: AccountStatus | None = None
collateral_type: CollateralType | None = None
date_opened: str | None = None
date_closed: str | None = None
recent_balance: float | None = None
recent_balance_date: str | None = None
credit_limit: float | None = None
date_of_most_recent_report: str | None = None
date_of_first_report: str | None = None
date_last_active: str | None = None
worst_delinquency_days: int | None = None
payment_status: str | None = None
monthly_payment: float | None = None
high_credit_balance: float | None = None
class FicoScore(BaseModel):
score: int | None = None
date_of_score: str | None = None
class BureauReport(BaseModel):
credit_bureau: CreditBureau
underwritten_accounts: list[CreditAccount] = Field(default_factory=list)
fico_score: FicoScore | None = None
class CRMeta(BaseModel):
primary_entity: CREntity | None = None
credit_report_body: list[BureauReport] | None = None