12. Grant cycle templates
A cycle template is the blueprint for everything an application + grant on a given donor contract looks like. One template per donor program: EU centralised grant, NL MFA framework, etc. Inside the template you define stages, budget categories, the optional detail template, and the reporting cadence.
Changing a template only affects grants created after the change — existing grants carry their own snapshot. This is EU-audit-friendly: a 2026 report can be exactly reconstructed in 2028 even if the template has since been refined.
The list page
- Active templates on top; archived templates collapsed into a separate card below.
- Per row: name, type, stage count, detail-row count, active/total application count.
- Per row actions: Copy (deep-clone into a new template that starts archived), Archive (hide from the Application-new dropdown), Restore (un-archive).
Creating a new template
- Click "+ Add template".
- Name + type (EU centralised / Embassy / MFA framework / Private foundation / Custom).
- Active checkbox — leave unchecked while you're still building it.
- Save. You land on the detail page with the six default categories pre-seeded.
12.1 Settings card
Rename the template, change its type, toggle active/archived. Delete is only available when zero applications reference the template — archive is the safer default.
12.2 Stages
The application flow. Default five for the EU template: Concept Note → Proposal & Budget → Assessment → Decision → Contract.
- Stage names are inline-editable — rename to match the donor's wording.
- Stage type is read-only — it controls which form fields the stage uses (concept summary, objectives, decision + rationale, etc.) and ships with the platform.
- Reorder / add / remove / required-fields editing is parked until you actually need a different number of stages.
What it looks like
Rename stages to match the donor's wording. Reorder, add, remove, and required-fields editing land in a later slice — in practice the five EU stages haven't needed restructuring.
| # | Name | Type |
|---|---|---|
| 1 | Concept Note | concept_note |
| 2 | Proposal & Budget | proposal_budget |
| 3 | Assessment | assessment |
| 4 | Decision (go/no-go) | decision |
| 5 | Contract | contract |
Illustration only.
12.3 Budget categories
The headline budget structure for every grant on this template. Default six match the EU INTPA template (Human Resources / Travel / Equipment / Project Office / Other costs & services / Indirect costs); other donors use different breakdowns.
| Field | What it does |
|---|---|
| Order | Display + Odoo sort order. |
| Code | Stable identifier (A-Z, 0-9, underscore, dash, max 16 chars). The Odoo Plan 2 analytic account is matched by code. Two templates sharing a code share one Odoo account. |
| Label | The user-facing name. Donor-specific (e.g. "Personnel costs" for USAID instead of "Human Resources"). |
| Type | Direct for regular spending. % of direct for an indirect-overhead row whose amount is calculated as a percentage of the direct subtotal. |
HR to PERS, every existing grant on this template gets its cost_category updated to PERS. Next Odoo sync creates a new PERS analytic account (or matches an existing one if another cycle in this tenant already uses it). Plan accordingly.
What it looks like
| Order | Code | Label | Type | |
|---|---|---|---|---|
| 1 | HR | Human Resources | Direct ▾ | |
| 2 | TRV | Travel | Direct ▾ | |
| 3 | EQP | Equipment | Direct ▾ | |
| 4 | OFF | Project Office | Direct ▾ | |
| 5 | SVC | Other costs & services | Direct ▾ | |
| 6 | IND | Indirect costs | % of direct ▾ | |
| Add category | ||||
Illustration only.
12.4 Budget detail template
Optional. The default detail rows seeded into every new grant on this template — same row component as the grant Budget card. Each row carries:
- Code — e.g.
1.1.1.a. - Label — e.g. "Country Director (40%)".
- Default inputs — units × unit value (or a single percentage for "% of direct" rows).
- Unit label — e.g. "Per month", "Per flight", "Lump sum", "% of direct".
Add rows via the "+ Add row to <category>" trigger under each category section. Remove via the × button. Edits here only affect grants created from now on.
12.5 Reporting cadence
Defines which reports a new grant on this template needs and how they are labelled. One row per recurring report.
| Kind | When it falls due | Offset uses |
|---|---|---|
| Annual | One row per 12-month slice from grant start (Year 1, Year 2, …). | Ignored. |
| Quarterly | One row per calendar quarter intersecting the grant. | Ignored. |
| Final | One row at the grant's end date. | Ignored. |
| Mid-term | One row at offset months from grant start. | Required (months from grant start). |
Label pattern uses tokens:
{n}— 1-based occurrence within this kind (1, 2, 3, …).{yyyy}— calendar year of the period's end date.{q}— calendar quarter of the period's end date (1–4).
The platform's EU centralised cadence ships seeded with: Annual report {n} ({yyyy}), Mid-term review (month 18), Final report ({yyyy}).
What it looks like
The cadence the period generator uses for new grants on this template.
| Order | Kind | Offset (months) | Label pattern | |
|---|---|---|---|---|
| 1 | Annual ▾ | — | Annual report {n} ({yyyy}) | |
| 2 | Mid-term ▾ | 18 | Mid-term review (month 18) | |
| 3 | Final ▾ | — | Final report ({yyyy}) | |
| Add cadence row | ||||
Illustration only — for a 36-month grant starting 2026-01-01 this cadence produces "Annual report 1 (2026)", "Annual report 2 (2027)", "Annual report 3 (2028)", "Mid-term review (month 18)" and "Final report (2028)".