Điều 32: Luật Phê duyệt — v1.1 BAN HÀNH
ĐIỀU 32: LUẬT PHÊ DUYỆT — v1.1 BAN HÀNH
v1.1 BAN HÀNH | 2026-04-18 | Amend bởi S178 Fix 15 — DOT Repair Governance v4 FINAL Base: v1.0 draft cùng path. Phạm vi v1.1: PG-native action/request types, split code khỏi payload JSONB, quorum approval theo risk, bridge migration an toàn, audit-safe FK, và reserved action cho flow amend luật chưa implement.
§1. Mục đích
Mọi thay đổi có tác động tới hệ thống phải qua cơ chế phê duyệt chuẩn hoá. Phê duyệt = PG collections + trigger + trạng thái rõ ràng; không phải chat, không phải email, không phải “anh OK rồi đó”.
§2. Nguyên tắc
§2.1 DOT 100%
Mọi approval request phải được tạo qua DOT hợp pháp; không insert SQL tay, không curl bypass.
§2.2 Đề xuất phải đứng được một mình
Mỗi APR phải đủ evidence, phương án đề xuất, phương án thay thế, và dữ liệu cần thiết để người/AI quyết định mà không cần truy thêm ngoài luồng.
§2.3 Qua PG — theo đúng luồng thiết kế
approval_requests, apr_action_types, apr_request_types, apr_approvals và các trigger liên quan là SSOT của flow phê duyệt.
§2.4 Phạm vi áp dụng
Áp dụng cho birth, reclassify, retire, new collection, new/fix DOT, amend luật, và mọi thay đổi có tác động hệ thống.
§3. Schema approval
§3.1 Split code khỏi payload
approval_requests phải có 2 cột code riêng:
request_type_code TEXTproposed_action_code TEXT
proposed_action JSONB tiếp tục giữ payload chi tiết; không làm FK.
FK bắt buộc:
request_type_code→apr_request_types(request_code)proposed_action_code→apr_action_types(action_code)- ON UPDATE RESTRICT, ON DELETE RESTRICT cho toàn bộ chain type codes.
Nguyên tắc audit-preservation: muốn đổi tên code type = tạo code mới, deprecate/retire code cũ; cấm update trực tiếp PK code đang được lịch sử APR tham chiếu.
§3.2 2 bảng type
apr_action_types
action_codePKdescriptionhandler_refrisk_levelin (low,medium,high)statusin (active,deprecated,retired)_dot_origin TEXT NOT NULLcreated_at,retired_at
apr_request_types
request_codePKdescriptiondefault_action_codeFK →apr_action_types(action_code)statusin (active,deprecated,retired)_dot_origin TEXT NOT NULLcreated_at,retired_at
§3.3 Seed chuẩn
Action seed tối thiểu:
create_item(low)update_item(low)add_field(medium)patch_ops_code(high)amend_law(high, RESERVED)
Request type seed tối thiểu:
- giữ các type hiện hành
- bổ sung
fix_repair_dot
Reserved action: amend_law có thể tồn tại trong bảng type nhưng nếu handler_ref='unimplemented' thì DB/engine phải chặn status tiến tới approved/applied cho action này.
§3.4 Register Collection Protocol
apr_action_types, apr_request_types, apr_approvals phải được đăng ký trong collection_registry + meta_catalog trước khi runtime dùng.
§3.5 Sequencing migration bắt buộc
- Tạo
apr_action_types,apr_request_types+ seed. - Register theo Đ36.
- Amend
approval_requeststhêmrequest_type_code,proposed_action_code(nullable). - Backfill APR legacy từ text/JSONB.
- Verification query: 0 row missing mapping.
- Bật maintenance gate
app_lockvài phút cho production để chặn write window. - Deploy runtime bridge/new code đọc cột code.
- Mở lại write path.
- Sau observation window mới nâng constraint nếu cần.
Production default: chọn app_lock ngắn thay vì dual-write 24h. Dual-write chỉ là phương án fallback khi không thể đóng write window.
§4. Quorum approvals
§4.1 Bảng apr_approvals
Mỗi quyết định duyệt phải được ghi thành row riêng:
apr_idapproverapprover_typein (human,ai_council)decisionin (approve,reject,abstain)rationalecreated_atUNIQUE (apr_id, approver)
§4.2 Trigger quorum
BEFORE UPDATE OF status ON approval_requests:
- high: cần ≥1
presidentapprove + ≥2ai_councilapprove + 0 reject - medium: cần ≥1
presidentapprove - low: cần ≥1 approve hoặc rule auto-approve hợp lệ
§4.3 Hardening rules
- Cấm self-approve cho high-risk request của chính người/agent tạo request.
- Có reject mở thì không được approve đè; phải mở chu kỳ review mới.
- Trigger phải kiểm trong cùng transaction snapshot khi đổi
status.
§5. DOT hỗ trợ APR
dot-apr-types-registerdot-apr-type-integrity-audit(A-tier)dot-apr-type-integrity-propose(B/pseudo)
Mục tiêu: quét orphan code, missing mapping, inactive references; không auto-fix tuỳ tiện.
§6. Lifecycle
pending → approved → applied
hoặc pending → rejected
hoặc pending → expired
approved không đồng nghĩa đủ quorum; status chỉ được phép đổi khi trigger quorum pass.
§7. Reserved / unimplemented handlers
Mọi action có handler_ref='unimplemented' là không được thực thi. Cơ chế chặn phải tồn tại ở DB gate và runtime, không chỉ text policy.
§8. Thước đo
- Thời gian pending trung bình.
- Tỷ lệ request đủ evidence ngay từ lần đầu.
- Tỷ lệ reject do thiếu evidence/rule.
- Tỷ lệ APR historical còn missing mapping = 0.
CHANGELOG
| Version | Nội dung |
|---|---|
| v1.0 | Draft ban đầu về approval_requests, scanner, lifecycle cơ bản. |
| v1.1 | S178 Fix 15 BAN HÀNH. Split code/payload, PG-native type tables, quorum approvals, audit-safe FK RESTRICT, bridge migration theo app_lock, reserved amend_law, và DOT integrity cho APR vocabulary. |
Điều 32 v1.1 BAN HÀNH | APR PG-native | Quorum enforced | Audit-safe FK