add backend endpoints for pricing coverage analysis and unpriced seat inspection add explain endpoint to make effective pricing decisions traceable improve pricing diagnostics for admin and editor workflows
53 lines
1.1 KiB
Python
53 lines
1.1 KiB
Python
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
|