Skip to content

Instantly share code, notes, and snippets.

@esz135888
Created May 23, 2026 18:44
Show Gist options
  • Select an option

  • Save esz135888/16f8ea4909108511bd02b4a465c5b8d4 to your computer and use it in GitHub Desktop.

Select an option

Save esz135888/16f8ea4909108511bd02b4a465c5b8d4 to your computer and use it in GitHub Desktop.
PLS job 08c2007a Kolable order payment export gate production pack

Acceptance Tests

Gate 0:Artifact

  • order-payment-export-gate.html 可打開。
  • 必交檔案齊全:production-brief.mddata-model.mdacceptance-tests.mddecision-record.mdartifact-url-or-pr.md
  • learning-memory.json 可 parse。
  • artifacts_json 包含 primary_artifact、market_context、production_readiness、e2e_verification、people_sync、learning_memory。

Gate 1:D1 Export Field QA

通過條件:

  • 匯出範圍是 2026-05-12 到 2026-05-21。
  • 每筆 order 必須有 order_idorder_created_atgross_amountpayment_statussource_ref
  • paid 訂單必須有 payment_refpayout_ref
  • refunded/rebought 必須能連回原訂單。

Gate 2:D7 Reconciliation

測試分類:

[
  {"order_id":"KOL-001","payment_status":"paid","payment_ref":"pay_123","expected":"matched_paid"},
  {"order_id":"KOL-002","payment_status":"paid","payment_ref":"","expected":"exception_missing_payment_ref"},
  {"order_id":"KOL-003","payment_status":"refunded","rebuy_order_id":"","expected":"exception_refund_no_rebuy"}
]

通過條件:

  • match rate 可計算。
  • exception 有 type、severity、owner、due、next_action。
  • 沒有 source_ref 的列不得進 final revenue。

Gate 3:D14 Pipeline Link

通過條件:

  • 10 筆 demo 線索與 3 筆報價/訂單追蹤可連到 order/payment 或 exception。
  • 28,000 培訓訂單有 refund/rebuy 狀態。
  • blocked amount、cash collected、net revenue 分開顯示。

Gate 4:D30 Operating Metric

通過條件:

  • 每週產生 revenue confidence snapshot。
  • 指標包含 GMV、cash collected、net revenue、refund amount、rebuy amount、blocked amount、exception close rate。
  • PLS 下一輪能根據 exception_type 派 Wade/Louis/Huber。

e2e_verification

本輪可驗證:

  • 本地檔案已建立。
  • learning memory JSON 可 parse。
  • required keywords 可搜尋:market_context、production_readiness、e2e_verification、people_sync、learning_memory。
  • Gist URL 建立後以 curl -I -Lgh gist view --files 驗證。

Data Model / API / Sync / Permission Spec

Tables

order_exports

欄位 型別 說明
id uuid export id
project_id uuid Kolable project id
export_window_start date 2026-05-12
export_window_end date 2026-05-21
exported_by_member_id uuid Wade 或替代 owner
source_system text Kolable backend / payment provider / spreadsheet
source_ref text 匯出 URL、檔案 id 或後台報表 ref
row_count int 訂單列數
field_completeness_rate numeric 欄位完整率
created_at timestamptz 匯入時間

order_payment_snapshots

欄位 型別 說明
id uuid snapshot id
order_export_id uuid 對應 export
order_id text 訂單 id
buyer_key text 買家去識別化 key
product_name text 商品/課程
order_created_at timestamptz 訂單時間
gross_amount numeric 訂單金額
currency text 幣別
payment_status enum paid, unpaid, pending, refunded, partially_refunded, rebought, disputed, cancelled
payment_method text 信用卡/轉帳/其他
payment_ref text 金流交易 id
payout_ref text payout/bank ref
source_ref text 原始列或報表 ref

payment_transactions

欄位 型別 說明
id uuid transaction id
provider text Stripe/Shopify/手動/其他
provider_transaction_id text charge/payment id
provider_balance_id text balance transaction id
payout_ref text payout id
transaction_type enum payment, fee, refund, dispute, adjustment, payout
amount numeric 金額
fee_amount numeric 手續費
net_amount numeric 淨額
occurred_at timestamptz 交易時間
source_ref text 原始報表 ref

