Files
sys-analysis-design/.claude/skills/sad-bid/SKILL.md
Leonard-ThindPad-P50 c81f249920 init git
2026-09-08 10:26:21 +07:00

41 lines
7.3 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.

---
name: sad-bid
description: Lập bộ hồ sơ dự thầu dự án CNTT hoàn chỉnh từ tài liệu SAD — ma trận đáp ứng HSMT, danh mục chức năng/tính năng, sơ đồ hoạt động, tech stack, ước lượng MM (WBS bottom-up + Use Case Points, tính bằng code), chi phí, kế hoạch/timeline/staffing, đề xuất tài chính, checklist hồ sơ pháp lý — qua workflow generate-bid.js với cổng phê duyệt từng stage và reviewer độc lập. Dùng khi người dùng nói "làm hồ sơ thầu", "hồ sơ dự thầu", "đề xuất kỹ thuật/tài chính", "ước lượng MM", "báo giá dự án", "kế hoạch triển khai cho thầu".
---
# Hồ sơ thầu từ SAD — quy trình có cổng phê duyệt
Bạn (main assistant) điều phối & làm gatekeeper. Agent viết, code tính, **con người duyệt từng stage và điền số liệu thương mại**. Cấu trúc chuẩn & quy tắc: `references/dossier-structure.md`. Engine: `Workflow({ scriptPath: "<abs>/.claude/workflows/generate-bid.js", args })` — **một stage mỗi lần gọi**.
## `args`
| Tham số | Ý nghĩa |
|---|---|
| `stage` | `intake` → `technical` → `estimate` → `plan` → `financial` → `assemble` → `deck` → `export` → `review` |
| `targets` | (export, tuỳ chọn) `[{html, pdf, kind, optional}]` — mặc định `index.html → HO-SO-THAU.pdf` và `deck.html → deck.pdf` (optional) |
| `date` | ngày hôm nay `YYYY-MM-DD` (bắt buộc) |
| `pricing` | object lấy từ frontmatter `bid/bid-config.md` (roles, mdPerMM, hoursPerDay, hoursPerUCP, overheadMode/Pct/Role, contingencyPct, vatPct, currency, rateCard, nonLabor, teamSize, targetMonths, parallelEfficiency, projectStartDate, projectDeadline, ucpVarianceThresholdPct) — **bắt buộc ở stage estimate** |
| `notes` | ghi chú người duyệt khi chạy lại một stage |
| `bidDir`, `sadFile`, `sectionsDir`, `briefFile` | đường dẫn (mặc định `bid/`, `docs/SAD.md`, `docs/sections`, `docs/00-project-brief.md`) |
## Bước 0 — Điều kiện & thông tin thương mại
1. `docs/SAD.md` phải có (không ⇒ đề nghị chạy `sad-pipeline` consolidate; chạy từ sections được nhưng cảnh báo). Section chưa `approved` ⇒ hồ sơ là **bản nháp nội bộ**, nói rõ.
2. Tạo `bid/inputs/` và hỏi người dùng có HSMT/RFP không → đặt file vào đó, ghi `rfpFiles`. Không có ⇒ pipeline dùng cấu trúc mặc định + tự đối chiếu theo FR.
3. Chưa có `bid/bid-config.md` ⇒ copy `bid-config.template.md`. Hỏi (≤4 câu/lượt, ≤3 lượt, không hỏi lại điều đã có): bên dự thầu/bên mời thầu/gói thầu/nguồn vốn; deadline nộp & ngày bắt đầu & deadline thực hiện; **rate card theo vai trò & VAT & currency** (không có ⇒ để 0 → placeholder, giá sẽ "tạm tính"); chi phí phi nhân công đã biết; teamSize/targetMonths; hồ sơ năng lực sẵn có (companyDocs); nhân sự chủ chốt. Ghi vào config bằng Edit.
## Vòng lặp stage — luôn: chạy → trình bày trung thực → hỏi **Duyệt / Sửa (ghi chú) / Dừng** → Duyệt mới sang stage kế
1. **intake** (`bid-analyst`) → trình: tiêu chí chấm & trọng số, yêu cầu bắt buộc & mức đáp ứng, `gaps` (yêu cầu SAD không đáp ứng — **quyết định của người dùng**: bổ sung giải pháp, chấp nhận "một phần", hay không dự thầu), checklist tài liệu Phần A với trạng thái, cấu trúc HSMT quy định (nếu có).
2. **technical** (`bid-technical-writer`) → trình: mục đã viết, sơ đồ, tech stack, `uncoveredMandatory` (phải rỗng), placeholders, keyFacts.
3. **estimate** (`bid-estimator` + **code tính**) → truyền `pricing`. Trình: số hạng mục, `uncovered` FR, bảng MM theo vai trò, dự phòng, overhead, **grandMM**, đối chiếu UCP & `variancePct` (vượt ngưỡng ⇒ khuyến nghị xem lại hạng mục), chi phí (`missingRates`/`missingAmounts` ⇒ giá tạm tính), timeline (số tháng, teamSize suy ra hay cấu hình, `deadlineFit`), `warnings`. **Đây là gate quan trọng nhất**: người dùng xác nhận đơn giá, giả định năng suất, mức dự phòng, teamSize trước khi đi tiếp; sửa config ⇒ chạy lại estimate (số liệu mới ghi vào `bid/estimate.computed.json`).
4. **plan** (`bid-planner`) → trình: giai đoạn/mốc/ngày, peak headcount, `deadlineFits` & phương án tăng tốc, placeholders. Nếu người dùng muốn đổi teamSize/ngày bắt đầu ⇒ sửa config, **chạy lại estimate rồi plan** (số phải đồng bộ).
5. **financial** (`bid-financial-writer`) → trình: tổng trước/sau VAT, `missingRates`/`missingAmounts`, mốc thanh toán ↔ mốc B7, placeholders.
6. **assemble** (`bid-builder`) → trình: `sectionsMissing` (phải rỗng), `checks`, `priceConsistentA1C5`, placeholdersCount; có thể publish `bid/artifact.html` (Artifact, favicon 📁) để người duyệt xem trực quan trước khi xuất PDF.
7. **deck** (`bid-deck-builder`) → trình: `slideCount` (15–25), danh sách slide & nguồn, `numbersUsed`, `checks`, placeholdersCount; có thể publish `bid/deck-artifact.html` để xem. Duyệt kịch bản/nhấn mạnh theo tiêu chí chấm trước khi export.
8. **export** (`bid-exporter`) → trình: `browser` đã dùng, từng PDF (`pages`, `sizeKB`, `mermaidRendered/mermaidExpected`, `outline`), `warnings`. `blocked=true` (không có Edge/Chrome) ⇒ đưa `manualInstructions` cho người dùng. Mermaid chưa render đủ ⇒ chạy lại export; lỗi thuộc HTML ⇒ quay lại `assemble`/`deck` với `notes`.
9. **review** (`bid-reviewer`) → trình: `verdict`, `canSubmit`, `uncoveredMandatory`, `numberMismatches`, `leaks`, `placeholders`, `exportChecks`, findings theo `target`. Định tuyến sửa theo `target` (chạy lại stage đó với `notes`, rồi các stage sau phụ thuộc: sửa estimate ⇒ plan, financial, assemble, deck, export; sửa technical ⇒ assemble, deck, export; sửa plan ⇒ financial (C6), assemble, deck, export; sửa assemble/deck ⇒ export) và `review` lại; tối đa 2 vòng, sau đó báo người dùng.
## Bàn giao
**Bộ nộp:** `bid/HO-SO-THAU.pdf` (hồ sơ in hoàn chỉnh A4, có bookmark theo mục, số trang) và `bid/deck.pdf` (slide thuyết trình 16:9); **bản nguồn:** `bid/HO-SO-THAU.md`, `bid/index.html`, `bid/deck.html`; checklist Phần A với việc còn phải đính kèm (giấy tờ công ty do người dùng chuẩn bị). PDF được xuất tự động bằng Edge/Chrome headless có sẵn trên máy; nếu máy khác không có trình duyệt Chromium, exporter trả hướng dẫn in thủ công. Chỉ nói **"nộp được"** khi `canSubmit = true`; còn placeholder/`missingRates` ⇒ "bản nháp chờ điền". Nhắc: SAD và `estimate.json` (lý giải nội bộ) **không nộp** — chỉ nộp hồ sơ đã ráp; kiểm tra hiệu lực văn bản pháp lý tại thời điểm nộp.
## Không được
Bỏ gate · tự điền đơn giá/thuế/tên/ngày · để agent cộng số (chỉ code) · sửa nội dung thay agent (trừ frontmatter trạng thái) · nộp/publish khi còn `leaks` hoặc yêu cầu bắt buộc chưa đáp ứng.