Skip to content

Tóm tắt quyết định (Decision Brief) — Tích hợp Pancake CRM (Pancake CRM Integration)

Phiên bản: 1.0 Ngày: 15/05/2026 Độ phức tạp: L (Lớn) Module: webhook, crm-api, notification-v2-api, FE crm + settingsTrạng thái package: Bản nháp — sẵn sàng review


Mục đích: Cửa vào full package — PO/Sếp/Tech Lead/Delivery đọc 5 phút nắm phạm vi, quyết định lớn, ảnh hưởng, rủi ro. Canonical: nếu brief xung đột với SOURCE_OF_TRUTH.md, ưu tiên SOURCE_OF_TRUTH.md.

Đầu vào chuẩn (Canonical Inputs)

FileVai trò
SOURCE_OF_TRUTH.mdNguồn sự thật chuẩn + Solution Lock (25 DEC)
EVIDENCE_PACK.mdBằng chứng từ Phase 3 (4 Explore subagents)
prd.md / ui-spec.md / dev-spec.md / qa-test-plan.md / handoff.md / go-live-checklist.mdFile owner

1) Tóm tắt 5 phút

  • Vấn đề: Manager đang copy-paste thủ công 50-200 lead/ngày từ Pancake CRM (40+ kênh) sang Diva CRM. Telesale mất window vàng 30 phút, KPI conversion không đo realtime, ~2h/ngày manager loss.
  • Giải pháp MVP-1 (inbound 1 chiều): Pancake gửi webhook record → Diva auto match phone E.164 → tạo/cập nhật khách → tạo ticket → auto-assign telesale theo round-robin chi nhánh REUSE ticket_distribute có sẵn → notify realtime.
  • Production-ready: 4-layer outage recovery (webhook + adaptive polling + daily reconciliation + DLQ replay) để đảm bảo zero-miss SLO = 0 events/ngày. Pancake suspension prevention bằng fail-open 200 mọi case + idempotency 3-tuple.
  • Effort & timeline: ~37 dev-days, calendar 5.5-6 tuần (2 BE + 1 FE + 1 QA). Pilot 4 tuần (W1 = 1 source → W4 = 40+ all).
  • Rủi ro lớn nhất: Pancake auto-suspend webhook nếu 80% error / 30 phút → mất lead toàn bộ. Đã mitigate bằng DEC-003 fail-open + DEC-015 4-layer recovery.

2) Bản đồ package

FileĐọc khi cầnPhụ trách
SOURCE_OF_TRUTH.mdĐối chiếu canonical truth / conflictPO/BA + TL
EVIDENCE_PACK.mdXem bằng chứng code/screen/db Phase 3PO/BA + TL
prd.mdDuyệt nghiệp vụ, DEC, FR/AC (10 FR), công thứcPO/BA
ui-spec.mdThiết kế 4 tabs Pancake Settings + delta dropdown sourceUI/UX + FE
dev-spec.mdSchema 4 bảng mới + ALTER 2 bảng + 7 cron + flow 15 stepTL + BE/FE
qa-test-plan.mdTest plan, oracle, chaos test outage + duplicateQA
handoff.mdRACI, timeline 6 tuần, blocker, thứ tự việcDelivery + TL
go-live-checklist.mdPilot W1-W4 gates, rollback, monitoringOps + TL

3) Khóa phạm vi

Trong phạm vi (MVP-1)

#Nội dungRef
1Inbound webhook POST /api/pancake/record/{token} — fail-open 200, idempotency 3-tupleprd.md FR-001/FR-002/FR-003
2Phone E.164 normalize (libphonenumber reuse) + advisory lock per phone chống raceFR-005/FR-006
3Match account, smart update Q2.b (chỉ tạo ticket khi phone/source/VIP-tag đổi)FR-005/FR-009
4Auto-assign REUSE ticket_distribute round-robin 1-tier per branchFR-008
5Ticket source mới ticket_source_pancake (slot 9) + FE delta 3 fileFR-010/FR-018
6Settings UI 4 tabs (kết nối + map source→branch + audit/DLQ + health)FR-012
74-layer outage recovery + DLQ replay UIFR-014/P1.2
8Compliance opt-out qua customer_consent.consent_data.marketingFR-017
9Pilot 4 tuần với 3 mức feature flag (kill switch + connection status + per-source toggle)FR-015
10Notify telesale realtime + admin alert Loose mode (branch=NULL)FR-011/FR-024

