# QUY CHUẨN KIẾN TRÚC & QUY TRÌNH NGHIỆP VỤ: PHÂN BỔ VẬT TƯ ĐẦU VÀO DỰA TRÊN DỰ TOÁN (BOQ) VÀ HẠCH TOÁN XUẤT THẲNG CHÂN CÔNG TRƯỜNG (DIRECT-TO-SITE)

**Phiên bản:** 1.0 (Chính thức)  
**Ngày ban hành:** 03/09/2026  
**Chủ thể thẩm định:** Technical Director & Kiến trúc sư trưởng Hệ thống ERP DSCons  
**Đơn vị áp dụng:** Công ty TNHH Xây Dựng Định Sơn (MST: `0202111150`)  
**Mã tài liệu:** `SOP-DSCONS-AEC-BOQ-ALLOC-2026`

---

## 1. BỐI CẢNH THỰC TẾ & BẢN SẮC VẬN HÀNH ĐỊNH SƠN

### 1.1. Triệt Tiêu Hội Chứng "Kho Ảo Trên Giấy"
Trong các mô hình ERP kinh viện dành cho tập đoàn quy mô lớn, vật tư mua về thường qua quy trình 2 bước:
$$\text{Mua vào: Nợ TK 152 (Kho) / Có TK 331} \longrightarrow \text{Xuất dùng: Nợ TK 621 (Chi phí CT) / Có TK 152}$$

Tuy nhiên, tại **Công ty TNHH Xây Dựng Định Sơn (Nhà thầu thi công tinh gọn - Lean AEC Contractor)**:
1. **Thực tế thương trường:** Vật tư (thép, xi măng, cát, đá, cọc, tôn) có giá trị rất cao và cồng kềnh. Doanh nghiệp ký hợp đồng giao hàng **thẳng từ nhà máy/mỏ cát/đại lý đến tận chân công trường (Direct-to-Site / Drop-shipping)**.
2. **Chi phí cấm kỵ:** Nếu đưa vật tư về kho trung gian rồi bốc xếp, vận chuyển nội bộ lần thứ hai ra công trường, chi phí vận tải phụ và hao hụt sẽ "ăn" sạch biên lợi nhuận của gói thầu.
3. **Hệ quả của TK 152:** Ép buộc nhập kho TK 152 sẽ tạo ra **"Kho ảo trên giấy"**, làm sai lệch giá trị hàng tồn kho thực tế, sinh ra hàng loạt phiếu nhập - xuất kho vô nghĩa và không phản ánh đúng chi phí tức thời của dự án.

> **QUY TẮC CỐT LÕI SỐ 1:**  
> Toàn bộ vật tư giao thẳng chân công trình được hạch toán trực tiếp vào chi phí sản xuất xây lắp:  
> **$\text{Nợ TK 621\_Chi\_tiết\_Dự\_án (hoặc TK 154)} \quad / \quad \text{Nợ TK 1331} \quad / \quad \text{Có TK 331}$**  
> Tuyệt đối **KHÔNG** đi qua TK 152 đối với vật tư thi công giao thẳng. Căn cứ hợp lệ gồm: **Hóa đơn điện tử GDT + Biên bản bàn giao/giao nhận tại chân công trình (Phiếu cân/Phiếu xuất của bên bán)**.

---

### 1.2. Thấu Hiểu Con Người: Giải Quyết "Điểm Nghẽn Hiện Trường"
* Đội ngũ hiện trường (Chỉ huy trưởng, cai thầu, đội trưởng thi công, lái xe ben) là những người bám sắt thép, bê tông ngoài trời, không có thói quen thao tác phần mềm hay chụp ảnh phiếu cân thời gian thực.
* Nếu bắt công trường nhập liệu $\rightarrow$ chắc chắn dẫn tới **Điểm nghẽn vận hành (Human Bottleneck)**, làm chậm dòng dữ liệu và gây xung đột nội bộ.
* **Chiến lược tiếp cận:** **Chuyển gánh nặng nhập liệu từ Công trường sang Hệ thống Trí tuệ Nhân tạo (AI Engine tại Văn phòng điều hành)**. AI đọc trực tiếp Hồ sơ Dự toán (BoQ), Hợp đồng thi công và Tiến độ dự án để tự động phân bổ chi phí vật tư từ hóa đơn GDT vào đúng dự án.

