Skip to main content
This is the map of every document type the workflow engine drives — its path (states and the main transitions) and, where it has one, its approval gate and shipped default chain. Use it to see at a glance what a document does out of the box before you customise it in the editor. Conventions used below:
  • Start = the state a document begins in; end = a terminal (finished) state.
  • 🔒 system = a transition the system fires automatically — locked, not editable.
  • ⛩ gate = the approval step; this is where an approval policy attaches. Only these steps show the approver badge.

Three kinds of document

The eleven “Path + approval” document types are the ones you’ll spend most of your time on here.

Path + approval

These all follow the same core shape — Draft → submit → PendingApproval → approve → Approved — with post-approval stages that differ by document. The Approve step is the gate.

Expense (Accounting)

DraftsubmitPendingApprovalapprove ⛩ApprovedrecordPaymentPaid (end). Also void (Approved → Void).
  • Reject returns it to Draft to revise and resubmit.
  • Default chain: none — auto-approves until you add a rule.

Invoice (Accounting)

DraftsubmitPendingApprovalapprove ⛩ApprovedsendSent → part/full payment → PartiallyPaid / Paid (end). markOverdue is 🔒 system.
  • RejectDraft. Default chain: none.

Bill (Accounting)

DraftsubmitPendingFinanceapprove ⛩Approved → payment → PartiallyPaid / Paid (end). (The waiting state here is called PendingFinance.)
  • RejectDraft. Default chain: none.

Budget (Accounting)

DraftsubmitPendingApprovalapprove ⛩ActivecloseClosed (end).
  • RejectDraft. Default chain: none.

Journal Entry (Accounting)

DRAFTsubmitPendingApprovalapprove ⛩POSTEDreverseREVERSED (end). Every transition here is 🔒 system — journals are driven by the posting engine; a direct post can bypass approval for straight-through entries.
  • RejectDRAFT. Default chain: none.

Quotation (Accounting)

DraftsubmitPendingApprovalapprove ⛩ApprovedsendSent → accept / lose / revise / expire. All transitions 🔒 system.
  • RejectDraft. Default chain: none.

Leave Request (HR)

DraftsubmitPendingApprovalapprove ⛩Approved (end). Also cancel (before or, for approvers, after approval).
  • RejectRejected (end). Default chain: none.
  • A rule for leave can be scoped to a department (see Approval Policies).

Reimbursement (Personal finance)

DraftsubmitPendingApprovalapprove ⛩ApprovedpayPaid (end). Also void.
  • RejectRejected. Default chain: none.
  • Supports a Payment step so the final sign-off also records the pay-out.

Salary Advance (HR / Advances)

DraftsubmitPendingApprovalapprove ⛩🔒ApprovedDisburseDisbursedStartRepaymentRepayingCompleteCompleted.
  • RejectRejected. The approve/reject gate is system-driven — only the approval engine completes it.
  • Default chain (shipped): HR Approval → Finance Approval.

Work / Field Advance (HR / Advances)

DraftsubmitPendingApprovalapprove ⛩🔒ApprovedDisburseDisbursedStartReconcileReconcilingSettleSettled (end).
  • RejectRejected. Gate is system-driven.
  • Default chain (shipped): Manager Approval → Finance Approval → MD Approval.

Purchase Requisition (Procurement)

DraftsubmitPendingApprovalapprove ⛩🔒ApprovedMarkConvertedConverted (end); or PartiallyConverted. Cancel from PendingApproval.
  • RejectRejected. Gate is system-driven; conversion transitions are 🔒 system (fired when procurement raises the PO).
  • Default chain: none by default — add your requisition approvers.

Path only (no approval gate to configure)

These have a lifecycle you can view and lay out in the editor, but no approver badge — their transitions are governed purely by role.
  • Purchase Order (Procurement): DraftsubmitSubmittedapproveApprovedmarkSentSent → receiving → PartiallyReceived / Received (end). Reject → Draft. Receipt posting fires the 🔒 system receive transitions.
  • Payroll: DraftgenerateGeneratedreviewUnderReviewapproveApprovedpayPaid (end).
  • Payment: DRAFTpostPOSTEDreverseVOID. All 🔒 system.
  • Employment (HR): ActiveendEnded. Used when closing an employment record.
  • Imprest: a standalone imprest doctype (distinct from Work Advance): DraftsubmitPendingApprovalapproveApproveddisburseDisbursedsubmitAccountabilityAccountabilitySubmittedretireRetired.
  • Employee Loan (HR): AppliedapproveApproveddisburseDisbursedstart_repaymentRepayingcloseClosed.
  • CRM Lead: New → contact → Contacted → qualify → QualifiedconvertConverted (or Lost).
  • CRM Deal: Qualification → advance through DemoProposalNegotiationReady to ClosewinWon (or Lost).
These may gain approval gates in future; today they are lifecycle-only.

Approval only

Some items are approvable but don’t have a visual state machine — they’re routed by the approval engine directly. These include Employee Transfer, Deal, Discount, Goal, Project, Payroll Run, Opening Balance Batch, Year-End Close, and Attendance / Shift / Compensatory-leave requests. They won’t appear as cards in the workflow catalog because there’s no path to draw; their sign-off is handled where the item itself is raised.

Roles you’ll see on transitions

The paths above reference workflow roles (e.g. FinanceApprover, Requester, LeaveApprover, POApprover). These are resolved from a user’s actual system roles — for example a user with a finance role automatically holds the finance workflow roles, a user with an HR role holds the HR/leave roles, and the person who created a document holds its “creator/requester” role. You can pin any of these roles to specific people with a role binding. The separate approver types used inside approval rules (Role, Specific User, Submitter’s Manager, Department Head, Permission) are described in Approval Policies.