refund_rebuy_events

欄位 型別 說明
id uuid event id
original_order_id text 原訂單
refund_transaction_id uuid 退款交易
rebuy_order_id text 重買訂單
rebuy_payment_ref text 重買付款
status enum refund_pending, refunded, rebuy_pending, rebought, failed, unknown
owner_member_id uuid Huber/Wade/Louis
due_date date 到期日
note text 備註

reconciliation_exceptions

欄位 型別 說明
id uuid exception id
order_id text 訂單
exception_type enum missing_payment_ref, amount_mismatch, paid_no_payout, refund_no_rebuy, rebuy_no_payment, duplicate_order, missing_source_ref
severity enum P0, P1, P2
owner_member_id uuid 負責人
due_date date 到期
next_action text 下一步
status enum open, in_progress, resolved, waived
evidence_ref text proof

API / Sync

Upload export

POST /api/pls/kolable/order-payment-exports

{
  "window_start": "2026-05-12",
  "window_end": "2026-05-21",
  "source_system": "kolable_backend",
  "source_ref": "drive://exports/kolable-20260512-20260521.csv",
  "exported_by_member_id": "wade_member_id"
}

Run reconciliation

POST /api/pls/kolable/reconciliation-runs

Rules:

  • Match first by order_id + payment_ref.
  • If missing payment_ref, match by buyer_key + amount + +/- 2 day window only as candidate, not final.
  • Paid orders must have payment_ref or payout_ref.
  • Refunded orders above threshold need refund transaction and owner note.
  • Rebuy requires link from original_order_id to rebuy_order_id.

權限與稽核

角色 可讀 可寫 不可做
Louis 全部 summary、exception、source_ref 驗收、waive、指派 owner 覆蓋原始匯出
Wade export schema、自己的匯出狀態 upload/export note waive exception
Huber refund/rebuy exceptions refund_rebuy_events 改 order gross amount
PLS worker schema、summary、artifact progress/upload/complete/exception proposal 假裝匯出或付款已驗證

所有匯出與對帳結果必須保留 source_refaudit_actoraudit_at。付款個資需用 buyer_key 去識別化;原始 buyer info 僅限授權人讀取。

失敗回滾

  • 若 Wade 未交 export:PLS 升級 Louis 拍板替代資料來源或替代 owner。
  • 若欄位缺失:不得關閉 overdue;退回缺欄清單。
  • 若 payment provider 與 bank/payout 不一致:先標 exception,不得調整 revenue 數字。
  • 若 28,000 退刷/重買不明:blocked amount 留在風險池,不得計入 net revenue。

Decision Record:Kolable 訂單付款 Export Gate

背景

「Wade 匯出 5/12-5/21 訂單與付款狀態」已 overdue。若只催 Wade 交一份 CSV,仍無法回答已收款、退刷、重買、未入帳、誰追款、是否可計入商業驗證。Kolable 現在需要 revenue-confidence gate。

選項

選項 說明 優點 風險
A. 只催 Wade 匯出 CSV Wade 手動匯出一份表。 最快。 欄位不完整、不能對帳、不能關閉 exception。
B. 直接做完整金流 API 串接 接支付/銀行/payout API。 長期自動化。 本輪過重,且資料來源未先標準化。
C. 建 export gate + reconciliation schema 先用四份匯出與例外流程建立 revenue confidence。 可立即落地,未來可接 API,能派工。 需要 Wade/Louis/Huber 配合驗收。

推薦

採用 C。

理由:

  • 市場成熟做法都要求拆開 sales、payment、refund、fee、payout,並保留 transaction/source reference。
  • Kolable 的本輪目的不是漂亮報表,而是確認 revenue 是否可信。
  • C 可同時支援人工匯出與未來 API/webhook 自動化。

採用狀態

建議狀態:pending_export

owner:Louis

data provider:Wade

refund/rebuy reviewer:Huber