---

## 2. PHÂN ĐỊNH BẢN CHẤT DỮ LIỆU: "DỮ LIỆU THẲNG" VS "DỮ LIỆU VÒNG"

Để hệ thống xử lý chính xác và không sinh ảo giác (hallucination), mọi giao dịch tài chính - vật tư phải được định tuyến qua ma trận phân loại:

```mermaid
flowchart TD
    ROOT["GIAO DỊCH ĐẦU VÀO TỪ GDT & NGÂN HÀNG"] --> CLASSIFY{"Phân Loại Tính Chất Dữ Liệu"}
    
    CLASSIFY -->|"DỮ LIỆU THẲNG (Quan hệ 1:1 Tuyến tính)"| STRAIGHT["1. Hóa đơn vật tư đặc thù cho 1 Dự án rõ ràng<br>2. Lệnh UNC khớp đúng 1 Hóa đơn<br>3. Khách chuyển tiền ghi rõ mã hợp đồng"]
    STRAIGHT --> AUTO_STRAIGHT["AI Tự Động Hóa 100% Ghi Sổ Kép<br>(Không cần can thiệp)"]
    
    CLASSIFY -->|"DỮ LIỆU VÒNG (Phi tuyến tính, Phức hợp)"| CURVED["1. 1 Hóa đơn vật tư dùng chung cho nhiều công trình<br>2. 1 UNC thanh toán nhiều HĐ, lệch tiền cấn trừ<br>3. Tạm ứng mờ hồ, khách hủy cọc hoàn tiền<br>4. Vật tư mua về qua gia công nội bộ (Xưởng thép)"]
    CURVED --> ENGINE_CURVED["ĐỘNG CƠ PHÂN BỔ DỰ TOÁN & TRẠM ĐỆM<br>(BoQ Allocation Engine + Clearing Ledger)"]
    ENGINE_CURVED --> HITL["AI Đề Xuất 90% + Giám Đốc Duyệt 1 Chạm 10%"]
```

---

## 3. KIẾN TRÚC ĐỘNG CƠ PHÂN BỔ DỰ TOÁN (BOQ ALLOCATION ENGINE)

### 3.1. Mô Hình Số Hóa Nhu Cầu Vật Tư Dự Toán (BoQ Fingerprinting)
Mỗi dự án thi công của Định Sơn trong hệ thống (`projects`) được gán một **Vân tay Nhu cầu Vật tư ($MR$)** trích xuất từ Dự toán thiết kế thi công đã duyệt:

$$BoQ\_Quota_{(P, M)} = \text{Tổng khối lượng định mức vật tư } M \text{ của dự án } P$$
$$Invoiced\_So\_Far_{(P, M)} = \text{Khối lượng vật tư } M \text{ đã ghi nhận hóa đơn vào dự án } P$$
$$Remaining\_Quota_{(P, M)} = \max\left(0, \ BoQ\_Quota_{(P, M)} \times (1 + \alpha) - Invoiced\_So\_Far_{(P, M)}\right)$$

*Trong đó:*
* $\alpha$: Hệ số dung sai hao hụt thi công cho phép theo định mức Nhà nước (thường từ $2,5\% - 5\%$).
* Nếu $Remaining\_Quota_{(P, M)} = 0$, dự án đã dùng đủ định mức vật tư đó.

---

### 3.2. Thuật Toán Đối Khớp Đa Chiều 3 Lớp (3-Tier Multi-Dimensional Matching)

Khi một hóa đơn đầu vào có các dòng hàng hóa thực tế được cào về từ GDT, AI chạy tuần tự qua 3 tầng lọc:

