---
name: aec-cad-takeoff
description: Quy chuẩn bóc tách bản vẽ kỹ thuật CAD (AutoCAD DWG/DXF/PDF), giải mã phông chữ tiếng Việt TCVN3/VNI, cắt khung nhìn Bounding Box không gian thực tế và phân định Xây mới vs Cải tạo. Kích hoạt khi xử lý bản vẽ, đo bóc hình học, chuyển đổi CAD sang SVG/PNG hoặc giải mã chữ CAD.
---

# AEC CAD TAKEOFF & HIGH-FIDELITY DRAWING ENGINE

## 1. Giải Mã Phông Chữ Tiếng Việt CAD (.VnTime / TCVN3 / VNI)
- **Ánh xạ byte TCVN3 chuẩn xác (Triệt tiêu 100% lỗi chính tả ngữ nghĩa)**:
  - `\xb5` = à, `\xb8` = á, `\xb6` = ả, `\xb7` = ã, `\xb9` = ạ
  - `\xa8` = ă, `\xbe` = ắ, `\xbb` = ằ, `\xbc` = ẳ, `\xbd` = ẵ, `\xc6` = ặ
  - `\xa9` = â, `\xca` = ấ, `\xc7` = ầ, `\xc8` = ẩ, `\xc9` = ẫ, `\xcb` = ậ
  - `\xd0` = é, `\xcc` = è, `\xce` = ẻ, `\xcf` = ẽ, `\xd1` = ẹ
  - `\xaa` = ê, `\xd5` = ế, `\xd2` = ề, `\xd3` = ể, `\xd4` = ễ, `\xd6` = ệ
  - `\xdd` = í, `\xd7` = ì, `\xd8` = ỉ, `\xdc` = ĩ, `\xde` = ị
  - `\xe3` = ó, `\xdf` = ò, `\xe1` = ỏ, `\xe2` = õ, `\xe4` = ọ
  - `\xab` = ô, `\xe8` = ố, `\xe5` = ồ, `\xe6` = ổ, `\xe7` = ỗ, `\xe9` = ộ
  - `\xac` = ơ, `\xed` = ớ, `\xea` = ờ, `\xeb` = ở, `\xec` = ỡ, `\xee` = ợ
  - `\xf3` = ú, `\xef` = ù, `\xf1` = ủ, `\xf2` = ũ, `\xf4` = ụ
  - `\xad` = ư, `\xa6` = ư, `\xf8` = ứ, `\xf5` = ừ, `\xf6` = ử, `\xf7` = ữ, `\xf9` = ự
  - `\xfd` = ý, `\xfa` = ỳ, `\xfb` = ỷ, `\xfc` = ỹ, `\xfe` = ỵ
  - `\xae` = đ, `\xa7` = Đ
- **Bắt buộc kiểm tra ngữ nghĩa chuyên ngành**:
  - *"ghi chú"* (không dùng *"ghi chó"*), *"sét / chống sét"* (không dùng *"sẹt"*), *"thép"* (không dùng *"thẹp"*), *"sàn"* (không dùng *"sán"*), *"đá"* (không dùng *"đà"*), *"bể phốt"* (không dùng *"bễ phốt"*).
- **Lọc mã định dạng AutoCAD**: Loại bỏ `%%u`, `%%U` (underline), chuyển `%%c` thành `Ø`, `%%d` thành `°`, `%%p` thành `±`.

## 2. Quy Chuẩn Đồ Họa Vector CAD
- **Độ dày nét vẽ**: Cố định `stroke-width: 1px !important;` kèm `vector-effect: non-scaling-stroke !important;` trên `path, line, polyline`.
- **Tuyệt đối không ép stroke dày lên vùng fill/hatch**: Tránh hiện tượng vón cục màu xanh (cyan blobs) làm che khuất nét vẽ kiến trúc.

## 3. Cắt Khung Nhìn (Bounding Box) & Loại Bỏ Khoảng Trống Rác (Zero-Void)
- **Quét cụm tọa độ Model Space thực tế**: Nhận diện vùng không gian chứa công trình (ví dụ $Y \in [440.000 .. 740.000]$), cắt bỏ các cụm chữ trôi nổi ở đỉnh ($Y \approx 0..50.000$), triệt tiêu các khoảng trống rỗng $>100\text{m}$.
- **Tách phân trang độc lập**: Mỗi trang bản vẽ (Tổng mặt bằng, Mặt bằng kiến trúc, Chi tiết cửa/cột, Kỹ thuật điện/nước, Vệ sinh WC) phải có Bounding Box riêng biệt, không gộp thành 1 khung nhìn méo mó.

## 4. Phân Định Loại Hình Công Trình: Xây Mới (New Build) vs Sửa Chữa (Renovation)
- **Quét Khung Tên & Bìa Bản Vẽ**:
  - Chứa `sửa chữa`, `cải tạo`, `hiện trạng`, `nâng cấp`, `phá dỡ` $\rightarrow$ Kích hoạt `RENOVATION_ENGINE`.
  - Chứa `xây mới`, `thi công mới` $\rightarrow$ Kích hoạt `NEW_BUILD_ENGINE`.
- **Quy tắc Công trình Cải tạo**: Tuyệt đối **KHÔNG** tự ý sinh khối lượng đào móng, đúc mới cột/dầm/sàn hàng loạt cho kết cấu hiện trạng. Bắt buộc áp dụng mã định mức **Chương SA (Sửa chữa, đục tẩy `SA.11611`, `SA.11612`, cạo sơn `SA.11821`, phá dỡ gạch đá `AA.22221`, tháo dỡ cửa `AA.31312`, tháo dỡ mái tôn `AA.31221`)**.
- **Chính sách Bóc tách Nội bộ**: Toàn bộ logic `run_takeoff_pipeline` sử dụng Rule-based Deterministic logic / Local fallback, không gọi API LLM ngoài nhằm triệt tiêu Rate Limit (HTTP 429).
