5.7 Waivers Plugin
The Waivers plugin owns gathering waiver requirements, collected documents, exemptions/attestations, mobile collection, compliance dashboards, declines, closure, and retention integration. It loads fourth among the active first-party domain plugins.
Data model
| Model | Responsibility |
|---|---|
WaiverType |
Configures document requirements, allowed exemption reasons, and retention behavior |
GatheringActivityWaiver |
Maps gathering activities to required waiver types |
GatheringWaiver |
Tracks an uploaded waiver or exemption and its review/retention state |
GatheringWaiverClosure |
Audits ready-to-close/closed lifecycle for a gathering |
Documents themselves are owned by core DocumentsTable/DocumentService; plugin rows reference them.
Service map
WaiverFileService: upload validation, image/PDF processing, storage responses, required-type/status calculations, and deletion.WaiverStateService: ready-to-close, close, reopen, and decline transitions.WaiverDashboardService: branch-scoped compliance and calendar projections.WaiverMobileService: authorized gathering selection and mobile attestation/collection flows.GatheringActivityService: manages activity-to-waiver-type requirements.WaiversWorkflowProvider, actions, and conditions: register and execute closure workflow behavior.- navigation and view-cell providers: attach waiver UI to KMP without core template coupling.
Lifecycle
Gathering activities determine required waiver types. Operators upload documents or record a configured exemption. Dashboard/service calculations identify missing or declined requirements. WaiverStateService marks a gathering ready, closes it, or reopens it. The versioned waiver-closure.json workflow checks Waivers.IsReadyToClose and invokes Waivers.CloseWaiverCollection.
Retention dates are calculated when upload or exemption records are created; the closure workflow does not calculate them.
State transitions and file handling must go through these services. Direct updates can bypass document cleanup, audit records, retention dates, or closure invariants.
Storage, privacy, and tenancy
WaiverFileService delegates document persistence/serving to the core document layer and tenant storage resolver. Authorize the gathering/waiver before upload, preview, inline view, or download. Waiver content and metadata are sensitive; keep them out of logs, cache keys, public endpoints, and workflow variables shown to general approvers.
All queries, documents, dashboard counts, settings, and workflow instances use the active tenant. Background closure/retention work must enter the owning tenant context and clean it afterward.
Frontend and accessibility
Waiver CSS entry points (waivers and waiver-upload) are built by Vite. Mobile/upload flows must expose labeled controls, current step and validation state, progress/status announcements, keyboard operation, non-color-only status, meaningful previews, and a safe recovery path after failure.
Verification
Test file content/type/size validation, multi-image processing, exemptions, declined uploads, requirements derived from activities, ready/close/reopen transitions, retention calculations, authorized and denied reads, branch-scoped dashboards, workflow retry behavior, mobile keyboard/screen-reader flow, and two-tenant storage isolation.
See Waiver exemptions and attestations for that focused flow.