Governs which EventType values show up in the add-event type picker for a given parent
object and acting user rank. Source: EventCoordinator.determinePermittedEventTypes(domain, erg, ua), which switches on EventRealm and delegates to one private per-parent method —
determinePermittedEventTypesForCECase() / ...ForOcc() / ...ForParcel(). Each of those is
an if-cascade gated on RoleType rank (MuniStaff = 2, MuniReader = 1), not a per-type
switch. This only filters the picker menu — it does not gate addEvent() itself, so
system/coordinator code can still attach any EventType directly.
| EventType | Case (CECase) |
OccPeriod |
Property (parcel) | EventRealm.UNIVERSAL |
|---|---|---|---|---|
Action |
Staff+ | Staff+ (also unconditional if hasEnfOfficialPermissions) |
Staff+ | — |
Timeline |
Staff+ | Staff+ | Staff+ | — |
Origination |
Staff+ | — | — | — |
Occupancy |
Staff+ | Staff+ | Staff+ | — |
PropertyAlert |
Staff+ | Staff+ | Staff+ | Always |
Citation |
Staff+ | — | — | — |
CaseAdmin |
Staff+ | — | — | — |
Inspection |
Staff+ | Staff+ | — | — |
Accounting |
Staff+ | Reader+ | — | — |
Communication |
Reader+ | Reader+ | Reader+ | Always |
Meeting |
Reader+ | Reader+ | Reader+ | Always |
Custom |
Reader+ | Reader+ | Reader+ | Always |
PropertyInfoCase |
— | — | Reader+ | — |
Staff+ = rank ≥ MuniStaff (Staff/Manager/SysAdmin). Reader+ = rank ≥ MuniReader
(everyone but Public). UNIVERSAL is used when erg isn't a specific parent; those 4 types
are added with no rank check at all.
These EventType values never appear in any of the three per-parent lists, so a human can
never pick them from an add-event dialog. All are created directly by coordinator code (case
phase transitions, occupancy lifecycle, etc.) via initEvent()/addEvent(), bypassing the
picker gate entirely:
CasereopenClosingViolationCourtNoticeOccupancyOriginationOccupancyClosingPhaseChangeWorkflowAccounting's floor is inconsistent: Staff-only on a case, but Reader-level on an occAction has a duplicate-add path on OccPeriod: added once unconditionally ifua.getKeyCard().isHasEnfOfficialPermissions(), and again if rank ≥ Staff. Harmless (plainArrayList, not deduped) but worth knowing if iterating the list for anything order/count-sensitive.EventType.getUserRankMinimumToEnact()/getUserRankMinimumToView() (the numbers bakedAction(5, 1)) are dead code — the only reference in the repo isPublicInfoCoordinator. All real enforcement is the hardcoded rankEventCategory's own roleFloorEventEnact/roleFloorEventView.