KB-6740 rev 4

Quy trình Quản lý Thực thể — v3.0 (Thống nhất)

5 min read Revision 4
procedureQT-001QT-002QT-003QT-005QT-006unifieddeath-trigger

Quy trình Quản lý Thực thể — v3.0

v3.0 | 2026-03-22 | S160 | Thống nhất 1 hệ thống. +QT-006 khai tử. Đơn giản hóa QT-003/004. v2.0 | S160 | +QT-003,004,005 cho collections. v1.0 | S159 | QT-001 nhập khai sinh + QT-002 khai trước sinh sau. Luật: Điều 0-G (Khai sinh), Điều 26 (Đếm), Điều 29 v2.0 (Phân loại — 1 hệ thống). Mục tiêu: Thêm collection, loài, cá thể → hệ thống TỰ ĐẾM. Chỉ cần khai sinh.


QT-001: NHẬP KHAI SINH (Backfill — thực thể ĐÃ tồn tại)

Dọn quá khứ. Chạy 1 lần per collection. Xong → QT-002 vĩnh viễn. Áp dụng cho TẤT CẢ 138 collections (governed + observed + excluded).

BƯỚC 1 — Kiểm tra: species_collection_map có? birth trigger có?
BƯỚC 2 — Đếm: nơi chứa (A) vs nơi sinh (B). Gap = A - B. Nếu 0 → XONG.
BƯỚC 3 — Nhập: dot-birth-backfill --collection=<collection>
BƯỚC 4 — Xác nhận: đếm lại. B' = A → KHỚP ✅. B' ≠ A → investigate.
BƯỚC 5 — Thanh tra: dot-inspect-pen (chỉ governed).

QT-002: KHAI TRƯỚC SINH SAU (Birth-first — thực thể MỚI)

Vĩnh viễn. Mọi DOT tạo entity PHẢI implement. Áp dụng cho TẤT CẢ collections (governed + observed + excluded).

BƯỚC 1 — Kiểm tra loài: species_collection_map + entity_species hợp lệ?
BƯỚC 2 — Tạo khai sinh TRƯỚC: INSERT birth_registry
BƯỚC 3 — Tạo thực thể SAU: INSERT source. FAIL → ROLLBACK birth.
BƯỚC 4 — Xác nhận khớp: cả 2 tồn tại?
BƯỚC 5 — Thanh tra: inspect_pen (governed). Observed/excluded: chỉ verify birth.

QT-003: KHAI BÁO COLLECTION MỚI

Collection mới PHẢI có species + birth trigger + mô tả TRƯỚC KHI dùng. v1.1 (2026-04-13): +Bước 0 cho collection Lark namespace. +Bước 5 lark_sync_jobs.

BƯỚC 0 — (CHỈ collection từ Lark) Chọn namespace prefix:
  □ larkpc_*     → Lark Phái cử  → species nhóm lark_phai_cu
  □ larkschool_* → Lark Trường học → species nhóm lark_school
  Tên không hợp lệ → reject ngay, không qua bước tiếp.

BƯỚC 1 — Xác định governance_role: governed / observed / excluded
  (Lark namespace mặc định governed, không cho phép excluded)

BƯỚC 2 — Chọn hoặc tạo species:
  □ Governed: tạo species riêng (SPE-xxx) nếu chưa có
  □ Observed/excluded: gom vào species nhóm (SPE-BLK, SPE-OSC...)
  □ Lark: gom vào lark_phai_cu / lark_school, hoặc tạo species con riêng

BƯỚC 3 — Đăng ký: dot-species-map + dot-collection-register (+ purpose bắt buộc)

BƯỚC 4 — Setup birth trigger: dot-birth-trigger-setup

BƯỚC 5 — (CHỈ collection từ Lark) Tạo entry trong PG table lark_sync_jobs:
  job_code, target_collection, lark_base_token, lark_table_id,
  field_whitelist (JSONB list field_id), schedule_cron, enabled

BƯỚC 6 — Verify: fn_registry_health() bắt collection mới + smoke test sync 1 record

QT-005: THĂNG CẤP / HẠ CẤP COLLECTION

Chuyển governance_role khi business thay đổi.

THĂNG CẤP (observed/excluded → governed):
  BƯỚC 1 — Tạo species riêng (tách khỏi species gom)
  BƯỚC 2 — dot-species-map cập nhật
  BƯỚC 3 — Backfill QT-001
  BƯỚC 4 — UPDATE governance_role = 'governed'
  BƯỚC 5 — Verify fn_registry_health()

HẠ CẤP (governed → observed/excluded):
  BƯỚC 1 — Xác nhận không còn cần inspect chi tiết
  BƯỚC 2 — Gom vào species nhóm (SPE-xxx)
  BƯỚC 3 — UPDATE governance_role
  BƯỚC 4 — Birth records VẪN GIỮ (không xóa)

QT-006: KHAI TỬ (Entity DELETE — MỚI v3.0)

Khai sinh nhiều → khai tử cũng nhiều. Phải quản lý cả 2 chiều.

BƯỚC 1 — Entity bị DELETE trong source collection
BƯỚC 2 — PG trigger cập nhật birth_registry:
  □ SET died_at = now(), status = 'retired'
  □ HOẶC: DELETE birth record (nếu chọn strategy "clean")
BƯỚC 3 — fn_registry_health() phát hiện:
  □ Nơi chứa giảm, nơi sinh vẫn cao → PHANTOM nếu không cập nhật birth
  □ Strategy "clean": birth tự xóa → fn_health vẫn KHỚP
  □ Strategy "archive": birth giữ, filter WHERE died_at IS NULL khi đếm active

STRATEGY LỰA CHỌN (quyết định 1 lần, ghi vào Điều 0-G):
  A) CLEAN: DELETE birth khi entity DELETE → đơn giản, fn_health luôn khớp
  B) ARCHIVE: SET died_at, đếm WHERE died_at IS NULL → lịch sử đầy đủ, phức tạp hơn
  → Đề xuất: CLEAN cho excluded/observed, ARCHIVE cho governed. Hoặc: CLEAN tất cả cho đơn giản.
  → GHI TD: chốt strategy khai tử. Hiện tại chưa có death trigger.

TỔNG KẾT QUY TRÌNH

QT Tên Khi nào Áp dụng cho
QT-001 Nhập khai sinh (backfill) Entity đã tồn tại TẤT CẢ 138 collections
QT-002 Khai trước sinh sau Entity mới TẤT CẢ collections vĩnh viễn
QT-003 Khai báo collection mới Collection mới tạo TẤT CẢ
QT-005 Thăng cấp / hạ cấp Đổi governance_role Khi business thay đổi
QT-006 Khai tử Entity bị xóa TẤT CẢ

Mục tiêu cuối cùng: Thêm collection/loài/cá thể → hệ thống TỰ ĐẾM. Chỉ cần khai sinh (QT-002/003). fn_registry_health() tự cập nhật. Registries tự hiển thị. Operator chỉ GIÁM SÁT.


v3.0 | 1 hệ thống. +QT-006 khai tử. QT-001→005 áp dụng TẤT CẢ 138 collections.