StackTrading Docs

SRS: UC_8.2.12 — Flow 17: Pod Leader Vesting Payout

FieldValue
UC_IDUC_8.2.12
Versionv1.7
Last Updated2026-11-05
BA PiClinh.nguyen34
CategorySTAGE 6: CAREER PATH & PROFESSIONALIZATION
ModulePod System
FunctionFlow 17 — Pod Leader Vesting Payout
Document ReferencesZapier 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_IDFunctionDescription
UC_8.2.12Flow 17 — Pod Leader Vesting PayoutMonthly 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

FieldValue
Use CasePod Leader Vesting Payout
DescriptionOn 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 FlowFlow 17 (Pod Leader Vesting Payout)
Zapier TableTable E: Pod_Leader_Registry (Pending_Carry_Balance field)
3rd PartyDots 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

IDPre-condition
P1Scheduled job fires at 1st of month
P2At least one Pod Leader has Pending_Carry_Balance > 0 in Pod_Leader_Registry
P3Middleware has valid credentials for Dots API and Rippling API
P4Ethers.js wallet is initialized and contract.recordMetric() is available

4. Post-conditions

#Post-condition
1All Pod Leaders with Pending_Carry_Balance > 0 have received their payout via Dots or Rippling
2Each processed payout is recorded on Polygon PoS blockchain: metric_category = "Pod Leader Vesting", metric_value = "Carry Payout Cleared", receipt_hash = [Dots/Rippling Transaction ID]
3Pending_Carry_Balance = $0.00 for all processed leaders
4Slack alert sent to Head of Ops: "Pod Vesting Complete. Processed [processed_count] leaders."
5Pod_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-vesting with 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_Registry for all records where Pending_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 to Status = '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 as Active; 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. Set Pending_Carry_Balance = $0.00 for these leaders without dispatching any payout. No Dots or Rippling call is made.
  • Min_Payout_Threshold gate: Applied only to eligible (non-Terminated) leaders. If Pending_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, and compensation_track:
    • Path A — Dots API: billing_country != 'US' (all levels) OR billing_country == 'US' AND current_level < 6. Call POST /v2/payouts with payee_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'). Call POST /api/v1/payroll/off-cycle-payruns with employee_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.

(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):
PostingTypeAccountAmount
Debit5016 POD Leader Bonus ContractorAbsolute payout amount
Credit1102 DOTSAbsolute 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.00 for 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_Paid email to the array of emails in processed_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 LevelCarry 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_users array).

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_Balance for 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 includes leader_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_Balance stays 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_hash status to PENDING_BLOCKCHAIN_SYNC or FAILED.
  • Queue blockchain log payload for async retry with exponential backoff.
  • Emit Slack alert to #dev_ops with 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-vesting with same cycle_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 have Pending_Carry_Balance = $0.00 and 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() with receipt_hash = original transaction ID provides on-chain audit trail; Ops can reconcile any gap immediately.

(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_track is 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_BONUS earning 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:

  1. The failed leader is skipped; the batch loop continues to the next leader.
  2. The failed leader's Pending_Carry_Balance is NOT zeroed — it accumulates and is retried in the next monthly cycle.
  3. A Slack error alert fires to #ops-treasury (not #ops-it) with leader_id, amount, and API error details.
  4. 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:

  1. 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.
  2. 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.
  3. Account mapping: Debit 5016 POD Leader Bonus Contractor / Credit 1102 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)

FieldTypeDescription
Pending_Carry_BalanceDECIMALAccumulated unpaid carry earnings — zeroed after payout each cycle
last_vesting_payout_atTIMESTAMP (nullable)Timestamp of last successful payout cycle reset. Updated to NOW() in Step 5 after each payout.
Leader_IDUUIDUsed by Middleware to identify the leader for payout routing

(Source: Zapier Integration V7.pdf §Table E lines 777–790)


10. API Reference

