SRS: UC_8.2.12 — Flow 17: Pod Leader Vesting Payout
| Field | Value |
|---|---|
| UC_ID | UC_8.2.12 |
| Version | v1.7 |
| Last Updated | 2026-11-05 |
| BA PiC | linh.nguyen34 |
| Category | STAGE 6: CAREER PATH & PROFESSIONALIZATION |
| Module | Pod System |
| Function | Flow 17 — Pod Leader Vesting Payout |
| Document References | Zapier Integration V7.pdf (§Flow 17: Pod Leader Vesting Payout lines 2083–2095; §Pod Leader Carry Logic lines 1368–1382; §Table C: Global_Variables Min_Pod_Leader_Level = 7 line 217; §Email Templates Pod_Leader_Vesting_Paid line 772) · RFQ_ Stack Trading Prop Tech V7.pdf (§Process Pod Vesting lines 1315–1330; §recordMetric blockchain logging lines 1327–1329; §Immutable Ledger Logging) |
1. UC Index
| UC_ID | Function | Description |
|---|---|---|
| UC_8.2.12 | Flow 17 — Pod Leader Vesting Payout | Monthly scheduled payout of accumulated carry balances to Pod Leaders. Zapier calls a single POST /process-pod-vesting endpoint; Middleware handles all batch processing: queries eligible leaders, routes payout to Dots (international) or Rippling (US W2), records payout on Polygon PoS blockchain, and zeroes out balances. |
UC_8.2.12 — Flow 17: Pod Leader Vesting Payout
| Field | Value |
|---|---|
| Use Case | Pod Leader Vesting Payout |
| Description | On the 1st of each month, Zapier fires a scheduled job that calls POST /process-pod-vesting. Middleware queries all Pod Leaders with Pending_Carry_Balance > 0, routes each payout through Dots (international) or Rippling Off-Cycle Payroll API (US W2), logs each transaction on the blockchain via contract.recordMetric(), pushes one QuickBooks Online Journal Entry per Dots-routed payout (CHR-139), then zeros out processed balances. Zapier sends a Slack alert to the Head of Ops and a Pod_Leader_Vesting_Paid email to all processed leaders. |
| Zapier Flow | Flow 17 (Pod Leader Vesting Payout) |
| Zapier Table | Table E: Pod_Leader_Registry (Pending_Carry_Balance field) |
| 3rd Party | Dots API · Rippling Off-Cycle Payroll API · QuickBooks Online API (Dots-routed payouts only — CHR-139) · Polygon PoS blockchain (Ethers.js) · AWS SES · Slack |
2. Trigger
Event: Scheduled Job — monthly, fires on the 1st of every month.
Zapier is a scheduler only in this flow. It calls a single endpoint and waits for the JSON response. All batch logic executes inside Middleware.
(Source: Zapier Integration V7.pdf §Flow 17 line 2085)
3. Pre-conditions
| ID | Pre-condition |
|---|---|
| P1 | Scheduled job fires at 1st of month |
| P2 | At least one Pod Leader has Pending_Carry_Balance > 0 in Pod_Leader_Registry |
| P3 | Middleware has valid credentials for Dots API and Rippling API |
| P4 | Ethers.js wallet is initialized and contract.recordMetric() is available |
4. Post-conditions
| # | Post-condition |
|---|---|
| 1 | All Pod Leaders with Pending_Carry_Balance > 0 have received their payout via Dots or Rippling |
| 2 | Each processed payout is recorded on Polygon PoS blockchain: metric_category = "Pod Leader Vesting", metric_value = "Carry Payout Cleared", receipt_hash = [Dots/Rippling Transaction ID] |
| 3 | Pending_Carry_Balance = $0.00 for all processed leaders |
| 4 | Slack alert sent to Head of Ops: "Pod Vesting Complete. Processed [processed_count] leaders." |
| 5 | Pod_Leader_Vesting_Paid email sent to the array of processed Pod Leaders |
5. Basic Flow
Step 1. Scheduled Job Fires (Zapier)
- Monthly scheduled trigger fires at 00:00:00 UTC on the 1st of each month. UTC is the only timezone used — no local timezone dependency.
- Zapier calls
POST /process-pod-vestingwith input:cycle_date = Today(resolved as UTC ISO 8601 date by Middleware).
(Source: Zapier Integration V7.pdf §Flow 17 lines 2085–2086)
Step 2. Query Eligible Leaders (Middleware)
- Middleware queries
Pod_Leader_Registryfor all records wherePending_Carry_Balance > 0. - Status gate:
Status = 'Active': eligible — proceed to payout routing.Status = 'Suspended'(temporary suspension, e.g. Flow 4B Drawdown Defense): skip — carry balance is frozen (held in the database), not forfeited and not vested. Flow 17 must not dispatch any payout for this leader. Vesting resumes once the leader passes PIP and returns toStatus = 'Active'. (Client confirmation 2026-10-30; cross-ref UC_8.2.9 BR_8.2.9.3 / BR_8.2.9.11)Status = 'On_Leave'(approved leave, Flow 13): eligible — treated the same asActive; carry keeps accruing and vesting during leave, proceed to payout routing. (Cross-ref: UC_8.2.10 §7.1.3; QnA_STAGE6_POD_SYSTEM_FLOW10_11.md [POD-XF-18] — client sheet 2026-11-04)Status = 'Terminated'(terminated via Flow 7 / Flow 15C): ineligible — unvested carry is immediately forfeited. SetPending_Carry_Balance = $0.00for these leaders without dispatching any payout. No Dots or Rippling call is made.
Min_Payout_Thresholdgate: Applied only to eligible (non-Terminated) leaders. IfPending_Carry_Balance < $100(sourced from Table C:Min_Payout_Threshold), the leader is excluded from the current cycle. Their balance is not zeroed — it rolls over and accumulates until the next run where the threshold is met.
(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting line 1315; Client confirmation 2026-09-20 — "Min_Payout_Threshold = $100 applies to carry balance payouts"; Client supplement 2026-10-06 — Terminated status forfeiture at cycle audit; UC_8.2.10 §7.1.3 / [POD-XF-18] — On_Leave leaders vest normally)
Step 3. Route Payout per Leader (Middleware — loop)
- For each eligible leader, evaluate
billing_country,current_level, andcompensation_track:- Path A — Dots API:
billing_country != 'US'(all levels) ORbilling_country == 'US' AND current_level < 6. CallPOST /v2/payoutswithpayee_id,amount = Pending_Carry_Balance,memo = "Monthly Pod Leader Carry Vesting - [Month/Year]". - Path B — Rippling Off-Cycle Payroll:
billing_country == 'US' AND current_level >= 6 AND compensation_track IN ('Standard', 'Flex'). CallPOST /api/v1/payroll/off-cycle-payrunswithemployee_id,earning_type = "DISCRETIONARY_BONUS",amount = Pending_Carry_Balance.- Why Off-Cycle (not regular payroll): The carry bonus is a variable performance amount settled on the 1st of each month, independent of the fixed W-2 payroll schedule. Off-Cycle API pays it immediately without waiting for the next regular payroll run.
- Why
DISCRETIONARY_BONUS: Carry is classified as US Supplemental Wages under IRS rules. Rippling automatically applies the correct supplemental tax withholding rate — keeping it separate from regular wages prevents incorrect W-2 tax treatment for the employee.
- Path A — Dots API:
(Source: Client confirmation 2026-09-22; Client supplement 2026-10-06 — §2 Rippling Off-Cycle API detail)
Step 4. Blockchain Logging (Middleware — within loop)
- After each payout API call completes:
- Initialize Ethers.js wallet.
- Call
contract.recordMetric()with:metric_category = "Pod Leader Vesting"metric_value = "[Amount] USD Cleared"receipt_hash = [Dots or Rippling Transaction ID]
(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Immutable Ledger Logging lines 1327–1329; Client supplement 2026-10-06 — §3 Step 4)
Step 4a. QuickBooks Online Journal Entry (Middleware — within loop, Path A only) — CHR-139
- Fires only after the Dots API returns a successful transaction ID for the leader.
- Individual entries — no bundling: push one separate QuickBooks Journal Entry per Pod Leader / Founding Mentor in the loop. Never batch multiple leaders into one Journal Entry.
- Dots only: applies to payouts routed via Path A (International Contractors, and US 1099 Contractors / Founding Mentors not on W-2 payroll). For Path B (US Level 6+ W-2 via Rippling Off-Cycle Payroll API), skip the QuickBooks push — Rippling syncs W-2 payroll to QuickBooks natively.
- Account mapping (absolute payout amount on both lines):
| PostingType | Account | Amount |
|---|---|---|
| Debit | 5016 POD Leader Bonus Contractor | Absolute payout amount |
| Credit | 1102 DOTS | Absolute payout amount |
(Source: CHR-139; QuickBooks Integration Specification §4.B "Pod Leader Carry/Commission - Flow 17 - Contractors"; Client confirmation 2026-10-30)
Step 5. Zero Out Balance (Middleware — within loop)
- Set
Pod_Leader_Registry.Pending_Carry_Balance = $0.00for the processed leader. - Set
Pod_Leader_Registry.last_vesting_payout_at = NOW(). - Prevents double payment on next cycle.
(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting Cleanup line 1330; Client supplement 2026-10-06 — §3 Step 4)
Step 6. Return JSON Response (Middleware → Zapier)
- Middleware returns JSON to Zapier:
{ "processed_count": <int>, "processed_users": ["email@example.com", ...] } - Zapier waits for this response before proceeding.
(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting lines 1315–1316)
Step 7. Notify Ops (Zapier)
- Trigger Slack alert to
#finance-ops(Head of Ops):- "Monthly Pod Vesting Complete: Processed [X] leaders, Total Paid: $[Y], Polygon Tx: [Hash]"
(Source: Zapier Integration V7.pdf §Flow 17 Notify (Ops) lines 2092–2094; Client supplement 2026-10-06 — §3 Step 5)
Step 8. Notify Leaders (Zapier)
- Send
Pod_Leader_Vesting_Paidemail to the array of emails inprocessed_users. - Content: statement notification confirming carry payouts have cleared to the banking channel.
(Source: Zapier Integration V7.pdf §Flow 17 Notify (Traders) line 2095; §Email Templates line 772)
6. Carry Accrual Reference (How Pending_Carry_Balance is Built)
Carry is accrued by Middleware in Flow 6 (Level Transition) — triggered by a mentee's level promotion, not the Pod Leader's own level. When a Mentee (trader inside the Pod) advances to a qualifying level, the system credits the Pod Leader who directly manages that mentee as recognition for their coaching:
| Mentee's New Level | Carry Amount Added to Pod Leader's Pending_Carry_Balance |
|---|---|
| Level 3 | +$250 |
| Level 5 | +$500 |
| Level 7 | +$1,500 |
| Any other level (L1, L2, L4, L6, L8+) | $0 |
Carry accumulates across all promotion events from all mentees in the leader's pod. The monthly Flow 17 payout run pays out the total accumulated Pending_Carry_Balance and resets it to $0.00 after each cycle.
Example: If a Pod Leader has 3 mentees and in one month Mentee A reaches L3 (+$250) and Mentee B reaches L5 (+$500), the leader's Pending_Carry_Balance increases by $750 before the next payout cycle.
(Source: Zapier Integration V7.pdf §Pod Leader Carry Logic lines 1375–1380; Client supplement 2026-10-06 — §1 Carry Accrual mechanism)
7. Exceptional Flows
Exc-1 — No leaders with Pending_Carry_Balance > 0:
- Middleware returns
{ "processed_count": 0, "processed_users": [] }. - Zapier sends Slack alert: "Pod Vesting Complete. Processed 0 leaders."
- No email sent (empty
processed_usersarray).
Exc-2 — Dots or Rippling API call fails for a specific leader:
- The failed leader is skipped for the current cycle. The loop continues to the next leader — one failure does not halt the batch.
Pending_Carry_Balancefor the failed leader is NOT zeroed — it is preserved and will be included in the next cycle's run.- An error is fired to Slack
#ops-treasury: alert includesleader_id, amount, and the API error. - All other leaders in the batch are processed normally.
(Source: Client confirmation 2026-09-20 — "Skip that leader, preserve their balance for next month, and fire the error to #ops-treasury")
Exc-3 — contract.recordMetric() blockchain call fails AFTER payout dispatched:
- DO NOT reverse the payout. Fiat movement is off-chain and already settled via Dots/Rippling.
Pending_Carry_Balancestays reset at$0.00— restoring it would risk double-payout on next cycle. - Save local audit record to PostgreSQL with Dots/Rippling Transaction ID; set
polygon_tx_hashstatus toPENDING_BLOCKCHAIN_SYNCorFAILED. - Queue blockchain log payload for async retry with exponential backoff.
- Emit Slack alert to
#dev_opswith Leader ID and Payout Transaction ID for Ops/DevOps visibility.
(Source: Client confirmation 2026-09-22; RFQ_ Stack Trading Prop Tech V7.pdf §Immutable Ledger Logging — "fiat currency movement remains entirely off-chain")
Exc-4 — Middleware timeout before response returned to Zapier:
- Zapier auto-retries
POST /process-pod-vestingwith samecycle_date = Today(Zapier Company Tier exponential retry). - Three-layer idempotency prevents double-payout:
- Layer 1 — DB state filter: Middleware re-queries
Pending_Carry_Balance > 0. Leaders already paid in the previous run havePending_Carry_Balance = $0.00and are bypassed automatically. - Layer 2 — Payment gateway idempotency key: For each payout call, Middleware passes
Idempotency-Key: VESTING_{leader_id}_{cycle_date}(e.g.VESTING_USR_98765_2026-10-01) to Dots/Rippling. If the payout already completed, Dots/Rippling return HTTP 409 — no new transaction is created. - Layer 3 — Blockchain anchor:
contract.recordMetric()withreceipt_hash= original transaction ID provides on-chain audit trail; Ops can reconcile any gap immediately.
- Layer 1 — DB state filter: Middleware re-queries
(Source: Client confirmation 2026-09-22)
8. Business Rules
BR_8.2.12.1: Zapier is a Scheduler Only — No Middleware Logic Lives in Zapier
For Flow 17, Zapier's only job is to fire the scheduled trigger and call the single POST /process-pod-vesting endpoint. All batch processing — querying leaders, routing payouts, blockchain logging, zeroing balances — is executed inside Middleware. There is no Zapier loop per leader.
(Source: Zapier Integration V7.pdf §Flow 17 lines 2083–2095; RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting)
BR_8.2.12.2: Carry Payout Routing — Dots vs. Rippling
Payout routing is determined by evaluating three fields on the Users table: billing_country, current_level, and compensation_track.
Path A — Dots API (one-time payout):
billing_country != 'US'— all international leaders (all levels 1–24)- OR
billing_country == 'US' AND current_level < 6— US junior contractors (pre-W2) - Payload:
POST /v2/payouts—payee_id,amount,memo
Path B — Rippling Off-Cycle Payroll API:
billing_country == 'US' AND current_level >= 6 AND compensation_track IN ('Standard', 'Flex')compensation_trackis set during the Level 6 transition (Flow 6)- Payload:
POST /api/v1/payroll/off-cycle-payruns—employee_id,earning_type = "DISCRETIONARY_BONUS",amount - Rationale for Off-Cycle (not regular payroll): Carry is a variable performance bonus settled on the 1st of each month, independent of the fixed W-2 payroll schedule. Off-Cycle API settles it immediately without waiting for the next regular payroll run.
- Rationale for
DISCRETIONARY_BONUSearning type: Carry qualifies as US Supplemental Wages under IRS rules. Routing through Off-Cycle API with this earning type causes Rippling to automatically apply the correct supplemental tax withholding rate — keeping it separate from regular wages avoids incorrect W-2 tax treatment for the employee.
Minimum payout threshold: If Pending_Carry_Balance < $100 (Min_Payout_Threshold in Table C), the cycle is skipped for that leader and the balance rolls over to the following month to avoid transaction fee leakage.
Founding Mentors (Role_Flag = 'Founding_Mentor'): Follow the exact same routing rules as regular Pod Leaders (US vs. international, level-based). Their Pending_Carry_Balance continues vesting normally even if their personal trading account triggers a drawdown breach — carry vesting is not blocked by drawdown defense.
(Source: Client confirmation 2026-09-22; Client supplement 2026-10-06 — §2 Rippling Off-Cycle API rationale)
BR_8.2.12.3: Blockchain Receipt Hash = Payout Transaction ID
Every payout processed in a vesting cycle must be recorded on the Polygon PoS blockchain via contract.recordMetric(). The receipt_hash field must be set to the Dots or Rippling transaction ID from the payout API response. This is the immutable proof of payment.
(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Immutable Ledger Logging lines 1327–1329)
BR_8.2.12.4: Zero-Out is Mandatory After Each Payout
Pending_Carry_Balance must be set to $0.00 for each leader immediately after their payout is confirmed. This prevents double-payment on the next monthly cycle. The zero-out must occur within the same Middleware processing loop as the payout call.
(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting Cleanup line 1330)
BR_8.2.12.5: Carry Amounts are Fixed at Accrual, Not Payout
Carry amounts are accrued at the time of a mentee's level promotion (Flow 6): L3 = $250, L5 = $500, L7 = $1,500. The monthly vesting payout does not recalculate these amounts — it simply pays out whatever accumulated Pending_Carry_Balance exists at payout time. There is no retroactive adjustment.
(Source: Zapier Integration V7.pdf §Pod Leader Carry Logic lines 1375–1380)
BR_8.2.12.6: Ops Notification is Mandatory
A Slack alert to the Head of Ops must be triggered after every vesting run (whether or not leaders were processed). The alert must include the processed_count from the Middleware response. This is the Ops oversight mechanism for the monthly payout cycle.
(Source: Zapier Integration V7.pdf §Flow 17 Notify (Ops) lines 2092–2094)
BR_8.2.12.7: Min_Payout_Threshold Sourced from Table C — Not Hardcoded
The minimum carry balance required to qualify for a payout cycle is Min_Payout_Threshold, read from Table C: Global_Variables. Current value = $100. If a leader's Pending_Carry_Balance < $100 on the 1st of the month, they are skipped — balance is not zeroed, it rolls over to the next cycle. This value must never be hardcoded in Middleware; always read from Table C.
(Source: Client confirmation 2026-09-20 — "Min_Payout_Threshold = $100 applies to carry balance payouts"; Zapier Integration V7.pdf §Table C)
BR_8.2.12.8: Payout Failure — Loop Isolation, Balance Preserved, Alert to #ops-treasury
If a Dots or Rippling payout call fails for a specific leader:
- The failed leader is skipped; the batch loop continues to the next leader.
- The failed leader's
Pending_Carry_Balanceis NOT zeroed — it accumulates and is retried in the next monthly cycle. - A Slack error alert fires to
#ops-treasury(not#ops-it) withleader_id, amount, and API error details. - The remaining leaders in the batch are not affected.
(Source: Client confirmation 2026-09-20 — "Skip that leader, preserve their balance for next month, and fire the error to #ops-treasury")
BR_8.2.12.9: Terminated Leaders — Carry Forfeited at Cycle Audit, No Payout Dispatched
When the Step 2 eligibility audit encounters a leader with Status = 'Terminated' and Pending_Carry_Balance > 0, the unvested carry is immediately forfeited: Pending_Carry_Balance is set to $0.00 without dispatching any Dots or Rippling call. This mirrors the immediate carry zeroing performed by the BPS termination endpoint (Flow 15C / UC_8.2.11 M-3), and catches any residual balance that may have accrued between the termination event and the next payout cycle.
(Source: Client supplement 2026-10-06 — §3 Step 2 Eligibility Audit)
BR_8.2.12.10: QuickBooks Journal Entry — One per Dots Payout, Skip Rippling W-2 (CHR-139)
POST /process-pod-vesting must follow three rules for QuickBooks Online:
- Individual entries (no bundling): one separate Journal Entry per Pod Leader / Founding Mentor, pushed once the Dots API returns a successful transaction ID. Multiple leaders are never batched into one Journal Entry.
- Dots only (skip Rippling W-2): Journal Entries are pushed only for payouts routed via the Dots API (Path A). Payouts via Rippling Off-Cycle Payroll API (Path B — US Level 6+ W-2) are skipped, because Rippling syncs W-2 payroll to QuickBooks natively.
- Account mapping: Debit
5016 POD Leader Bonus Contractor/ Credit1102 DOTS, both for the absolute payout amount.
(Source: CHR-139; QuickBooks Integration Specification §4.B "Pod Leader Carry/Commission - Flow 17 - Contractors"; Client confirmation 2026-10-30)
9. Data Model
Table E: Pod_Leader_Registry (relevant fields)
| Field | Type | Description |
|---|---|---|
Pending_Carry_Balance | DECIMAL | Accumulated unpaid carry earnings — zeroed after payout each cycle |
last_vesting_payout_at | TIMESTAMP (nullable) | Timestamp of last successful payout cycle reset. Updated to NOW() in Step 5 after each payout. |
Leader_ID | UUID | Used by Middleware to identify the leader for payout routing |
(Source: Zapier Integration V7.pdf §Table E lines 777–790)
10. API Reference
| Endpoint | Method | Input | Output | Server | Description |
|---|---|---|---|---|---|
POST /process-pod-vesting | POST | cycle_date = Today | { "processed_count": int, "processed_users": [email array] } | Middleware | Batch processor: queries eligible leaders, routes payouts, logs blockchain, zeroes balances. All logic internal. |
(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting lines 1315–1316)
11. Email Templates
| Template Key | Trigger | Recipient | Content |
|---|---|---|---|
Pod_Leader_Vesting_Paid | Step 8 — after Middleware returns processed_users array | All processed Pod Leaders | Statement notification confirming carry payouts have cleared to their banking channel |
(Source: Zapier Integration V7.pdf §Email Templates line 772; §Flow 17 Notify (Traders) line 2095)
12. Acceptance Criteria
| AC_ID | Flow | Given | Then | Type |
|---|---|---|---|---|
| AC-8.2.12-01 | Happy path | Monthly trigger fires on 1st; 3 leaders have Pending_Carry_Balance > 0 | All 3 leaders paid via correct provider (Dots/Rippling); blockchain records created with receipt_hash = transaction ID; balances zeroed; Slack alert sent with processed_count = 3; Pod_Leader_Vesting_Paid emails sent to 3 leaders | Integration |
| AC-8.2.12-02 | No eligible leaders | Trigger fires; no leader has Pending_Carry_Balance > 0 | Middleware returns processed_count = 0; Slack alert: "Processed 0 leaders"; no email sent | Integration |
| AC-8.2.12-03 | Routing — international | Leader has non-US classification | Payout routed via Dots API | Integration |
| AC-8.2.12-04 | Routing — US W2 | Leader has US W2 classification | Payout routed via Rippling Off-Cycle Payroll API | Integration |
| AC-8.2.12-05 | Blockchain logging | Leader payout processed | contract.recordMetric() called with metric_category = "Pod Leader Vesting", metric_value = "[Amount] USD Cleared", receipt_hash = [transaction ID] | Integration |
| AC-8.2.12-06 | Double-payment prevention | Same leader processed in cycle N | Pending_Carry_Balance = $0.00 immediately after payout; balance does NOT re-appear in cycle N+1 unless new carry was accrued | Integration |
| AC-8.2.12-07 | Zapier single call | Flow 17 executes | Zapier makes exactly 1 call to Middleware; no per-leader loop exists in Zapier | Integration |
| AC-8.2.12-08 | Min_Payout_Threshold — skip | Leader has Pending_Carry_Balance = $75.00 on 1st of month | Leader excluded from current cycle; Pending_Carry_Balance remains $75.00; no payout, no zero-out; balance carried to next cycle | Integration |
| AC-8.2.12-09 | Min_Payout_Threshold — eligible | Leader has Pending_Carry_Balance = $100.00 on 1st of month | Leader included in cycle; payout processed normally | Integration |
| AC-8.2.12-10 | Exc-2 loop isolation | Payout API fails for Leader A; Leaders B and C in same batch | B and C paid normally; A skipped; A's balance preserved; Slack alert to #ops-treasury with A's leader_id and error | Integration |
| AC-8.2.12-11 | Terminated forfeiture | Leader has Status = 'Terminated' and Pending_Carry_Balance = $300 when cycle runs | Pending_Carry_Balance set to $0.00; no Dots/Rippling call made; balance not paid out | Integration |
| AC-8.2.12-12 | Suspended frozen | Leader has Status = 'Suspended' and Pending_Carry_Balance = $500 | Leader skipped; Pending_Carry_Balance remains $500 (frozen — not zeroed, not paid, not forfeited); no Dots/Rippling call; vesting resumes after PIP pass and return to Active | Integration |
| AC-8.2.12-13 | On_Leave vests | Leader has Status = 'On_Leave' and Pending_Carry_Balance = $400 when cycle runs | Leader included like Active; payout dispatched via Dots/Rippling; Pending_Carry_Balance zeroed after payout | Integration |
| AC-8.2.12-14 | QBO — one JE per leader (CHR-139) | 3 leaders paid via Dots in the same cycle | 3 separate QuickBooks Journal Entries pushed, each after its Dots transaction ID is returned; no bundled entry | Integration |
| AC-8.2.12-15 | QBO — skip Rippling (CHR-139) | Leader is US Level 6+ W-2, paid via Rippling Off-Cycle Payroll | No QuickBooks Journal Entry pushed for this leader | Integration |
| AC-8.2.12-16 | QBO — account mapping (CHR-139) | Dots payout of $250 succeeds | Journal Entry: Debit 5016 POD Leader Bonus Contractor $250 / Credit 1102 DOTS $250 | Integration |
| AC-8.2.12-17 | QBO — Dots failure (CHR-139) | Dots payout call fails for a leader (Exc-2) | No QuickBooks Journal Entry pushed for that leader | Integration |
13. Changelog
| Date | Version | Change | Previous | After | Source |
|---|---|---|---|---|---|
| 2026-11-05 | v1.7 | §5 Step 2 status gate (On_Leave), source line; §9 AC-8.2.12-13 | On_Leave skipped — carry frozen, not vested (UC_8.2.10 §7.1.3 old rule) | On_Leave eligible like Active — carry keeps vesting during leave | Client sheet 2026-11-04 [POD-XF-18] [BG-008]; aligned with UC_8.2.10 v1.9, UC_8.2.13 v2.9 |
| 2026-09-18 | — → v1.0 | Initial document | — | Flow 17 full spec; all BRs; ACs | Zapier Integration V7.pdf §Flow 17; §Pod Leader Carry Logic; RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting |
| 2026-09-20 | v1.0 → v1.1 | Min_Payout_Threshold gate added to Step 2; Exc-2 failure handling confirmed (#ops-treasury); BR_8.2.12.7–8 added; AC-8.2.12-08/09/10 added | Step 2: no threshold filter. Exc-2: ⚠️ BA assumption — unconfirmed. | Step 2: leaders with Pending_Carry_Balance < $100 skipped; balance rolls over. Exc-2: skip failed leader, preserve balance, fire error to #ops-treasury. BR_8.2.12.7: Min_Payout_Threshold from Table C (not hardcoded). BR_8.2.12.8: loop isolation + #ops-treasury alert. | Client confirmation 2026-09-20 |
| 2026-09-22 | v1.1 → v1.2 | BR_8.2.12.2 routing logic fully specified: 3 routing fields confirmed (billing_country, current_level, compensation_track); Path A/B conditions explicit; min threshold and Founding Mentor carry rules added. Step 3 updated with same field-level routing logic. Q4 resolved. | BR_8.2.12.2: routing fields unspecified — placeholder "confirm with dev". Step 3: generic "International / US W2" labels only. | BR_8.2.12.2: full routing decision tree with field names and conditions. Step 3: field-level conditions for each path. | Client confirmation 2026-09-22 (Q4) |
| 2026-09-22 | v1.2 → v1.3 | Exc-3 blockchain failure confirmed: no reversal; Pending_Carry_Balance stays $0.00; save PostgreSQL audit record with polygon_tx_hash = PENDING_BLOCKCHAIN_SYNC/FAILED; async retry with exponential backoff; Slack alert to #dev_ops. Q13 resolved. | Exc-3: ⚠️ BA assumption — unconfirmed. | Exc-3: confirmed no-reversal protocol with PostgreSQL audit record, retry queue, and #dev_ops alert. | Client confirmation 2026-09-22 (Q13) |
| 2026-09-22 | v1.3 → v1.4 | Exc-4 timeout+retry idempotency confirmed: Zapier auto-retries (exponential); three-layer idempotency — (1) DB balance $0.00 bypass, (2) gateway key VESTING_{leader_id}_{cycle_date} → HTTP 409 on duplicate, (3) blockchain receipt_hash audit anchor. Q14 resolved. | Exc-4: ⚠️ BA assumption — Zapier retries once, cycle_date idempotency key only. | Exc-4: confirmed three-layer idempotency spec with gateway key format. | Client confirmation 2026-09-22 (Q14) |
| 2026-09-23 | v1.4 → v1.5 | Step 1 timezone confirmed: trigger fires at 00:00:00 UTC on 1st of month; UTC only, no local timezone dependency; cycle_date resolved as ISO 8601 UTC. Q15 resolved. | Step 1: "1st of the month" — no timezone specified. | Step 1: 00:00:00 UTC explicit; no local timezone. | Client confirmation 2026-09-23 (Q15) |
| 2026-10-30 | v1.5 → v1.6 | Step 2: Suspended moved to skip (frozen). Step 4a QuickBooks Journal Entry (new); BR_8.2.12.10 (new); Description + 3rd Party updated; AC-8.2.12-12 updated; AC-8.2.12-14–17 added | Step 2: Suspended eligible, payout dispatched. No QuickBooks logging in Flow 17 | Suspended carry frozen until PIP pass + return to Active. One QBO JE per Dots-routed payout after success txn ID; no bundling; Rippling W-2 skipped; Debit 5016 / Credit 1102 | CHR-139 (QuickBooks logging); QuickBooks Integration Specification §4.B; Client confirmation 2026-10-30 |