Tạo Văn Bản Hành Chính
Dạy AI Agent cách sinh file .docx văn bản hành chính đúng thể thức. Từ công văn đến quyết định, đúng chuẩn pixel-perfect.
Phiên bản 1.0 | Tháng 3/2026
📝 Biên soạn: Minh Đỗ
Chương 1: Giới thiệu
Nghị định 30 là gì?
Nghị định 30/2020/NĐ-CP là văn bản quy phạm pháp luật quy định về công tác văn thư, bao gồm thể thức trình bày văn bản hành chính tại Việt Nam. Mọi cơ quan nhà nước, tổ chức chính trị, đơn vị sự nghiệp đều phải tuân thủ.
Skill này giải quyết vấn đề gì?
| Không có Skill | Có Skill |
|---|---|
| Soạn văn bản bằng Word, canh lề thủ công, dễ sai thông số | Sinh file .docx tự động, đúng thông số pixel-perfect |
| Không biết quốc hiệu cỡ bao nhiêu, tiêu ngữ đậm hay thường | Đã mã hóa toàn bộ thông số: cỡ chữ, kiểu chữ, khoảng cách |
| Gạch ngang dùng Underline, in ra bị lệch | Dùng Border Top - kỹ thuật chuẩn, không lệch khi in |
| Không rõ ai ký: Bộ trưởng, Thứ trưởng hay Vụ trưởng? | Ma trận phân quyền ký TM/KT/TL tự động tra cứu |
| Header 2 cột bị lệch, chữ "NAM" rớt xuống dòng | Table ẩn viền 2 cột tỷ lệ 3500:5571 dxa - không bao giờ rớt chữ |
Hỗ trợ 2 loại văn bản
Công văn Văn bản không có tên loại
Dùng khi trao đổi, hướng dẫn, đề nghị giữa các cơ quan. Không có tiêu đề "CÔNG VĂN" trên văn bản. Phần "Kính gửi" nằm ngay sau header.
Quyết định Văn bản có tên loại
Dùng khi ban hành quyết định hành chính: bổ nhiệm, thành lập tổ công tác, phê duyệt kế hoạch. Có tiêu đề "QUYẾT ĐỊNH" in hoa đậm giữa trang, phần "Căn cứ" nghiêng, nội dung chia theo Điều.
Chương 2: Cài đặt
Yêu cầu hệ thống
| Thành phần | Yêu cầu |
|---|---|
| Node.js | Phiên bản 18 trở lên |
| npm | Đi kèm Node.js |
| Thư viện docx | Phiên bản 9.0 trở lên (cài tự động) |
| Microsoft Word | Để mở và kiểm tra file .docx đầu ra |
Cài đặt
# Vào thư mục skill cd .agents/skill/Skill_The_Thuc_VB_ND30 # Cài thư viện npm install
Cấu trúc thư mục
Skill_The_Thuc_VB_ND30/
├── SKILL.md ← Hướng dẫn cho AI Agent
├── README.md ← Giới thiệu cho người dùng
├── package.json ← Khai báo thư viện docx
├── scripts/
│ ├── generate_cong_van.js ← Script sinh công văn
│ └── generate_quyet_dinh.js ← Script sinh quyết định
└── references/
├── quy_tac_the_thuc.md ← Thông số pixel-perfect
└── phan_quyen_ky.md ← Ma trận phân quyền ký
Cách sử dụng với AI Agent
Khi đã cài skill vào workspace, chỉ cần nói tự nhiên:
Ví dụ 1: "Soạn công văn gửi Sở Tài chính về việc hướng dẫn quyết toán thuế"
Ví dụ 2: "Tạo quyết định thành lập tổ công tác kiểm tra"
Ví dụ 3: "Soạn văn bản hành chính gửi các chi cục thuế"
Agent sẽ tự động: thu thập thông tin → tra phân quyền ký → tạo JSON → chạy script → xuất file .docx.
Chương 3: Công văn
Công văn Văn bản không có tên loại - dùng để trao đổi, hướng dẫn, đề nghị.
Quy trình 5 bước
| Bước | Mô tả | Chi tiết |
|---|---|---|
| 1 | Thu thập thông tin | Hỏi: loại văn bản, cơ quan, người nhận, nội dung, ai ký |
| 2 | Tra phân quyền ký | Đọc phan_quyen_ky.md → xác định TM/KT/TL |
| 3 | Tạo file JSON | Tạo dữ liệu đầu vào theo cấu trúc quy định |
| 4 | Chạy script | node scripts/generate_cong_van.js --input data.json --output cong_van.docx |
| 5 | Kiểm tra | Mở file .docx bằng Word, kiểm tra header, font, lề |
Cấu trúc JSON đầu vào
{
"loai_van_ban": "cong_van",
"co_quan_chu_quan": "BỘ TÀI CHÍNH",
"co_quan_ban_hanh": "CỤC THUẾ TP. HÀ NỘI",
"don_vi_soan_thao": "CT-HNi",
"dia_danh": "Hà Nội",
"trich_yeu": "V/v hướng dẫn kê khai thuế TNCN năm 2026",
"kinh_gui": [
"Các Chi cục Thuế quận, huyện",
"Phòng Thuế thu nhập cá nhân"
],
"noi_dung": "Nội dung công văn...",
"cap_ky": "KT",
"chuc_vu_cap_tren": "CỤC TRƯỞNG",
"chuc_vu_ky": "PHÓ CỤC TRƯỞNG",
"nguoi_ky": "Nguyễn Văn An",
"noi_nhan": [
"- Như trên;",
"- Cục trưởng (để b/c);",
"- Lưu: VT, TNCN (3b)."
]
}
Giải thích các trường
| Trường | Bắt buộc | Mô tả |
|---|---|---|
co_quan_chu_quan | Có | Tên cơ quan cấp trên (VD: BỘ TÀI CHÍNH) |
co_quan_ban_hanh | Có | Tên cơ quan ban hành (VD: CỤC THUẾ TP. HÀ NỘI) |
don_vi_soan_thao | Không | Viết tắt đơn vị soạn thảo, dùng cho số ký hiệu |
dia_danh | Không | Mặc định "Hà Nội" |
trich_yeu | Có | Trích yếu nội dung (VD: V/v hướng dẫn...) |
kinh_gui | Có | Mảng tên cơ quan nhận |
noi_dung | Có | Nội dung chính, tách đoạn bằng xuống dòng |
cap_ky | Không | TM / KT / TL / TUQ (xem Chương 6) |
chuc_vu_cap_tren | Không | Chức vụ người đứng đầu (khi dùng KT/TL) |
chuc_vu_ky | Có | Chức vụ người ký |
nguoi_ky | Có | Họ tên người ký |
noi_nhan | Không | Mảng nơi nhận, mặc định: "Như trên" + "Lưu: VT" |
Lệnh chạy
node scripts/generate_cong_van.js --input data.json --output cong_van.docx
Chương 4: Quyết định
Quyết định Văn bản có tên loại - dùng khi ban hành quyết định hành chính.
Khác biệt so với Công văn
| Yếu tố | Công văn | Quyết định |
|---|---|---|
| Tên loại | Không có | "QUYẾT ĐỊNH" in hoa, đậm, giữa trang |
| Trích yếu | "V/v ..." cỡ 12, dưới số ký hiệu | Dưới tên loại, đậm, có gạch ngang |
| Căn cứ | Không có | Liệt kê các căn cứ pháp lý, chữ nghiêng |
| Nội dung | Đoạn văn tự do | Chia theo Điều 1, Điều 2, Điều 3... |
| Kính gửi | Có | Không (thay bằng "Căn cứ") |
Cấu trúc JSON - Quyết định
{
"loai_van_ban": "quyet_dinh",
"co_quan_chu_quan": "BỘ TÀI CHÍNH",
"co_quan_ban_hanh": "CỤC THUẾ TP. HÀ NỘI",
"don_vi_soan_thao": "QĐ-CT",
"trich_yeu": "Về việc thành lập Tổ công tác kiểm tra thuế",
"can_cu": [
"Luật Quản lý thuế số 38/2019/QH14",
"Nghị định số 126/2020/NĐ-CP ngày 19/10/2020"
],
"noi_dung": "Điều 1. Thành lập Tổ công tác...\nĐiều 2. Tổ công tác có nhiệm vụ...\nĐiều 3. Quyết định này có hiệu lực kể từ ngày ký.",
"cap_ky": "TM",
"chuc_vu_ky": "CỤC TRƯỞNG",
"nguoi_ky": "Phạm Đình Hưng",
"noi_nhan": [
"- Như Điều 3;",
"- Phòng KT1, KT2;",
"- Lưu: VT, TCCB (5b)."
]
}
Trường riêng của Quyết định
| Trường | Mô tả |
|---|---|
can_cu | Mảng liệt kê các căn cứ pháp lý. In nghiêng, kết thúc bằng dấu ";" (mục cuối kết bằng ".") |
noi_dung (chuỗi) | Nội dung dạng văn bản. Các dòng bắt đầu bằng "Điều X." sẽ tự động in đậm |
noi_dung (mảng) | Mảng các Điều, mỗi phần tử có tieu_de và noi_dung |
Lệnh chạy
node scripts/generate_quyet_dinh.js --input data.json --output quyet_dinh.docx
Chương 5: Thông số thể thức
Tham chiếu Toàn bộ thông số pixel-perfect để sinh file .docx đúng chuẩn.
Khổ giấy và lề
| Thông số | Giá trị | Đơn vị dxa |
|---|---|---|
| Khổ giấy | A4 (210 x 297 mm) | - |
| Lề trái | 30 mm | ~1701 dxa |
| Lề phải | 20 mm | ~1134 dxa |
| Lề trên | 20 mm | ~1134 dxa |
| Lề dưới | 20 mm | ~1134 dxa |
| Font mặc định | Times New Roman, Unicode | - |
Header - Table 2 cột x 2 dòng ẩn viền
Đây là phần quan trọng nhất và hay bị sai nhất. Header PHẢI dùng Table ẩn viền, KHÔNG dùng Tab hay Space.
Cấu trúc Header
+---------------------------+------------------------------------------+ | DÒNG 1 - CỘT TRÁI (3500) | DÒNG 1 - CỘT PHẢI (5571) | | - Tên cơ quan chủ quản | - QUỐC HIỆU (in hoa, đậm, cỡ 13) | | - TÊN CƠ QUAN BAN HÀNH | - Tiêu ngữ (đậm, thường, cỡ 14) | | + Gạch ngang 1/3 | + Gạch ngang = chiều dài tiêu ngữ | +---------------------------+------------------------------------------+ | DÒNG 2 - CỘT TRÁI (3500) | DÒNG 2 - CỘT PHẢI (5571) | | - Số, Ký hiệu | - Địa danh, ngày tháng (nghiêng, cỡ 14) | | - V/v (Trích yếu, cỡ 12) | | +---------------------------+------------------------------------------+
Thông số chi tiết Header
| Yếu tố | Vị trí | Cỡ chữ | Kiểu | Kẻ dưới |
|---|---|---|---|---|
| Quốc hiệu | Dòng 1, Phải (5571 dxa) | 13 | ĐẬM, IN HOA | Không |
| Tiêu ngữ | Dòng 1, Phải (dưới QH) | 14 | Đậm, Thường | Border Top, indent 1100 dxa |
| Cơ quan chủ quản | Dòng 1, Trái (3500 dxa) | 13 | Thường, IN HOA | Không |
| Cơ quan ban hành | Dòng 1, Trái (giữa) | 13 | ĐẬM, IN HOA | Border Top, indent 1350 dxa |
| Số, Ký hiệu | Dòng 2, Trái | 13 | Thường | Không |
| Địa danh, ngày tháng | Dòng 2, Phải | 14 | Nghiêng | Không |
| Trích yếu (V/v) | Dòng 2, Trái | 12 | Thường | Không |
Body - Thông số khoảng cách
| Thông số | Giá trị | Đơn vị twips |
|---|---|---|
| Khoảng cách trước đoạn | 6pt | 120 twips |
| Khoảng cách sau đoạn | 6pt | 120 twips |
| Giãn dòng | Chính xác 17pt | 340 twips (LineRuleType.EXACT) |
| Lùi đầu dòng | 1 - 1.27 cm | ~720 twips |
| Cỡ chữ body | 14 (hoặc 13) | - |
| Căn lề | Đều 2 bên (Justified) | - |
Kỹ thuật gạch ngang - Border Top
TUYỆT ĐỐI KHÔNG dùng UnderlineType
Gạch ngang trong văn bản hành chính phải dùng Border Top trên một Paragraph trống. Không dùng UnderlineType, ImageRun, hay thẻ <v:line>.
Lý do: UnderlineType phụ thuộc vào nội dung text, khi in sẽ bị lệch. Border Top là đường viền cố định, không phụ thuộc text.
// Gạch dưới tên cơ quan (1/3 chiều rộng cột trái)
new Paragraph({
spacing: { before: 20, after: 0 },
border: {
top: { style: BorderStyle.SINGLE, size: 2, color: "000000", space: 1 }
},
indent: { left: 1350, right: 1350 }
});
// Gạch dưới tiêu ngữ (bằng chiều dài chữ)
new Paragraph({
spacing: { before: 20, after: 0 },
border: {
top: { style: BorderStyle.SINGLE, size: 2, color: "000000", space: 1 }
},
indent: { left: 1100, right: 1100 }
});
Chương 6: Phân quyền ký
Tham chiếu Quy định cách trình bày khối chữ ký theo cấp ký.
Các hình thức ký
| Viết tắt | Đầy đủ | Ý nghĩa | Người ký |
|---|---|---|---|
| TM. | Thay mặt | Người đứng đầu ký trực tiếp | Bộ trưởng |
| KT. | Ký thay | Cấp phó ký thay người đứng đầu | Thứ trưởng |
| TL. | Thừa lệnh | Cấp dưới ký theo ủy quyền | Vụ trưởng |
| TUQ. | Thừa ủy quyền | Ký theo ủy quyền chuyển tiếp | Phó Vụ trưởng |
Cách trình bày khối chữ ký
Bộ trưởng ký trực tiếp
BỘ TRƯỞNG
(Ký, ghi rõ họ tên)
Nguyễn Văn Thắng
Thứ trưởng ký thay (KT.)
KT. BỘ TRƯỞNG
THỨ TRƯỞNG
(Ký, ghi rõ họ tên)
Đỗ Thanh Trung
Vụ trưởng ký thừa lệnh (TL.)
TL. BỘ TRƯỞNG
VỤ TRƯỞNG VỤ TỔ CHỨC CÁN BỘ
(Ký, ghi rõ họ tên)
Nguyễn Văn A
Phó Vụ trưởng ký thừa ủy quyền (TUQ.)
TL. BỘ TRƯỞNG
KT. VỤ TRƯỞNG VỤ TỔ CHỨC CÁN BỘ
PHÓ VỤ TRƯỞNG
(Ký, ghi rõ họ tên)
Trần Văn B
Loại công việc tương ứng cấp ký
| Loại công việc | Cấp ký | Chức vụ |
|---|---|---|
| Cử đại diện tham gia tổ công tác (Thứ trưởng) | TM. | Bộ trưởng ký |
| Cử đại diện tham gia tổ công tác (cấp Vụ) | KT. | Thứ trưởng ký |
| Văn bản hành chính thông thường | TL. | Vụ trưởng ký |
| Quyết định bổ nhiệm, điều động | TM. | Bộ trưởng ký |
Thông số kỹ thuật khối chữ ký
| Yếu tố | Cỡ chữ | Kiểu |
|---|---|---|
| Quyền hạn (TM./KT./TL.) | 13 | IN HOA, Đậm, căn phải |
| Chức vụ | 13 hoặc 14 | IN HOA, Đậm, căn giữa khối |
| "(Ký, ghi rõ họ tên)" | 14 | Nghiêng, căn giữa |
| Họ tên người ký | 14 | Đậm, căn giữa dưới chức vụ |
| Khoảng cách đến chữ ký | 2-3 dòng trống | |
Nơi nhận
| Yếu tố | Cỡ chữ | Kiểu |
|---|---|---|
| "Nơi nhận:" | 12 | Đậm, Nghiêng |
| Các mục liệt kê | 11 | Thường, bắt đầu bằng dấu "-" |
| Mục cuối | 11 | "Lưu: VT, ..." |
Chương 7: Tham khảo nhanh
Lệnh tắt
| Lệnh | Mô tả |
|---|---|
node scripts/generate_cong_van.js --input data.json --output cong_van.docx | Sinh công văn |
node scripts/generate_quyet_dinh.js --input data.json --output quyet_dinh.docx | Sinh quyết định |
npm install | Cài thư viện docx |
Danh sách kiểm tra sau khi tạo file
| Kiểm tra | Đúng | Sai thường gặp |
|---|---|---|
| Header 2 cột | Table ẩn viền, cân đối | Dùng Tab/Space, bị lệch khi in |
| Quốc hiệu | Đủ chữ "NAM" trên 1 dòng | Chữ "NAM" rớt xuống dòng 2 |
| Gạch ngang | Border Top, chiều dài cố định | Dùng Underline, bị lệch |
| Font | Times New Roman toàn bộ | Lẫn font khác (Calibri, Arial) |
| Cỡ chữ | 13-14pt body, đúng từng phần | Cỡ đồng nhất, không phân biệt |
| Lề | Trái 3cm, các lề khác 2cm | Lề đều 2cm hoặc 2.54cm |
| Giãn dòng | Chính xác 17pt | Dùng Single hoặc 1.5 |
| Khối chữ ký | TM/KT/TL + chức vụ đúng | Thiếu tiền tố quyền hạn |
Câu hỏi thường gặp
Tại sao dùng Border Top thay vì Underline?
UnderlineType gắn vào text, khi text thay đổi thì đường gạch cũng thay đổi. Border Top là đường viền của Paragraph, chiều dài cố định bằng indent, không phụ thuộc nội dung text.
Tỷ lệ 3500:5571 nghĩa là gì?
Đó là chiều rộng 2 cột header tính bằng đơn vị dxa (1 inch = 1440 dxa). Tỷ lệ này đảm bảo quốc hiệu "CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM" không bị rớt chữ "NAM" xuống dòng mới.
Có thể thêm loại văn bản khác không?
Có. Tạo script mới (VD: generate_to_trinh.js) theo cùng cấu trúc. Header và chữ ký giống nhau, chỉ khác phần Body.
Tệp tham chiếu ở đâu?
| Tệp | Nội dung |
|---|---|
references/quy_tac_the_thuc.md | Thông số pixel-perfect: Header, Body, Chữ ký |
references/phan_quyen_ky.md | Ma trận phân quyền ký TM/KT/TL |
Thông tin dự án
Phiên bản: 1.0
Chuẩn áp dụng: Nghị định 30/2020/NĐ-CP, Quyết định 4114/QĐ-BTC
Công nghệ: Node.js + docx-js
Yêu cầu: Node.js phiên bản 18 trở lên