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

53 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (ProcurementByPro, CostControlByCcm, Admincả 2, khácForbidden) + 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 415456616265) + 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ếudự á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.