States and revisions

States run draft → open → closed → selected. Cancel is available before selection. archived is a flag, not a state. Publishing requires valid lines, a currency, at least one invited supplier, and a future deadline. Deadlines use server time, stored UTC, with an explicit displayed timezone.

An active RFQ pins its published configuration revision. Material request changes create a new RFQ revision. Existing quotes are then marked against their original revision. Quote flow is private draft → submitted revision → revised submitted revision or withdrawn. Editing a new draft does not mutate the last submitted version.

Selection occurs only when closed and targets one current, submitted, unexpired, nonwithdrawn quote revision matching the RFQ revision. Incomplete or alternative offers need acknowledgment and a reason. Selection is intent only.