Files
solution-erp/docs/changelog/sessions/2026-06-17-S69-vanphong-golive-pe-urgent-threshold.md
pqhuy1987 9941e352bc [CLAUDE] Docs: S69 session-end closeout — Văn phòng số golive + PE cờ gấp/ngưỡng (Run #305-308)
Flush docs sau buổi sản phẩm cực lớn (4 deploy prod-verified, 2 workflow fan-out).

- STATUS.md + HANDOFF.md: S69 header + Recently Done + In-Progress + count (Mig 52→53 · test 286→306 · menu 53→54 · gotcha 66→68 · bundle BgNCjwsG/CBvh0vtf Run #308) + Phase (Văn phòng số golive + PE cờ gấp/ngưỡng).
- gotchas.md: +2 (#67 Tailwind accent palette thiếu-stop vỡ-màu-im-lặng · #68 stale-diagnostic-background-agent → chỉ tin build sau-cùng).
- session log 2026-06-17-S69-vanphong-golive-pe-urgent-threshold.md.
- CLAUDE.md (root): Mig 53 · PE module +Mig 53 · test 306 · gotcha 68.
- ef-core-migration SKILL: +Mig 53 row AddPeUrgentAndCeoApprovalThreshold + count 52→53 (H1 flush).
- harvest: cicd-monitor MEMORY #308 (H2 orphan commit). H2 GATE PASS · H1 0 new-alloc.

curate-debt P1 next session: cicd-monitor 65.2KB worst. C (chuyển phiếu→dự án) chờ anh Kiệt spec.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:00:45 +07:00

8.2 KiB
Raw Blame History

S69 (2026-06-17) — Văn phòng số (E-Office) port + golive + PE cờ gấp/ngưỡng CCM

4 deploy prod-verified Run #305→#308. HMW-mode ON, 2 workflow fan-out (office-puro-foundation 5-agent + office-puro-reskin-all 8-agent) + nhiều spawn lẻ. Buổi sản phẩm CỰC LỚN.

Anh: /session-start → "port Văn phòng số giống PURO NamGroup, CSS giống Hồ sơ NS" /ultra-on → (foundation) → "làm hết đi, PE golive rồi giờ còn Văn phòng số" (re-skin all) → "public Văn phòng số cho all user" (golive) → [screenshot Zalo anh Kiệt FDC: cờ gấp + CCM duyệt-final theo ngưỡng + chuyển phiếu→dự án] → "publish + session-end".


#305 a8bbdae — Văn phòng số foundation (workflow 5-agent)

  • Phát hiện then chốt: SE ĐÃ CÓ module Office với feature map 1:1 PURO (Danh bạ/Phòng họp/Đề xuất/Đơn từ/Đặt xe/Ticket) → đây là re-layout + re-skin, không phải build mới. Anh chốt 2 nhánh: "Nền tảng trước" + "Giữ menu SE (không phẳng-hoá sidebar)".
  • Foundation: sync fe-admin/src/index.css ← fe-user (đóng drift S66-S68: heading 600→700, ink #0f172a→#0b1220, label-eyebrow slate→brand-600 + gotcha #66 rule) → 2 app đồng bộ. + 3 shared component PageHeader/KpiCard/WidgetCard (×2 SHA256, tái dùng token Hồ sơ NS) + OfficeDashboardPage 2-cột widget kiểu PURO HomePage (reuse data hooks Đề xuất/Đơn từ/Ticket/Phòng họp, đếm client-side, no BE) + menu key Off_Dashboard (no-mig idempotent seed dưới Off, giữ ẩn).
  • gotcha #67 NEW: em main fix KpiCard activeBorder -300-500 — accent palette (teal/violet/amberx/greenx) chỉ ship 50/100/500/600/700; -300 trên teal/violet rơi DEFAULT Tailwind (sai-hệ), amberx/greenx drop hẳn. Build PASS cả 2 → reviewer soi dist CSS mới bắt.
  • cicd Run #305: bundle admin Bl2o_kUq/user BImrKQNn, Off_Dashboard seeded, Office still hidden (admin-only).

#306 c556f6c — re-skin TRỌN 10 page (workflow 7 designer song song + reviewer)

  • Phẫu thuật trình bày, giữ 100% logic: Đề xuất(List/Create/Detail) + Đơn từ/Đặt xe(List/Detail) + Ticket CNTT + Danh bạ + Phòng họp(Calendar/Rooms) + Báo cáo CC(fe-admin) → PURO layout (PageHeader + KpiCard-filter row + card-accent) + CSS Hồ sơ NS. reviewer verify mọi api.*/queryKey byte-identical HEAD vs working tree (logic preserved).
  • Cơ chế chống parallel-build-interference: 7 designer ghi SONG SONG fe-user → cấm chạy npm build (project cấm worktree do Windows MAX_PATH) → em main build-tập-trung 1 lần + mirror SHA256 sang fe-admin (9 page identical@HEAD verify trước cp) + build fe-admin.
  • gotcha #68 NEW: harness bắn loạt diagnostic × unused/Element sau workflow — đều STALE mid-edit snapshot; build sau-cùng exit 0 cả 2 app. Bài học: agent nền → chỉ tin build SẠCH sau-cùng, bỏ qua diagnostic giữa-chừng.
  • cicd Run #306: bundle admin Wt54PHYl/user B99fMU6X, 6 Office SPA route 200, Office vẫn ẩn.

#307 1f8947e — Office golive public (+6 test)

  • Anh: "public Văn phòng số cho all user eoffice". SeedAllRolesOfficeModulePermissionsAsync grant read+create 16-key allow-list mọi role (mirror đúng S65 HRM SeedAllRolesHrmProfileReadPermissionsAsync — chạy SAU RevokeTemporarilyHiddenModulesAsync để THẮNG; upgrade-only nâng false→true).
  • Allow-list 16: Off + Dashboard + DanhBa + PhongHop(View/Book) + DeXuat(List/Create/Inbox) + DonTu(Leave/Ot/Travel) + DatXe + ItTicket.
  • Excluded (giữ ẩn): Off_PhongHop_Manage (admin CRUD phòng) + Off_AttendanceReport (báo cáo riêng-tư) + Off_ChamCong (Cá nhân, golive riêng). HRM (trừ Hồ sơ NS) + Personal VẪN ẩn.
  • reviewer PASS security (2 finding load-bearing): (1) cascade-safe — Off KHÔNG phải inherit-root trong GetMyMenuTree (chỉ Contracts/Workflows/PE/PeWf) → excluded-3 giữ false không lan; (2) no write-path opened — Office controller dùng class-[Authorize] self-service + per-action [Authorize(Roles=Admin)] cho admin-write → CanCreate chỉ mở menu+nút, API authz độc lập menu-key.
  • +6 test OfficeModulePermissionSeedTests. cicd DB-verify sqlcmd: 16/16 allow-list read+create=1 × 13 role, excluded-3 = 0, HRM/Personal vẫn 0, admin không hạ. Bundle BE-only frozen.

#308 ebd7e1c — PE cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng (Mig 53, anh Kiệt FDC, +14 test)

  • Yêu cầu anh Kiệt sau họp sếp (screenshot Zalo). Anh chốt 4 quyết định (AskUserQuestion): ngưỡng cấu-hình-được · giá-trị = winnerQuoteTotal · cờ gấp visibility-only · nhận diện CCM/CEO theo role.
  • B — CCM duyệt-final theo ngưỡng giá trị: ApprovalWorkflow +CeoApprovalThreshold (decimal? admin nhập Designer, null = luồng tuyến tính cũ → rollout an toàn dark-launch). ApproveV2Async: actor role CostControl (CCM) + winnerQuoteTotal (tổng ThanhTien NCC được chọn) < ngưỡng → DaDuyet luôn, bỏ CEO (guard chưa-ở-slot-cuối). Vai PRO=Procurement, CCM=CostControl, CEO=Director (mapping qua AppRoles).
  • A — cờ gấp per-vai (visibility-only): PE +IsUrgentByPro(đỏ)/IsUrgentByCcm(xanh). Endpoint PUT /purchase-evaluations/{id}/urgent role-gated (Procurement→ByPro, CostControl→ByCcm, Admin→cả 2, khác→Forbidden) + notify CEO (Director) qua INotificationService.NotifyManyAsync khi MỚI bật (best-effort try/catch). Q3: KHÔNG đổi luồng.
  • FE ×2: Workflow Designer ô "Ngưỡng giá trị gói CEO" (fe-admin) + PE detail cờ gấp toggle/badge theo role + hint "giá trị gói vs ngưỡng → CCM duyệt-final/cần CEO" + PE list badge.
  • +14 test: PeCcmThresholdFinalizeTests 5 (load-bearing: CCM dưới ngưỡng → DaDuyet skip CEO; ≥ ngưỡng → lên CEO; null → linear; non-CCM → không finalize) + PeUrgentToggleAuthzTests 9. reviewer PASS security (cascade-safe + no-write-path). cicd Run #308: Mig 53 applied (3 cột, sys.tables=88), endpoint /urgent 401-not-404, bundle admin BgNCjwsG/user CBvh0vtf.
  • C (sau duyệt → chuyển phiếu đến dự án): anh Kiệt "sẽ làm chi tiết với em để lên form" → DEFERRED, chờ spec.

§L AUTO-MAINTAIN

  • AS scan / RCA: 2 truncation #53 (impl-backend truncate giữa fix positional-record DTO → em main fix 2 CS7036 + tự viết endpoint cờ gấp agent chưa kịp; impl-frontend truncate → em main verify-complete-on-disk). 0 production-bug (cả 2 build PASS sau-cùng). Class quen #53 — recover-disk + self-gate, không cần RCA mới.
  • gotcha NEW ×2: #67 (Tailwind accent palette thiếu-stop vỡ-màu-im-lặng) · #68 (stale-diagnostic-background-agent → chỉ tin build sau-cùng). → feedback_stale_diagnostic_background_agent (user memory).
  • H2 harvest GATE PASS (1 non-block: PE-CCM-threshold logic test-covered [14 test] not standalone-reviewed — acceptable). 0 corruption/stray/wave. cicd #308 orphan → commit closeout.
  • H1 tooling CHỐT: 0 new skill/plugin/roster (0 new-alloc). Count-flush must-fix: ef-core SKILL Mig 53 + skills/README + dep-audit + root CLAUDE + STATUS + HANDOFF (done closeout). docs/CLAUDE.md full + schema-diagram §16+ = monthly-defer.
  • curate-debt P1 (next session): cicd-monitor 65.2KB (worst, trend 41→54→56→61→62→65) + inv-codebase 47 + reviewer 43.5 + impl-be 33 over 30KB cap.

State THẬT cuối S69

Mig 53 · 88 bảng · 306 test (45D+261I) · 68 gotcha · menu 54 · bundle admin BgNCjwsG/user CBvh0vtf (Run #308).

🔴 NEXT

  • Anh/anh Kiệt UAT: (1) cấu hình "Ngưỡng giá trị gói CEO" Workflow Designer + test phiếu < / ≥ ngưỡng; (2) test cờ gấp PRO/CCM → badge + notify CEO; (3) xác nhận quy trình đặt CCM(CostControl)-trước-CEO + CEO = role Director (đích notify).
  • C (chuyển phiếu→dự án) chờ anh Kiệt spec form.
  • Em: curate cicd-monitor 65.2KB P1 · doc-flush docs/CLAUDE.md full + schema-diagram §16+ Mig 32-53 (monthly 2026-07-01).
  • Ops của anh (giữ S58/S59): tzutil VPS · anh Chương email typo · 5 real staff password · gán CNTT lock nv.cao/nv.truong.