EndpointMethodInputOutputServerDescription
POST /process-pod-vestingPOSTcycle_date = Today{ "processed_count": int, "processed_users": [email array] }MiddlewareBatch 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 KeyTriggerRecipientContent
Pod_Leader_Vesting_PaidStep 8 — after Middleware returns processed_users arrayAll processed Pod LeadersStatement 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_IDFlowGivenThenType
AC-8.2.12-01Happy pathMonthly trigger fires on 1st; 3 leaders have Pending_Carry_Balance > 0All 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 leadersIntegration
AC-8.2.12-02No eligible leadersTrigger fires; no leader has Pending_Carry_Balance > 0Middleware returns processed_count = 0; Slack alert: "Processed 0 leaders"; no email sentIntegration
AC-8.2.12-03Routing — internationalLeader has non-US classificationPayout routed via Dots APIIntegration
AC-8.2.12-04Routing — US W2Leader has US W2 classificationPayout routed via Rippling Off-Cycle Payroll APIIntegration
AC-8.2.12-05Blockchain loggingLeader payout processedcontract.recordMetric() called with metric_category = "Pod Leader Vesting", metric_value = "[Amount] USD Cleared", receipt_hash = [transaction ID]Integration
AC-8.2.12-06Double-payment preventionSame leader processed in cycle NPending_Carry_Balance = $0.00 immediately after payout; balance does NOT re-appear in cycle N+1 unless new carry was accruedIntegration
AC-8.2.12-07Zapier single callFlow 17 executesZapier makes exactly 1 call to Middleware; no per-leader loop exists in ZapierIntegration
AC-8.2.12-08Min_Payout_Threshold — skipLeader has Pending_Carry_Balance = $75.00 on 1st of monthLeader excluded from current cycle; Pending_Carry_Balance remains $75.00; no payout, no zero-out; balance carried to next cycleIntegration
AC-8.2.12-09Min_Payout_Threshold — eligibleLeader has Pending_Carry_Balance = $100.00 on 1st of monthLeader included in cycle; payout processed normallyIntegration
AC-8.2.12-10Exc-2 loop isolationPayout API fails for Leader A; Leaders B and C in same batchB and C paid normally; A skipped; A's balance preserved; Slack alert to #ops-treasury with A's leader_id and errorIntegration
AC-8.2.12-11Terminated forfeitureLeader has Status = 'Terminated' and Pending_Carry_Balance = $300 when cycle runsPending_Carry_Balance set to $0.00; no Dots/Rippling call made; balance not paid outIntegration
AC-8.2.12-12Suspended frozenLeader has Status = 'Suspended' and Pending_Carry_Balance = $500Leader 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 ActiveIntegration
AC-8.2.12-13On_Leave vestsLeader has Status = 'On_Leave' and Pending_Carry_Balance = $400 when cycle runsLeader included like Active; payout dispatched via Dots/Rippling; Pending_Carry_Balance zeroed after payoutIntegration
AC-8.2.12-14QBO — one JE per leader (CHR-139)3 leaders paid via Dots in the same cycle3 separate QuickBooks Journal Entries pushed, each after its Dots transaction ID is returned; no bundled entryIntegration
AC-8.2.12-15QBO — skip Rippling (CHR-139)Leader is US Level 6+ W-2, paid via Rippling Off-Cycle PayrollNo QuickBooks Journal Entry pushed for this leaderIntegration
AC-8.2.12-16QBO — account mapping (CHR-139)Dots payout of $250 succeedsJournal Entry: Debit 5016 POD Leader Bonus Contractor $250 / Credit 1102 DOTS $250Integration
AC-8.2.12-17QBO — Dots failure (CHR-139)Dots payout call fails for a leader (Exc-2)No QuickBooks Journal Entry pushed for that leaderIntegration

13. Changelog

DateVersionChangePreviousAfterSource
2026-11-05v1.7§5 Step 2 status gate (On_Leave), source line; §9 AC-8.2.12-13On_Leave skipped — carry frozen, not vested (UC_8.2.10 §7.1.3 old rule)On_Leave eligible like Active — carry keeps vesting during leaveClient 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.0Initial document—Flow 17 full spec; all BRs; ACsZapier Integration V7.pdf §Flow 17; §Pod Leader Carry Logic; RFQ_ Stack Trading Prop Tech V7.pdf §Process Pod Vesting
2026-09-20v1.0 → v1.1Min_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 addedStep 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-22v1.1 → v1.2BR_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-22v1.2 → v1.3Exc-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-22v1.3 → v1.4Exc-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-23v1.4 → v1.5Step 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-30v1.5 → v1.6Step 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 addedStep 2: Suspended eligible, payout dispatched. No QuickBooks logging in Flow 17Suspended 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 1102CHR-139 (QuickBooks logging); QuickBooks Integration Specification §4.B; Client confirmation 2026-10-30

On this page