Ngoài phạm vi

#MụcLý doRef
1Outbound Diva → Pancake (POST records/tickets)Defer MVP-2 — ROI chưa đủprd.md A2
2Pancake POS, Pancake Botcake, Pancake ticket eventSản phẩm khác / chưa publishA2
3Multi-workspace, multi-tenantDiva chỉ có 1 workspace PancakeA2
4Tag mapping table riêngDEC-008 dùng tag NAME input tayA2
5Shopee/TikTok/Lazada tích hợpPattern code extendable, scope MVP-2+A2
6Geo address normalizeChỉ lưu raw text trong pancake_metadataA2
7Real-time analytics dashboardM2/M3 — query trực tiếp ticket+event đủA2

4) Quyết định đã khóa (top 10 trong tổng 25 DEC)

Quyết địnhÝ nghĩaRef
DEC-001: Inbound 1 chiều MVP-1, outbound defer MVP-2Chốt scope rõ ràng, tránh creepprd.md Z
DEC-002: Split webhook + crm-api qua Hasura event triggerTránh Pancake suspension (return 200 < 1s); reuse pattern StringeeZ
DEC-003: Fail-open trả 200 mọi caseTránh ramp-up error rate → 80%/30 phút suspendZ
DEC-006: ALTER contact_book ADD primary_phone + FK + UNIQUEFix design doc claim sai (column chưa exist)Z + SOURCE_OF_TRUTH
DEC-007: 4 bảng Pancake mới dùng disabled BOOLEAN (Diva pattern), KHÔNG deleted_atĐồng nhất với toàn bộ Diva DBZ
DEC-008: VIP tag matching theo NAME (text) case-insensitive, admin input tayĐơn giản hơn fetch tag list từ Pancake APIZ
DEC-011: Smart update Q2.b — chỉ tạo ticket khi phone/source/VIP-tag đổiTránh spam ticket trùng cho khách Pancake update liên tụcZ
DEC-012: REUSE ticket_distribute.GetTicketUpdates round-robinTiết kiệm -1.5d, đồng nhất logic phân côngZ
DEC-014: Opt-out qua customer_consent.consent_data->'marketing', KHÔNG thêm column do_not_contactReuse table có sẵnZ
DEC-015: 4-layer outage recovery (webhook + adaptive polling + reconciliation + DLQ)Đảm bảo zero-miss SLOZ

15 DEC còn lại (technical details, infrastructure choices, UI specifics) — xem prd.md Z hoặc SOURCE_OF_TRUTH.md §1.

5) Bản đồ ảnh hưởng

Khu vựcReuse/Extend/Build mớiĐiều cần chú ýRef
UI dropdown ticket source✅ Reuse (auto-render từ array)3 file delta: types.ts + i18n/vi.ts + sourceDescriptions (Tickets.tsx)ui-spec.md B0
UI Settings Pancake🆕 Build mới 4 tabs + 1 container pagePattern XDetailLayout reuse từ AppSettingsSmsTemplate.tsxui-spec.md SCR-01..05
Backend webhook receiver🔧 Extend services/webhookAdd pancake.go handler, HMAC + IP middleware mớidev-spec.md C5
Backend event handler🆕 Build mới event_pancake_process_record.go 15-stepReuse Hasura event trigger pattern + GetTicketUpdates helperdev-spec.md C5
Backend cron🔧 Extend (pattern reuse)7 cron mới pancake_*dev-spec.md C6
Backend REST client🆕 Build mới pkg/pancake/client.go + circuit breaker sony/gobreakerChỉ GET /sources MVP-1dev-spec.md C5
Database🔧 Extend account, contact_book + 🆕 4 bảng pancake_* + INSERT 1 master dataLatest migration ts 1777870069927 → mới 1777870069928+dev-spec.md C4/C7
Permission🔧 Extend module_permission_action + 🆕 module pancake_crm_integration 6 actionsDefault seed Admin; Dynamic Permission override saudev-spec.md C8
Notification🆕 Build 3 template mới (noti_ticket_assigned_pancake, noti_pancake_unmapped_branch, noti_pancake_outage)✅ Reuse notification-v2-api dispatchdev-spec.md C5 STEP 13
QA / RegressionFull FR coverage + chaos test outage + duplicate stressPilot 4 tuần chia regression theo waveqa-test-plan.md D1

