add backend readiness contract for publish prechecks add pricing diagnostics to explain publish-blocking conditions make publish decisions more explicit and easier to debug for clients
55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
from pydantic import BaseModel
|
|
|
|
|
|
class PublishReadinessValidationSummary(BaseModel):
|
|
sectors_count: int
|
|
groups_count: int
|
|
seats_count: int
|
|
priced_seats_count: int
|
|
unpriced_seats_count: int
|
|
duplicate_seat_ids_count: int
|
|
seats_with_missing_contract_count: int
|
|
is_publishable: bool
|
|
|
|
|
|
class PublishReadinessPricingCoverage(BaseModel):
|
|
total_seats: int
|
|
priced_seats: int
|
|
unpriced_seats: int
|
|
coverage_percent: float
|
|
|
|
|
|
class PublishReadinessSnapshot(BaseModel):
|
|
available: bool
|
|
categories_count: int
|
|
rules_count: int
|
|
|
|
|
|
class PublishReadinessFlags(BaseModel):
|
|
validation_publishable: bool
|
|
snapshot_available: bool
|
|
require_full_pricing_coverage: bool
|
|
full_pricing_coverage: bool
|
|
pricing_gate_passed: bool
|
|
is_ready_to_publish: bool
|
|
|
|
|
|
class PublishReadinessResponse(BaseModel):
|
|
scheme_id: str
|
|
scheme_version_id: str
|
|
status: str
|
|
validation_summary: PublishReadinessValidationSummary
|
|
pricing_coverage: PublishReadinessPricingCoverage
|
|
snapshot: PublishReadinessSnapshot
|
|
readiness: PublishReadinessFlags
|
|
|
|
|
|
class SchemePublishActionResponse(BaseModel):
|
|
scheme_id: str
|
|
scheme_version_id: str
|
|
status: str
|
|
current_version_number: int
|
|
published_at: str | None
|
|
pricing_snapshot: dict
|
|
validation_summary: PublishReadinessValidationSummary
|