from __future__ import annotations
from typing import List, Optional
from pydantic import BaseModel, Field, ConfigDict
class InvoiceItem(BaseModel):
# Accept Oracle payload keys, ignore extra fields we don't care about
model_config = ConfigDict(populate_by_name=True, extra="ignore")
# IMPORTANT: the alias names MUST match Oracle's actual JSON keys
# We know for sure from your error: CustomerTransactionId exists.
InvoiceId: str = Field(validation_alias="CustomerTransactionId")
# The rest depend on your Oracle endpoint/fields.
# These are common for Fusion AR Customer Transactions, but verify with a sample payload.
InvoiceNumber: Optional[str] = Field(default=None, validation_alias="TransactionNumber")
CustomerName: Optional[str] = Field(default=None, validation_alias="BillToCustomerName")
CustomerId: Optional[str] = Field(default=None, validation_alias="BillToCustomerId")
InvoiceDate: Optional[str] = Field(default=None, validation_alias="TransactionDate")
# Amount fields vary by endpoint. Keep optional until you confirm keys.
InvoiceAmount: Optional[float] = Field(default=None, validation_alias="TransactionAmount")
OutstandingAmount: Optional[float] = Field(default=None, validation_alias="RemainingAmount")
PaidAmount: Optional[float] = Field(default=None, validation_alias="PaidAmount")
class OracleApiResponse(BaseModel):
model_config = ConfigDict(populate_by_name=True, extra="ignore")
# If Oracle returns `items` you’re good. If it returns `items` under another name (like `items`/`items`),
# change the alias.
items: List[InvoiceItem] = Field(default_factory=list, validation_alias="items")