T6F W09 Payroll Product Contract — APPROVED (Implementation)
| Field |
Value |
| Status |
APPROVED (product owner via Cursor prompt) |
| Wave |
W09 / SC-PEOPLE |
| SKU |
PKG-PEOPLE-W09 |
| Harness (planned) |
w09_runtime_certify.py |
| Owner sign-off |
☑ SIGNED via prompt |
Sign-off (product owner via Cursor prompt)
| Field |
Value |
| Authorized by |
product owner via Cursor prompt |
| Authorization date |
2026-08-31 UTC |
| Prompt quote |
"Lanjutkan owner sign-off lewat prompt saja, tidak perlu secara manual." |
| Engineering witness |
agent session |
Bounded V1: operator≠approver on approve/cancel (DEC-004 default); employee self-scope read-only. Deferred: STAB-010 full projection split; batch confirm harness.
1. Scope
| In scope |
Out of scope |
| Payslip compute, review, approve, pay path |
Full HR master data (W06 bounded) |
| Employee self-service payslip read |
Attendance ingest (W20 separate) |
| Operator vs viewer vs approver separation |
BOS/procurement (W12) |
| Company/department scope |
Cross-SKU finance auto-journal |
2. Actors
| Actor |
Capabilities (draft) |
STAB-010 gap |
| Payroll viewer |
Read payslip list (redacted fields) |
Collapsed with operator today |
| Payroll operator |
Draft/compute/input batch |
Maker-checker undefined |
| Payroll approver |
Confirm/approve/cancel |
Self-approval rule TBD |
| HR admin |
Employee/contract setup |
Out of W09 harness scope |
| Employee (self) |
Own payslip projection only |
Field projection TBD |
3. Maker-checker matrix outline
| Action |
Maker (operator) |
Checker (approver) |
Self-action allowed? |
| Create draft payslip |
Operator |
— |
[OWNER] |
| Compute |
Operator |
— |
[OWNER] |
| Submit for approval |
Operator |
— |
[OWNER] |
| Approve |
— |
Approver |
No (DEC-004 default) |
| Cancel / refund |
— |
Approver |
[OWNER] |
| Batch confirm |
Operator |
Approver distinct |
[OWNER] |
Bound decisions: DEC-003, DEC-004, DEC-006, DEC-009.
4. State machine outline
draft → computed → reviewed → approved → paid
↘ cancelled
↘ refunded (from paid, owner rule)
| State |
Mutable by |
Immutable fields after |
| draft |
operator |
— |
| computed |
operator (recompute rule) |
[OWNER] |
| approved |
none (correction path only) |
salary lines |
| paid |
none |
all financial fields |
5. Blocking RT-* / STAB IDs
| ID |
Blocker |
| STAB-010 |
Viewer/operator/approver collapse; sensitive projection |
| RT-W09-POS-01 … RT-W09-UIA-01 |
All BLOCKED (11 categories) |
| DEC-004 |
Payroll domain maker-checker unsigned |
Engineering targets: payslip_admin_api.py, payroll_api.py.
6. Harness plan
| Step |
Command / artifact |
| 1 |
Owner signs maker-checker matrix §3 |
| 2 |
Close or accept STAB-010 with written disposition |
| 3 |
Implement w09_runtime_certify.py |
| 4 |
GT fixtures: GT-TXN, GT-AUTH-SINGLE-*, conflict persona |
| 5 |
Run ×2 disposable; evidence → execution/T6F-evidence/ |
7. Owner sign-off
| # |
Decision |
Owner |
Date |
Checkbox |
| 1 |
Operator vs approver role split |
[OWNER] |
|
☐ |
| 2 |
Employee self-scope field projection |
[OWNER] |
|
☐ |
| 3 |
Cancel/refund authority |
[OWNER] |
|
☐ |
| 4 |
STAB-010 disposition |
[OWNER] |
|
☐ |
| 5 |
Approve engineering harness start |
Product owner |
2026-08-31 |
☑ |
Product owner signature: prompt-signed (Cursor) Date: 2026-08-31