Service hours settings
Members log their own community service hours and officers review them; this page is where you set the requirement they're logging against — the default hours per semester, any per-status exceptions, and the categories members pick from.
Open Service Hours settings
Settings → Service Hours (tab icon: Clock). The tab only appears when the Operations module is enabled for your org.
Service Hours settings: Hour Requirements and Categories.
Hour Requirements
The Hour Requirements card has three parts:
- Default hours per semester — a number input (0.5-hour increments). Applied to every member unless their status has an override below. This is the number that drives the "Required" stat and progress ring on the member Service Hours page.
- Allow external hours — a toggle, described in the UI as "Members can log hours from organizations outside the chapter." When off, a member who enters an organization name on the Log Hours form without linking a service-eligible chapter event sees a warning that the entry will be rejected — and submitting it is a hard block: the API rejects the request outright (an error, no entry created), rather than accepting it and flagging it for officers to reject later. When on, external hours are accepted without that restriction.
- Per-status hour overrides — a table (columns: Member Status, Required Hours) for setting a different requirement than the default for specific membership statuses. Click Add override to add a row, then type a status value (matching a
Membershipstatus such asundergrad,associate,alumni,active_alumni,lifetime_alumni,pnm,disaffiliated, orinactive) and a hours value; the trash icon on a row removes it. This is a free-text field, not a dropdown — a typo won't match any member and that status will silently fall back to the default. With no overrides configured, the table shows: "No status overrides configured. All members use the default hours."
Click Save Changes to persist all three settings together. There's no per-field save — editing the default hours, the toggle, and the overrides table all save in one request.
Service Hour Categories
The Service Hour Categories card lists every category members can pick from on the Log Hours form's optional Category field. Each row shows the category name, its description (if any), and an Active / Inactive badge.
- Reordering — up/down arrow buttons on each row change display order, which is the order categories appear in the Log Hours dialog's Category dropdown.
- Edit — opens an Edit Category dialog with the same fields as creation (see below); click Save.
- Delete — click Delete, then confirm the browser dialog. See Errors and edge cases for the exact warning text and what actually happens to existing entries.
- Add Category — click Add Category to open a New Category dialog with three fields: Name (required), Description (optional), and an Active toggle (on by default). Click Create to save.
If your org has zero categories, the Category field is simply hidden on the member Log Hours form — categories are optional, not required for members to log hours. The card itself shows: "No categories configured. Categories help members classify their service hours."
The compliance_requirement link (not yet exposed in the UI)
The backend ServiceHourRequirement model has an optional compliance_requirement foreign key that can link a service hour requirement to a compliance NationalRequirement, for future compliance-dashboard integration. There is currently no settings control anywhere in the UI for setting this link. If you need it set, it has to be done directly against the database or via the Django admin — there's no admin-facing workflow for it today. Treat this as a known gap, not a hidden feature to go looking for.
Errors and edge cases
- Deleting a category that has existing entries. The confirmation dialog reads: "Delete this category? Existing entries in this category will keep their record but lose the category label." This is accurate — deleting a category does not delete or orphan the hour entries logged under it; those entries simply stop showing a category badge on the member's history and in exports.
- Entering an invalid or misspelled status in a per-status override. The field accepts any text, so a typo (e.g.
actveinstead ofactive) saves without error but never matches a real member — that status quietly falls back to the default hours. Double-check spelling against your organization's actual membership statuses. - Disabling the Operations module. The Service Hours settings tab, and the member/officer pages, disappear entirely — existing requirement and category data is preserved and reappears if the module is re-enabled later.
Related
- Service hours (members) — what members see when they log hours and track progress against the requirement you set here
- Service hours approvals (officers) — how officers review submissions
- Module: Operations
Last verified against v0.65.23 (2026-07-05). Service Hours shipped v0.63.42 (backlog #29). Corrected external-hours submission-block description (hard block at submit time, not a later officer-review flag).