from pydantic import BaseModel class PricingExplainMatchedRule(BaseModel): matched_rule_level: str matched_target_ref: str pricing_category_id: str amount: str currency: str class PricingExplainResponse(BaseModel): scheme_id: str scheme_version_id: str seat_id: str | None element_id: str | None sector_id: str | None group_id: str | None row_label: str | None seat_number: str | None has_price: bool reason_code: str reason_message: str matched_rule: PricingExplainMatchedRule | None class UnpricedSeatItem(BaseModel): seat_record_id: str seat_id: str | None element_id: str | None sector_id: str | None group_id: str | None row_label: str | None seat_number: str | None reason_code: str reason_message: str class UnpricedSeatsResponse(BaseModel): scheme_id: str scheme_version_id: str total: int items: list[UnpricedSeatItem] class PricingCoverageSummaryResponse(BaseModel): scheme_id: str scheme_version_id: str total_seats: int priced_seats: int unpriced_seats: int coverage_percent: float