```mermaid
sequenceDiagram
    autonumber
    participant GDT as Hóa Đơn GDT
    participant L1 as Tầng 1: Quy Cách Đặc Thù
    participant L2 as Tầng 2: Giai Đoạn Thi Công
    participant L3 as Tầng 3: Cân Đối Hạn Mức BoQ
    participant DB as Sổ Cái Kế Toán Dự Án

    GDT->>L1: Dòng hàng (Tên, Quy cách, ĐVT, Số lượng)
    Note over L1: Lọc theo DNA công trình:<br>Dân dụng vs Thủy lợi vs Cơ giới
    L1-->>L2: Danh sách Dự án ứng viên phù hợp
    Note over L2: Lọc theo Tiến độ Gantt thực tế:<br>Móng vs Thân kết cấu vs Hoàn thiện
    L2-->>L3: Dự án đủ điều kiện tiếp nhận
    Note over L3: Chia tỷ lệ Remaining_Quota<br>nếu 1 HĐ cấp nhiều công trình
    L3->>DB: Ghi sổ Nợ TK 621_Chi_tiết_Dự_án / Nợ 1331 / Có 331
```

#### Tầng 1: Nhận Diện Quy Cách Kỹ Thuật Đặc Thù (Spec & Grade Matching)
* **Quy chuẩn Thủy lợi & Đê điều (Ví dụ: Cống Bến Kem, Kè Đa Độ):**
  - Vật tư đặc trưng: Thép thanh vằn D16–D25 (CB400), cừ Larsen IV, cọc cừ tràm L=2.5m, xi măng bền sunfat/chịu mặn PCB40, rọ đá mạ kẽm bọc nhựa, vải địa kỹ thuật không dệt, bạt xác rắn, đá hộc.
  - *Quy tắc phủ định:* Tuyệt đối không phân bổ gạch xây không nung, gạch men lát nền, tôn mạ màu, sơn tường dân dụng vào công trình cống thủy lợi.
* **Quy chuẩn Xây dựng Dân dụng (Ví dụ: Nhà văn hóa Thôn Đại Thắng):**
  - Vật tư đặc trưng: Gạch không nung / gạch tuynel mác 75, cát xây trát, xi măng PCB30, tôn mạ màu 0.45mm, thép hộp kẽm $40\times80\times1.8$, ngói lợp, trần thạch cao, ống nhựa PVC/PPR sinh hoạt, dây cáp điện Cu/PVC.
  - *Quy tắc phủ định:* Tuyệt đối không phân bổ cừ Larsen hay rọ đá vào công trình nhà văn hóa.
* **Quy chuẩn Logistics Xe Ben & Ca Máy (Trụ Cột 2 & 3):**
  - Dầu DO 0.05S-II (Petrolimex), lốp xe Howo $12.00\text{R}20$, nhớt động cơ, phụ tùng thủy lực $\rightarrow$ Định tuyến thẳng vào **Trụ Cột 2 (TK 154_LOGISTICS)** hoặc **Trụ Cột 3 (TK 623)**, không gán vào vật tư xây lắp công trình.

#### Tầng 2: Đối Khớp Giai Đoạn Thi Công (Milestone & Schedule Matching)
Hệ thống đối chiếu ngày phát hành hóa đơn (`issue_date`) với Nhật trình tiến độ WBS (`erp_project_wbs`):
* **Giai đoạn Xử lý Nền móng & Hạ tầng ngầm:** Ưu tiên hấp thụ cát san lấp, đá 4x6 lót móng, cọc bê tông, cừ tràm.
* **Giai đoạn Kết cấu Thân:** Ưu tiên hấp thụ cốt thép xây dựng, ván khuôn, bê tông thương phẩm mác 200/250, gạch xây.
* **Giai đoạn Hoàn thiện & Mái:** Ưu tiên hấp thụ tôn mạ màu, xà gồ thép hộp, sơn bả, thiết bị điện nước.

