# generated by datamodel-codegen: # filename: schema.json # timestamp: 2023-07-28T11:36:16+00:00 from __future__ import annotations from datetime import date from typing import Dict, Optional, Union import iso4217 from pydantic import BaseModel, Field, constr, validator, ValidationError class TaxItem(BaseModel): gst: float = Field( ..., title="The total GST tax amount (IGST + CGST + SGST + etc) as a single number", ) class TaxItem1(BaseModel): vat: float = Field(..., title="The total VAT present in the invoice") class TaxNumberItem(BaseModel): gst_number: constr(min_length=15) = Field( ..., title="The alphanumeric GSTIN/GST number code" ) class TaxNumberItem1(BaseModel): vat_number: str = Field(..., title="The VAT/TIN number present in older invoices") class TaxNumberItem2(BaseModel): ui_number: str = Field(..., title="The tax UIN issued to foreign entities") class SellerDetails(BaseModel): name: Optional[str] = None address: Optional[str] = None contact: Optional[str] = None tax_number: Union[TaxNumberItem, TaxNumberItem1, TaxNumberItem2] = Field( ..., title="Tax information" ) pan_number: constr(min_length=10, max_length=10) = Field( ..., title="The 10-character alphanumeric PAN code" ) class UIDDict(BaseModel): invoice_number: str = Field(..., title="The invoice number") other_uids: Dict[str, str] = Field( ..., title="Key-value pairs of uniquely identifying numbers (UIDs) like order number, bill number, payment ID, etc but not the invoice number", ) class InformationExtractedFromABillReceipt(BaseModel): uids: UIDDict = Field(..., title="Invoice number and other UIDs") total: float = Field(..., title="Total amount or price") tax: Union[TaxItem, TaxItem1] = Field(..., title="The total tax amount") name: str = Field( ..., title="Name of the person/entity that the invoice item was charged or delivered to", ) currency: str = Field( default="INR", title="The ISO 4217 code for the currency in which the prices in the invoice are (inferred from symbols, names, addresses, etc)", ) issue_date: date = Field( ..., title="The date the invoice was issued" ) seller_details: SellerDetails = Field(..., title="Information about the seller") summary: str = Field(..., title="5-6 words short summary of purchased good(s)") @validator("currency") @classmethod def check_currency(cls, v: str) -> str: if not iso4217.Currency.__members__.get(v.lower()): raise ValidationError(f"{v} is not a valid ISO 4217 currency code") return v.upper()