Skip to Content
PlatformHow-to guidesRequest an approval

How to request an approval

Use this guide when a record is ready for someone else to decide on. You start with a record in Plans, Evidence or Progress; you end with an approval record in status approved, rejected or withdrawn and, for plans, protocols and reports, the record itself set to approved by its own approve route. Requesting needs progress.approvals.manage; deciding needs progress.approvals.approve; the /approve routes of Plans need plans.plans.approve, plans.protocols.approve or plans.reports.approve.

“Approved” is reserved for the status of an approval record or of a record that passed its approve route. A completed UI action says “Saved”. An agent never approves anything.

Prerequisites

  • A record to submit: a plan, protocol or report in Plans, a hypothesis in Evidence, or a milestone in Progress.
  • For plans, protocols and reports: the record has been moved to review with its transition route (POST .../transition with to: review, needs the .manage permission of that resource).

Choose Request review on the record

Open the record, for example Plans › Protocols (/p/<slug>/plans/protocols) and select a protocol. Choose Request review (shown only with progress.approvals.manage). Write a rationale explaining why the record is ready and submit. The dialog calls POST /programs/{program_id}/progress/approvals with target_type (milestone, plan, protocol, report or hypothesis) and target_id; the approval is created as requested and the button confirms with “Saved”.

Follow the request under Progress › Approvals

In the rail choose Progress, then Approvals in the panel (/p/<slug>/progress/approvals). Each row shows the target, status, who requested it and, later, who decided and when. Needs progress.approvals.read. The Overview section counts pending approvals for the program.

Record the decision (approver)

An approver opens the request and chooses Record decision (needs progress.approvals.approve), picks approved or rejected and writes a rationale. The form calls POST .../progress/approvals/{approval_id}/decision; decided_by, decided_at and the rationale are stored and an audit row is written in the same transaction.

Approve the record itself (plans, protocols, reports)

For a plan, protocol or report the record’s own status changes only through its approve route: open the record and choose Approve (needs plans.plans.approve, plans.protocols.approve or plans.reports.approve). The form calls POST .../plans/protocols/{protocol_id}/approve (or the plan or report equivalent) with a rationale, and the record reads approved. Every other status is set through POST .../transition with to any value other than approved.

Withdraw a request you made

While a request is still requested, the requester can choose Withdraw request (needs progress.approvals.manage); the route is POST .../progress/approvals/{approval_id}/withdraw and the status becomes withdrawn.

Troubleshooting

SymptomCauseFix
Request review is not shownYou lack progress.approvals.manageHeld by manufacturing_specialist, program_lead and program_owner
Record decision is not shownYou lack progress.approvals.approve or the request is no longer requestedOnly program_lead and program_owner decide approvals
Approve on a protocol is disabledYou lack plans.protocols.approveThe scientist persona drafts but does not approve protocols or reports
  • Statuses for the approval lifecycle.
  • Personas for who holds the approve permissions.