#### Tầng 3: Thuật Toán Cân Đối Hạn Mức Còn Lại (Remaining Quota Proportional Split)
Khi một hóa đơn số lượng lớn (ví dụ: $100\text{ tấn}$ xi măng hoặc $300\text{ m}^3$ cát) cung cấp cho nhiều công trình cùng lúc:
1. Xác định tập hợp các dự án $\{P_1, P_2, \dots, P_k\}$ đang cùng có nhu cầu vật tư $M$ tại thời điểm hóa đơn về.
2. Lấy hạn mức còn thiếu của từng dự án: $R_i = Remaining\_Quota_{(P_i, M)}$.
3. Tính trọng số phân bổ cho dự án $P_i$:
   $$w_i = \frac{R_i}{\sum_{j=1}^k R_j}$$
4. Khối lượng vật tư phân bổ cho dự án $P_i$:
   $$Q_i = Q_{\text{Hóa đơn}} \times w_i$$
5. Giá trị chi phí hạch toán vào dự án $P_i$:
   $$\text{Chi phí Dự án } i = Q_i \times \text{Đơn giá Hóa đơn}$$

---

## 4. QUY TRÌNH HẠCH TOÁN KẾ TOÁN XUẤT THẲNG CHÂN CÔNG TRƯỜNG

### 4.1. Bút Toán Chuẩn Mực Giao Thẳng (Zero Virtual Warehouse)
Căn cứ vào kết quả phân rã từ BoQ Allocation Engine:

```
Nợ TK 621_DAITHANG:  Giá trị vật tư phân bổ cho Nhà văn hóa Đại Thắng
Nợ TK 621_BENKEM:    Giá trị vật tư phân bổ cho Cống Bến Kem
Nợ TK 621_DADO:      Giá trị vật tư phân bổ cho Đê kè Đa Độ
Nợ TK 1331:          Thuế GTGT đầu vào được khấu trừ
    Có TK 331:       Tổng giá trị thanh toán phải trả Nhà cung cấp
```

### 4.2. Xử Lý Gia Công Nội Bộ (Thép $\rightarrow$ Vì Kèo / Cát Đá $\rightarrow$ Cống Đúc Sẵn)
Đối với trường hợp vật tư phải qua xưởng cơ giới/trạm đúc bãi sông Văn Úc của Định Sơn gia công:
* **Bước 1 (Vật tư về xưởng):** $\text{Nợ TK 152 (NVL tại xưởng)} / \text{Nợ TK 1331} / \text{Có TK 331}$.
* **Bước 2 (Gia công chế tạo):** $\text{Nợ TK 154\_GIA\_CONG} / \text{Có TK 152, TK 622 (Thợ hàn), TK 627 (Máy xưởng)}$.
* **Bước 3 (Nhập kho bán thành phẩm):** $\text{Nợ TK 155 (Vì kèo dầm thép / Cống đúc)} / \text{Có TK 154\_GIA\_CONG}$.
* **Bước 4 (Cẩu ra lắp dựng tại công trường):** $\text{Nợ TK 621\_DựÁn} / \text{Có TK 155}$.

---

## 5. CÁC HÀNG RÀO KIỂM SOÁT AN TOÀN TÀI CHÍNH & PHÁP LÝ (SAFETY GUARDRAILS)

```mermaid
graph TD
    INVOICE["Hóa Đơn Vật Tư Mới"] --> G1{"Guard 1: Đơn Giá vs Sở Xây Dựng"}
    G1 -->|Đơn giá > +15% TB 478| ALERT1["BÁO ĐỘNG ĐỎ: Kê Khống Giá<br>(Yêu cầu Kế toán Nam thẩm tra)"]
    G1 -->|Hợp lý| G2{"Guard 2: Hạn Mức Dự Toán BoQ"}
    
    G2 -->|Vượt Quá > 105% BoQ| ALERT2["CẢNH BÁO VƯỢT DỰ TOÁN:<br>Nguy cơ thất thoát tại hiện trường"]
    G2 -->|Trong hạn mức| G3{"Guard 3: Tỷ Trọng Vật Tư MR/T"}
    
    G3 -->|MR/T > 65%| ALERT3["CẢNH BÁO LỆCH KẾT CẤU GÓI THẦU"]
    G3 -->|Đạt chuẩn| APPROVE["TỰ ĐỘNG PHÊ DUYỆT & GHI SỔ KÉP"]
```

