# TANRAIL ONE — Phase 3.2.4 Procurement Implementation Plan

## Phase A: Database & Models
1. **Enums:** Create `PurchaseOrderStatus`.
2. **Migrations:** Create `purchase_orders`, `purchase_order_lines`, `purchase_receipts`, `purchase_receipt_lines`, `supplier_payments`.
3. **Models:** Create corresponding Eloquent models. Apply `BusinessUnitScope` to `PurchaseOrder` and `PurchaseReceipt`. Apply `booted()` immutability observers.

## Phase B: Services & Business Logic
1. **PurchaseService:** Implement Core Procurement logic:
   - `createDraft(Branch, Supplier)`
   - `addLine(PurchaseOrder, Item, Quantity, Price)`
   - `submit(PurchaseOrder)`
   - `approve(PurchaseOrder)`
   - `receiveGoods(PurchaseOrder, Location, ReceiptLines[])` -> Dispatches `PurchaseReceiptConfirmed`
   - `recordPayment(PurchaseOrder, Amount, Method)`

## Phase C: Event Architecture
1. **Event:** Create `PurchaseReceiptConfirmed(PurchaseReceipt)`.
2. **Listener:** Create `ReceiveInventoryListener`. Listens to event, loops through `PurchaseReceiptLine`s, calls `InventoryService::receive()`.

## Phase D: Security & Testing
1. **Policies:** Create `PurchaseOrderPolicy`, `PurchaseReceiptPolicy`.
2. **Tests:** Create `Phase324ProcurementEngineTest.php`. Follow the mandatory Phase 3.2.3 adversarial testing standards (cross-BU attacks, mass assignment checks, concurrency locks).

## Phase E: Final Audit
1. Run independent Security Audit. Fix any findings. Update final Documentation gate.
