← Về thư mục
📄 / / projects / fsppm / econ_sim / docs / WORKFLOW.md

WORKFLOW.md: Quy trình Phát triển & Mở rộng EconSim (Vi mô & Vĩ mô)

A. Thêm một module mới (từ đầu)

Bước 1: Chọn đúng NotebookLM theo nhánh kiến thức

Vì giới hạn context ngữ nghĩa, kiến thức Vi mô và Vĩ mô nằm ở 2 notebook riêng: • Nếu làm module Vi mô → truy vấn notebook e8a30630-0df2-4932-8740-9ffe7d8882bc (Kinh tế học vi mô 1 - MPP28) • Nếu làm module Vĩ mô → truy vấn notebook 99090327-f66b-4d8d-8b9e-a3c00acb599f (Kinh tế học vĩ mô - MPP28) • Nếu làm module Cầu nối (Bridge) kết nối vi mô và vĩ mô → truy vấn lần lượt cả 2 notebook để lấy đúng ký hiệu và giả định của hai bên.

NLM=/opt/ai-os/products/ceo/integrations/notebooklm-mcp-cli/.venv/bin/nlm

# Ví dụ tra cứu Vi mô:
$NLM notebook query --timeout 180 e8a30630-0df2-4932-8740-9ffe7d8882bc \
  "Trích xuất công thức, hình vẽ, số liệu của [chủ đề] trong giáo trình PR hoặc SAB. Không dùng gạch ngang."

# Ví dụ tra cứu Vĩ mô:
$NLM notebook query --timeout 180 99090327-f66b-4d8d-8b9e-a3c00acb599f \
  "Trích xuất phương trình, đồ thị, cơ chế dịch chuyển của [chủ đề] trong giáo trình Mankiw hoặc Krugman. Không dùng gạch ngang."

Bước 2: Kiểm tra Engine hiện có

• Đọc src/engine/shared/glossary.ts để lấy đúng ký hiệu chuẩn (I, Px, MRS, U cho vi mô; Y, r, i, P, e, k cho vĩ mô). • Kiểm tra src/engine/micro/ hoặc src/engine/macro/ xem đã có hàm tính toán cho mô hình này chưa. • Nếu chưa có → viết hàm thuần túy vào src/engine/<domain>/ trước, kèm unit test trong tests/engine/.

Bước 3: Kiểm tra xem có trùng cấu trúc với module đã có không

• Đọc src/scenarios/registry.ts. • Nếu tình huống mới có cùng hệ phương trình với một module đã có (chỉ khác bối cảnh câu chuyện hoặc bộ tham số, ví dụ Quỹ ủy thác giáo dục và Tem phiếu thực phẩm, hoặc thuế đánh vào người mua và thuế đánh vào người bán) → thêm làm một preset mới trong module hiện có. • Chỉ khi khác cấu trúc toán học mới tạo thư mục mới tại src/scenarios/<domain>/<category>/<module_name>/.

Bước 4: Viết module theo hợp đồng defineScenario

Tạo 2 file trong thư mục module: • index.ts: khai báo meta (kèm domain, notebook_id, related_scenarios nếu có), params, presets, hàm model(params) gọi engine, và hàm graph(result) trả về danh sách phần tử SVG. • explain.tsx: component giải thích lý thuyết và bảng đối sánh, lấy 100% số liệu động từ result.

Bước 5: Đăng ký vào Registry & Viết Test Bất biến

• Thêm module vào src/scenarios/registry.ts. • Tạo tests/scenarios/<module_name>.test.ts kiểm tra các bất biến kinh tế trên toàn dải giá trị của thanh trượt. • Chạy npm test và npm run build.

B. Clone và Tối ưu hóa một module có sẵn (từ Gemini hoặc file HTML rời)

Khi Nhi đưa một file HTML hoặc đoạn code mô phỏng đã làm sẵn:

Bước 1: Lưu bản gốc vào reference/

Lưu nguyên vẹn vào reference/<ten_file>.html để làm mốc đối chiếu.

Bước 2: Chẩn đoán 4 tầng

  1. Mô hình toán: Tìm các công thức trong code, kiểm tra xem hàm thỏa dụng / hàm cung cầu / phương trình IS LM có thật sự sinh ra hình vẽ trên màn hình không, hay code đang đặt tọa độ bằng tay.
  2. Lỗi cấu trúc: Kiểm tra xem có hàm trùng tên, biến toàn cục đè nhau, hoặc văn bản ghi cứng số liệu không.
  3. Ngữ nghĩa kinh tế: Đối chiếu ký hiệu và kết luận với giáo trình trên NotebookLM.
  4. Điểm sáng giao diện: Giữ lại các bố cục trực quan, kịch bản mẫu (presets), bảng đối sánh và bước tính chi tiết.

Bước 3: Hiệu chỉnh toán học (nếu bản gốc lệch)

Chạy thử bằng Python hoặc Vitest để chọn bộ tham số và hàm chuẩn xác sao cho: • Nghiệm toán học từ solver khớp hoàn toàn với kết luận lý thuyết trong sách. • Khi kéo thanh trượt qua các giá trị biên (ngưỡng ràng buộc, ngưỡng giải pháp góc, ngưỡng hòa vốn), cả đồ thị lẫn lời giải đều tự động chuyển trạng thái hợp lý.

Bước 4: Ánh xạ vào kiến trúc EconSim

• Bỏ toàn bộ lệnh vẽ Canvas thủ công, thay bằng các khối SVG trong src/graph/. • Nếu file cũ có một kiểu hiển thị mới rất hữu ích (ví dụ: đồ thị 2 tầng xếp dọc như Đường ngân sách ở trên và Đường cầu ở dưới, hoặc IS LM ở trên và AD AS ở dưới) → nâng cấp thành một layout chung trong src/ui/ và src/graph/ để mọi module sau đều dùng lại được.

C. Context tối thiểu khi bàn giao giữa các phiên / các Agent

Agent nhận việc tiếp theo chỉ cần đọc: 1. AGENTS.md (quy tắc kiến trúc & hợp đồng module) 2. docs/APP_CONTEXT.md (trạng thái hiện tại & liên kết 2 notebook) 3. docs/IMPLEMENTATION_PLAN.md (danh sách task chi tiết, interface, tiêu chí nghiệm thu) 4. docs/MODULE_MIGRATION.md (đặc tả toán học của các module cần chuyển đổi)