1. **Hàng Rào 1: Kiểm soát Đơn giá Đầu vào (State Price Benchmark Guard)**
   - Tự động so sánh đơn giá hóa đơn với Công bố giá Liên Sở Xây Dựng - Tài Chính Hải Phòng (TB 478/TB 558).
   - Nếu $\Delta_{\text{Price}} > +15\%$, gắn cờ `tax_risk_level = 'HIGH'`, chặn tự động ghi sổ để Kế toán trưởng thẩm tra.
2. **Hàng Rào 2: Kiểm soát Vượt Định mức Dự toán (BoQ Overrun Guard)**
   - Khi tổng khối lượng vật tư đã về vượt quá $105\%$ khối lượng dự toán trúng thầu: Hệ thống phát cảnh báo đỏ lên Dashboard Ban Giám Đốc để kiểm tra hiện tượng thi công sai thiết kế hoặc thất thoát vật tư.
3. **Hàng Rào 3: Kiểm soát Tỷ trọng Ngân sách ($MR / T$ Ratio Guard)**
   - Duy trì tỷ trọng chi phí vật tư an toàn trong khoảng $40\% \le MR/T \le 65\%$.
   - Nếu $MR/T > 75\%$, kích hoạt cảnh báo rủi ro bóc tách thiếu chi phí nhân công, ca máy.
4. **Hàng Rào 4: Kiểm soát Pháp lý Thanh toán Không dùng tiền mặt**
   - Mọi hóa đơn có giá trị $\ge 20.000.000\text{ VNĐ}$ bắt buộc gắn cờ `BAT_BUOC_CHUYEN_KHOAN_UNC`. Cấm mọi hành vi thanh toán tiền mặt để bảo vệ quyền khấu trừ thuế GTGT.

---

## 6. ĐẶC TẢ CƠ SỞ DỮ LIỆU POSTGRESQL (SCHEMA CONTRACT)

Để hiện thực hóa quy trình này trong hệ thống mã nguồn backend FastAPI, bổ sung 2 bảng cơ sở dữ liệu chuyên trách:

