Based on the provided workflow data, here's a step-by-step description of the declaration process underlying this data:

1. **Employee Actions:**
   - An employee **SAVES** (0) a declaration draft.
     - If the declaration is incomplete, it can be **REJECTED by MISSING** (2, 3).
   - The employee **SUBMITS** (6, 7) their completed declaration for approval.

2. **Pre-Approver Actions:**
   - After submission, the declaration is routed to a **PRE_APPROVER** who can either:
     - **APPROVE** (1, 2, 3) it and send it to the next level of approval.
     - **REJECT** (0, 1, 2) it with comments. If rejected, the declaration goes back to the employee for revision.

3. **Budget Owner Actions:**
   - Once approved by the pre-approver, the declaration moves to the **BUDGET OWNER** who can:
     - **APPROVE** (0, 1, 2) it and send it to the supervisor.
     - **REJECT** (0, 1, 2) it. If rejected, it goes back to the pre-approver for further processing.

4. **Supervisor Actions:**
   - After budget owner approval, the declaration is routed to a **SUPERVISOR** who can:
     - **FINAL_APPROVE** (0, 1, 2, 3) it, marking the declaration process as complete.
     - **REJECT** (0, 1, 2). If rejected, it goes back to the pre-approver for further processing.

5. **Administrative Actions:**
   - Throughout the process, an **ADMINISTRATOR** can also intervene and:
     - **APPROVE** (0, 1, 2, 3, 4) a declaration that's been sent for approval by the pre-approver.
     - **REJECT** (0, 1, 2, 3, 5, 6). If rejected, it goes back to the employee or the pre-approver depending on where it was in the process.

6. **Additional Actions:**
   - A declaration can also be **SAVED by EMPLOYEE** (0, 1) again after revisions.
   - A **REQUEST PAYMENT** (0, 1) can be triggered after final approval by the supervisor.
   - **PAYMENT HANDLED** (0, 1) occurs once the payment process is complete.