6) Rủi ro và blocker

MứcRủi ro / blockerPhụ tráchCách xử lýRef
CaoPancake auto-suspend webhook (80% error / 30 phút)BE + OpsDEC-003 fail-open 200 + DEC-015 4-layer recovery + monitoring alert 1 phútprd.md A7 RSK-001
CaoHMAC signature/IP whitelist chưa verify với Pancake supportOpsPD-001/002 — out-of-band gọi 0972273341 trước W4 launchhandoff.md blocker
CaoRace condition tạo account trùng khi 2 webhook đồng thời cùng phoneBEDEC-020 pg_advisory_xact_lock per phoneA7 RSK-002
Trung bìnhPancake outage = mất leadBE + OpsCron 6 adaptive polling fallback + Cron 7 daily reconciliationA7 RSK-003
Trung bìnhBranch=NULL ticket bị bỏ quênPO + ManagerDEC-010 push admin in-app + Tab 3 audit log filterA7 RSK-004
Trung bìnhFE delta hardcode source slot ngoài TicketSources (report module)FEF18 estimate +0.5d sau grep auditA7 RSK-005
Trung bìnhcustomer_consent.consent_data.marketing key chưa confirmPO + BEPD-003 confirm trước Phase 4 SPECIFYA7 RSK-006
Trung bìnhDLQ + Replay UI scope mới (3d) — chưa có patternBE + FEBuild mới theo design doc P1.2 specA7 RSK-007
ThấpKPI baseline manual workflow chưa đoPO + ManagerPD-011 — 1 tuần đo trước W1A7 RSK-008
ThấpPancake retry policy/rate limit chưa biếtQAPD-005/006 — test W1 với webhook.siteNon-block

7) Tóm tắt bàn giao

NhómViệc chínhFile cần đọc
PO/BAConfirm 12 PD (đặc biệt PD-001/002/003), chốt VIP tag list, đo KPI baselinedecision-brief.md, prd.md Z + A5 + A10
Tech LeadReview schema 4 bảng + migration order + permission modeldecision-brief.md, prd.md Z, dev-spec.md C1-C5
BE DevWebhook handler + event processor 15-step + 7 cron + REST client + advisory lockdev-spec.md C1-C12
FE Dev4 tab Settings UI + dropdown delta + permission menu hideui-spec.md SCR-01..05, dev-spec.md C2
QAE2E test pilot 4 wave + chaos test outage + duplicate stress + load 100k/thángqa-test-plan.md D1-D5
OpsPD-001/002 với Pancake support, setup monitoring + Grafana boardgo-live-checklist.md E1-E2, handoff.md out-of-band §14
DevOpsDeploy webhook public endpoint + scale crm-api horizontally + alertmanager rulesdev-spec.md C10, go-live-checklist.md E2

8) Điểm còn mở (12 PD)

Block phân theo mức: Launch-blocker = phải resolve trước W4 production. Phase-blocker = block phase tiếp theo. Non-block = parallel ok.

IDCâu hỏiPhụ tráchHạnBlockMặc định tạm
PD-001Pancake webhook HMAC signature header tên gìOpsTrước 25/06/2026 (W4)LaunchTrust IP+URL token W1-W3
PD-002Pancake IP whitelist rangeOps + DevTrước 25/06/2026LaunchCapture từ logs W1
PD-003customer_consent.consent_data key opt-out (marketing?)BE + POTrước Phase 4 SPECIFY (~22/05/2026)Phase-FR-017Default marketing
PD-004VIP tag IDs initial seedPOTrước 04/06/2026 (W2)Non-blockVIP, Hot Lead, Khách lớn, Khách quay lại
PD-005Pancake retry policy chi tiếtQAW1 test (28/05-04/06)Non-blockAssume exponential 5 retries
PD-006Pancake REST /sources rate limitQAW1 testNon-blockCache 1h, throttle 429
PD-008Pilot 4 tuần exact source listPO + MarketingTrước 28/05/2026 (W1)Non-blockPO chọn theo volume
PD-009Hasura concurrency: 1 cron supported?TLPhase 4 SPECIFYNon-blockFallback advisory lock
PD-011KPI baseline manual workflow (response time hiện tại)PO + ManagerTrước W1KPI-measurementĐo 1 tuần
PD-012Notification noti_pancake_outage kênh nàoPOTrước W1Non-blockDEC-010 default push admin

