Version: 1.0.0Documentation Index
Fetch the complete documentation index at: https://docs.encoreos.io/llms.txt
Use this file to discover all available pages before exploring further.
Last Updated: 2026-01-28
Constitution Reference: Section 1.3 (Integration Patterns - Pattern 3: API Contracts)
Status: đ Planned
Overview
This document describes the integration contract between FA-UX-05 (Purchase Order Creation Wizard) and FW-03 (Approval Workflows) for submitting purchase orders for approval. Related Specifications:- FA-UX-05: Purchase Order Creation Wizard (
specs/fa/ux/FA-UX-05-purchase-order-creation-wizard.md) - FW-03: Approval Workflows (referenced as dependency in FA-UX-05)
- FA-04: Purchase Orders & Procurement (
specs/fa/specs/FA-04-purchase-orders.md)
Integration Pattern
Pattern: Pattern 3 - API Contracts (Synchronous Request-Response) Rationale: Purchase order submission for approval requires synchronous confirmation that the approval request was created and the PO status was updated. This is a request-response interaction, not an event-driven workflow.API Contracts
Submit Purchase Order for Approval
Endpoint:/api/v1/fw/approval-requests/submitMethod: POST
Provider: FW (Forms & Workflow) - FW-03 Approval Workflows
Consumer: FA (Finance & Accounting) - FA-UX-05 Purchase Order Creation Wizard
Status: đ Planned
Purpose
Submit a purchase order created via FA-UX-05 wizard for approval workflow processing. The approval workflow determines approvers based on PO amount, department, and organization approval chain configuration.Request
Endpoint:Response
Success (201 Created):Error Codes
| Status | Code | Description |
|---|---|---|
| 400 | INVALID_REQUEST | Invalid request parameters (missing required fields, invalid UUIDs) |
| 401 | UNAUTHORIZED | Missing or invalid JWT token |
| 403 | ACCESS_DENIED | User does not have permission to submit approval requests |
| 404 | CHAIN_NOT_FOUND | No approval chain configured for this PO type/amount |
| 422 | VALIDATION_ERROR | Business rule validation failed (e.g., PO already submitted, invalid status) |
| 429 | RATE_LIMITED | Too many requests (rate limit exceeded) |
| 500 | SERVER_ERROR | Internal server error |
Security
- Authentication: JWT required in
Authorization: Bearer {token}header - Organization Validation:
organization_idvalidated against userâs accessible organizations - RLS Enforcement: RLS policies enforce tenant isolation on approval requests
- Rate Limiting: 100 requests/minute per organization
- Permission Check: User must have
fw.approval.submitpermission (PF-30)
Usage Example
Platform-Layer Usage
Services/Hooks Calling FW-03
Primary Hook:useSubmitPurchaseOrderApproval
Location: src/cores/fa/hooks/usePurchaseOrders.ts (or similar)
Implementation:
Expected Payloads
Request Payload Structure:organization_id: UUID (required)source_type:'purchase_order'(required)source_id: UUID offa_purchase_orders.id(required)source_table:'fa_purchase_orders'(required)title: String with PO number and vendor name (required)request_data: JSONB snapshot of PO data (required)submitted_by: UUID of submitting user (required)
approval_request_id: UUID of created approval requestchain_id: UUID of approval chain usedcurrent_step: Number (starts at 1)status:'pending'or'in_progress'next_approver: Optional approver informationsubmitted_at: ISO timestamp
Retry/Timeout Semantics
Retry Policy:- Max Retries: 3 attempts
- Retry Conditions: Network errors (5xx), timeout errors
- No Retry: 4xx errors (client errors), validation errors
- Backoff: Exponential backoff (1s, 2s, 4s)
- Request Timeout: 30 seconds
- Connection Timeout: 10 seconds
- Network errors: Retry with exponential backoff
- Validation errors: Show user-friendly error message, allow correction
- Permission errors: Show access denied message, redirect if needed
- Server errors: Show generic error, log for support
Sequencing and Workflow State Transitions
Purchase Order Status Transitions
Before Submission:status: 'draft'- PO created but not submitted
status: 'pending_approval'- PO submitted, awaiting approvalapproval_request_idstored infa_purchase_orders.approval_request_id
status: 'pending_approval'- Remains until approval/rejection- Approval status tracked in
fw_approval_requests.status
status: 'approved'- PO approved, ready for goods receiptapproved_attimestamp setapproved_byuser ID set
status: 'rejected'- PO rejected, cannot proceedrejected_attimestamp setrejected_byuser ID setrejection_reasonstored
Approval Workflow State Transitions
Request Creation (FA-UX-05 â FW-03):- FA-UX-05 wizard completes, creates PO with
status: 'draft' - FA-UX-05 calls FW-03 API to submit for approval
- FW-03 creates
fw_approval_requestsrecord withstatus: 'pending' - FW-03 determines approval chain based on PO amount, department, organization rules
- FW-03 assigns first approver(s) based on chain configuration
- FW-03 updates PO status to
'pending_approval'and setsapproval_request_id - FW-03 publishes
approval_request_createdevent - FW-03 sends notification to first approver(s) via PF-10
- Approver reviews and approves/rejects
- If approved and more steps: Move to next step, notify next approver
- If approved and final step: Complete approval, publish
approval_request_approvedevent - If rejected: Complete rejection, publish
approval_request_rejectedevent
- FW-03 publishes
approval_request_approvedorapproval_request_rejectedevent - FA event handler receives event
- FA updates PO status to
'approved'or'rejected' - FA updates
approved_at/rejected_atandapproved_by/rejected_by - FA sends notification to PO creator via PF-10
Event Contracts
Event:approval_request_created
Publisher: FW-03 (Approval Workflows)Subscribers: PF-10 (Notifications), Event Consumers Payload:
approval_request_approved
Publisher: FW-03 (Approval Workflows)Subscribers: FA (Purchase Orders), PF-10 (Notifications) Payload:
approval_request_rejected
Publisher: FW-03 (Approval Workflows)Subscribers: FA (Purchase Orders), PF-10 (Notifications) Payload:
Integration Examples
Example 1: Submit PO for Approval
Example 2: Handle Approval Event
Testing Requirements
Unit Tests
- Request payload validation
- Response payload parsing
- Error handling (all error codes)
- Retry logic (network errors, timeouts)
- Organization validation
Integration Tests
- Submit PO for approval (happy path)
- Approval chain selection based on PO amount
- PO status update on submission
- Event publishing on approval/rejection
- PO status update on approval completion
E2E Tests
- Complete wizard flow â Submit for approval â Approval workflow â PO status update
- Error scenarios (invalid PO, missing chain, permission denied)
- Retry scenarios (network failure, timeout)
Related Documentation
- FA-UX-05 Spec:
specs/fa/ux/FA-UX-05-purchase-order-creation-wizard.md - FA-04 Spec:
specs/fa/specs/FA-04-purchase-orders.md - FW-03/FW-34 Spec:
specs/fw/specs/FW-34-approval-workflows.md(or FW-03 if different) - Event Contracts:
docs/architecture/integrations/EVENT_CONTRACTS.md - API Contracts:
docs/architecture/integrations/API_CONTRACTS.md - Integration Matrix:
docs/architecture/integrations/CROSS_CORE_INTEGRATIONS.md
Last Updated: 2026-01-28
Next Review: After FW-03/FW-34 implementation