from pydantic import BaseModel, Field class RemapPreviewRequest(BaseModel): seat_record_ids: list[str] | None = Field(default=None, max_length=500) from_sector_id: str | None = Field(default=None, max_length=128) to_sector_id: str | None = Field(default=None, max_length=128) from_group_id: str | None = Field(default=None, max_length=128) to_group_id: str | None = Field(default=None, max_length=128) class RemapPreviewSeatItem(BaseModel): seat_record_id: str seat_id: str | None before_sector_id: str | None after_sector_id: str | None before_group_id: str | None after_group_id: str | None class RemapPreviewResponse(BaseModel): scheme_id: str scheme_version_id: str matched_count: int items: list[RemapPreviewSeatItem] class RemapApplyRequest(BaseModel): seat_record_ids: list[str] | None = Field(default=None, max_length=500) from_sector_id: str | None = Field(default=None, max_length=128) to_sector_id: str | None = Field(default=None, max_length=128) from_group_id: str | None = Field(default=None, max_length=128) to_group_id: str | None = Field(default=None, max_length=128) class RemapApplyResponse(BaseModel): scheme_id: str scheme_version_id: str updated_count: int items: list[RemapPreviewSeatItem] class PublishPreviewResponse(BaseModel): scheme_id: str scheme_version_id: str artifacts: dict validation: dict structure_diff: dict pricing_coverage: dict summary: dict