2 PD không block: PD-007 (Pancake ticket event publish?) + PD-010 (Pancake public API roadmap) — monitor quarterly.


Sẵn sàng review v1.0 — Phase 5.2 Multi-Perspective Review đã hoàn thành. Xem v1.1 Pass 1 Resolutions bên dưới.


9) Pass 1 Resolutions v1.1 (Phase 5.2 outcome)

Date: 15/05/2026 | Reviewers: PO/BA + Tech Lead + QA/DevOps + FE/UX

9.1) Verdict tổng hợp

ReviewerVerdictP0
PO/BAApprove-with-conditions4
Tech LeadBLOCK5 (architecture mismatch)
QA + DevOpsApprove-with-conditions9
FE + UI/UXApprove-with-conditions4

Tổng: 22 P0 critical issues consolidated → Pass 1 fixes applied.

9.2) New decisions chốt (DEC-026..028)

DECQuyết địnhLý do
DEC-026Slot 9 "Pancake CRM" hiển thị trong filter Customer-Service report + Telesales report (auto-render)KPI revenue/conversion per source PHẢI include ticket Pancake
DEC-027Permission replay_dlq REUSE update action (không add new action)Tránh đụng 5 chỗ shared infra. M2 add granular nếu cần
DEC-028Pancake handler dùng direct pgxpool.Pool (bypass Hasura cho 15-step flow)Hasura GraphQL không support BeginTx + pg_advisory_xact_lock + FOR UPDATE. Option A đơn giản nhất

9.3) DEC-006 revised v1.1

contact_book.primary_phone ĐÃ TỒN TẠI (migration 1693889973118). Migration #3 chỉ ADD UNIQUE (account_id), KHÔNG ADD COLUMN, KHÔNG ADD FK.

9.4) New PDs

PDBlockOwnerHạn
PD-013 ticket.first_response_at exist?Block-KPI-measure (FORMULA-002)BE+PO22/05/2026
PD-014 Pancake /records?modified_since endpoint verifyBlock-Cron-7Ops+QAW1

9.5) Severity sync 3 file

PDdecision-brief cũhandoff cũMới (consistent 3 file)
PD-003Phase-blockPhase 4 SPECIFYPhase-block + audit data coverage
PD-008Non-blockW1 setupBlock-W1-start
PD-011Non-blockBlock-pilot-startBlock-pilot-start

9.6) Effort impact

ItemΔ
DEC-028 pgxpool foundation+2d BE
Component build (XJsonViewer + XMetricCard)+2d FE
QA P0 conditions+2d QA
DevOps explicit allocation+3d (chưa có trong v1.0)
Various P1+0.25d
Total+9.25d → ~46d (vs 37d cũ)
Calendar6 tuần (tight) — vẫn fit

9.7) Document hierarchy mới

decision-brief.md (cửa vào — file này)
├── REVIEW_REPORT.md (Pass 1 outcome tổng hợp 4 reviewer)
├── SOURCE_OF_TRUTH.md §10 (canonical truth — DEC-006 revised + DEC-026..028)
├── EVIDENCE_PACK.md §11 (Pass 1 corrections: contact_book truth + architecture verified)
├── prd.md Z' v1.1 (Decision Log canonical)
├── dev-spec.md C13 (architecture Option A pgxpool)
├── ui-spec.md (pending B-Resolutions)
├── qa-test-plan.md D7 (11 new TC + DS-002 v2)
├── handoff.md §9 (RACI + +9.25d effort)
└── go-live-checklist.md E7 (3 alert rules + HMAC spec + step split)

9.8) Phase 6 + Phase 7 next steps

  • ✅ Phase 5.2 Multi-Perspective Review done
  • ✅ Phase 5.3 Pass 1 fixes applied (9/9 file updates)
  • ⏳ Phase 5.3 lint re-run (verify 0 ERROR maintained)
  • ⏳ Phase 6 finalize sign-off
  • ⏳ Phase 7 /publish-doc pancake-crm-integration + git push dva-doc GitHub