Appearance
Tổng quan hệ thống
Cùng mô hình với Nemo12: một monorepo npm workspaces, mỗi miền là một Cloudflare Worker.
┌──────────────────────────┐
người bệnh / │ www.hoatieu3.com │ apps/web — React + Vite, Worker phục vụ assets
người nhà / ───▶ │ (hoatieu3.com → 301 www)│
bác sĩ được mời └────────────┬─────────────┘
│ fetch (CORS: *.hoatieu3.com)
┌────────────▼─────────────┐
│ api.hoatieu3.com │ workers/api — Hono + zod-openapi
│ ┌─────────────────────┐ │
│ │ HOATIEU Engine │ │ hàm thuần, không I/O, có unit test
│ └─────────────────────┘ │
│ D1 `hoatieu3` R2 `hoatieu3-documents` Cron 08:00 VN
└──────────────────────────┘
┌──────────────────────────┐
│ docs.hoatieu3.com │ apps/docs — VitePress, assets tĩnh
└──────────────────────────┘Cấu trúc thư mục
hoatieu3.com/
├── apps/
│ ├── web/ www.hoatieu3.com
│ └── docs/ docs.hoatieu3.com
├── workers/
│ └── api/ api.hoatieu3.com
│ └── src/engine/ HOATIEU Engine
├── migrations/ D1 schema + seed Service Graph
└── .github/workflows/ CI: typecheck → test → build → migrate → deploy7 engine ↔ mã nguồn
| Engine | Nhiệm vụ | Hiện thực |
|---|---|---|
| 1. Intake | Hiểu bệnh nhân cần gì | engine/intake.ts — suy chuyên khoa, dịch vụ chẩn đoán |
| 2. Patient Profile | Xây hồ sơ | patients, medical_history, medical_documents |
| 3. Contact | Người nhà / người liên hệ | contacts + /v1/cases/{id}/contacts |
| 4. Navigation | Xác định lộ trình, trạng thái | navigation_cases.state, engine/navigate.ts |
| 5. Matching | Patient → services | engine/matching.ts |
| 6. Recommendation | Next Best Action | engine/recommendation.ts |
| 7. Follow-up | Theo dõi sau khi rời viện | follow_ups + cron |
| (Safety) | Chặn trước mọi engine | engine/safety.ts |
Vì sao Cloudflare
- Một tài khoản, ba miền, DNS + TLS tự động qua
custom_domain. - D1 (SQLite) đủ cho giai đoạn đầu; R2 cho file y tế, không phí egress.
- Edge gần người dùng Việt Nam.