Opening
What It Models
An opening describes recruitment for a committee vacancy, whether tied to a particular seat, position or any seat-holder place. It includes the interest and alternate records for that vacancy. The forecast is a calculation over appointment endings that can create drafts.
Identity and Attributes
The record identity persists through publication and filling. The place count and dates describe the advertised opportunity, while counted appointment references provide deduplication for event delivery. Deadline visibility does not imply automatic closure.
Relationships
An opening belongs to a committee and can be referenced by several nominations. A matching seat-holder appointment may fill it. Seats, positions and appointments are separate records owned by the committee module.
Invariants
Creation checks place count, date ordering and target compatibility. Staff lifecycle actions refuse final records. Filling deduplicates appointment starts, and member interest is updated within its unique opening-contact pair.
How It Is Stored and Shared
The recruitment service owns openings, interests and alternates, with Queries exposing the opening dataset. Its workspace lifecycle declarations purge openings under the committees participant, a boundary mismatch already recorded. Openings declare no custom fields.
Open Design Questions
Filling ignores the advertised date window and no scheduled job closes expired recruitment. Publication notices target chair and liaison rather than responsibility holders. Product must decide the date policy and notice audience before a staff surface relies on them.