due:

  • Wade export:2026-05-24 12:00
  • Louis acceptance:2026-05-24 18:00
  • Huber 28,000 refund/rebuy:2026-05-25

落地路徑

  1. Wade 按 data-model.md 匯出 orders/payments/refunds/rebuys。
  2. Louis 用 acceptance-tests.md 做 field QA。
  3. Huber 補 28,000 培訓訂單退刷與重買狀態。
  4. PLS 依 exception_type 派追款、退款、補單或資料修正任務。
  5. D14 接 demo/報價/訂單 pipeline,D30 形成 revenue confidence dashboard。

退修回饋格式

若不採納,必須回饋:

  • 哪個欄位無法匯出。
  • 哪個 payment/refund/payout source 不存在。
  • 28,000 訂單目前是哪個狀態。
  • 是否需要改 owner 或 due。

沒有上述回饋,不應標完成,也不應只交總金額。

{
"job_id": "08c2007a-b034-4d05-9582-81bce49bc9a9",
"project_id": "21ab06f8-53ac-48a7-b327-2c35c3528779",
"ai_native_project_id": "4715ad23-b78b-467b-93b6-c0927e259096",
"learned_at": "2026-05-24T02:48:00+08:00",
"signal": {
"type": "action_overdue",
"summary": "Kolable: Wade 匯出 5/12-5/21 訂單與付款狀態(PLS 由 Louis 追)",
"root_cause_hypothesis": "卡點不是缺一份 CSV,而是缺 revenue confidence:訂單、付款、退刷、重買與 payout 無共同 source_ref 和 exception owner。"
},
"recommended_next_check": [
"Wade 是否交出 orders/payments/refunds/rebuys 四類匯出",
"每筆 paid order 是否有 payment_ref 或 payout_ref",
"28,000 培訓訂單是否有 refund/rebuy 狀態",
"reconciliation_exceptions 是否都有 owner/due/next_action",
"是否已連回 demo 線索與報價/訂單 pipeline"
],
"do_not_repeat": [
"不要只催 Wade 匯出而不定義欄位",
"不要用總金額代替交易級 source_ref",
"不要把未明退刷/重買計入 net revenue",
"不要在沒有 exception owner/due 時標完成"
],
"next_worker_rules": {
"if_export_missing": "escalate_to_louis_for_alternative_source_or_owner",
"if_export_complete": "run_reconciliation_and_dispatch_exceptions",
"if_28000_refund_rebuy_unknown": "dispatch_huber_refund_rebuy_resolution",
"if_exception_close_rate_above_90_percent": "advance_to_revenue_confidence_dashboard",
"if_source_ref_missing": "reject_completion_and_return_field_gap"
},
"market_context": {
"checked_date": "2026-05-24",
"pattern": "Ecommerce reconciliation should split orders, payments, refunds, fees and payouts, preserve transaction IDs/source refs, and manage timing differences through exception queues."
},
"production_readiness": {
"primary_artifact": "order-payment-export-gate.html",
"e2e_verification": "Validate JSON, required keywords, uploaded files, durable Gist URL.",
"required_artifacts": [
"production-brief.md",
"data-model.md",
"acceptance-tests.md",
"decision-record.md",
"artifact-url-or-pr.md"
]
}
}
<!doctype html>
<html lang="zh-Hant">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Kolable 5/12-5/21 訂單付款 Export Gate</title>
<style>
:root {
--ink: #14212f;
--muted: #5d6977;
--line: #d8e0e9;
--bg: #f7faf9;
--panel: #ffffff;
--green: #0f766e;
--blue: #1d4ed8;
--red: #b42318;
--amber: #9a5b00;
}
* { box-sizing: border-box; }
body { margin: 0; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: var(--ink); background: var(--bg); line-height: 1.5; }
header { background: #10222d; color: white; padding: 30px clamp(18px, 4vw, 50px); }
h1, h2, h3 { margin: 0; line-height: 1.2; }
h1 { font-size: clamp(28px, 5vw, 48px); max-width: 1080px; }
h2 { font-size: 22px; margin-bottom: 12px; }
h3 { font-size: 16px; margin-bottom: 7px; }
header p { max-width: 1060px; color: #d9e5ea; margin: 10px 0 0; }
main { padding: 24px clamp(16px, 4vw, 50px) 46px; }
.grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 14px; margin-bottom: 22px; }
.card { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 16px; box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04); }
.span-3 { grid-column: span 3; }
.span-4 { grid-column: span 4; }
.span-6 { grid-column: span 6; }
.span-8 { grid-column: span 8; }
.span-12 { grid-column: span 12; }
.metric { font-size: 31px; font-weight: 760; margin: 5px 0 2px; }
.muted { color: var(--muted); }
.tag { display: inline-flex; min-height: 24px; align-items: center; padding: 2px 8px; border-radius: 999px; border: 1px solid currentColor; font-size: 12px; font-weight: 720; margin: 2px 4px 2px 0; }
.green { color: var(--green); }
.blue { color: var(--blue); }
.red { color: var(--red); }
.amber { color: var(--amber); }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 10px 8px; text-align: left; border-bottom: 1px solid var(--line); vertical-align: top; }
th { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: 0; }
ul, ol { margin: 8px 0 0 18px; padding: 0; }
li { margin: 5px 0; }
.code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; background: #eef3f7; border-radius: 6px; padding: 2px 5px; }
.flow { display: grid; grid-template-columns: repeat(5, minmax(130px, 1fr)); gap: 10px; }
.flow div { background: #fbfdff; border: 1px solid var(--line); border-radius: 8px; padding: 12px; min-height: 120px; }
.line-draft { white-space: pre-wrap; background: #eff6ff; border: 1px solid #bfd7ff; border-radius: 8px; padding: 14px; }
@media (max-width: 960px) {
.span-3, .span-4, .span-6, .span-8 { grid-column: span 12; }
.flow { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<header>
<h1>Kolable 5/12-5/21 訂單付款 Export Gate</h1>
<p>把「Wade 匯出 5/12-5/21 訂單與付款狀態」升級成 revenue-confidence gate:不是只交 CSV,而是要能判斷哪些訂單已付、退刷、重買、未入帳、待追,並把 Louis/Wade/Huber 的下一步寫回 PLS。</p>
</header>
<main>
<section class="grid">
<div class="card span-3"><h3>Gate 狀態</h3><div class="metric amber">待 export</div><p class="muted">可先用本規格要求 Wade 交付,不再用口頭追。</p></div>
<div class="card span-3"><h3>Owner / Due</h3><div class="metric">Louis</div><p class="muted">Wade 提供檔案;Louis 2026-05-24 18:00 驗收。</p></div>
<div class="card span-3"><h3>範圍</h3><div class="metric blue">5/12-5/21</div><p class="muted">訂單、付款、退刷、重買、payout/bank reference。</p></div>
<div class="card span-3"><h3>完成訊號</h3><div class="metric green">4 檔</div><p class="muted">orders、payments、refunds/rebuys、reconciliation exceptions。</p></div>
</section>
<section class="grid">
<div class="card span-8">
<h2>D1 / D7 / D14 / D30 路徑</h2>
<table>
<thead><tr><th>節點</th><th>交付</th><th>驗收訊號</th></tr></thead>
<tbody>
<tr><td>D1</td><td>Wade 依 schema 匯出 5/12-5/21 orders/payments/refunds/rebuys;Louis 驗收欄位完整性。</td><td>缺欄率 0%,每筆 order 有 payment_status 與 source_ref。</td></tr>
<tr><td>D7</td><td>完成自動 reconciliation,列出 paid/refunded/rebought/unpaid/exception。</td><td>exception 每筆有 owner、due、追款/退款/補單下一步。</td></tr>
<tr><td>D14</td><td>接 demo 線索與報價/訂單追蹤,形成 revenue confidence dashboard。</td><td>10 筆 demo、3 筆報價/訂單可連到付款結果。</td></tr>
<tr><td>D30</td><td>把直播銷講收入、課綱升級、退刷重買與 payout 稽核串成 Kolable 商業驗證 OS。</td><td>每週可看 GMV、net revenue、refund rate、cash collected、blocked amount。</td></tr>
</tbody>
</table>
</div>
<div class="card span-4">
<h2>Purpose-to-Purpose E2E</h2>
<ol>
<li>原始目的:知道 5/12-5/21 到底收了多少錢、卡在哪。</li>
<li>產出物:匯出規格、reconciliation schema、exception workflow、驗收 gate。</li>
<li>人採用:Wade 匯出,Louis 驗收,Huber 核對 28,000 退刷/重買。</li>
<li>指標改善:cash collected、blocked revenue、refund/rebuy close rate、商業驗證速度。</li>
</ol>
</div>
</section>
<section class="grid">
<div class="card span-12">
<h2>Export-to-Reconciliation Flow</h2>
<div class="flow">
<div><h3>1. Export</h3><p>Wade 匯出 orders、payments、refunds、rebuys,所有列必須有 <span class="code">source_ref</span>。</p></div>
<div><h3>2. Normalize</h3><p>轉成 <span class="code">order_payment_snapshots</span>,統一日期、幣別、付款方式。</p></div>
<div><h3>3. Match</h3><p>用 order_id、payment_intent、payer identity、amount/date window 比對。</p></div>
<div><h3>4. Exception</h3><p>未付、金額不符、退刷未重買、重買未入帳進 exception queue。</p></div>
<div><h3>5. Act</h3><p>每筆 exception 指派 owner/due,PLS 追 Wade/Louis/Huber 的採用訊號。</p></div>
</div>
</div>
</section>
<section class="grid">
<div class="card span-6">
<h2>Acceptance Checklist</h2>
<table>
<thead><tr><th>Gate</th><th>狀態</th><th>不得通過條件</th></tr></thead>
<tbody>
<tr><td>欄位完整</td><td><span class="tag blue">READY</span></td><td>缺 order_id、amount、payment_status、source_ref 任一欄</td></tr>
<tr><td>付款可追</td><td><span class="tag blue">READY</span></td><td>paid 但無 payment_ref 或 payout_ref</td></tr>
<tr><td>退刷/重買</td><td><span class="tag amber">需 Huber</span></td><td>28,000 訂單無 refund/rebuy 狀態</td></tr>
<tr><td>例外派工</td><td><span class="tag green">DEFINED</span></td><td>exception 無 owner/due/next_action</td></tr>
</tbody>
</table>
</div>
<div class="card span-6">
<h2>people_sync</h2>
<div class="line-draft">LINE 草稿:
Louis / Wade / Huber,PLS 已把 5/12-5/21 訂單付款匯出改成 revenue-confidence gate。Wade 請在 2026-05-24 12:00 前交 orders/payments/refunds/rebuys 四份資料或同等匯出;Louis 18:00 前驗收;Huber 補 28,000 培訓訂單退刷與重買狀態。
驗收口徑:每筆 order 都要有 payment_status、payment_ref/payout_ref 或 exception owner/due,否則不能標完成。</div>
</div>
</section>
</main>
</body>
</html>

Kolable 5/12-5/21 訂單付款 Export Gate Production Brief

場景

Kolable 的「Wade 匯出 5/12-5/21 訂單與付款狀態」已 overdue。這不是單純要 Wade 拉一份 CSV,而是 Kolable 目前收入驗證、退刷重買、直播銷講商業模式是否成立的 revenue-confidence gate。本輪把它做成 production pack:明確要求資料欄位、reconciliation workflow、例外派工、驗收與下一輪商業指標。

30 天路徑

節點 交付成果 驗收
D1 Wade 匯出 5/12-5/21 orders、payments、refunds、rebuys 四類資料。 每筆 order 有 order_id、buyer、amount、payment_status、source_ref。
D7 自動 reconciliation,產出 paid/refunded/rebought/unpaid/exception。 所有 exception 有 owner、due、next_action。
D14 串接 demo 線索與 3 筆報價/訂單追蹤。 10 筆 demo 與 3 筆報價可連到付款或例外狀態。
D30 形成 Kolable revenue confidence dashboard。 每週追 GMV、net revenue、refund rate、cash collected、blocked amount。

Purpose-to-Purpose E2E

原始目的:Louis 需要知道 5/12-5/21 期間 Kolable 訂單與付款真實狀態,才能判斷課綱升級、直播銷講與商業驗證是否可繼續加碼。

產出物:可打開的 export gate cockpit、data model、API/sync、acceptance tests、decision record、learning memory。

人採用:Wade 交付匯出;Louis 驗收收入與例外;Huber 核對 28,000 培訓訂單退刷與重買;PLS 將 exception 派工回 owner。

指標改善:

  • 營收:確認已收款與可追 blocked revenue。
  • 成本:減少手動追款、重複對帳與口頭確認。
  • 風險:退刷/重買/未入帳不再藏在聊天紀錄。
  • 轉換:訂單資料回流 demo/報價 pipeline,支援商業模式驗證。

market_context

2026-05-24 快速檢查成熟做法:

  • Stripe reconciliation documentation 強調匯出 transaction/balance/payout 明細,使用 payment/refund/payout 物件作為對帳依據。
  • Stripe reporting best practice 建議在 payout paid 或 reconciliation completed 事件後非同步取回 payout reconciliation。
  • Shopify/ecommerce payout reconciliation 實務指出 payout、order、refund 會有不同 timing semantics,必須用 order/transaction/payout ID 對照,不應只比銷售總額。
  • 近期 ecommerce accounting 實務也強調 gross sales、fees、refunds、net payout 要拆開,才能對到銀行入帳。

本輪採用這些做法:不要求單一總表,而是要求 orders/payments/refunds/rebuys + source_ref + exception queue,讓 Kolable 可從人工匯出平滑升級到 API/webhook reconciliation。

Solution Stack

  • 脈絡框架:order export → payment/refund/payout match → exception queue → owner action → revenue dashboard。
  • 作業流程:Wade export、Louis field QA、Huber refund/rebuy check、PLS exception dispatch。
  • 資料/DB 模型:order_exportspayment_transactionsrefund_rebuy_eventsreconciliation_runsreconciliation_exceptions
  • 可操作工具:HTML cockpit、欄位規格、驗收 checklist、LINE 草稿。
  • 驗收指標:欄位完整率、match rate、exception close rate、cash collected、blocked amount。
  • 下一輪升級:接金流 API 或後台 export schedule,將每日 payout reconciliation 自動化。

production_readiness

  • Primary artifact:order-payment-export-gate.html
  • Data model:data-model.md 定義 schema/API/權限/稽核。
  • E2E acceptance:acceptance-tests.md 定義 D1/D7/D14/D30 gate。
  • Decision record:decision-record.md 記錄為何採用 export gate 而非只催 Wade。
  • Learning memory:learning-memory.json 指示下一輪 PLS 不再重複做對帳分析,優先檢查 export 是否已交、exception 是否有 owner。

people_sync

LINE 草稿:

Louis / Wade / Huber,PLS 已把 5/12-5/21 訂單付款匯出升級成 revenue-confidence gate。Wade 請在 2026-05-24 12:00 前交 orders/payments/refunds/rebuys 四份資料或等價匯出;Louis 18:00 前驗收欄位與 exception;Huber 補 28,000 培訓訂單退刷與重買狀態。每筆 order 必須有 payment_status、payment_ref/payout_ref 或 exception owner/due,否則不能標完成。

learning_memory

本輪推翻的假設:Kolable 不只是需要「一份訂單付款匯出」,而是需要 revenue confidence。下一輪若仍 overdue,先檢查 Wade 是否交出 source_ref 完整的匯出;若已交,改追 exception close rate 與 28,000 訂單退刷/重買;若未交,升級到 Louis 直接拍板資料來源與替代 owner。

Sources

Checked on 2026-05-24.

market_context

Applied Interpretation

Kolable 不應只接收一份總表。成熟做法要求交易級 source_ref、payment/refund/payout 拆分、時間差處理與 exception queue。因此本輪交付 export gate + reconciliation schema + people_sync,讓 Wade/Louis/Huber 能關閉 overdue 並形成可擴充到 API 的 production path。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment