Membership Program
What It Models
A program defines a membership context, such as national or student membership. It sets eligible owners, structural binding, classification, numbering, grace, continuity and sales choices. Membership types are classifications within that context.
Identity and Attributes
Readable identities let packages and imports reference programs and types consistently. The binding controls the structural context a membership carries. Types select benefits and can override grace; their flow-down choices describe how organization membership extends to people.
Relationships
Programs refer to unit kinds and, optionally, an administering unit. Packages sell a classification from their own program. The memberships module consumes eligibility, exclusivity and numbering choices, while the engine receives live grace and continuity settings through hooks.
Invariants
The structured rows separate service validation of requirement lists from database constraints on program and classification references. Changing a program's binding does not automatically remove its existing requirements or affiliations.
How It Is Stored and Shared
Configuration owns programs, requirements, types and flow-down selections. Their submitted lists participate in the same save transaction, and history streams capture content revisions. Lifecycle exports expose program and type configuration; purchase preparation passes sales pointers to Commerce.
Open Design Questions
Stored preferences need a defined product effect or a decision to keep them unavailable. Product should also settle binding changes with retained affiliations, numbering uniqueness across programs and the different effects of retirement on staff and Commerce consumers.