```sql
-- 1. Bảng Định Mức Vật Tư Dự Toán (BoQ Material Quotas)
CREATE TABLE IF NOT EXISTS erp_project_boq_materials (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
    wbs_id UUID REFERENCES erp_project_wbs(id) ON DELETE SET NULL,
    material_code VARCHAR(100) NOT NULL,
    material_name VARCHAR(255) NOT NULL,
    material_group VARCHAR(100) NOT NULL, -- CEMENT, STEEL, SAND, STONE, BRICK, ROOFING...
    unit VARCHAR(50) NOT NULL,
    boq_quantity NUMERIC(18, 4) NOT NULL DEFAULT 0.0000,
    unit_price_boq_vnd NUMERIC(18, 4) NOT NULL DEFAULT 0.0000,
    total_budget_boq_vnd NUMERIC(18, 4) NOT NULL DEFAULT 0.0000,
    invoiced_quantity NUMERIC(18, 4) NOT NULL DEFAULT 0.0000,
    invoiced_amount_vnd NUMERIC(18, 4) NOT NULL DEFAULT 0.0000,
    remaining_quantity NUMERIC(18, 4) GENERATED ALWAYS AS (GREATEST(0, boq_quantity - invoiced_quantity)) STORED,
    allowed_loss_percent NUMERIC(5, 2) NOT NULL DEFAULT 3.00, -- Hao hụt định mức 3%
    status VARCHAR(50) NOT NULL DEFAULT 'active',
    created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT uq_project_material UNIQUE (project_id, material_code)
);

-- 2. Bảng Nhật Ký Phân Bổ Dòng Hóa Đơn Trực Tiếp Vào Dự Án (Invoice Direct Allocations)
CREATE TABLE IF NOT EXISTS erp_invoice_item_allocations (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    invoice_id UUID NOT NULL REFERENCES erp_invoices(id) ON DELETE CASCADE,
    invoice_item_id UUID NOT NULL REFERENCES erp_invoice_items(id) ON DELETE CASCADE,
    project_id UUID NOT NULL REFERENCES projects(id) ON DELETE RESTRICT,
    boq_material_id UUID REFERENCES erp_project_boq_materials(id) ON DELETE SET NULL,
    allocated_quantity NUMERIC(18, 4) NOT NULL,
    allocated_amount_before_vat_vnd NUMERIC(18, 4) NOT NULL,
    allocated_vat_amount_vnd NUMERIC(18, 4) NOT NULL,
    allocated_total_amount_vnd NUMERIC(18, 4) NOT NULL,
    allocation_method VARCHAR(50) NOT NULL DEFAULT 'boq_auto', -- 'boq_auto', 'proportional_split', 'manual_override'
    debit_account VARCHAR(50) NOT NULL DEFAULT '621',
    credit_account VARCHAR(50) NOT NULL DEFAULT '331',
    confidence_score NUMERIC(5, 2) NOT NULL DEFAULT 100.00,
    notes TEXT,
    created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX IF NOT EXISTS idx_boq_materials_proj ON erp_project_boq_materials(project_id, material_group);
CREATE INDEX IF NOT EXISTS idx_allocations_inv ON erp_invoice_item_allocations(invoice_id, project_id);
```

---

## 7. QUY TRÌNH DUYỆT 1 CHẠM (HUMAN-IN-THE-LOOP INTERACTION PROTOCOL)

1. Khi AI đạt độ tin cậy $Confidence \ge 85\%$:
   - Hệ thống tự động phân bổ và ghi sổ kép vào dự án.
   - Gửi thông báo tóm tắt vào Dashboard Kế toán và nhật trình hoạt động của AI Agent Minh/Nam.
2. Khi AI gặp trường hợp mơ hồ ($Confidence < 85\%$ hoặc vật tư chưa có trong BoQ):
   - Không được phép đoán mò làm sai lệch số liệu.
   - AI sinh **Thẻ Quyết Định Thông Minh (One-Click Decision Card)** gửi tới Telegram/Dashboard Ban Giám Đốc:
     > *"Hóa đơn 001289 mua 15 tấn đá hộc không có trong BoQ Đại Thắng nhưng phù hợp kè mái Kênh Bến Kem. Đề xuất gán vào DA-KM-BENKEM?"*  
     > **[ĐỒNG Ý (1 CLICK)]** | **[CHỌN DỰ ÁN KHÁC]** | **[GÁN VÀO CHI PHÍ CHUNG 642]**

---

## 8. ĐIỀU KHOẢN TRÁCH NHIỆM & BẢO TRÌ TRI THỨC (ANTI-BUS FACTOR)

* Tài liệu này là **Quy chuẩn bắt buộc (Normative Document)** đối với toàn bộ kỹ sư phần mềm, chuyên gia AI và kế toán viên tiếp quản hệ thống DSCons.
* Mọi chỉnh sửa mã nguồn backend trong `app/modules/invoices/application/` hoặc `app/modules/projects/` bắt buộc phải tuân thủ nghiêm ngặt các nguyên tắc trong tài liệu này: **Tuyệt đối không tái sinh kho ảo, không bắt công trường làm thủ tục giấy tờ thừa, và duy trì tính toàn vẹn 100% của cơ chế ghi sổ kép.**
