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