Industry Seed Engine
Khởi tạo hệ thống chuẩn bằng 1 lệnh
Kho dữ liệu nền (seed packs) cho 4 ngành công nghiệp. Chọn ngành khi khởi động — hệ thống tự động tạo đầy đủ roles, quy trình, tiêu chuẩn chất lượng, KPI và cấu hình sẵn sàng vận hành.
Triết lý thiết kế
Thay vì hardcode logic theo ngành trong code, toàn bộ sự khác biệt giữa các ngành được lưu dưới dạng dữ liệu cấu hình. Khi user chọn ngành, Seed Engine đọc seed pack và INSERT tất cả vào database trong một transaction. Sau đó user có thể customize mọi thứ.
Roles & permissions · Quy trình sản xuất · Danh mục vật tư & thành phẩm · Loại máy móc thiết bị · Template kiểm tra chất lượng với tiêu chuẩn ngành · KPI với ngưỡng cảnh báo · Vị trí kho · Cost centers
# 1. Chạy seed — xuất ra SQL
node scripts/seed.js --industry=jewelry > seed.sql
# 2. Chạy SQL vào PostgreSQL
psql -U erp_user -d erp_mes_db -f seed.sql
# Hoặc gộp 1 lệnh:
node scripts/seed.js --industry=jewelry | psql -U erp_user -d erp_mes_db
# Xem trước không thực thi (dry run)
node scripts/seed.js --industry=cement --dry-run
# Lưu vào file SQL để review
node scripts/seed.js --industry=steel --output=steel-seed.sql
# Xem danh sách ngành
node scripts/seed.js --list
Cấu trúc Seed Packs
├── manifest.json ← danh sách ngành, metadata
├── _core/ ← dữ liệu chung mọi ngành
│ ├── units-of-measure.json 39 đơn vị đo
│ └── base-roles.json 9 vai trò hệ thống
├── jewelry/
│ └── index.json ← toàn bộ seed data trang sức
├── cement/
│ └── index.json
├── steel/
│ └── index.json
└── footwear/
└── index.json
scripts/
└── seed.js ← CLI runner, zero dependencies
Cấu trúc mỗi industry index.json
{
"meta": { "industry": "JEWELRY", "name": "...", "version": "1.0.0" },
"roles": [ ... ], // Vai trò đặc thù ngành
"cost_centers": [ ... ], // Trung tâm chi phí
"product_categories": [ // Danh mục + sản phẩm/nguyên liệu
{ "code": "...", "items": [ ... ] }
],
"machine_types": [ ... ], // Loại máy móc
"workflow_templates": [ ... ], // Quy trình sản xuất (states + transitions)
"inspection_templates": [ ... ], // Mẫu kiểm tra CL + thông số
"kpi_configs": [ ... ], // KPI + ngưỡng alert
"inventory_locations": [ ... ] // Vị trí kho
}
4 Ngành công nghiệp
Chế tác trang sức vàng bạc đá quý — kiểm soát hao hụt kim loại quý đến 0.01g, truy xuất đá theo chứng chỉ.
Khai thác đá vôi, nung Clinker, nghiền xi măng — tiêu chuẩn TCVN/EN, kiểm soát môi trường và tiêu thụ năng lượng.
Luyện thép EAF, đúc liên tục, cán thép — truy xuất theo Heat Number, Mill Certificate, tiêu chuẩn TCVN/ASTM/JIS.
OEM/ODM giày thể thao — theo dõi theo cặp/size/màu, Material Utilization, Peel Test, tiêu chuẩn OEM.
Hướng dẫn sử dụng
Tất cả các options
| Option | Mô tả | Ví dụ |
|---|---|---|
--industry=<code> | Chọn ngành để seed (bắt buộc) | --industry=jewelry |
--dry-run | Xem trước không xuất SQL | --dry-run |
--output=<file> | Lưu SQL vào file thay vì stdout | --output=init.sql |
--tenant=<id> | Gán tenant_id (default: "default") | --tenant=factory_01 |
--list | Liệt kê tất cả ngành có sẵn | --list |
Tích hợp với backend khởi động
# docker-compose.yml — chạy seed trước khi start app
services:
db-seeder:
image: node:18-alpine
volumes:
- ./seed-packs:/app/seed-packs
- ./scripts:/app/scripts
environment:
- INDUSTRY=jewelry
- PGHOST=postgres
- PGUSER=erp_user
- PGDATABASE=erp_mes
command: >
sh -c "node /app/scripts/seed.js --industry=$$INDUSTRY
| psql -h $$PGHOST -U $$PGUSER $$PGDATABASE"
depends_on:
postgres:
condition: service_healthy
Những gì được tạo ra
| Bảng DB | Mô tả | Jewelry | Cement | Steel | Footwear |
|---|---|---|---|---|---|
units_of_measure | Đơn vị đo (core) | 39 | 39 | 39 | 39 |
roles | Base + industry roles | 17 | 17 | 17 | 17 |
cost_centers | Trung tâm chi phí | 6 | 8 | 8 | 7 |
product_categories | Nhóm danh mục | 5 | 4 | 4 | 5 |
products | Vật tư / Sản phẩm | 33 | 23 | 25 | 36 |
machine_types | Loại máy móc thiết bị | 13 | 14 | 13 | 12 |
workflow_templates | Quy trình sản xuất | 1 | 2 | 1 | 1 |
workflow_states | Trạng thái quy trình | 13 | 9 | 11 | 15 |
workflow_transitions | Chuyển đổi trạng thái | 14 | — | — | 15 |
inspection_templates | Mẫu phiếu kiểm tra | 2 | 3 | 3 | 4 |
inspection_parameters | Thông số QC | 10 | 16 | 14 | 13 |
kpi_configs | Cấu hình KPI + alert | 8 | 10 | 9 | 9 |
inventory_locations | Vị trí kho | 7 | 8 | 7 | 9 |
system_setup | Bản ghi thiết lập hệ thống | 1 | 1 | 1 | 1 |
| Tổng | 169 | 161 | 162 | 183 | |
Thêm ngành mới
Mỗi ngành mới chỉ cần 2 bước:
mkdir seed-packs/pharma
# Tạo seed-packs/pharma/index.json theo cùng cấu trúc
{
"industries": [
// ... các ngành hiện có ...
{
"code": "PHARMA",
"name": "Sản xuất dược phẩm",
"classification": "REGULATED",
"path": "pharma/index.json",
"standards": ["GMP", "FDA 21 CFR Part 11", "ISO 9001"]
}
]
}
Toàn bộ dữ liệu được seed vào các bảng thông thường của PostgreSQL. User có thể thêm/sửa/xóa bất kỳ thứ gì sau khi seed. Seed chỉ là điểm khởi đầu tiêu chuẩn — không phải lock-in.
Seed engine hoàn thành — Hướng A xong
Tiếp theo: Hướng B — Deep dive Bounded Contexts
← Về trang chủ