DU_LIEU_CONG_VIEC.json — Dữ Liệu Kỹ Thuật

📁 Đường dẫn tệp gốc: research/plans/KE_HOACH_CON_LAI/DU_LIEU_CONG_VIEC.json
📥 Tải tệp gốc xuống


{
  "version": "1.2",
  "as_of": "2026-09-26",
  "medical_source_extension": {
    "status": "PLANNED",
    "selected_source_pages": "UNKNOWN",
    "calibration_task": "SRC-11",
    "additional_provisional_human_hours": 131,
    "additional_technical_ai_runs": 1,
    "coverage_rule": "Kiểm kê toàn thư viện; bóc tách đầy đủ toàn phạm vi được chọn và có quyền. Mỗi trang/chương/nguồn phải có trạng thái; không bỏ phần khó hoặc chưa đọc được.",
    "estimate_rule": "54 việc là các khoản thời gian tạm để tìm nguồn, thử mẫu và xử lý tám lô. Không cam kết số hóa toàn thư viện trong 131 giờ. SRC-11 phải đo số trang, độ khó, kiểm chéo, sửa và giờ review rồi thêm phiếu nguồn/phần trang còn thiếu trước khi tiếp tục.",
    "reuse_rule": "Giữ nguyên 220 việc cũ và giờ của chúng. Tái dùng bản dẫn xuất đã kiểm theo hash; không tính lại trang dùng chung. Không dùng giờ đọc/viết thẻ thay giờ bóc tách.",
    "release_rule": "Nghiệm thu Markdown nghiên cứu khác phê duyệt y khoa và phát hành AI; quyền truyền nhà cung cấp và công bố phải xét riêng."
  },
  "start_date": "2026-09-28",
  "scenario": "40 thẻ + 40 FAQ; web chữ; camera một chỉ số có điều kiện; hai nhóm thử dự toán 10 lượt/nhóm",
  "capacity": {
    "NCS1": [
      120,
      120,
      120,
      120,
      120,
      240,
      0
    ],
    "NCS2": [
      90,
      90,
      90,
      90,
      90,
      90,
      0
    ],
    "CVYK": [
      0,
      60,
      0,
      60,
      0,
      60,
      0
    ],
    "GVHD": [
      0,
      0,
      0,
      0,
      60,
      60,
      0
    ],
    "LEGAL": [
      0,
      120,
      0,
      120,
      0,
      0,
      0
    ],
    "REVIEW_TECH": [
      0,
      120,
      0,
      120,
      0,
      120,
      0
    ],
    "REVIEW_YK": [
      0,
      120,
      0,
      120,
      0,
      0,
      0
    ],
    "OPS": [
      120,
      0,
      120,
      0,
      120,
      120,
      0
    ],
    "DATA": [
      0,
      60,
      0,
      60,
      0,
      60,
      0
    ],
    "AUTH": [
      0,
      0,
      120,
      0,
      0,
      0,
      0
    ],
    "SUPPORT": [
      0,
      0,
      60,
      0,
      0,
      60,
      0
    ],
    "MEASURE": [
      0,
      0,
      60,
      0,
      0,
      60,
      0
    ],
    "PART_CORE": [
      0,
      0,
      60,
      0,
      0,
      60,
      0
    ],
    "PART_CAM": [
      0,
      0,
      60,
      0,
      0,
      60,
      0
    ],
    "AI": [
      2,
      2,
      2,
      2,
      2,
      2,
      0
    ]
  },
  "closed_dates": [
    "2027-01-01",
    "2027-02-01",
    "2027-02-02",
    "2027-02-03",
    "2027-02-04",
    "2027-02-05",
    "2027-02-06",
    "2027-02-07",
    "2027-02-08",
    "2027-02-09",
    "2027-02-10",
    "2027-02-11",
    "2027-02-12",
    "2027-02-13",
    "2027-02-14",
    "2027-04-30",
    "2027-05-01",
    "2027-09-02",
    "2028-01-01",
    "2028-02-01",
    "2028-02-02",
    "2028-02-03",
    "2028-02-04",
    "2028-02-05",
    "2028-02-06",
    "2028-02-07",
    "2028-02-08",
    "2028-02-09",
    "2028-02-10",
    "2028-02-11",
    "2028-02-12",
    "2028-02-13",
    "2028-02-14"
  ],
  "packages": {
    "SD01": {
      "title": "Yêu cầu, phạm vi và người nhận việc",
      "mapping": "T01/T03; D01–04/D13",
      "baseline": "Hồ sơ đã có; Q01/Q02/Q04/Q07 chưa chốt",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/project/project_charter.md",
        "docs/project/intended_use.md",
        "docs/project/SO_QUYET_DINH_THAY_DOI.md",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở."
    },
    "SD02": {
      "title": "Luồng tác vụ và công cụ nhu cầu",
      "mapping": "T01/T06/T16; D01/D15/D18",
      "baseline": "Có công cụ nháp; chưa khảo sát được phép",
      "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/research/instruments/W1_D04_ExpertInterviewGuide_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/project/intended_use.md"
      ],
      "resume_note": "Kế thừa công cụ nhu cầu và mẫu đồng ý dự thảo. Bổ sung luồng chữ/camera, review câu hỏi và điều kiện dùng với người."
    },
    "SD03": {
      "title": "Hợp đồng dữ liệu, schema và vòng đời",
      "mapping": "T02/T04/T05/T06; D06/D09/D10",
      "baseline": "Đã đối soát ba schema; K02 còn mở",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu."
    },
    "SD04": {
      "title": "Nguồn, quyền và lô tri thức thật",
      "mapping": "T02/T07; D05/D06",
      "baseline": "Đã số hóa nguồn; thẻ/FAQ chưa duyệt phát hành",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "estimate_basis": "8 lô, mỗi lô 5 thẻ và 5 FAQ trong phạm vi hẹp. Lô 1 dùng hiệu chỉnh; giờ chưa được đo.",
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật."
    },
    "SD05": {
      "title": "API và bộ nạp thật",
      "mapping": "T09/T10/T11; D08",
      "baseline": "API ngoại tuyến và bản kê giả đã kiểm",
      "output": "backend/DAC_TA_API_VA_NGU_CANH.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "backend/app/main.py",
        "backend/app/services/release_preflight.py",
        "backend/tests/test_offline_api.py"
      ],
      "resume_note": "Kế thừa API ngoại tuyến và kiểm bản kê giả. Bổ sung bộ nạp, luồng thật, quyền và phản hồi an toàn; giữ hồi quy đã có."
    },
    "SD06": {
      "title": "Giao diện thật và trợ năng",
      "mapping": "T12; D11",
      "baseline": "Vue mô phỏng, 21 test, build đã có",
      "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "frontend/src/App.vue",
        "frontend/tests/App.test.js",
        "frontend/README.md"
      ],
      "resume_note": "Kế thừa Vue mô phỏng, test và cách dựng. Bổ sung kết nối API thật, trạng thái lỗi, trợ năng và bằng chứng kiểm đúng bản dựng."
    },
    "SD07": {
      "title": "Bộ lọc an toàn có nguồn",
      "mapping": "T11; D07",
      "baseline": "Chính sách nháp; chưa có bộ lọc y khoa",
      "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật."
    },
    "SD08": {
      "title": "Camera một chỉ số từ thư viện",
      "mapping": "CAM-Y01–04/T14/T19; D14; CYK-01–13/CAM-001–029",
      "baseline": "Thiết kế và ma trận đã có; chưa GCA/POC/GCB",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng."
    },
    "SD09": {
      "title": "Môi trường tái lập và phụ thuộc",
      "mapping": "T05/T09; D20",
      "baseline": "Đợt 3 cài sạch đạt; máy đang dùng cần xác minh riêng",
      "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1",
        "backend/requirements.txt"
      ],
      "resume_note": "Kế thừa hướng dẫn, phép kiểm cài sạch và kết quả lịch sử. Xác minh máy hiện tại, khóa phiên bản và xử lý phần chưa tái lập được."
    },
    "SD10": {
      "title": "Quyền truy cập và bảo mật",
      "mapping": "T02/T06/T09/T13; D09/D13",
      "baseline": "Đã có hồ sơ dữ liệu nháp; chưa triển khai quyền thật",
      "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/legal/W1_D04_DataMinimizationMap.md",
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa bản đồ dữ liệu và thiết kế nháp. Bổ sung quyền tối thiểu, bí mật, ranh giới truyền dữ liệu và review cấu hình được phép."
    },
    "SD11": {
      "title": "SQL và chuyển đổi phiên bản",
      "mapping": "T13; D12",
      "baseline": "SQL nháp chưa chạy trên DB thử",
      "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa SQL nháp và yêu cầu dữ liệu. Bổ sung chuyển đổi phiên bản, quyền, chạy lại và thử phục hồi trên cơ sở dữ liệu riêng."
    },
    "SD12": {
      "title": "IIS và triển khai bản thử",
      "mapping": "T13; D12",
      "baseline": "Guide cũ; chưa cài/kiểm host đích",
      "output": "deployment/iis/HUONG_DAN_CAI_DAT.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "backend/README.md",
        "frontend/README.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa cấu hình mẫu và cách dựng từng phần. Bổ sung máy đích, IIS/HTTPS, quyền dịch vụ và kiểm sau cài; chưa coi mẫu là triển khai thật."
    },
    "SD13": {
      "title": "Hạ tầng và môi trường riêng",
      "mapping": "T13; D12",
      "baseline": "Chưa xác nhận máy, quyền, người vận hành",
      "output": "deployment/BAN_KE_MOI_TRUONG.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/research/plans/KIEN_TRUC_DU_AN.md",
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa kiến trúc và yêu cầu vận hành. Xác nhận tài nguyên, người nhận, quyền và môi trường thử riêng trước cấp cấu hình thực."
    },
    "SD14": {
      "title": "Kế hoạch kiểm thử và bộ ca khóa",
      "mapping": "T08/T17; D10/D16/D20",
      "baseline": "Test kỹ thuật có; bộ chuyên môn chưa khóa",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp."
    },
    "SD15": {
      "title": "Kiểm hệ thống và sửa lỗi",
      "mapping": "T17; D13/D16",
      "baseline": "Chưa kiểm sản phẩm thật từ đầu tới cuối",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp."
    },
    "SD16": {
      "title": "Đóng gói và quản lý phát hành",
      "mapping": "T05/T09/T13; D12/D20",
      "baseline": "Build từng phần đã có; chưa gói phát hành thật",
      "output": "deployment/BAN_KE_PHAT_HANH.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "backend/requirements.txt",
        "frontend/package-lock.json",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa phụ thuộc và quy trình dựng đã có. Bổ sung bản kê, hash, cấu hình, kiểm phát hành và gói riêng cho chữ hoặc kết hợp."
    },
    "SD17": {
      "title": "Sao lưu, phục hồi và quay lại bản trước",
      "mapping": "T13; D12",
      "baseline": "Có hướng dẫn nháp; chưa diễn tập",
      "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa hướng dẫn phục hồi và SQL nháp. Bổ sung mục tiêu, bản sao lưu thật, phục hồi trên môi trường riêng và kiểm ứng dụng sau phục hồi."
    },
    "SD18": {
      "title": "Quản trị và sự cố",
      "mapping": "T13/T16; D12/D18",
      "baseline": "Có nháp vận hành; chưa người nhận hỗ trợ",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi."
    },
    "SD19": {
      "title": "Hướng dẫn sử dụng",
      "mapping": "T16; D18",
      "baseline": "Hướng dẫn mô phỏng đã có",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review."
    },
    "SD20": {
      "title": "Cài đặt, nâng cấp và xử lý lỗi",
      "mapping": "T13/T16; D12/D18",
      "baseline": "Guide cũ có; chưa kiểm người khác làm theo",
      "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1"
      ],
      "resume_note": "Kế thừa hướng dẫn và script hiện có. Bổ sung cài, nâng cấp, gỡ, điểm kiểm và xử lý lỗi; người khác thực hiện để kiểm tính dùng được."
    },
    "SD21": {
      "title": "Đào tạo và hỗ trợ",
      "mapping": "T16; D18",
      "baseline": "Chưa đào tạo hoặc cam kết hỗ trợ",
      "output": "community/DAO_TAO_VA_HO_TRO.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nội dung hướng dẫn, chưa coi là đã đào tạo. Bổ sung bài thực hành, người hỗ trợ, giới hạn, cách dừng và bằng chứng làm lại đúng."
    },
    "SD22": {
      "title": "Xuất bản, thu hồi và ngừng dịch vụ",
      "mapping": "T10/T13/T15; D05/D19",
      "baseline": "Nguyên mẫu kiểm trước xuất có; Q08 chưa chốt",
      "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi."
    },
    "SD23": {
      "title": "Thử giới hạn có người",
      "mapping": "T06/T18; D09/D15/D16",
      "baseline": "Công cụ nháp; chưa GC/tuyển/thu",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng."
    },
    "SD24": {
      "title": "Phân tích, nghiệm thu và bàn giao",
      "mapping": "T20; D04/D16/D17/D18",
      "baseline": "Khung và hồ sơ AI đã có; học thuật thuộc NCS",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "estimate_basis": "Ước lượng phần thiếu theo các bước dưới đây, có AI hỗ trợ và một vòng sửa. Sai số dự toán ±50%; chờ và đổi phạm vi tính riêng.",
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành."
    }
  },
  "tasks": [
    {
      "id": "R001",
      "package": "SD01",
      "title": "Đối chiếu yêu cầu chữ và phần đã làm",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Đọc nhật ký và biên bản; đối chiếu mã; gắn yêu cầu với hiện vật và phần thiếu; đối chiếu đợt 4 và nguồn task_list.txt còn thiếu, chuyển vấn đề T03 để quyết định",
      "done_when": "Không xếp lại API giả, Vue mô phỏng hoặc checker đã hoàn tất",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đọc lịch sử thực hiện",
          "instructions": "Đối chiếu nhật ký với bốn biên bản nâng cấp. Ghi phần đã làm, giới hạn phép kiểm và việc còn thiếu.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Đọc lịch sử thực hiện",
          "done_when": "Bảng bằng chứng không dùng kế hoạch như sự kiện đã xảy ra.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R001.01"
        },
        {
          "title": "Kiểm hiện vật và chốt phần cần tiếp tục",
          "instructions": "Mở API, Vue, checker và tài liệu được biên bản dẫn. Đối soát nguồn TXT thiếu; đưa mục cần quyết định vào sổ.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Kiểm hiện vật và chốt phần cần tiếp tục",
          "done_when": "Mỗi yêu cầu chữ có hiện vật, trạng thái và việc còn thiếu; không khôi phục nguồn ngầm.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R001.02"
        }
      ],
      "source_paths": [
        "docs/diary/2026-09-26.md",
        "Research/20260926_BIEN_BAN_NANG_CAP_DOT_4.md",
        "backend/app/main.py",
        "frontend/src/App.vue",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "Nhóm cần biết phần hỏi đáp nào đã có bằng chứng, để dành lịch còn lại cho chức năng còn thiếu.",
        "acceptance_checks": [
          "Mỗi yêu cầu chữ dẫn được tới mã, biên bản hoặc trạng thái chưa làm.",
          "API giả, Vue mô phỏng và checker đã hoàn tất không bị lên lịch lại; nguồn TXT thiếu được chuyển xử lý."
        ],
        "dependency_use": {}
      }
    },
    {
      "id": "R002",
      "package": "SD01",
      "title": "Đối chiếu yêu cầu camera và phối hợp",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 120
      },
      "ai_runs": 0,
      "deps": [],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Đọc CYK/CAM; ghi ranh giới; đối chiếu điểm bàn giao với NCS1",
      "done_when": "Mỗi tính năng camera có đầu vào y khoa hoặc ghi chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đọc yêu cầu và nguồn camera",
          "instructions": "Mở bảng CAM, ma trận CYK và đặc tả. Đánh dấu nội dung có nguồn, thiếu protocol hoặc còn ở phần mở rộng.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Đọc yêu cầu và nguồn camera",
          "done_when": "Có danh sách nguồn và khoảng trống cho một chỉ số.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R002.01"
        },
        {
          "title": "Xác định điểm phối hợp hai NCS",
          "instructions": "Nối nguồn, dữ liệu, giao diện và ca kiểm với phần chữ. Ghi đầu ra NCS1 cần bàn giao cho NCS2.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Xác định điểm phối hợp hai NCS",
          "done_when": "Không chọn chức năng camera chỉ vì thư viện kỹ thuật hỗ trợ.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R002.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "Camera cần nguồn y khoa và điểm bàn giao rõ trước khi chọn phép đo hoặc viết mã.",
        "acceptance_checks": [
          "Mỗi tính năng camera có nguồn/đầu vào y khoa hoặc ghi rõ bị chặn.",
          "Danh sách gửi NCS1 nêu trường giao tiếp, giới hạn và phần cần phối hợp."
        ],
        "dependency_use": {}
      }
    },
    {
      "id": "R003",
      "package": "SD01",
      "title": "Chốt lịch khả dụng, vai trò và quy định",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 120
      },
      "ai_runs": 0,
      "deps": [
        "R001",
        "R002"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Xác minh Q01/Q02/Q05/Q07; nhận lịch học; xác nhận người ngoài nhóm; ghi người xử lý nguồn lịch sử thiếu, không tự khôi phục để làm audit đạt",
      "done_when": "Có người nhận từng vai, lịch thi và hạn nộp; chưa biết phải ghi rõ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu nguồn lực và hạn nộp",
          "instructions": "Đọc lịch khả dụng NCS, CVYK và các vai ngoài nhóm. Ghi lịch thi, hạn nộp và vai chưa nhận việc.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Đối chiếu nguồn lực và hạn nộp",
          "done_when": "Các giả định được giữ riêng với lịch đã xác nhận.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R003.01"
        },
        {
          "title": "Ghi phần cần quyết định trước nhận lịch",
          "instructions": "Kiểm Q01/Q02/Q05/Q07 và nguồn lịch sử thiếu. Giao người xử lý từng câu hỏi; ghi bằng chứng và điều kiện chờ.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Ghi phần cần quyết định trước nhận lịch",
          "done_when": "Không tự ký quyền hoặc ghi đủ người khi chưa có xác nhận.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R003.02"
        }
      ],
      "source_paths": [
        "docs/project/project_charter.md",
        "docs/project/intended_use.md",
        "docs/project/SO_QUYET_DINH_THAY_DOI.md",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "Lịch chỉ dùng được khi đúng người có thể nhận việc và phù hợp lịch học, quy định nghiên cứu.",
        "acceptance_checks": [
          "Có người nhận từng vai, lịch thi, hạn nộp và phần khả dụng chưa xác nhận.",
          "Các câu hỏi Q01/Q02/Q05/Q07 và nguồn lịch sử thiếu có người xử lý; không tự ghi đã quyết định."
        ],
        "dependency_use": {
          "R001": "Bảng phần chữ đã có và còn thiếu giúp xác định khối lượng NCS1 phải nhận.",
          "R002": "Bảng phạm vi camera giúp xác định phần NCS2, reviewer và người hỗ trợ cần tham gia."
        }
      }
    },
    {
      "id": "R004",
      "package": "SD01",
      "title": "NCS tự hoàn thiện phạm vi và đề cương còn thiếu",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R003"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Kiểm nguồn gốc bản đầu D03; tự viết phần thuộc NCS; nối tiêu chí sản phẩm",
      "done_when": "NCS giải thích và giữ được bản đầu; không lấy lịch AI thay bài nộp",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS tự đối chiếu bản đầu với phạm vi",
          "instructions": "Mở D03 và yêu cầu cuộc thi đang áp dụng. Tự xác định câu hỏi, phạm vi và phần nguồn gốc chưa có bằng chứng.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — NCS tự đối chiếu bản đầu với phạm vi",
          "done_when": "Có ghi chú do NCS lập và bản đầu được giữ nguyên.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R004.01"
        },
        {
          "title": "NCS tự hoàn thiện phần còn thiếu",
          "instructions": "Tự sửa mục tiêu, giới hạn và cách đánh giá. Dẫn căn cứ đã đọc và tách công việc kỹ thuật khỏi kết luận nghiên cứu.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — NCS tự hoàn thiện phần còn thiếu",
          "done_when": "Không dùng tài liệu AI thay bản đầu học thuật; có lịch sử sửa.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R004.02"
        }
      ],
      "source_paths": [
        "docs/project/project_charter.md",
        "docs/project/intended_use.md",
        "docs/project/SO_QUYET_DINH_THAY_DOI.md",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "NCS cần tự hoàn thiện căn cứ và phạm vi nghiên cứu, để có thể giải thích bài làm của mình.",
        "acceptance_checks": [
          "Bản đầu do NCS tự viết được giữ cùng nguồn gốc và lịch sử sửa.",
          "Phạm vi và tiêu chí sản phẩm khớp quyết định hiện có; lịch AI không thay bài nộp."
        ],
        "dependency_use": {
          "R003": "Lịch khả dụng, người nhận việc và quy định đã đối chiếu giúp NCS giới hạn đề cương vào phạm vi có thể thực hiện."
        }
      }
    },
    {
      "id": "A01",
      "package": "SD01",
      "title": "Chuẩn hóa ma trận yêu cầu kỹ thuật",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R004"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Ghép yêu cầu với T/D/CAM; nêu ca nghiệm thu; kiểm thiếu và trùng",
      "done_when": "Bản nháp kỹ thuật có truy vết, không có chữ ký hoặc kết luận nghiên cứu",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chuẩn hóa ma trận yêu cầu kỹ thuật",
          "instructions": "Ghép yêu cầu với T/D/CAM; nêu ca nghiệm thu; kiểm thiếu và trùng.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Chuẩn hóa ma trận yêu cầu kỹ thuật",
          "done_when": "Bản nháp kỹ thuật có truy vết, không có chữ ký hoặc kết luận nghiên cứu.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A01.01"
        }
      ],
      "source_paths": [
        "docs/project/project_charter.md",
        "docs/project/intended_use.md",
        "docs/project/SO_QUYET_DINH_THAY_DOI.md",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "Ma trận kỹ thuật giúp nhìn thấy yêu cầu nào đã có việc thực hiện và phép kiểm, tránh bỏ sót hoặc tính trùng.",
        "acceptance_checks": [
          "Yêu cầu liên kết được với T/D/CAM và ca nghiệm thu dự kiến.",
          "Bản nháp đánh dấu thiếu/trùng; không chứa chữ ký hoặc kết luận nghiên cứu thay NCS."
        ],
        "dependency_use": {
          "R004": "Phạm vi và đề cương NCS đã tự hoàn thiện là căn cứ để AI chỉ tổ chức phần yêu cầu kỹ thuật phù hợp."
        }
      }
    },
    {
      "id": "R005",
      "package": "SD01",
      "title": "Kiểm và sửa ma trận yêu cầu",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "A01"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Đọc từng yêu cầu; xác nhận phạm vi 40 thẻ/40 FAQ và nhánh camera là giả định",
      "done_when": "Yêu cầu có ID, người kiểm và tiêu chí; Q04 chưa chốt phải dời lô",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm ma trận yêu cầu",
          "instructions": "Đối chiếu từng dòng A01 với phạm vi đã nêu. Tách chức năng có và chưa có; kiểm người phụ trách.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Kiểm ma trận yêu cầu",
          "done_when": "Không lẫn giả định 40 thẻ/40 FAQ với quyết định Q04.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R005.01"
        },
        {
          "title": "Nối yêu cầu với phép kiểm và sửa thiếu",
          "instructions": "Với mỗi yêu cầu, ghi đầu ra và phép nghiệm thu. Đối chiếu chức năng camera với CYK, lưu bản sửa cho phiên PREP.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Nối yêu cầu với phép kiểm và sửa thiếu",
          "done_when": "Không yêu cầu nào thiếu người kiểm hoặc tiêu chí nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R005.02"
        }
      ],
      "source_paths": [
        "docs/project/project_charter.md",
        "docs/project/intended_use.md",
        "docs/project/SO_QUYET_DINH_THAY_DOI.md",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "NCS phải kiểm ma trận AI để tránh biến giả định về lô tri thức hoặc camera thành phạm vi đã duyệt.",
        "acceptance_checks": [
          "Mỗi yêu cầu có ID, người kiểm và tiêu chí quan sát được.",
          "Lô 40 thẻ/40 FAQ và nhánh camera được ghi đúng trạng thái giả định; Q04 chưa chốt thì việc phụ thuộc phải chờ."
        ],
        "dependency_use": {
          "A01": "Ma trận kỹ thuật dự thảo cung cấp từng dòng yêu cầu để NCS đối chiếu, sửa thiếu và loại trùng."
        }
      }
    },
    {
      "id": "PREP",
      "package": "SD01",
      "title": "Phiên chốt phạm vi sơ bộ để hoàn thiện hồ sơ",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R005",
        "R003"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Kiểm phạm vi, người nhận việc, quy định, nguồn gốc NCS; ghi quyết định thực",
      "done_when": "Có phạm vi sơ bộ và việc chuẩn bị; đây chưa phải cổng G0 đầy đủ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "decision": false,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Phiên chốt phạm vi sơ bộ để hoàn thiện hồ sơ",
          "instructions": "Kiểm phạm vi, người nhận việc, quy định, nguồn gốc NCS; ghi quyết định thực.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Phiên chốt phạm vi sơ bộ để hoàn thiện hồ sơ",
          "done_when": "Có phạm vi sơ bộ và việc chuẩn bị; đây chưa phải cổng G0 đầy đủ.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "PREP.01"
        }
      ],
      "source_paths": [
        "docs/project/project_charter.md",
        "docs/project/intended_use.md",
        "docs/project/SO_QUYET_DINH_THAY_DOI.md",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "Phiên này tạo phạm vi sơ bộ và danh sách việc chuẩn bị, giúp hoàn thiện hồ sơ trước cổng G0 đầy đủ.",
        "acceptance_checks": [
          "Biên bản ghi phạm vi sơ bộ, vai nhận việc và các điều kiện còn thiếu.",
          "Quyết định thực được ghi đúng thẩm quyền; không gọi phiên chuẩn bị là đã đạt G0."
        ],
        "dependency_use": {
          "R005": "Ma trận đã được NCS kiểm giúp chọn phạm vi chuẩn bị và nhận diện yêu cầu chưa có tiêu chí.",
          "R003": "Thông tin người nhận việc, lịch học và quy định giúp kiểm tính khả thi của phạm vi sơ bộ."
        }
      }
    },
    {
      "id": "R006",
      "package": "SD02",
      "title": "Hoàn thiện luồng chữ từ tài liệu có sẵn",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R001"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md",
      "steps": "Rà câu hỏi nháp; tách NCT/người chăm sóc/quản trị; ghi giả thuyết nhu cầu",
      "done_when": "Chưa gọi đây là kết quả khảo sát; có đường đi và trạng thái lỗi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu nhu cầu đã có trong tài liệu",
          "instructions": "Đọc công cụ khảo sát nháp và mục đích sử dụng. Tách điều đã có bằng chứng khỏi giả thuyết về người dùng.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Đối chiếu nhu cầu đã có trong tài liệu",
          "done_when": "Không trình bày giả thuyết như kết quả khảo sát.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R006.01"
        },
        {
          "title": "Vẽ luồng NCT, người chăm sóc và quản trị",
          "instructions": "Ghi bước bắt đầu, hỏi, xem nguồn, gặp lỗi, dừng và nhận hỗ trợ. Đánh dấu điểm mỗi vai được phép thao tác.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Vẽ luồng NCT, người chăm sóc và quản trị",
          "done_when": "Luồng có đường lỗi và ranh giới người chăm sóc; chưa gửi công cụ tới người tham gia.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R006.02"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/research/instruments/W1_D04_ExpertInterviewGuide_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/project/intended_use.md"
      ],
      "resume_note": "Kế thừa công cụ nhu cầu và mẫu đồng ý dự thảo. Bổ sung luồng chữ/camera, review câu hỏi và điều kiện dùng với người.",
      "reader_notes": {
        "purpose": "Luồng chữ ban đầu giúp nhóm thiết kế tác vụ và trạng thái lỗi trước khi được phép gặp người tham gia.",
        "acceptance_checks": [
          "Phiếu luồng tách người cao tuổi, người chăm sóc và quản trị, gồm đường đi và lỗi.",
          "Nhu cầu lấy từ tài liệu được ghi là giả thuyết, chưa nhận là kết quả khảo sát."
        ],
        "dependency_use": {
          "R001": "Đối chiếu chức năng chữ hiện có giúp chỉ thiết kế luồng và tác vụ còn thiếu."
        }
      }
    },
    {
      "id": "R007",
      "package": "SD02",
      "title": "Đối chiếu luồng camera với người hỗ trợ",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 120
      },
      "ai_runs": 0,
      "deps": [
        "R002"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md",
      "steps": "Rà đặt máy, dừng, từ chối quyền, không đo được; đưa vào phiếu tác vụ",
      "done_when": "Không thêm chỉ dẫn vận động chưa có nguồn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Rà tác vụ quan sát cử động",
          "instructions": "Đối chiếu đặt máy, quyền thiết bị, dừng và không đo được với thiết kế hiện có. Ghi điều kiện chưa rõ.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Rà tác vụ quan sát cử động",
          "done_when": "Không thêm bài vận động chưa có nguồn.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R007.01"
        },
        {
          "title": "Đưa tác vụ vào phiếu cho người hỗ trợ",
          "instructions": "Tách thao tác của NCS2, người hỗ trợ và người dùng. Ghi khi nào phải dừng hoặc chuyển người phù hợp.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Đưa tác vụ vào phiếu cho người hỗ trợ",
          "done_when": "Phiếu không giao người hỗ trợ tự diễn giải y khoa.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R007.02"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/research/instruments/W1_D04_ExpertInterviewGuide_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/project/intended_use.md"
      ],
      "resume_note": "Kế thừa công cụ nhu cầu và mẫu đồng ý dự thảo. Bổ sung luồng chữ/camera, review câu hỏi và điều kiện dùng với người.",
      "reader_notes": {
        "purpose": "Luồng camera phải tính cả từ chối quyền, dừng và không đo được, để người hỗ trợ không dẫn người dùng vượt phạm vi.",
        "acceptance_checks": [
          "Phiếu tác vụ có đặt máy, từ chối quyền, dừng và trường hợp không đo được.",
          "Mọi chỉ dẫn vận động dẫn được tới nguồn phù hợp hoặc được ghi chặn."
        ],
        "dependency_use": {
          "R002": "Ranh giới camera và đầu vào y khoa giúp xác định những thao tác người hỗ trợ được mô tả."
        }
      }
    },
    {
      "id": "R008",
      "package": "SD02",
      "title": "Review câu hỏi và giới hạn tác vụ",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "R006",
        "R007"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md",
      "steps": "Đọc câu hỏi sức khỏe; đánh dấu câu phải bỏ hoặc sửa; chuyển NCS",
      "done_when": "Có phản hồi về cờ đỏ và giới hạn; chưa phê duyệt nghiên cứu",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review câu hỏi và giới hạn tác vụ",
          "instructions": "Đọc câu hỏi sức khỏe; đánh dấu câu phải bỏ hoặc sửa; chuyển NCS.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Review câu hỏi và giới hạn tác vụ",
          "done_when": "Có phản hồi về cờ đỏ và giới hạn; chưa phê duyệt nghiên cứu.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "R008.01"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/research/instruments/W1_D04_ExpertInterviewGuide_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/project/intended_use.md"
      ],
      "resume_note": "Kế thừa công cụ nhu cầu và mẫu đồng ý dự thảo. Bổ sung luồng chữ/camera, review câu hỏi và điều kiện dùng với người.",
      "reader_notes": {
        "purpose": "Câu hỏi và tác vụ liên quan sức khỏe cần được CVYK xem trước để phát hiện nội dung vượt giới hạn.",
        "acceptance_checks": [
          "Nhận xét chỉ rõ câu cần giữ, bỏ hoặc sửa cùng vấn đề cờ đỏ/giới hạn.",
          "Kết quả được chuyển NCS; không dùng review công cụ làm phê duyệt nghiên cứu với người."
        ],
        "dependency_use": {
          "R006": "Phiếu luồng chữ cung cấp các câu hỏi và tình huống sức khỏe cần review.",
          "R007": "Phiếu luồng camera cung cấp chỉ dẫn và điểm dừng cần kiểm giới hạn chuyên môn."
        }
      }
    },
    {
      "id": "R009",
      "package": "SD02",
      "title": "Sửa công cụ theo review",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "R008"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md",
      "steps": "Áp dụng phản hồi; kiểm câu chữ và phiên bản; nối SD23",
      "done_when": "Công cụ sẵn để trình đúng phạm vi, chưa gửi người tham gia",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa câu hỏi theo phản hồi chuyên môn",
          "instructions": "Mở nhận xét R008; sửa hoặc bỏ câu được đánh dấu. Giữ lý do thay đổi và phiên bản nguồn.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Sửa câu hỏi theo phản hồi chuyên môn",
          "done_when": "Mỗi nhận xét có cách xử lý hoặc trạng thái còn chờ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R009.01"
        },
        {
          "title": "Kiểm công cụ trước đưa vào hồ sơ",
          "instructions": "Đọc lại luồng câu hỏi, tên trường và hướng dẫn. Gắn phiên bản với SD23, giữ bản chưa được phép sử dụng.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Kiểm công cụ trước đưa vào hồ sơ",
          "done_when": "Công cụ đủ để trình xét; không được hiểu là quyền thu dữ liệu.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R009.02"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/research/instruments/W1_D04_ExpertInterviewGuide_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/project/intended_use.md"
      ],
      "resume_note": "Kế thừa công cụ nhu cầu và mẫu đồng ý dự thảo. Bổ sung luồng chữ/camera, review câu hỏi và điều kiện dùng với người.",
      "reader_notes": {
        "purpose": "Công cụ cần phản ánh đúng nhận xét CVYK trước khi được đưa vào hồ sơ hoạt động với người.",
        "acceptance_checks": [
          "Mỗi nhận xét R008 có bản sửa hoặc trạng thái chưa giải quyết.",
          "Phiếu có phiên bản và phạm vi để trình SD23; chưa được gửi người tham gia."
        ],
        "dependency_use": {
          "R008": "Nhận xét chuyên môn cho biết câu nào phải sửa, bỏ hoặc giữ để hoàn thiện công cụ."
        }
      }
    },
    {
      "id": "R010",
      "package": "SD09",
      "title": "Xác minh môi trường hiện tại và chọn phiên bản",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R001"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
      "steps": "Giữ bằng chứng đợt 3; kiểm đường dẫn Python đang dùng; chọn Python/Node hỗ trợ",
      "done_when": "Bản kê máy hiện tại rõ; không phủ nhận 313 test lịch sử",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu máy hiện tại với bằng chứng cũ",
          "instructions": "Đọc biên bản đợt 3–4. Ghi đường dẫn trình thông dịch, phiên bản Python/Node và môi trường đang dùng; tách lỗi máy hiện tại khỏi kết quả lịch sử.",
          "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md — Bảng đối chiếu môi trường",
          "done_when": "Mỗi phiên bản có lệnh kiểm và kết quả quan sát; giữ nguyên bằng chứng kiểm thử cũ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R010.01"
        },
        {
          "title": "Chọn phạm vi phiên bản cần hỗ trợ",
          "instructions": "Đối chiếu khai báo phụ thuộc với phiên bản máy đích. Ghi lựa chọn Python/Node, lý do và phần chưa kiểm; cập nhật lệnh dùng môi trường đã chọn.",
          "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md — Phạm vi phiên bản và lệnh chuẩn",
          "done_when": "Không suy một phiên bản đã kiểm thành mọi phiên bản hỗ trợ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R010.02"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1",
        "backend/requirements.txt"
      ],
      "resume_note": "Kế thừa hướng dẫn, phép kiểm cài sạch và kết quả lịch sử. Xác minh máy hiện tại, khóa phiên bản và xử lý phần chưa tái lập được.",
      "reader_notes": {
        "purpose": "Kiểm máy hiện tại giúp chọn lệnh và phiên bản có thể dùng tiếp, đồng thời giữ giá trị bằng chứng của các đợt trước.",
        "acceptance_checks": [
          "Bản kê ghi đường dẫn Python, phiên bản Python/Node và kết quả kiểm hiện tại.",
          "Phiên bản chọn hỗ trợ và phần chưa kiểm được nêu rõ; không phủ nhận kết quả lịch sử vì máy hiện tại khác."
        ],
        "dependency_use": {
          "R001": "Bảng hiện vật đã có giúp xác định công cụ và ứng dụng cần tái lập trên máy đang dùng."
        }
      }
    },
    {
      "id": "A09",
      "package": "SD09",
      "title": "Khóa phụ thuộc và cập nhật hướng dẫn dựng",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R010"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
      "steps": "Đề xuất bản khóa Python, rà phiên bản; sửa lệnh dựng theo cấu hình chọn",
      "done_when": "Không hardcode máy cá nhân; ghi giấy phép và phụ thuộc",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nháp bản khóa và hướng dẫn dựng đúng phiên bản",
          "instructions": "Đọc bản kê R010, pyproject và lock frontend. Đề xuất khóa phụ thuộc, nguồn gói, giấy phép và lệnh dựng; không tự cài dịch vụ tùy chọn.",
          "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md — Đề xuất khóa phụ thuộc và sửa hướng dẫn",
          "done_when": "Lệnh không phụ thuộc đường dẫn máy cá nhân; phần chưa kiểm được ghi rõ.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A09.01"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1",
        "backend/requirements.txt"
      ],
      "resume_note": "Kế thừa hướng dẫn, phép kiểm cài sạch và kết quả lịch sử. Xác minh máy hiện tại, khóa phiên bản và xử lý phần chưa tái lập được.",
      "reader_notes": {
        "purpose": "Khóa phụ thuộc và lệnh dựng giúp người khác tạo cùng môi trường mà không dựa vào cấu hình máy người viết.",
        "acceptance_checks": [
          "Đề xuất ghi phiên bản phụ thuộc, nguồn gói và giấy phép cần kiểm.",
          "Lệnh dựng dùng cấu hình đã chọn, không chứa đường dẫn máy cá nhân hoặc bí mật."
        ],
        "dependency_use": {
          "R010": "Bản kê và lựa chọn phiên bản cung cấp cơ sở để đề xuất khóa gói và sửa lệnh dựng."
        }
      }
    },
    {
      "id": "R011",
      "package": "SD09",
      "title": "Kiểm dựng độc lập theo phiên bản đã chọn",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "A09"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
      "steps": "Dùng môi trường thử; kiểm gói khóa, test, build; lưu log",
      "done_when": "Đúng app và phạm vi; môi trường khác phải ghi riêng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Dựng bản nguồn trên môi trường thử độc lập",
          "instructions": "Nhận bản khóa A09; ghi hệ điều hành và trình thông dịch. Làm theo hướng dẫn trong môi trường thử riêng; lưu lệnh cài và lỗi, không dùng bộ nhớ của người viết.",
          "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md — Log dựng độc lập",
          "done_when": "Nêu rõ gói, phiên bản, nguồn cài và bước thất bại nếu có.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R011.01"
        },
        {
          "title": "Kiểm test, bản dựng và khả năng lặp lại",
          "instructions": "Chạy các kiểm thử thuộc app được chọn và dựng frontend. Đối chiếu log với hướng dẫn; lập danh sách sai khác môi trường và bước cần sửa.",
          "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md — Biên bản tái lập",
          "done_when": "Kết quả gắn môi trường cụ thể; không nhận kết quả máy khác làm bằng chứng máy này.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R011.02"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1",
        "backend/requirements.txt"
      ],
      "resume_note": "Kế thừa hướng dẫn, phép kiểm cài sạch và kết quả lịch sử. Xác minh máy hiện tại, khóa phiên bản và xử lý phần chưa tái lập được.",
      "reader_notes": {
        "purpose": "Một lượt dựng độc lập phát hiện bước thiếu mà người viết hướng dẫn có thể không nhận ra.",
        "acceptance_checks": [
          "Log ghi môi trường thử, phiên bản, lệnh cài, test và bản dựng.",
          "Sai khác hoặc thất bại được ghi theo app và phạm vi; không gộp kết quả của môi trường khác."
        ],
        "dependency_use": {
          "A09": "Bản khóa dự kiến và hướng dẫn dựng cung cấp đúng đầu vào để reviewer thử làm lại."
        }
      }
    },
    {
      "id": "R012",
      "package": "SD09",
      "title": "Sửa hướng dẫn và xác nhận tái lập",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "R011"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
      "steps": "Sửa lỗi từ lượt độc lập; chạy lại phần bị ảnh hưởng",
      "done_when": "D20 khớp lệnh thực và lỗi còn mở",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa hướng dẫn theo lỗi tái lập",
          "instructions": "Đọc biên bản R011, sửa từng lệnh hoặc điều kiện thiếu. Chạy lại các bước bị ảnh hưởng; ghi liên kết từ lỗi tới bản sửa và kết quả.",
          "output": "docs/guides/MOI_TRUONG_VA_DONG_GOP.md — Hướng dẫn D20 đã đối chiếu",
          "done_when": "Mỗi lỗi được xử lý hoặc giữ trạng thái chờ; không ghi tái lập thành công khi còn thiếu bằng chứng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R012.01"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1",
        "backend/requirements.txt"
      ],
      "resume_note": "Kế thừa hướng dẫn, phép kiểm cài sạch và kết quả lịch sử. Xác minh máy hiện tại, khóa phiên bản và xử lý phần chưa tái lập được.",
      "reader_notes": {
        "purpose": "Sửa theo lượt dựng độc lập giúp hướng dẫn phản ánh thao tác thực tế, thay vì chỉ có lệnh mẫu.",
        "acceptance_checks": [
          "Mỗi lỗi R011 có sửa tương ứng hoặc được giữ mở với lý do.",
          "Các bước bị ảnh hưởng được chạy lại; D20 dẫn được tới lệnh và log mới."
        ],
        "dependency_use": {
          "R011": "Log dựng độc lập chỉ ra lệnh, cấu hình và điều kiện thiếu cần sửa và kiểm lại."
        }
      }
    },
    {
      "id": "R013",
      "package": "SD03",
      "title": "Chốt đề xuất hợp đồng schema và phiên bản",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "PREP"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "steps": "So ba schema và nhãn; ghi trường bắt buộc; vẽ dữ liệu lưu/xóa",
      "done_when": "Không tự ánh xạ nhãn y khoa; có ca đúng/sai/rỗng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Lập bảng sai khác ba schema",
          "instructions": "Đối chiếu từng trường, kiểu dữ liệu, ID và trạng thái. Ghi khác biệt có ảnh hưởng tới kiểm tra hoặc phát hành.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Lập bảng sai khác ba schema",
          "done_when": "Mỗi khác biệt có vị trí và câu hỏi cần phân xử.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R013.01"
        },
        {
          "title": "Đề xuất từ điển trường và phiên bản",
          "instructions": "Ghi trường bắt buộc, giá trị cho phép và cách tham chiếu nguồn. Đánh dấu nhãn cần CVYK xét; không tự đổi nghĩa.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Đề xuất từ điển trường và phiên bản",
          "done_when": "Có mẫu hợp lệ, không hợp lệ và trường hợp rỗng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R013.02"
        },
        {
          "title": "Vẽ vòng đời dữ liệu dự kiến",
          "instructions": "Nối tạo, review, phát hành, thu hồi và xóa. Ghi điểm chuyển đổi và trách nhiệm, chuyển R014/R015/R016.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Vẽ vòng đời dữ liệu dự kiến",
          "done_when": "Hợp đồng đề xuất đầy đủ; phần chưa được xét được đánh dấu.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R013.03"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "Một hợp đồng dữ liệu chung giúp schema, mã và tài liệu hiểu cùng trường và trạng thái trước khi triển khai.",
        "acceptance_checks": [
          "Bảng đối chiếu ba schema nêu trường bắt buộc, phiên bản và khác biệt nhãn.",
          "Có ca đúng/sai/rỗng cùng luồng lưu/xóa; nhãn y khoa chưa quyết định không bị tự ánh xạ."
        ],
        "dependency_use": {
          "PREP": "Phạm vi sơ bộ cho biết dữ liệu nào cần đưa vào hợp đồng và phần nào còn chờ quyết định."
        }
      }
    },
    {
      "id": "R014",
      "package": "SD03",
      "title": "Review dữ liệu camera tối thiểu",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 120
      },
      "ai_runs": 0,
      "deps": [
        "R013"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "steps": "Đối chiếu CYK; loại video/khung xương khỏi dữ liệu gửi; ghi chỉ số cần giữ",
      "done_when": "Trường dữ liệu có mục đích và điều kiện giữ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu trường camera với CYK",
          "instructions": "Ghi từng chỉ số cần dùng, mục đích và nguồn. Bỏ yêu cầu gửi video hoặc khung xương khỏi hợp đồng.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Đối chiếu trường camera với CYK",
          "done_when": "Trường giữ lại có nhu cầu cụ thể và giới hạn.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R014.01"
        },
        {
          "title": "Kiểm dữ liệu thiếu và quyền giữ",
          "instructions": "Mô tả khi không đo được, hết quyền hoặc dữ liệu cần thu hồi. Chuyển đề xuất cho người giữ dữ liệu.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Kiểm dữ liệu thiếu và quyền giữ",
          "done_when": "Không tự chọn thời hạn lưu chỉ số từ quy tắc video.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R014.02"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "Camera chỉ nên trao đổi dữ liệu có mục đích rõ, tránh đưa video hoặc khung xương vào luồng gửi không được phép.",
        "acceptance_checks": [
          "Mỗi trường camera có mục đích, nguồn CYK và điều kiện giữ.",
          "Hợp đồng không yêu cầu gửi video/khung xương; chỉ số dự kiến giữ được ghi rõ phạm vi."
        ],
        "dependency_use": {
          "R013": "Bản hợp đồng schema dự kiến cung cấp các trường để NCS2 đối chiếu với dữ liệu camera tối thiểu."
        }
      }
    },
    {
      "id": "R015",
      "package": "SD03",
      "title": "Review nhãn và ý nghĩa dữ liệu",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "R013"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "steps": "Giải quyết K02 về nhãn; xem giới hạn diễn giải; ghi quyết định chuyên môn",
      "done_when": "Nhãn có nguồn và người quyết phù hợp",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review nhãn giữa các schema",
          "instructions": "Đọc bảng sai khác và nguồn liên quan. Đánh dấu nhãn đồng nghĩa, khác nghĩa hoặc chưa đủ căn cứ.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Review nhãn giữa các schema",
          "done_when": "Không gộp nhãn chỉ vì tên gần nhau.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "R015.01"
        },
        {
          "title": "Review giới hạn diễn giải",
          "instructions": "Kiểm các trường có thể dẫn tới kết luận sức khỏe. Ghi cách dùng, trường hợp phải bỏ trống và điều cần chặn.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Review giới hạn diễn giải",
          "done_when": "Mỗi đề xuất có giới hạn và căn cứ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "R015.02"
        },
        {
          "title": "Ghi kết quả phân xử chuyên môn",
          "instructions": "Đối chiếu câu hỏi K02. Ghi phần chấp thuận, yêu cầu sửa và phần chưa quyết định theo phiên bản.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Ghi kết quả phân xử chuyên môn",
          "done_when": "Quyết định chỉ có hiệu lực khi đúng người thực sự xem xét.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "R015.03"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "Nhãn dữ liệu có ý nghĩa chuyên môn nên cần người có thẩm quyền phân xử, tránh mã tự suy diễn y khoa.",
        "acceptance_checks": [
          "Mâu thuẫn nhãn K02 có nguồn, nhận xét và quyết định hoặc trạng thái chờ.",
          "Giới hạn diễn giải của từng nhãn được ghi cùng người có quyền quyết định."
        ],
        "dependency_use": {
          "R013": "Bảng khác biệt schema và nhãn cho biết những khái niệm chuyên môn cần phân xử trước đồng bộ mã."
        }
      }
    },
    {
      "id": "R016",
      "package": "SD03",
      "title": "Thiết kế vòng đời và quyền dữ liệu",
      "status": "PLANNED",
      "minutes": {
        "DATA": 180
      },
      "ai_runs": 0,
      "deps": [
        "R013"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "steps": "Gắn mỗi trường với chủ giữ, hạn giữ, xóa, bản sao và quyền",
      "done_when": "Không để chỉ số camera tự mang thời hạn video",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Lập danh mục trường và quyền truy cập",
          "instructions": "Gắn trường với mục đích, chủ giữ và người đọc/ghi. Phân biệt dữ liệu nghiên cứu với dữ liệu vận hành.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Lập danh mục trường và quyền truy cập",
          "done_when": "Không có trường vô chủ hoặc không rõ mục đích.",
          "minutes": {
            "DATA": 60
          },
          "ai_runs": 0,
          "id": "R016.01"
        },
        {
          "title": "Thiết kế giữ, xóa và rút lui",
          "instructions": "Ghi thời hạn dự kiến, cách nhận yêu cầu và phần dữ liệu không còn được dùng. Nối với bản sao.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Thiết kế giữ, xóa và rút lui",
          "done_when": "Quyền giữ chỉ số được quyết định riêng.",
          "minutes": {
            "DATA": 60
          },
          "ai_runs": 0,
          "id": "R016.02"
        },
        {
          "title": "Đối chiếu phục hồi và thu hồi",
          "instructions": "Kiểm trường hợp khôi phục dữ liệu đã mất quyền. Ghi quy tắc lưu bằng chứng và chuyển hồ sơ kiểm quyền.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Đối chiếu phục hồi và thu hồi",
          "done_when": "Phục hồi không làm sống lại quyền đã bị thu hồi.",
          "minutes": {
            "DATA": 60
          },
          "ai_runs": 0,
          "id": "R016.03"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "Thời hạn và quyền dữ liệu phải theo từng loại dữ liệu, để việc lưu hoặc xóa không dựa vào suy đoán.",
        "acceptance_checks": [
          "Mỗi trường có chủ giữ, nơi giữ, thời hạn, quyền và cách xử lý bản sao.",
          "Chỉ số camera không tự nhận thời hạn của video; chỗ chưa xác định được ghi chờ."
        ],
        "dependency_use": {
          "R013": "Danh sách trường và luồng lưu/xóa là cơ sở để gắn trách nhiệm và thời hạn cho từng loại dữ liệu."
        }
      }
    },
    {
      "id": "R017",
      "package": "SD03",
      "title": "Kiểm phạm vi dữ liệu và nhà cung cấp",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 120
      },
      "ai_runs": 0,
      "deps": [
        "R016"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "steps": "Đối chiếu hồ sơ dữ liệu; ghi điều kiện cần và bằng chứng",
      "done_when": "Điểm chưa đủ chứng cứ vẫn bị chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu dữ liệu với quyền dịch vụ",
          "instructions": "Đọc bản đồ dữ liệu và hồ sơ nhà cung cấp. Ghi thao tác được đề nghị, đối tượng và bằng chứng điều khoản.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Đối chiếu dữ liệu với quyền dịch vụ",
          "done_when": "Không dùng thông tin tổng quát thay điều khoản đúng dịch vụ.",
          "minutes": {
            "LEGAL": 60
          },
          "ai_runs": 0,
          "id": "R017.01"
        },
        {
          "title": "Ghi điều kiện trước thay hợp đồng",
          "instructions": "Phân loại mục đủ bằng chứng, phải sửa hoặc còn chặn. Trả nhận xét kèm phiên bản để A03 chỉ làm phần được xét.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Ghi điều kiện trước thay hợp đồng",
          "done_when": "Không tự ghi tuân thủ khi chưa xác minh quyền.",
          "minutes": {
            "LEGAL": 60
          },
          "ai_runs": 0,
          "id": "R017.02"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "Hồ sơ dữ liệu cần được đối chiếu với quyền và dịch vụ thực tế trước khi triển khai cơ chế lưu/truyền.",
        "acceptance_checks": [
          "Các thao tác dự kiến có căn cứ quyền hoặc được đánh dấu chưa đủ chứng cứ.",
          "Nhận xét nêu điều kiện cần bổ sung và phần phải tiếp tục chặn."
        ],
        "dependency_use": {
          "R016": "Bảng vòng đời dữ liệu cho biết ai giữ, truyền và xóa dữ liệu để người kiểm quyền đối chiếu hồ sơ."
        }
      }
    },
    {
      "id": "A03",
      "package": "SD03",
      "title": "Cập nhật schema và bộ kiểm theo quyết định",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R014",
        "R015",
        "R017"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/schemas/; tools/validate_schema.py; testing/scripts/",
      "steps": "Đồng bộ schema/validator; viết ca biên và chuyển đổi; giữ dữ liệu mẫu tổng hợp",
      "done_when": "Mọi thay đổi có test âm, dữ liệu rỗng không đạt giả",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Cập nhật schema và bộ kiểm theo quyết định",
          "instructions": "Đồng bộ schema/validator; viết ca biên và chuyển đổi; giữ dữ liệu mẫu tổng hợp.",
          "output": "knowledge-base/schemas/; tools/validate_schema.py; testing/scripts/ — Cập nhật schema và bộ kiểm theo quyết định",
          "done_when": "Mọi thay đổi có test âm, dữ liệu rỗng không đạt giả.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A03.01"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "Schema và bộ kiểm cần được sửa đồng thời theo quyết định đã có, tránh hai nơi chấp nhận dữ liệu khác nhau.",
        "acceptance_checks": [
          "Bản nháp đồng bộ schema/validator có ca sai, ca biên và mẫu chuyển đổi tổng hợp.",
          "Dữ liệu rỗng hoặc bị cấm không được báo đạt; chưa dùng mẫu giả làm dữ liệu y khoa được duyệt."
        ],
        "dependency_use": {
          "R014": "Review camera xác định trường tối thiểu và dữ liệu không được đưa vào schema gửi/lưu.",
          "R015": "Kết quả phân xử nhãn cung cấp ý nghĩa được phép dùng khi sửa schema và kiểm nhãn.",
          "R017": "Nhận xét quyền dữ liệu xác định điều kiện phải kiểm hoặc tiếp tục chặn trong bộ kiểm."
        }
      }
    },
    {
      "id": "R018",
      "package": "SD03",
      "title": "Review và áp dụng hợp đồng đã xét",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "A03"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "steps": "Đọc thay đổi; thử mẫu; cập nhật từ điển trường",
      "done_when": "Schema, mã và tài liệu không mâu thuẫn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review thay đổi schema và validator",
          "instructions": "Đọc bản thay đổi A03 theo từng trường. Kiểm cách xử lý ID, trạng thái, nguồn và dữ liệu rỗng.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Review thay đổi schema và validator",
          "done_when": "NCS giải thích được lý do thay đổi; không lẫn thay cấu trúc với duyệt nội dung.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R018.01"
        },
        {
          "title": "Thử mẫu và hoàn thiện tài liệu",
          "instructions": "Chạy ca đúng/sai; đối chiếu kết quả với hợp đồng. Sửa từ điển trường và lưu phiên bản để review độc lập.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Thử mẫu và hoàn thiện tài liệu",
          "done_when": "Schema, validator và tài liệu cùng hợp đồng; lỗi còn mở được ghi rõ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R018.02"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "NCS phải đọc và thử hợp đồng do AI sửa để phát hiện khác biệt giữa mô tả trường và hành vi mã.",
        "acceptance_checks": [
          "Mẫu đúng/sai/rỗng được chạy với schema và bộ kiểm mới, có kết quả ghi lại.",
          "Từ điển trường, schema và mã khớp nhau; thay đổi truy được tới quyết định."
        ],
        "dependency_use": {
          "A03": "Bản sửa schema/validator và ca tổng hợp cung cấp mã cụ thể để NCS đọc, thử và chỉnh."
        }
      }
    },
    {
      "id": "R019",
      "package": "SD03",
      "title": "Kiểm độc lập hợp đồng và bộ kiểm",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "R018"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/HOP_DONG_DU_LIEU.md",
      "steps": "Thử dữ liệu sai, ID trùng, trạng thái hết quyền; ghi kết quả",
      "done_when": "Ca bị cấm phải thất bại; không coi checker là duyệt nội dung",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm ca sai và tập rỗng",
          "instructions": "Dùng dữ liệu tổng hợp thử trường thiếu, sai kiểu và tập rỗng. So đầu ra với yêu cầu đã khóa.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Kiểm ca sai và tập rỗng",
          "done_when": "Ca không đủ điều kiện không được báo đạt.",
          "minutes": {
            "REVIEW_TECH": 60
          },
          "ai_runs": 0,
          "id": "R019.01"
        },
        {
          "title": "Kiểm ID và trạng thái quyền",
          "instructions": "Thử ID trùng, thẻ nháp, nguồn hết quyền và mâu thuẫn trạng thái. Lưu lỗi có bước lặp lại.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Kiểm ID và trạng thái quyền",
          "done_when": "Các trường hợp bị cấm bị chặn theo hợp đồng.",
          "minutes": {
            "REVIEW_TECH": 60
          },
          "ai_runs": 0,
          "id": "R019.02"
        },
        {
          "title": "Kết luận phạm vi kiểm và bàn giao",
          "instructions": "Đối chiếu kết quả, phiên bản và phần chưa kiểm. Trả lỗi hoặc báo đủ điều kiện kỹ thuật theo phạm vi.",
          "output": "docs/project/HOP_DONG_DU_LIEU.md — Kết luận phạm vi kiểm và bàn giao",
          "done_when": "Không dùng kết quả checker thay phê duyệt nguồn hoặc nội dung.",
          "minutes": {
            "REVIEW_TECH": 60
          },
          "ai_runs": 0,
          "id": "R019.03"
        }
      ],
      "source_paths": [
        "knowledge-base/schemas/knowledge_item_schema.yaml",
        "knowledge-base/knowledge-cards/_schema.json",
        "knowledge-base/faq/_schema.json",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa schema và hồ sơ dữ liệu đã có. Bổ sung hợp đồng phiên bản, nhãn, vòng đời và quyết định trước sửa schema hoặc dữ liệu.",
      "reader_notes": {
        "purpose": "Kiểm độc lập giúp phát hiện bộ kiểm chấp nhận nhầm dữ liệu trước khi bộ nạp và DB dựa vào nó.",
        "acceptance_checks": [
          "Có kết quả cho dữ liệu sai, ID trùng, hết quyền và các ca bị cấm.",
          "Ca bị cấm thất bại đúng; kết quả checker không được gọi là phê duyệt nội dung."
        ],
        "dependency_use": {
          "R018": "Hợp đồng và bộ kiểm NCS đã áp dụng là phiên bản để reviewer thử các ca âm độc lập."
        }
      }
    },
    {
      "id": "R020",
      "package": "SD04",
      "title": "Đối chiếu nguồn, quyền và lô nội dung",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "PREP"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Tái sử dụng registry/OCR; kiểm locator và tính hiện hành; chọn lô hẹp",
      "done_when": "Không số hóa lại toàn thư viện; nguồn thiếu được ghi rõ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm nguồn và bản trích có sẵn",
          "instructions": "Đọc registry, bản OCR và tài liệu gốc tại trang hoặc mục được dùng. Ghi locator, phiên bản và tính hiện hành. Không số hóa lại thư viện.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng nguồn và locator",
          "done_when": "Mỗi nguồn có vị trí kiểm chứng hoặc thiếu sót được ghi rõ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R020.01"
        },
        {
          "title": "Khoanh lô và câu hỏi quyền",
          "instructions": "Đối chiếu thẻ, FAQ hiện có với phạm vi dự kiến. Chọn phần tái sử dụng và phần cần hoàn thiện. Gắn nguồn và thao tác cần kiểm quyền ở R022.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Danh sách lô và câu hỏi quyền",
          "done_when": "Không tính lại phần đã làm; nguồn thiếu hoặc quyền chưa rõ vẫn chờ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R020.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Thư viện và bản trích đã có cần được đối chiếu trước khi chọn nội dung còn thiếu. Việc này tránh làm lại phần đã hoàn tất.",
        "acceptance_checks": [
          "Danh sách lô phân biệt nguồn có sẵn và nguồn thiếu.",
          "Nguồn được chọn có trang hoặc mục kiểm chứng và thông tin hiện hành.",
          "Không số hóa lại toàn thư viện."
        ],
        "dependency_use": {
          "PREP": "Phạm vi sơ bộ đã chốt giúp khoanh chủ đề và phần thư viện cần kiểm."
        }
      }
    },
    {
      "id": "R021",
      "package": "SD04",
      "title": "Rà nguồn chung cho ứng viên camera",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 120
      },
      "ai_runs": 0,
      "deps": [
        "PREP"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc CYK-S; chỉ ra nguồn đủ/thiếu quy trình đo; bàn giao danh mục",
      "done_when": "Không suy protocol từ khuyến cáo vận động chung",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Rà nguồn chung cho ứng viên camera",
          "instructions": "Đọc CYK-S; chỉ ra nguồn đủ/thiếu quy trình đo; bàn giao danh mục. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phần R021: Rà nguồn chung cho ứng viên camera",
          "done_when": "Không suy protocol từ khuyến cáo vận động chung",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R021.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Khuyến cáo vận động chung chưa đủ để thiết kế phép đo camera. NCS2 cần chỉ rõ nguồn nào mô tả được quy trình đo.",
        "acceptance_checks": [
          "Danh mục ghi nguồn đủ và thiếu quy trình đo.",
          "Khoảng trống được gắn với mục CYK-S và bàn giao rõ.",
          "Không suy quy trình đo từ khuyến cáo vận động chung."
        ],
        "dependency_use": {
          "PREP": "Phạm vi sơ bộ giúp xác định ứng viên camera cần kiểm nguồn."
        }
      }
    },
    {
      "id": "R022",
      "package": "SD04",
      "title": "Xác minh quyền nguồn và dịch vụ",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 360
      },
      "ai_runs": 0,
      "deps": [
        "R020",
        "R021",
        "SRC-05"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Kiểm theo thao tác; kiểm chủ tài khoản, tuổi, mục đích; lưu bằng chứng",
      "done_when": "Không gọi dịch vụ CXK trước quyết định phù hợp",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm quyền từng nguồn",
          "instructions": "Đọc bằng chứng quyền có sẵn. Tách quyền đọc, trích dẫn, sao chép và đưa vào sản phẩm. Ghi người cấp, phạm vi và thời hạn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng quyền nguồn theo thao tác",
          "done_when": "Nguồn công khai không tự được coi là cho phép mọi thao tác.",
          "minutes": {
            "LEGAL": 120
          },
          "ai_runs": 0,
          "id": "R022.01"
        },
        {
          "title": "Kiểm điều kiện dịch vụ",
          "instructions": "Đọc điều khoản nhà cung cấp. Đối chiếu đối tượng, tuổi, mục đích và chủ thể chịu trách nhiệm. Ghi câu hỏi cần người có thẩm quyền trả lời.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng điều kiện dịch vụ",
          "done_when": "Mỗi dịch vụ có phiên bản điều khoản và điểm còn mở.",
          "minutes": {
            "LEGAL": 120
          },
          "ai_runs": 0,
          "id": "R022.02"
        },
        {
          "title": "Chuẩn bị hồ sơ Q03",
          "instructions": "Gắn bằng chứng với từng kết luận đề xuất. Tách phần đủ, thiếu và không được phép. Bàn giao để người có thẩm quyền quyết định.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Hồ sơ quyền cho Q03",
          "done_when": "Không tự cấp quyền khi chưa có bằng chứng; phần chờ được giữ rõ.",
          "minutes": {
            "LEGAL": 120
          },
          "ai_runs": 0,
          "id": "R022.03"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Có tài liệu hoặc tài khoản chưa đồng nghĩa được dùng cho mọi thao tác. Phải xác minh quyền trước khi đưa nguồn và dịch vụ vào CXK.",
        "acceptance_checks": [
          "Mỗi nguồn hoặc dịch vụ có bằng chứng quyền theo thao tác.",
          "Chủ tài khoản, tuổi và mục đích sử dụng được đối chiếu.",
          "Chưa có quyết định phù hợp thì chưa gọi dịch vụ CXK."
        ],
        "dependency_use": {
          "R020": "Danh sách nguồn của lô cho biết tài liệu và thao tác cần kiểm quyền.",
          "R021": "Danh mục nguồn camera bổ sung các quyền phải kiểm cho quy trình đo.",
          "SRC-05": "Hồ sơ quyền đọc, tải, OCR, lưu, gửi AI và phân phối của nguồn mới để trình Q03."
        }
      }
    },
    {
      "id": "Q03",
      "package": "SD04",
      "title": "Phiên kết luận quyền nguồn và dịch vụ",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 60
      },
      "ai_runs": 0,
      "deps": [
        "R022"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Trình chủ thể có thẩm quyền; ghi cho phép hoặc từ chối từng thao tác",
      "done_when": "Quyết định thật kèm tài liệu; không đạt thì dừng nhánh",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 5,
      "work_steps": [
        {
          "title": "Phiên kết luận quyền nguồn và dịch vụ",
          "instructions": "Trình chủ thể có thẩm quyền; ghi cho phép hoặc từ chối từng thao tác. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ. Ghi quyết định thực, thẩm quyền, phiên bản và phạm vi. Hồ sơ thiếu phải ghi yêu cầu bổ sung; không tự đánh dấu đã duyệt.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phần Q03: Phiên kết luận quyền nguồn và dịch vụ",
          "done_when": "Quyết định thật kèm tài liệu; không đạt thì dừng nhánh",
          "minutes": {
            "LEGAL": 60
          },
          "ai_runs": 0,
          "id": "Q03.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nhóm cần một quyết định có thẩm quyền để biết thao tác nào được phép thực hiện. Kết quả tra cứu quyền chưa tự thay quyết định này.",
        "acceptance_checks": [
          "Từng thao tác có quyết định cho phép hoặc từ chối và tài liệu kèm theo.",
          "Người quyết định và phạm vi được ghi rõ.",
          "Nhánh không đạt tiếp tục dừng."
        ],
        "dependency_use": {
          "R022": "Hồ sơ xác minh quyền cung cấp bằng chứng để kết luận từng thao tác."
        }
      }
    },
    {
      "id": "R023",
      "package": "SD10",
      "title": "Thiết kế bảo mật và luồng dữ liệu",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R019"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md",
      "steps": "Vẽ luồng; xác định quyền, lỗi, giới hạn; chọn yêu cầu ASVS phù hợp",
      "done_when": "Có danh mục yêu cầu bảo mật gắn ca kiểm",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Vẽ luồng dữ liệu và ranh giới quyền",
          "instructions": "Theo thiết kế đã chốt, liệt kê trình duyệt, API, kho tri thức, DB và dịch vụ ngoài. Ghi loại dữ liệu, nơi đi và điều kiện truyền trên từng đường.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Sơ đồ luồng và danh mục dữ liệu",
          "done_when": "Không có đường truyền thiếu chủ thể, mục đích hoặc điều kiện quyền.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R023.01"
        },
        {
          "title": "Mô tả tình huống lạm dụng và giới hạn",
          "instructions": "Xét truy cập trái quyền, lộ đầu vào qua log, nội dung hết quyền và yêu cầu quá lớn. Gắn từng tình huống với điểm chặn, trạng thái lỗi và người xử lý.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Bảng rủi ro kỹ thuật",
          "done_when": "Mỗi rủi ro có biện pháp cụ thể; không tự sửa ngưỡng y khoa.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R023.02"
        },
        {
          "title": "Chọn yêu cầu ASVS và ca kiểm",
          "instructions": "Đọc ASVS đúng phiên bản, chọn yêu cầu phù hợp các luồng đã vẽ. Ghi mã, lý do áp dụng hoặc loại trừ, đầu vào thử và kết quả mong đợi.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Ma trận bảo mật–ca kiểm",
          "done_when": "Yêu cầu truy vết được tới phép kiểm; không tuyên bố đạt toàn bộ ASVS.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R023.03"
        }
      ],
      "source_paths": [
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/legal/W1_D04_DataMinimizationMap.md",
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa bản đồ dữ liệu và thiết kế nháp. Bổ sung quyền tối thiểu, bí mật, ranh giới truyền dữ liệu và review cấu hình được phép.",
      "reader_notes": {
        "purpose": "Thiết kế bảo mật chỉ rõ dữ liệu đi đâu và cần chặn lỗi ở đâu trước khi nối các thành phần.",
        "acceptance_checks": [
          "Sơ đồ nêu dữ liệu, quyền, đích truyền và các tình huống lộ dữ liệu hoặc vượt giới hạn.",
          "Mỗi yêu cầu bảo mật được chọn có ca kiểm; mã ASVS ghi kèm phiên bản và phạm vi."
        ],
        "dependency_use": {
          "R019": "Hợp đồng dữ liệu đã kiểm xác định trường, trạng thái và điều kiện cần bảo vệ trong sơ đồ hệ thống."
        }
      }
    },
    {
      "id": "R024",
      "package": "SD10",
      "title": "Review phạm vi truyền dữ liệu và sự cố",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 180
      },
      "ai_runs": 0,
      "deps": [
        "R023",
        "Q03"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md",
      "steps": "Đối chiếu dịch vụ được phép; yêu cầu log tối thiểu; xem kênh xử lý sự cố",
      "done_when": "Không có đường truyền ngoài phạm vi đã xác minh",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu quyền cho từng đường truyền",
          "instructions": "So sơ đồ R023 với Q03 và hồ sơ nhà cung cấp. Kiểm mục đích, bên nhận, loại dữ liệu và thời hạn; đánh dấu thao tác chưa có căn cứ.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Nhận xét quyền theo luồng",
          "done_when": "Mọi đường truyền có căn cứ hoặc bị chặn rõ; không dùng ngày lịch làm bằng chứng quyền.",
          "minutes": {
            "LEGAL": 90
          },
          "ai_runs": 0,
          "id": "R024.01"
        },
        {
          "title": "Rà log tối thiểu và kênh xử lý sự cố",
          "instructions": "Đọc trường log dự kiến, nơi giữ và người được xem. Xác định dữ liệu cần loại bỏ, đầu mối nhận sự cố và điều kiện thông báo; ghi điểm cần quyết định.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Yêu cầu dữ liệu và sự cố",
          "done_when": "Nhật ký không vượt phạm vi đã xác minh; bất đồng được chuyển đúng người có thẩm quyền.",
          "minutes": {
            "LEGAL": 90
          },
          "ai_runs": 0,
          "id": "R024.02"
        }
      ],
      "source_paths": [
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/legal/W1_D04_DataMinimizationMap.md",
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa bản đồ dữ liệu và thiết kế nháp. Bổ sung quyền tối thiểu, bí mật, ranh giới truyền dữ liệu và review cấu hình được phép.",
      "reader_notes": {
        "purpose": "Đường truyền và nhật ký phải phù hợp quyền đã xác minh để không vô ý gửi thêm dữ liệu ra ngoài.",
        "acceptance_checks": [
          "Từng đường truyền được đối chiếu với dịch vụ và thao tác được phép.",
          "Nhật ký tối thiểu và kênh sự cố nêu dữ liệu được ghi, người xem và phần còn bị chặn."
        ],
        "dependency_use": {
          "R023": "Sơ đồ và rủi ro kỹ thuật cung cấp từng luồng cần kiểm quyền truyền/lưu.",
          "Q03": "Quyết định quyền nguồn và dịch vụ cung cấp căn cứ cho phép hoặc từ chối từng đường truyền."
        }
      }
    },
    {
      "id": "R025",
      "package": "SD10",
      "title": "Thiết kế cấu hình và quyền vận hành",
      "status": "PLANNED",
      "minutes": {
        "OPS": 240
      },
      "ai_runs": 0,
      "deps": [
        "R024"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md",
      "steps": "Tách bí mật khỏi mã; tài khoản tối thiểu; giới hạn mạng và nhật ký",
      "done_when": "Có cấu hình mẫu, chủ khóa và quy trình thu hồi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Thiết kế tài khoản và cấu hình mẫu",
          "instructions": "Tách tài khoản app, DB, quản trị và sao lưu theo quyền cần thiết. Lập cấu hình mẫu chỉ có tên biến và giá trị giả; chỉ rõ nơi giữ khóa thật.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Ma trận tài khoản và cấu hình mẫu",
          "done_when": "Không có bí mật trong mã hoặc mẫu; từng quyền có mục đích.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R025.01"
        },
        {
          "title": "Thiết kế mạng, nhật ký và thu hồi khóa",
          "instructions": "Ghi cổng được phép, đích kết nối và nơi lưu log. Chỉ định người giữ khóa, cách thay/thu hồi và phép kiểm sau thu hồi; không mở cổng ở bước thiết kế.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Phương án vận hành và thu hồi",
          "done_when": "Có chủ trách nhiệm, phạm vi mạng và cách xác nhận khóa cũ hết hiệu lực.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R025.02"
        }
      ],
      "source_paths": [
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/legal/W1_D04_DataMinimizationMap.md",
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa bản đồ dữ liệu và thiết kế nháp. Bổ sung quyền tối thiểu, bí mật, ranh giới truyền dữ liệu và review cấu hình được phép.",
      "reader_notes": {
        "purpose": "Cấu hình và tài khoản rõ giúp vận hành hệ thống mà không đưa khóa vào mã hoặc cấp quyền quá mức.",
        "acceptance_checks": [
          "Có mẫu cấu hình không chứa bí mật và ma trận tài khoản/quyền cần thiết.",
          "Ghi chủ khóa, giới hạn mạng/log, cách thu hồi và phép kiểm khóa cũ không còn dùng được."
        ],
        "dependency_use": {
          "R024": "Nhận xét phạm vi dữ liệu và log xác định giới hạn cần thể hiện trong cấu hình vận hành."
        }
      }
    },
    {
      "id": "R026",
      "package": "SD10",
      "title": "Review thiết kế bảo mật",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 240
      },
      "ai_runs": 0,
      "deps": [
        "R025"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md",
      "steps": "Thử suy luận đường vượt quyền, lộ dữ liệu và dùng hết tài nguyên",
      "done_when": "Mỗi rủi ro có cách xử lý và ca kiểm",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review đường vượt quyền và lộ dữ liệu",
          "instructions": "Đọc sơ đồ, ma trận tài khoản và mẫu cấu hình. Thử suy luận truy cập sai vai, lộ log hoặc cấu hình; ghi điều kiện tái hiện và tác động.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Danh sách lỗi thiết kế bảo mật",
          "done_when": "Mỗi nhận xét gắn thành phần và bằng chứng; không sửa quyền thật trong buổi review.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R026.01"
        },
        {
          "title": "Review giới hạn tài nguyên và yêu cầu kiểm",
          "instructions": "Đối chiếu đầu vào lớn, gọi dồn, lỗi dịch vụ và hết thời gian chờ. Kiểm ca ASVS đã chọn, yêu cầu bổ sung và người sửa; ghi kết luận review đúng phạm vi.",
          "output": "deployment/THIET_KE_BAO_MAT_VA_CAU_HINH.md — Biên bản review và ca còn thiếu",
          "done_when": "Mỗi rủi ro có cách xử lý hoặc trạng thái chờ; không tự chấp thuận triển khai.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R026.02"
        }
      ],
      "source_paths": [
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/legal/W1_D04_DataMinimizationMap.md",
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa bản đồ dữ liệu và thiết kế nháp. Bổ sung quyền tối thiểu, bí mật, ranh giới truyền dữ liệu và review cấu hình được phép.",
      "reader_notes": {
        "purpose": "Review thiết kế giúp tìm đường vượt quyền hoặc làm cạn tài nguyên trước khi cài thật.",
        "acceptance_checks": [
          "Nhận xét gắn tình huống vượt quyền, lộ dữ liệu hoặc quá tải với thành phần cụ thể.",
          "Mỗi rủi ro có cách xử lý và ca kiểm; phần chưa giải quyết được giữ rõ trong biên bản."
        ],
        "dependency_use": {
          "R025": "Cấu hình mẫu, quyền tài khoản và cách thu hồi khóa là đối tượng reviewer dùng để thử các tình huống lạm dụng."
        }
      }
    },
    {
      "id": "R027",
      "package": "SD13",
      "title": "Kiểm kê máy đích và quyền thực có",
      "status": "PLANNED",
      "minutes": {
        "OPS": 240
      },
      "ai_runs": 0,
      "deps": [
        "PREP"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/BAN_KE_MOI_TRUONG.md",
      "steps": "Kiểm Windows/IIS/SQL đã có; tài nguyên; chủ máy; quyền cài",
      "done_when": "Không mặc định phải cài lại SQL/IIS; có biên bản host",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm kê cấu hình máy đích hiện có",
          "instructions": "Xác nhận chủ máy và quyền chỉ đọc. Ghi phiên bản Windows/IIS/SQL, dung lượng, bộ nhớ, cổng và ứng dụng liên quan; không mặc định cài lại phần mềm.",
          "output": "deployment/BAN_KE_MOI_TRUONG.md — Bản kê host hiện có",
          "done_when": "Thông tin lấy từ máy được giao; nêu rõ phần chưa được phép kiểm.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R027.01"
        },
        {
          "title": "Đối chiếu quyền cài và trách nhiệm máy",
          "instructions": "So yêu cầu CXK với tài nguyên và quyền thực có. Ghi người cấp quyền, người vận hành, phần cần xin hoặc thay đổi và ảnh hưởng ứng dụng khác.",
          "output": "deployment/BAN_KE_MOI_TRUONG.md — Biên bản điều kiện môi trường",
          "done_when": "Không coi quyền đăng nhập là quyền cài hoặc sửa cấu hình; tồn đọng có người xử lý.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R027.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/KIEN_TRUC_DU_AN.md",
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa kiến trúc và yêu cầu vận hành. Xác nhận tài nguyên, người nhận, quyền và môi trường thử riêng trước cấp cấu hình thực.",
      "reader_notes": {
        "purpose": "Biết máy đích đã có gì giúp tránh cài lại không cần thiết hoặc sửa ứng dụng khác ngoài quyền.",
        "acceptance_checks": [
          "Biên bản ghi Windows/IIS/SQL, tài nguyên, chủ máy và quyền thực có.",
          "Phần cần cài/thay đổi được phân biệt với phần kế thừa; chưa rõ quyền được ghi chờ."
        ],
        "dependency_use": {
          "PREP": "Phạm vi sơ bộ và người nhận việc giúp xác định máy cần kiểm kê và người cung cấp quyền."
        }
      }
    },
    {
      "id": "R028",
      "package": "SD13",
      "title": "Chuẩn bị môi trường thử riêng",
      "status": "PLANNED",
      "minutes": {
        "OPS": 360
      },
      "ai_runs": 0,
      "deps": [
        "R027",
        "R026",
        "G0"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/BAN_KE_MOI_TRUONG.md",
      "steps": "Tách cấu hình dev/thử/vận hành; dùng dữ liệu tổng hợp; hạn chế mạng",
      "done_when": "Máy/DB/mạng/khóa phân biệt rõ và có người quản",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Lập vùng thử và cấu hình phân biệt",
          "instructions": "Theo quyền đã có, chuẩn bị vùng app và DB thử riêng. Đặt tên dễ phân biệt với vận hành; dùng dữ liệu tổng hợp và ghi đường dẫn/đích đã kiểm.",
          "output": "deployment/BAN_KE_MOI_TRUONG.md — Bản kê vùng thử",
          "done_when": "Môi trường thử không dùng dữ liệu hoặc khóa vận hành.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R028.01"
        },
        {
          "title": "Áp quyền và giới hạn mạng của vùng thử",
          "instructions": "Áp cấu hình đã được review cho tài khoản thử, thư mục và kết nối được phép. Kiểm truy cập cần thiết và truy cập phải bị từ chối; lưu log không chứa bí mật.",
          "output": "deployment/BAN_KE_MOI_TRUONG.md — Bằng chứng quyền và kết nối",
          "done_when": "Phép kiểm xác nhận đúng vùng thử; sai quyền phải dừng để xử lý.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R028.02"
        },
        {
          "title": "Kiểm trạng thái môi trường và bàn giao",
          "instructions": "Đối chiếu cấu hình thực với bản kê, người giữ khóa và cách dừng. Ghi cách nhận biết môi trường trước chạy lệnh; bàn giao những giới hạn còn chờ.",
          "output": "deployment/BAN_KE_MOI_TRUONG.md — Biên bản sẵn sàng môi trường thử",
          "done_when": "Máy, DB, mạng và trách nhiệm quản lý phân biệt rõ; không tự nhận cổng đã đạt.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R028.03"
        }
      ],
      "source_paths": [
        "docs/research/plans/KIEN_TRUC_DU_AN.md",
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa kiến trúc và yêu cầu vận hành. Xác nhận tài nguyên, người nhận, quyền và môi trường thử riêng trước cấp cấu hình thực.",
      "reader_notes": {
        "purpose": "Môi trường thử riêng giúp kiểm cài đặt và lỗi bằng dữ liệu tổng hợp trước khi xem xét vận hành.",
        "acceptance_checks": [
          "Bản kê phân biệt máy, DB, mạng, tài khoản và khóa của từng môi trường.",
          "Phép kiểm quyền/kết nối đúng phạm vi có log và người quản; thiếu điều kiện không được triển khai."
        ],
        "dependency_use": {
          "R027": "Biên bản host xác định tài nguyên và quyền có thể dùng để tạo vùng thử.",
          "R026": "Thiết kế bảo mật đã review cung cấp cấu hình quyền và mạng cần áp cho vùng thử.",
          "G0": "Kết quả xét G0 xác định các điều kiện đã đủ để mở công việc chuẩn bị môi trường này."
        }
      }
    },
    {
      "id": "R029",
      "package": "SD13",
      "title": "Kiểm ứng dụng trên môi trường được giao",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "R028",
        "R012"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/BAN_KE_MOI_TRUONG.md",
      "steps": "Đối chiếu phiên bản; kiểm kết nối cho phép; lưu bản kê",
      "done_when": "Không nhầm loopback với hệ thống cô lập đầy đủ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm ứng dụng ngoại tuyến trên vùng được giao",
          "instructions": "Đối chiếu phiên bản R012 với bản kê R028. Chạy kiểm phản hồi ngoại tuyến và kết nối được phép; ghi host, thời điểm, cấu hình và kết quả.",
          "output": "deployment/BAN_KE_MOI_TRUONG.md — Log kiểm trên môi trường được giao",
          "done_when": "Không gọi dịch vụ ngoài phạm vi; không đồng nhất loopback với cách ly đầy đủ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R029.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/KIEN_TRUC_DU_AN.md",
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa kiến trúc và yêu cầu vận hành. Xác nhận tài nguyên, người nhận, quyền và môi trường thử riêng trước cấp cấu hình thực.",
      "reader_notes": {
        "purpose": "Kiểm trên máy được giao xác nhận ứng dụng phù hợp môi trường thực, không chỉ chạy được trên máy lập trình.",
        "acceptance_checks": [
          "Log ghi phiên bản, host, kết nối được phép và phản hồi ứng dụng ngoại tuyến.",
          "Bản kê chỉ rõ giới hạn cách ly; không nhận loopback là cách ly đầy đủ."
        ],
        "dependency_use": {
          "R028": "Môi trường thử và quyền đã chuẩn bị cung cấp đích được phép chạy ứng dụng.",
          "R012": "Hướng dẫn môi trường đã sửa cung cấp phiên bản và lệnh chuẩn để so với máy được giao."
        }
      }
    },
    {
      "id": "R030",
      "package": "SD13",
      "title": "Kiểm phân tách môi trường",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 120
      },
      "ai_runs": 0,
      "deps": [
        "R029"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/BAN_KE_MOI_TRUONG.md",
      "steps": "Rà quyền DB, thư mục, binding và khóa; thử lỗi cấu hình",
      "done_when": "Không đường truy cập vô ý vào dữ liệu vận hành",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm chéo phân tách môi trường",
          "instructions": "Rà quyền DB, thư mục, binding và tên khóa. Dùng cấu hình sai tổng hợp để kiểm điểm dừng; xác nhận không vô ý đi vào dữ liệu vận hành.",
          "output": "deployment/BAN_KE_MOI_TRUONG.md — Biên bản kiểm phân tách",
          "done_when": "Mỗi phép thử có đích và kết quả; lỗi truy cập ngoài vùng thử được ghi là chặn.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R030.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/KIEN_TRUC_DU_AN.md",
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa kiến trúc và yêu cầu vận hành. Xác nhận tài nguyên, người nhận, quyền và môi trường thử riêng trước cấp cấu hình thực.",
      "reader_notes": {
        "purpose": "Kiểm phân tách giúp phát hiện cấu hình thử vô ý truy cập dữ liệu hoặc khóa vận hành.",
        "acceptance_checks": [
          "Quyền DB, thư mục, binding và khóa được đối chiếu bằng kết quả kiểm cụ thể.",
          "Ca cấu hình sai dừng đúng; không có đường truy cập ngoài vùng thử chưa được xử lý."
        ],
        "dependency_use": {
          "R029": "Bản kê và log ứng dụng trên host cung cấp cấu hình thực để reviewer kiểm phân tách."
        }
      }
    },
    {
      "id": "K01A",
      "package": "SD04",
      "title": "Lô 1: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R019",
        "Q03",
        "G0",
        "MK01D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_01/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_01/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K01A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_01/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K01A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_01/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K01A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_01/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K01A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_01/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K01A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_01/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K01A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 1 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R019": "Hợp đồng đã kiểm xác định cấu trúc dữ liệu và cách truy vết mà thẻ, FAQ đầu tiên phải tuân theo.",
          "Q03": "Quyết định quyền xác định nguồn và thao tác được phép dùng khi hoàn thiện lô đầu.",
          "G0": "Quyết định phạm vi đầy đủ xác định nội dung được làm trong lô đầu và điều kiện còn phải giữ.",
          "MK01D": "Markdown lô 1, quyền, sổ trang và lỗi đã kiểm lại; phần còn chặn không được dùng."
        }
      }
    },
    {
      "id": "K01B",
      "package": "SD04",
      "title": "Lô 1: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K01A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K01B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K01B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K01B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 1 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K01A": "Bản nháp, nguồn và bản kê lô 1 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K01C",
      "package": "SD04",
      "title": "Lô 1: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K01B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K01C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K01C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 1 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K01B": "Nhận xét theo từng mục của lô 1 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K01D",
      "package": "SD04",
      "title": "Lô 1: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K01C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Sau lô 1, đo giờ và chất lượng; NCS1/GVHD phải hiệu chỉnh Q04 trước nhân rộng.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K01D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 1 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K01C": "Bản sửa và truy vết lô 1 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "R031",
      "package": "SD04",
      "title": "Đối chiếu lô hiệu chỉnh với nhu cầu camera",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 240
      },
      "ai_runs": 0,
      "deps": [
        "K01D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Kiểm nguồn dùng chung; ghi phần đủ và khoảng trống CYK",
      "done_when": "Không tính đọc chung hai lần vào CAM-Y",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "So lô hiệu chỉnh với CYK",
          "instructions": "Đọc kết quả lô đầu và ma trận CYK. Đánh dấu kiến thức chung đã có và protocol chưa đủ nguồn. Không lặp giờ đọc nền đã hoàn tất.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng lô hiệu chỉnh–CYK",
          "done_when": "Kiến thức chung và căn cứ quy trình đo được phân biệt.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R031.01"
        },
        {
          "title": "Bàn giao thiếu sót cho CAM-Y",
          "instructions": "Gắn nguồn, thẻ, trạng thái và phiên bản với ứng viên. Ghi câu hỏi cần NCS2, CVYK hoặc LEGAL giải quyết.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Danh sách đầu vào CAM-Y",
          "done_when": "Mỗi thiếu sót có người nhận; bài camera không thay nguồn lâm sàng.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R031.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô đầu cho thấy kiến thức nào camera có thể dùng chung. Đối chiếu này giúp CAM-Y chỉ làm thêm phần nguồn và quy trình còn thiếu.",
        "acceptance_checks": [
          "Có danh sách nguồn dùng chung và khoảng trống CYK.",
          "Trạng thái thực của nội dung lô đầu được giữ rõ.",
          "Không tính giờ đọc nguồn chung hai lần vào CAM-Y."
        ],
        "dependency_use": {
          "K01D": "Quyết định và phiên bản lô đầu cho biết nội dung nào có thể đối chiếu với nhu cầu camera."
        }
      }
    },
    {
      "id": "R032",
      "package": "SD04",
      "title": "Tạo bản kê tri thức thật",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K01D",
        "K02D",
        "K03D",
        "K04D",
        "K05D",
        "K06D",
        "K07D",
        "K08D",
        "SRC-12"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Gắn phiên bản nguồn, quyền, thẻ và quyết định; kiểm độ bao phủ",
      "done_when": "40 thẻ/40 FAQ chỉ là giả định; thiếu bao phủ phải đổi phạm vi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Tạo bản kê tri thức thật",
          "instructions": "Gắn phiên bản nguồn, quyền, thẻ và quyết định; kiểm độ bao phủ. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phần R032: Tạo bản kê tri thức thật",
          "done_when": "40 thẻ/40 FAQ chỉ là giả định; thiếu bao phủ phải đổi phạm vi",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R032.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phần mềm cần biết chính xác thẻ nào, phiên bản nào và quyền nào được dùng. Bản kê giúp tránh trộn nội dung đã xét với bản nháp.",
        "acceptance_checks": [
          "Bản kê nối nguồn, quyền, thẻ, phiên bản và quyết định thực.",
          "Độ bao phủ được kiểm theo nội dung, không chỉ số lượng.",
          "Nếu thiếu bao phủ, ghi yêu cầu đổi phạm vi; 40 thẻ và 40 FAQ vẫn là giả định."
        ],
        "dependency_use": {
          "K01D": "Quyết định và phiên bản lô 1 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "K02D": "Quyết định và phiên bản lô 2 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "K03D": "Quyết định và phiên bản lô 3 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "K04D": "Quyết định và phiên bản lô 4 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "K05D": "Quyết định và phiên bản lô 5 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "K06D": "Quyết định và phiên bản lô 6 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "K07D": "Quyết định và phiên bản lô 7 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "K08D": "Quyết định và phiên bản lô 8 được đưa vào bản kê để xác định nội dung thực được dùng.",
          "SRC-12": "Bản kê Markdown nghiên cứu toàn phạm vi được chọn, quyền và lỗi mở; không thay quyết định phát hành."
        }
      }
    },
    {
      "id": "GA",
      "package": "SD04",
      "title": "Phiên xét GA theo thẩm quyền",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R032"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Kiểm hồ sơ quyền, review và lỗi mở; dẫn quyết định CVYK",
      "done_when": "Không dùng chữ ký GVHD thay phê duyệt y khoa",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Phiên xét GA theo thẩm quyền",
          "instructions": "Kiểm hồ sơ quyền, review và lỗi mở; dẫn quyết định CVYK. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ. Ghi quyết định thực, thẩm quyền, phiên bản và phạm vi. Hồ sơ thiếu phải ghi yêu cầu bổ sung; không tự đánh dấu đã duyệt.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phần GA: Phiên xét GA theo thẩm quyền",
          "done_when": "Không dùng chữ ký GVHD thay phê duyệt y khoa",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "GA.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Trước khi dùng gói tri thức, nhóm phải kiểm cả quyền, review chuyên môn và lỗi còn mở. Cổng này giữ rõ trách nhiệm từng người xét.",
        "acceptance_checks": [
          "Hồ sơ quyền, review và lỗi mở được đối chiếu với bản kê.",
          "Kết luận dẫn đúng quyết định của CVYK.",
          "Chữ ký GVHD không thay phê duyệt y khoa."
        ],
        "dependency_use": {
          "R032": "Bản kê tri thức xác định đúng nguồn, phiên bản và quyết định cần xét tại GA."
        }
      }
    },
    {
      "id": "R033",
      "package": "SD07",
      "title": "Cụ thể hóa bộ lọc an toàn từ lô có nguồn",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "K01D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md",
      "steps": "Chốt nhánh trước/sau, lỗi dịch vụ, mâu thuẫn nguồn; nối ca kiểm",
      "done_when": "Mỗi quy tắc có nguồn và phiên bản, không chỉ danh sách từ khóa",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đặc tả kiểm trước xử lý",
          "instructions": "Từ nguồn đã xét, liệt kê cờ đỏ, thiếu thông tin và câu hỏi ngoài phạm vi. Gắn điều kiện kích hoạt với phản hồi dự kiến.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Quy tắc trước xử lý",
          "done_when": "Mỗi nhánh có nguồn; không tự đặt ngưỡng y khoa.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R033.01"
        },
        {
          "title": "Đặc tả kiểm sau xử lý",
          "instructions": "Liệt kê kiểm tra nguồn, phiên bản, giới hạn và nội dung không được phép. Xác định phản hồi khi thiếu, hết hiệu lực hoặc mâu thuẫn nguồn.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Quy tắc sau xử lý và lỗi nguồn",
          "done_when": "Mọi đường lỗi có hành vi xác định và không tạo khẳng định thiếu căn cứ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R033.02"
        },
        {
          "title": "Nối quy tắc với ca kiểm",
          "instructions": "Lập bảng yêu cầu, nguồn, quy tắc và ca phát triển. Thêm lỗi dịch vụ và hết thời gian chờ. Ghi câu hỏi gửi CVYK.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Bảng quy tắc–nguồn–ca kiểm",
          "done_when": "R034 nhận đúng phiên bản và câu hỏi theo từng nhánh.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R033.03"
        }
      ],
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật.",
      "reader_notes": {
        "purpose": "Bộ lọc cần quy tắc xử lý rõ cho từng tình huống. Danh sách từ khóa riêng lẻ không đủ xử lý thiếu nguồn hoặc lỗi dịch vụ.",
        "acceptance_checks": [
          "Có nhánh trước xử lý, sau xử lý và lỗi dịch vụ.",
          "Mỗi quy tắc gắn nguồn, phiên bản và ca kiểm.",
          "Cách xử lý mâu thuẫn nguồn được ghi rõ."
        ],
        "dependency_use": {
          "K01D": "Nội dung lô đầu đã được xét cung cấp căn cứ và giới hạn cho các quy tắc an toàn."
        }
      }
    },
    {
      "id": "R034",
      "package": "SD07",
      "title": "Review quy tắc và câu trả lời an toàn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 240
      },
      "ai_runs": 0,
      "deps": [
        "R033"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md",
      "steps": "Xem cờ đỏ, giới hạn và hành vi dừng; phản hồi từng nhánh",
      "done_when": "Có kỳ vọng chuyên môn trước triển khai",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét điều kiện cờ đỏ",
          "instructions": "CVYK đối chiếu quy tắc với nguồn. Kiểm đối tượng, giới hạn, dừng và chuyển đi khám. Ghi lỗi theo nhánh.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Nhận xét điều kiện và nguồn",
          "done_when": "Thiếu căn cứ được ghi chờ; không tự bỏ qua.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R034.01"
        },
        {
          "title": "Xét lời phản hồi",
          "instructions": "CVYK đọc phản hồi bình thường, thiếu thông tin và ngoài phạm vi. Ghi yêu cầu sửa và kết luận thực theo phiên bản.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Nhận xét câu trả lời an toàn",
          "done_when": "Review không tự chuyển APPROVED; phần chưa đủ vẫn chờ.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R034.02"
        }
      ],
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật.",
      "reader_notes": {
        "purpose": "Người viết mã cần biết phản hồi nào được chấp nhận về chuyên môn. CVYK xét quy tắc trước để tránh đưa hiểu sai vào bộ lọc.",
        "acceptance_checks": [
          "Có phản hồi theo từng nhánh về cờ đỏ, giới hạn và dừng.",
          "Kỳ vọng chuyên môn được ghi trước triển khai.",
          "Nguồn hoặc nội dung chưa đủ căn cứ được đánh dấu cần xử lý."
        ],
        "dependency_use": {
          "R033": "Đặc tả quy tắc cung cấp từng nhánh và nguồn để CVYK đối chiếu."
        }
      }
    },
    {
      "id": "A07",
      "package": "SD07",
      "title": "Viết nháp mã bộ lọc và ca kiểm",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 2,
      "deps": [
        "R034",
        "R019"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "backend/app/services/; safety/; testing/scripts/",
      "steps": "Dùng quy tắc đã xét; viết kiểm trước/sau, lỗi và dữ liệu biên",
      "done_when": "Không tự thêm khuyến cáo y khoa",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Soạn nháp mã bộ lọc",
          "instructions": "Dùng quy tắc và phản hồi đã có để tạo nháp kiểm trước và sau xử lý. Gắn nhánh với quy tắc; không tạo nội dung y khoa.",
          "output": "backend/app/services/; safety/; testing/scripts/ — Nháp mã bộ lọc",
          "done_when": "Nháp được bàn giao để NCS đọc hiểu và kiểm; AI không tự nghiệm thu hoặc phê duyệt.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A07.01"
        },
        {
          "title": "Soạn ca phát triển cho bộ lọc",
          "instructions": "Tạo ca thiếu nguồn, mâu thuẫn, ngoài phạm vi và lỗi dịch vụ. Nêu kết quả dự kiến. Không dùng bộ đánh giá cuối.",
          "output": "backend/app/services/; safety/; testing/scripts/ — Nháp ca kiểm bộ lọc",
          "done_when": "Nháp được bàn giao để NCS đọc hiểu và kiểm; AI không tự nghiệm thu hoặc phê duyệt.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A07.02"
        }
      ],
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật.",
      "reader_notes": {
        "purpose": "Nháp mã giúp NCS bắt đầu từ các quy tắc đã xét. Ca lỗi đi kèm giúp nhìn thấy hành vi cần kiểm trước khi tích hợp.",
        "acceptance_checks": [
          "Nháp có kiểm trước, kiểm sau, lỗi và dữ liệu biên.",
          "Mã và ca kiểm dẫn về quy tắc đã xét.",
          "AI không tự thêm khuyến cáo y khoa."
        ],
        "dependency_use": {
          "R034": "Nhận xét chuyên môn xác định quy tắc và phản hồi AI được dùng để tạo nháp mã.",
          "R019": "Hợp đồng đã kiểm xác định cách bộ lọc nhận, trả và kiểm dữ liệu."
        }
      }
    },
    {
      "id": "R035",
      "package": "SD07",
      "title": "Đọc hiểu, sửa và thử mã bộ lọc",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 480
      },
      "ai_runs": 0,
      "deps": [
        "A07"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md",
      "steps": "Review mọi nhánh; chạy ca sai; kiểm tương tác API",
      "done_when": "Mã và đặc tả khớp; không tự mở dịch vụ thật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đọc và sửa kiểm đầu vào",
          "instructions": "NCS đọc mã AI, giải thích các nhánh và sửa theo R034. Thử đầu vào thiếu hoặc ngoài phạm vi bằng dữ liệu giả.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Mã kiểm đầu vào và ghi chú đọc hiểu",
          "done_when": "NCS giải thích được mã; hành vi khớp quy tắc đã xét.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R035.01"
        },
        {
          "title": "Đọc và sửa kiểm đầu ra",
          "instructions": "Kiểm nguồn, phiên bản và nội dung phản hồi. Cài hành vi thiếu nguồn, mâu thuẫn và lỗi nhà cung cấp theo đặc tả.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Mã kiểm đầu ra và lỗi nguồn",
          "done_when": "Lỗi dịch vụ không làm bỏ qua bộ lọc.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R035.02"
        },
        {
          "title": "Chạy ca nhánh và lỗi",
          "instructions": "Chạy ca phát triển bằng dữ liệu giả. So kết quả dự kiến và thực tế; sửa lỗi mã và giữ ca hồi quy.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Kết quả kiểm và mã sửa",
          "done_when": "Lỗi tái hiện được; lỗi chưa sửa có người nhận.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R035.03"
        },
        {
          "title": "Kiểm tích hợp API",
          "instructions": "Kiểm đường gọi trước và sau xử lý. Thử hết thời gian chờ và thiếu nguồn. Bàn giao phiên bản mã, quy tắc và kết quả.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Biên bản tích hợp API",
          "done_when": "Không còn đường gọi dự kiến bỏ qua kiểm tra bắt buộc.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R035.04"
        }
      ],
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật.",
      "reader_notes": {
        "purpose": "Mã AI tạo phải được NCS hiểu và kiểm trên đường gọi thực. Nháp chạy được chưa chứng minh bộ lọc khớp đặc tả.",
        "acceptance_checks": [
          "Mọi nhánh được đọc và đối chiếu đặc tả.",
          "Có kết quả chạy ca sai và kiểm tương tác API.",
          "Mã khớp đặc tả; không tự mở dịch vụ thật."
        ],
        "dependency_use": {
          "A07": "Nháp mã và ca kiểm là đầu vào để NCS đọc, sửa và kiểm tích hợp API."
        }
      }
    },
    {
      "id": "R036",
      "package": "SD07",
      "title": "Review phản hồi theo bộ ca phát triển",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 240
      },
      "ai_runs": 0,
      "deps": [
        "R035"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md",
      "steps": "Đọc đầu ra; đánh dấu sai; yêu cầu sửa câu chuyên môn",
      "done_when": "Không dùng bộ này làm tập đánh giá độc lập",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét phản hồi ca phát triển",
          "instructions": "CVYK đối chiếu phản hồi thực với nguồn. Ghi lỗi cờ đỏ, giới hạn và diễn đạt theo từng ca, đầu vào và phiên bản.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Nhận xét ca phát triển",
          "done_when": "Không gọi review phát triển là đánh giá cuối.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R036.01"
        },
        {
          "title": "Xét từ chối và mâu thuẫn",
          "instructions": "Kiểm phản hồi thiếu nguồn, mâu thuẫn và ngoài phạm vi. Ghi yêu cầu sửa có căn cứ rồi trả cho NCS1.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Danh sách sửa phản hồi",
          "done_when": "Không dùng bộ đánh giá cuối để chọn cách sửa; không tự phê duyệt.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R036.02"
        }
      ],
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật.",
      "reader_notes": {
        "purpose": "Phản hồi thực có thể khác ý định trong đặc tả. CVYK cần đọc kết quả chạy để phát hiện diễn đạt sai hoặc vượt giới hạn.",
        "acceptance_checks": [
          "Đầu ra phát triển được đánh dấu lỗi theo ca và phiên bản.",
          "Yêu cầu sửa câu chuyên môn được ghi rõ.",
          "Bộ ca dùng sửa không được gọi là tập đánh giá độc lập."
        ],
        "dependency_use": {
          "R035": "Kết quả chạy bộ lọc cho CVYK đầu ra thực để xét nội dung và yêu cầu sửa."
        }
      }
    },
    {
      "id": "R037",
      "package": "SD07",
      "title": "Sửa phản hồi và khóa phiên bản quy tắc",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R036"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md",
      "steps": "Xử lý lỗi; thêm hồi quy; nối phiên bản tri thức",
      "done_when": "Không lỗi nghiêm trọng chưa xử lý trong ca phát triển",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo nhận xét chuyên môn",
          "instructions": "Nối từng ý R036 với mã và nội dung. Sửa đúng phạm vi. Ghi phần chưa giải quyết và câu hỏi cần xét lại.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Bảng phản hồi–thay đổi",
          "done_when": "Mỗi nhận xét có trạng thái và phiên bản.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R037.01"
        },
        {
          "title": "Kiểm hồi quy và khóa quy tắc",
          "instructions": "Chạy ca liên quan và ca an toàn cũ. Ghi phiên bản quy tắc, mã và nguồn. Chặn bàn giao khi còn lỗi nghiêm trọng.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Kết quả hồi quy và bản kê phiên bản",
          "done_when": "Không đổi nhãn hoặc loại ca để giấu lỗi.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R037.02"
        }
      ],
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật.",
      "reader_notes": {
        "purpose": "Lỗi chuyên môn phải được xử lý và giữ lại thành ca kiểm. Khóa phiên bản giúp biết bộ lọc đang dùng đúng gói tri thức nào.",
        "acceptance_checks": [
          "Phản hồi review có bằng chứng xử lý.",
          "Có ca hồi quy và liên kết phiên bản tri thức.",
          "Không còn lỗi nghiêm trọng chưa xử lý trong ca phát triển."
        ],
        "dependency_use": {
          "R036": "Danh sách lỗi chuyên môn xác định câu và nhánh cần sửa, rồi kiểm lại."
        }
      }
    },
    {
      "id": "R038",
      "package": "SD07",
      "title": "Kiểm đường lỗi và đường bỏ qua bộ lọc",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "R037"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md",
      "steps": "Kiểm mất nguồn, hết quyền, lỗi provider và câu hỏi độc hại",
      "done_when": "Các đường bị cấm không trả nội dung tự do",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm lỗi nguồn và dịch vụ",
          "instructions": "Người review kỹ thuật thử thiếu, hết hiệu lực và mâu thuẫn nguồn. Thử lỗi nhà cung cấp và hết thời gian chờ. Lưu phản hồi.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Biên bản lỗi nguồn và dịch vụ",
          "done_when": "Các lỗi không trả thông tin y khoa thiếu căn cứ.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R038.01"
        },
        {
          "title": "Kiểm đường bỏ qua bộ lọc",
          "instructions": "Kiểm đường gọi API và đầu vào cố tình gây sai. Đối chiếu quy tắc; ghi lỗi, bước tái hiện và người nhận sửa.",
          "output": "safety/DAC_TA_BO_LOC_AN_TOAN.md — Biên bản kiểm đường bỏ qua",
          "done_when": "Không kết luận đạt khi còn đường bỏ qua kiểm bắt buộc.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R038.02"
        }
      ],
      "source_paths": [
        "safety/W1_D05_SafetyPolicy_v0.1.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "safety/risk_register.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md"
      ],
      "resume_note": "Kế thừa chính sách, ca kiểm và sổ rủi ro dự thảo. Bổ sung quy tắc có nguồn, ý kiến CVYK và kiểm phản hồi trước dùng thật.",
      "reader_notes": {
        "purpose": "Nhánh bình thường đạt chưa đủ nếu đường lỗi vẫn trả nội dung tự do. Kiểm riêng giúp phát hiện lối bỏ qua bộ lọc.",
        "acceptance_checks": [
          "Đã kiểm mất nguồn, hết quyền và lỗi nhà cung cấp.",
          "Đã kiểm câu hỏi cố tình gây sai và đường gọi bỏ qua.",
          "Đường bị cấm không trả nội dung tự do."
        ],
        "dependency_use": {
          "R037": "Phiên bản quy tắc và mã sau sửa là đối tượng cố định để kiểm các đường lỗi."
        }
      }
    },
    {
      "id": "R039",
      "package": "SD05",
      "title": "Hoàn thiện đặc tả API và bộ nạp",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R019",
        "R026",
        "Q03",
        "G0",
        "SRC-07"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "backend/DAC_TA_API_VA_NGU_CANH.md",
      "steps": "Tái dùng API503; chỉ rõ hợp đồng lỗi, trích dẫn, hết quyền và phiên bản",
      "done_when": "Mỗi endpoint có quyền, schema và ca kiểm",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu API503 với luồng dự kiến",
          "instructions": "Đọc hợp đồng API và mã ngoại tuyến. Liệt kê endpoint giữ nguyên, endpoint cần hoàn thiện, điều kiện mở và các lỗi phải tiếp tục từ chối.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Bảng thay đổi hợp đồng API",
          "done_when": "Không coi health 200 là sẵn sàng hỏi đáp; mọi endpoint có phạm vi rõ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R039.01"
        },
        {
          "title": "Đặc tả kiểm gói và trích dẫn",
          "instructions": "Mô tả bản kê, phiên bản, quyền, trạng thái duyệt và thu hồi. Chỉ rõ trường trích dẫn, cách so nguồn và phản ứng khi gói thiếu hoặc sai.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Hợp đồng bộ nạp và nguồn",
          "done_when": "Không nạp gói DRAFT, hết quyền hoặc sai phiên bản; lỗi có hành vi đóng cụ thể.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R039.02"
        },
        {
          "title": "Chốt schema và ca kiểm giao tiếp",
          "instructions": "Viết ví dụ tổng hợp cho đầu vào hợp lệ, sai định dạng, lỗi dịch vụ và nguồn bị rút. Gắn endpoint với schema, quyền, ca kiểm và kết quả mong đợi.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Ma trận endpoint–schema–ca kiểm",
          "done_when": "NCS giải thích được từng trạng thái; đầu vào mẫu không chứa dữ liệu người.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R039.03"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "backend/app/main.py",
        "backend/app/services/release_preflight.py",
        "backend/tests/test_offline_api.py"
      ],
      "resume_note": "Kế thừa API ngoại tuyến và kiểm bản kê giả. Bổ sung bộ nạp, luồng thật, quyền và phản hồi an toàn; giữ hồi quy đã có.",
      "reader_notes": {
        "purpose": "Hợp đồng API rõ giúp các nhánh nối đúng dữ liệu và xử lý trường hợp nguồn hết quyền hoặc hệ thống chưa sẵn sàng.",
        "acceptance_checks": [
          "Mỗi endpoint có schema, quyền, trạng thái lỗi và ca kiểm tổng hợp.",
          "Bộ nạp/trích dẫn có quy tắc phiên bản, thu hồi và đóng khi thiếu điều kiện; health không thay readiness."
        ],
        "dependency_use": {
          "R019": "Schema và bộ kiểm đã đối chiếu cung cấp cấu trúc dữ liệu API phải tuân theo.",
          "R026": "Yêu cầu bảo mật đã review cung cấp giới hạn đầu vào, quyền và lỗi cần thể hiện trong hợp đồng.",
          "Q03": "Quyết định nguồn/dịch vụ xác định thao tác bộ nạp và lời gọi nào được mô tả là có điều kiện cho phép.",
          "G0": "Biên bản G0 xác định phạm vi và điều kiện đã đủ để hoàn thiện đặc tả triển khai.",
          "SRC-07": "Hợp đồng Markdown và thử công cụ cung cấp metadata, quyền và truy vết cho thiết kế; không chờ toàn bộ lô."
        }
      }
    },
    {
      "id": "A05",
      "package": "SD05",
      "title": "Viết bộ nạp và API theo lát cắt",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 3,
      "deps": [
        "R039"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "backend/app/services/; backend/app/main.py; testing/scripts/",
      "steps": "Dùng gói tổng hợp; kiểm quyền/bản kê; thêm trích dẫn và chế độ đóng khi lỗi",
      "done_when": "Không gọi dịch vụ thật khi chưa được phép; không nạp DRAFT",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Viết bộ nạp với bản kê tổng hợp",
          "instructions": "Dựa R039, nháp mã kiểm quyền, phiên bản, trạng thái duyệt và thu hồi của gói tổng hợp. Thêm ca gói thiếu/sai; không nạp kho DRAFT thật.",
          "output": "backend/app/services/; backend/app/main.py; testing/scripts/ — Mã bộ nạp và test gói tổng hợp",
          "done_when": "Gói không hợp lệ bị từ chối; chưa gọi dịch vụ ngoài.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A05.01"
        },
        {
          "title": "Nối API với nguồn trích dẫn và trạng thái đóng",
          "instructions": "Nháp phần nối bộ nạp vào API, trả nguồn theo hợp đồng và đóng khi thiếu điều kiện. Giữ phân biệt health/readiness; dùng dữ liệu tổng hợp.",
          "output": "backend/app/services/; backend/app/main.py; testing/scripts/ — Mã API và ca lỗi nguồn",
          "done_when": "Mỗi phản hồi có trạng thái đúng hợp đồng; không giả nguồn trích dẫn.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A05.02"
        },
        {
          "title": "Bổ sung kiểm thử lỗi và bàn giao mã",
          "instructions": "Thêm ca thu hồi, hết thời gian chờ và phản hồi không hợp lệ. Tổng hợp phần mã thay đổi, cách chạy và giới hạn để NCS review.",
          "output": "backend/app/services/; backend/app/main.py; testing/scripts/ — Bộ test và ghi chú review",
          "done_when": "Lỗi đóng đúng; không có bí mật hoặc dịch vụ thật ngoài quyền.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A05.03"
        }
      ],
      "source_paths": [
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "backend/app/main.py",
        "backend/app/services/release_preflight.py",
        "backend/tests/test_offline_api.py"
      ],
      "resume_note": "Kế thừa API ngoại tuyến và kiểm bản kê giả. Bổ sung bộ nạp, luồng thật, quyền và phản hồi an toàn; giữ hồi quy đã có.",
      "reader_notes": {
        "purpose": "Mã nháp theo từng phần giúp NCS kiểm bộ nạp và API bằng dữ liệu tổng hợp trước kết nối thật.",
        "acceptance_checks": [
          "Mã và test bao phủ gói sai quyền/phiên bản, thu hồi, trích dẫn và lỗi dịch vụ.",
          "Không nạp DRAFT hoặc gọi dịch vụ thật chưa được phép; thiếu điều kiện thì đóng phản hồi."
        ],
        "dependency_use": {
          "R039": "Hợp đồng API và bộ nạp cung cấp schema, trạng thái và ca kiểm để AI viết mã đúng phạm vi."
        }
      }
    },
    {
      "id": "R040",
      "package": "SD05",
      "title": "Review và hoàn thiện API thật",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 960
      },
      "ai_runs": 0,
      "deps": [
        "A05",
        "R038"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "backend/DAC_TA_API_VA_NGU_CANH.md",
      "steps": "Đọc mã; sửa xử lý lỗi; nối bộ lọc; kiểm chi phí và giới hạn",
      "done_when": "NCS giải thích luồng; test âm và nguồn bị thu hồi đều đạt; tài liệu dẫn phiên bản mã, tệp thay đổi và log kiểm thực",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đọc mã bộ nạp và giải thích luồng",
          "instructions": "Đối chiếu mã A05 với R039. NCS ghi luồng từ nhận yêu cầu tới kiểm gói và phản hồi; đánh dấu đoạn chưa hiểu hoặc khác đặc tả.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Sơ đồ luồng mã và điểm cần sửa",
          "done_when": "NCS giải thích được đường chính và đường lỗi; không chỉ nhận test xanh.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.01"
        },
        {
          "title": "Sửa kiểm bản kê và phiên bản gói",
          "instructions": "Kiểm từng trường quyền, phiên bản, trạng thái và thời hạn bằng gói tổng hợp. Sửa việc chấp nhận thiếu trường hoặc so sai; chạy lại ca liên quan.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Mã kiểm gói và kết quả ca âm",
          "done_when": "Gói thiếu/sai bị chặn đúng; không chỉnh gói thật để làm test đạt.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.02"
        },
        {
          "title": "Hoàn thiện trích dẫn và truy vết nguồn",
          "instructions": "Đối chiếu ID trả về với nguồn trong gói. Sửa nguồn không tồn tại, lệch phiên bản và trích dẫn rỗng; ghi bằng chứng theo ca.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Kết quả kiểm trích dẫn",
          "done_when": "Nguồn trả về thuộc gói hợp lệ; lỗi nguồn không biến thành câu trả lời thành công.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.03"
        },
        {
          "title": "Nối bộ lọc an toàn đúng hợp đồng",
          "instructions": "Dùng đúng phiên bản quy tắc CVYK đã xét tại R034/R036 và bằng chứng kỹ thuật R038. Nối bộ lọc vào yêu cầu/phản hồi; kiểm từ chối và lỗi. Đổi nội dung chuyên môn phải xét lại; không tự tạo nhãn hoặc ngưỡng.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Mã nối bộ lọc và ca hồi quy",
          "done_when": "Đúng phiên bản nội dung; thiếu bộ lọc hợp lệ phải đóng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.04"
        },
        {
          "title": "Hoàn thiện lỗi dịch vụ và hết thời gian chờ",
          "instructions": "Dùng dịch vụ giả để tạo lỗi kết nối, trả rỗng, sai cấu trúc và chậm. Sửa ánh xạ trạng thái; bảo đảm log không lặp dữ liệu đầu vào.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Bằng chứng lỗi dịch vụ",
          "done_when": "Mọi lỗi có kết quả xác định; không rò bí mật hoặc dữ liệu thử qua log.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.05"
        },
        {
          "title": "Kiểm giới hạn yêu cầu và tài nguyên",
          "instructions": "Theo ngưỡng kỹ thuật đã chọn, thử kích thước, tần suất và giới hạn thời gian. Kiểm dự toán chi phí/cấu hình; ghi giới hạn chưa đo được.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Ma trận giới hạn và phép kiểm",
          "done_when": "Không tự tăng hạn mức để qua test; vượt giới hạn bị xử lý đúng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.06"
        },
        {
          "title": "Kiểm thu hồi và trạng thái không sẵn sàng",
          "instructions": "Thu hồi gói tổng hợp, thay phiên bản hoặc bỏ cấu hình cần thiết. Kiểm yêu cầu mới và dữ liệu lưu tạm; sửa đường dùng lại nguồn không hợp lệ.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Ca thu hồi và readiness",
          "done_when": "Nguồn bị rút không tiếp tục được dùng; readiness phản ánh đúng điều kiện.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.07"
        },
        {
          "title": "Chạy hồi quy và hoàn thiện hồ sơ API",
          "instructions": "Chạy bộ kiểm thuộc phần đã sửa, đối chiếu kết quả với ma trận R039. Cập nhật hướng dẫn, lỗi còn mở và các điểm cần reviewer kiểm tiếp.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Bản API để review kỹ thuật",
          "done_when": "Đủ bằng chứng ca âm; NCS giải thích thay đổi; không tự nghiệm thu ứng dụng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R040.08"
        }
      ],
      "source_paths": [
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "backend/app/main.py",
        "backend/app/services/release_preflight.py",
        "backend/tests/test_offline_api.py"
      ],
      "resume_note": "Kế thừa API ngoại tuyến và kiểm bản kê giả. Bổ sung bộ nạp, luồng thật, quyền và phản hồi an toàn; giữ hồi quy đã có.",
      "reader_notes": {
        "purpose": "NCS phải hiểu mã do AI tạo và nối bộ lọc đã kiểm trước khi dùng API cho gói tri thức thật.",
        "acceptance_checks": [
          "NCS giải thích được luồng; hồ sơ dẫn phiên bản mã, tệp thay đổi và log kiểm thực.",
          "Ca sai, lỗi dịch vụ và nguồn bị thu hồi bị xử lý đúng.",
          "Chỉ nối nội dung/bộ lọc đúng phiên bản được xét; không tự sửa nội dung APPROVED hoặc đặt ngưỡng y khoa."
        ],
        "dependency_use": {
          "A05": "Mã bộ nạp/API và test tổng hợp là phần NCS phải đọc, sửa và kiểm lại.",
          "R038": "Bằng chứng kiểm đường lỗi và bỏ qua bộ lọc giúp NCS nối đúng cơ chế chặn, không tự thay quyết định CVYK."
        }
      }
    },
    {
      "id": "R041",
      "package": "SD05",
      "title": "Kiểm hợp đồng dùng chung và lỗi camera",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 120
      },
      "ai_runs": 0,
      "deps": [
        "R040"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "backend/DAC_TA_API_VA_NGU_CANH.md",
      "steps": "Đối chiếu tên trường; kiểm trạng thái không đo được; góp ý API",
      "done_when": "Không cần video hoặc tọa độ để tích hợp",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm hợp đồng camera bằng thông điệp tổng hợp",
          "instructions": "So tên trường và phiên bản với đặc tả camera. Thử trạng thái không đo được, chất lượng thấp và lỗi; góp ý API không yêu cầu video hoặc tọa độ.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Nhận xét giao tiếp camera",
          "done_when": "Kết quả thất bại không bị hiểu là số đo; chưa bật thiết bị hoặc thử người.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R041.01"
        }
      ],
      "source_paths": [
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "backend/app/main.py",
        "backend/app/services/release_preflight.py",
        "backend/tests/test_offline_api.py"
      ],
      "resume_note": "Kế thừa API ngoại tuyến và kiểm bản kê giả. Bổ sung bộ nạp, luồng thật, quyền và phản hồi an toàn; giữ hồi quy đã có.",
      "reader_notes": {
        "purpose": "Hai nhánh cần cùng hiểu trạng thái camera thất bại để API không coi không đo được là một số đo hợp lệ.",
        "acceptance_checks": [
          "Tên trường và phiên bản được so với đặc tả camera, có kết quả thử thông điệp tổng hợp.",
          "Giao tiếp không cần video/tọa độ; không đo được được trả đúng trạng thái."
        ],
        "dependency_use": {
          "R040": "API đã được NCS hoàn thiện cung cấp trường và hành vi thực để NCS2 kiểm tương thích camera."
        }
      }
    },
    {
      "id": "R042",
      "package": "SD05",
      "title": "Review kỹ thuật API và bộ nạp",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 360
      },
      "ai_runs": 0,
      "deps": [
        "R041"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "backend/DAC_TA_API_VA_NGU_CANH.md",
      "steps": "Kiểm quyền, đầu vào, rate limit, timeout, nguồn và nhật ký",
      "done_when": "Có bằng chứng yêu cầu ASVS đã chọn; không tự nhận đạt toàn ASVS",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm quyền và đầu vào API độc lập",
          "instructions": "Đối chiếu hợp đồng với mã; thử sai vai, thiếu điều kiện, dữ liệu sai kiểu và quá lớn bằng ca tổng hợp. Ghi kết quả theo mã yêu cầu ASVS đã chọn.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Bằng chứng quyền và đầu vào",
          "done_when": "Có kết quả từng ca; không suy kiểm mẫu thành toàn bộ ASVS.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R042.01"
        },
        {
          "title": "Kiểm giới hạn, timeout và nhật ký",
          "instructions": "Tạo gọi dồn, dịch vụ chậm và lỗi trong phạm vi môi trường thử. Đối chiếu trạng thái trả về và log; kiểm không lộ khóa hoặc nội dung đầu vào.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Bằng chứng giới hạn và log",
          "done_when": "Giới hạn đúng cấu hình; lỗi được ghi đủ nhưng không vượt quyền dữ liệu.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R042.02"
        },
        {
          "title": "Kiểm bộ nạp, nguồn và kết luận review",
          "instructions": "Thử gói sai phiên bản, hết quyền, thu hồi và nguồn không khớp. Tổng hợp lỗi, mức ảnh hưởng, người sửa và phần chưa kiểm để NCS tiếp nhận.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Biên bản review API",
          "done_when": "Các lỗi có bằng chứng tái hiện; không tự cho phép kết nối nguồn thật.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R042.03"
        }
      ],
      "source_paths": [
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "backend/app/main.py",
        "backend/app/services/release_preflight.py",
        "backend/tests/test_offline_api.py"
      ],
      "resume_note": "Kế thừa API ngoại tuyến và kiểm bản kê giả. Bổ sung bộ nạp, luồng thật, quyền và phản hồi an toàn; giữ hồi quy đã có.",
      "reader_notes": {
        "purpose": "Review độc lập giúp phát hiện lỗi quyền, nguồn và tài nguyên trước khi nối gói thật.",
        "acceptance_checks": [
          "Có kết quả kiểm quyền, đầu vào, tần suất, thời gian chờ và log theo phiên bản API.",
          "Ca nguồn sai/hết quyền/thu hồi được kiểm; phạm vi ASVS đã chọn được ghi rõ, không nhận đạt toàn chuẩn."
        ],
        "dependency_use": {
          "R041": "Nhận xét giao tiếp camera và phiên bản API giúp reviewer kiểm cả phần dùng chung lẫn trạng thái lỗi."
        }
      }
    },
    {
      "id": "R043",
      "package": "SD05",
      "title": "Nối gói tri thức thật và nhà cung cấp được phép",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 480
      },
      "ai_runs": 0,
      "deps": [
        "R042",
        "GA"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "backend/DAC_TA_API_VA_NGU_CANH.md",
      "steps": "Nạp gói đúng phiên bản; kiểm trích dẫn; kiểm thu hồi và lỗi dịch vụ",
      "done_when": "Chỉ gói được xét hợp lệ; test dữ liệu tổng hợp trước dùng thật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu gói được duyệt trước nạp",
          "instructions": "Kiểm đầu ra GA, bản kê, quyền, thời hạn và phiên bản gói. So phạm vi nhà cung cấp với Q03; thiếu điều kiện thì dừng và ghi phần chờ.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Phiếu kiểm điều kiện nạp",
          "done_when": "Đúng gói và thao tác được phép; không dùng nhãn duyệt của phiên bản khác.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R043.01"
        },
        {
          "title": "Nạp gói và kiểm bằng câu hỏi tổng hợp",
          "instructions": "Nạp đúng gói đã xét trong môi trường cho phép. Chạy ca tổng hợp, so trích dẫn và trạng thái bộ lọc; ghi phiên bản cấu hình và nguồn.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Log nạp và kiểm nguồn",
          "done_when": "Không nhập dữ liệu người thật; mọi nguồn trả về khớp gói.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R043.02"
        },
        {
          "title": "Nối nhà cung cấp trong phạm vi được phép",
          "instructions": "Kiểm tài khoản, cấu hình và giới hạn đã được xác minh trước gọi. Thử kết nối tối thiểu bằng dữ liệu tổng hợp; ghi chi phí và lỗi kỹ thuật được phép lưu.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Bằng chứng kết nối có điều kiện",
          "done_when": "Không có lời gọi trước đủ quyền; kết quả lỗi không bị báo là trả lời hợp lệ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R043.03"
        },
        {
          "title": "Kiểm thu hồi và lỗi sau tích hợp",
          "instructions": "Thử vô hiệu gói hoặc cấu hình trong vùng thử, mô phỏng lỗi dịch vụ. Kiểm khả năng đóng và phục hồi đúng bản; cập nhật hợp đồng và giới hạn.",
          "output": "backend/DAC_TA_API_VA_NGU_CANH.md — Biên bản tích hợp gói/dịch vụ",
          "done_when": "Không dùng lại nguồn hết quyền; ghi rõ phần chưa sẵn sàng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R043.04"
        }
      ],
      "source_paths": [
        "backend/DAC_TA_API_VA_NGU_CANH.md",
        "backend/app/main.py",
        "backend/app/services/release_preflight.py",
        "backend/tests/test_offline_api.py"
      ],
      "resume_note": "Kế thừa API ngoại tuyến và kiểm bản kê giả. Bổ sung bộ nạp, luồng thật, quyền và phản hồi an toàn; giữ hồi quy đã có.",
      "reader_notes": {
        "purpose": "Gói tri thức và dịch vụ thật chỉ được nối sau kiểm kỹ thuật và xét quyền/chuyên môn đúng phiên bản.",
        "acceptance_checks": [
          "Bản kê gói, quyền và phiên bản khớp hồ sơ GA; cấu hình nhà cung cấp không vượt quyền.",
          "Ca tổng hợp kiểm trích dẫn, thu hồi và lỗi sau nối có log; chưa dùng dữ liệu người thật ngoài phạm vi."
        ],
        "dependency_use": {
          "R042": "Biên bản kỹ thuật cho biết API/bộ nạp đã được kiểm và những lỗi phải giải quyết trước nối thật.",
          "GA": "Hồ sơ xét GA cung cấp gói và quyết định chuyên môn/quyền hợp lệ để kiểm trước nạp, không thay CVYK bằng chữ ký khác."
        }
      }
    },
    {
      "id": "A06",
      "package": "SD06",
      "title": "Hoàn thiện UI theo hợp đồng API",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 2,
      "deps": [
        "R040"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
      "steps": "Bổ sung hỏi/đáp, trích dẫn, lỗi, đang chờ, hủy và trạng thái đóng",
      "done_when": "Giữ chữ lớn, nhãn rõ; không thêm luồng chưa có",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nháp màn hình hỏi đáp và trích dẫn",
          "instructions": "Đọc hợp đồng API R040 và Vue hiện có. Bổ sung vùng hỏi, trả lời, nguồn và nhãn; giữ cỡ chữ, không thêm tính năng ngoài phạm vi.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Mã/đặc tả luồng UI chính",
          "done_when": "Hiển thị đúng schema và nguồn; chưa nhận mô phỏng là hỏi đáp thật.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A06.01"
        },
        {
          "title": "Nháp trạng thái chờ, hủy và lỗi",
          "instructions": "Mô tả chuyển trạng thái khi gửi, chờ, hủy, mất mạng và hệ thống đóng. Thêm kiểm UI theo thông điệp tổng hợp, nhãn và focus dự kiến.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — UI trạng thái và ca kiểm",
          "done_when": "Không hiển thị lỗi thành câu trả lời; thông báo có thể tiếp cận.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A06.02"
        }
      ],
      "source_paths": [
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "frontend/src/App.vue",
        "frontend/tests/App.test.js",
        "frontend/README.md"
      ],
      "resume_note": "Kế thừa Vue mô phỏng, test và cách dựng. Bổ sung kết nối API thật, trạng thái lỗi, trợ năng và bằng chứng kiểm đúng bản dựng.",
      "reader_notes": {
        "purpose": "Giao diện cần biểu diễn đủ chờ, hủy và từ chối để người dùng không nhầm trạng thái hệ thống với câu trả lời.",
        "acceptance_checks": [
          "Bản nháp hỏi/đáp và trích dẫn khớp schema API; không thêm luồng chưa có.",
          "Thông báo lỗi/chờ/hủy có nhãn rõ, giữ chữ lớn và cách xử lý focus dự kiến."
        ],
        "dependency_use": {
          "R040": "Hợp đồng và hành vi API đã hoàn thiện cung cấp trạng thái cụ thể để AI thiết kế giao diện."
        }
      }
    },
    {
      "id": "R044",
      "package": "SD06",
      "title": "Tích hợp Vue với API và xử lý lỗi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 720
      },
      "ai_runs": 0,
      "deps": [
        "A06",
        "R042"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
      "steps": "Tái dùng mô phỏng; nối endpoint; kiểm trạng thái thực và không lưu ngoài phạm vi",
      "done_when": "Bản chạy thật khớp hợp đồng, không dựa kịch bản giả",
      "condition": "Tích hợp API bằng gói tổng hợp đúng schema; R043 và GA vẫn bắt buộc trước gói tri thức thật.",
      "work_steps": [
        {
          "title": "Đọc UI nháp và chốt ánh xạ API",
          "instructions": "So A06 với Vue mô phỏng và hợp đồng API đã review. Ghi ánh xạ trường, trạng thái và điểm cần sửa trước nối endpoint.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Bảng ánh xạ UI–API",
          "done_when": "Không tự thêm trường hoặc diễn giải chuyên môn ngoài hợp đồng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R044.01"
        },
        {
          "title": "Nối đường gửi và hiển thị phản hồi",
          "instructions": "Nối endpoint trong môi trường được phép bằng dữ liệu tổng hợp. Kiểm nhập, gửi, phản hồi và trích dẫn; giữ rõ trạng thái mô phỏng/không sẵn sàng.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Luồng gửi–nhận để kiểm",
          "done_when": "Phản hồi đúng schema; lỗi không bị trình bày như kết quả thành công.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R044.02"
        },
        {
          "title": "Hoàn thiện chờ, hủy và gửi lặp",
          "instructions": "Kiểm trạng thái khi phản hồi chậm, người dùng hủy hoặc bấm nhiều lần. Sửa thông báo và dữ liệu còn lại trên màn hình; ghi kết quả từng tình huống.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Ca chuyển trạng thái UI",
          "done_when": "Không hiện phản hồi cũ cho yêu cầu mới; hành động có trạng thái rõ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R044.03"
        },
        {
          "title": "Hoàn thiện mất mạng và dịch vụ đóng",
          "instructions": "Mô phỏng lỗi kết nối, 503 và phản hồi không hợp lệ. Kiểm lời báo, khả năng thử lại và phần nhập còn giữ theo đặc tả; không gửi lặp ngoài dự kiến.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — UI lỗi và ca hồi quy",
          "done_when": "Mất mạng không làm lộ dữ liệu hoặc đánh dấu sẵn sàng sai.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R044.04"
        },
        {
          "title": "Kiểm lưu dữ liệu và trích dẫn trong trình duyệt",
          "instructions": "Rà bộ nhớ trình duyệt, lịch sử, cache và log theo quyền. Kiểm đường mở nguồn và nội dung lỗi; loại lưu trữ ngoài phạm vi đã quyết định.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Bảng dữ liệu phía trình duyệt",
          "done_when": "Không lưu tự động ngoài quyền; đường nguồn đúng phiên bản được phép.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R044.05"
        },
        {
          "title": "Chạy kiểm tích hợp và cập nhật đặc tả",
          "instructions": "Chạy test UI hiện có cùng ca mới, dựng frontend và kiểm luồng hoàn chỉnh. Ghi bản API/UI, lỗi còn mở và hướng dẫn kiểm chéo.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Bản UI để kiểm chéo",
          "done_when": "Test và bản dựng gắn mã hiện tại; không lấy kết quả 21 test cũ thay kiểm phần mới.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R044.06"
        }
      ],
      "source_paths": [
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "frontend/src/App.vue",
        "frontend/tests/App.test.js",
        "frontend/README.md"
      ],
      "resume_note": "Kế thừa Vue mô phỏng, test và cách dựng. Bổ sung kết nối API thật, trạng thái lỗi, trợ năng và bằng chứng kiểm đúng bản dựng.",
      "reader_notes": {
        "purpose": "Nối Vue với API giúp kiểm hành vi thật của giao diện thay cho ba kịch bản mô phỏng sẵn.",
        "acceptance_checks": [
          "Có bằng chứng gửi/nhận, nguồn, chờ/hủy/mất mạng và trạng thái đóng qua endpoint thật trong môi trường được phép.",
          "Lưu trữ phía trình duyệt đúng phạm vi; phiên bản UI/API và kết quả test/build được ghi lại."
        ],
        "dependency_use": {
          "A06": "UI nháp và các trạng thái cung cấp phần mã/đặc tả để NCS tích hợp.",
          "R042": "Review API xác định hợp đồng và lỗi kỹ thuật cần xử lý trước khi giao diện dựa vào chúng."
        }
      }
    },
    {
      "id": "R045",
      "package": "SD06",
      "title": "Kiểm chéo bàn phím và trạng thái",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 240
      },
      "ai_runs": 0,
      "deps": [
        "R044"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
      "steps": "Kiểm focus, zoom, mất kết nối, tải chậm, đọc trích dẫn",
      "done_when": "Ghi lỗi có bước lặp lại và thiết bị",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm chéo bàn phím, focus và zoom",
          "instructions": "Dùng bàn phím đi hết luồng nhập, gửi, nguồn và thông báo. Thử zoom theo tiêu chí đã chọn; ghi vị trí focus mất, bị che hoặc thao tác không tới được.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Phiếu lỗi bàn phím/zoom",
          "done_when": "Mỗi lỗi có bước tái hiện và màn hình; chưa tổ chức kiểm người dùng thật.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R045.01"
        },
        {
          "title": "Kiểm trạng thái mạng và đọc trích dẫn",
          "instructions": "Tạo mạng chậm/mất kết nối bằng phương tiện thử được phép. Kiểm chờ, thử lại và đọc nguồn; ghi phản hồi UI khác hợp đồng hoặc gây nhầm lẫn.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Phiếu lỗi trạng thái và nguồn",
          "done_when": "Phân biệt lỗi kỹ thuật với kết quả chuyên môn; có đầu vào thử để kiểm lại.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R045.02"
        }
      ],
      "source_paths": [
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "frontend/src/App.vue",
        "frontend/tests/App.test.js",
        "frontend/README.md"
      ],
      "resume_note": "Kế thừa Vue mô phỏng, test và cách dựng. Bổ sung kết nối API thật, trạng thái lỗi, trợ năng và bằng chứng kiểm đúng bản dựng.",
      "reader_notes": {
        "purpose": "Kiểm chéo bằng bàn phím và khi mất mạng giúp phát hiện thao tác khó dùng mà người viết giao diện dễ bỏ qua.",
        "acceptance_checks": [
          "Phiếu lỗi ghi thiết bị, trình duyệt và bước lặp lại cho focus, zoom, mạng chậm/mất kết nối.",
          "Luồng đọc trích dẫn được thử; lỗi không bị nhận là kết quả chuyên môn."
        ],
        "dependency_use": {
          "R044": "Bản Vue đã nối API là đối tượng cần thử trạng thái thực và thao tác bàn phím."
        }
      }
    },
    {
      "id": "R046",
      "package": "SD06",
      "title": "Kiểm trợ năng còn thiếu trên bản thật",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 240
      },
      "ai_runs": 0,
      "deps": [
        "R045"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
      "steps": "Dùng NVDA, zoom, tương phản và High Contrast; kiểm luồng hoàn chỉnh",
      "done_when": "Tách đạt từng tiêu chí với tuyên bố AA toàn hệ thống",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm NVDA và luồng bàn phím",
          "instructions": "Ghi phiên bản trình duyệt/NVDA. Kiểm tên điều khiển, thứ tự focus, thông báo chờ/lỗi và đọc nguồn trên toàn luồng; lưu kết quả theo tiêu chí.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Bằng chứng kiểm trợ năng thủ công",
          "done_when": "Không chỉ dựa vào công cụ tự động; lỗi có bước và phạm vi rõ.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R046.01"
        },
        {
          "title": "Kiểm zoom, tương phản và High Contrast",
          "instructions": "Theo tiêu chí đã chọn, kiểm bố cục khi zoom, độ tương phản và chế độ High Contrast. Tổng hợp lỗi chặn thao tác, mức ưu tiên và giới hạn chưa kiểm.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Biên bản trợ năng bản thật",
          "done_when": "Không tự tuyên bố đạt WCAG AA toàn hệ thống; gửi danh sách sửa cụ thể.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R046.02"
        }
      ],
      "source_paths": [
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "frontend/src/App.vue",
        "frontend/tests/App.test.js",
        "frontend/README.md"
      ],
      "resume_note": "Kế thừa Vue mô phỏng, test và cách dựng. Bổ sung kết nối API thật, trạng thái lỗi, trợ năng và bằng chứng kiểm đúng bản dựng.",
      "reader_notes": {
        "purpose": "Kiểm trợ năng trên cả luồng giúp biết người dùng có thể nhận thông báo và hoàn thành tác vụ trong các chế độ hiển thị.",
        "acceptance_checks": [
          "Kết quả NVDA, zoom, tương phản và High Contrast ghi rõ môi trường và tiêu chí.",
          "Lỗi chặn tác vụ và phần chưa kiểm được liệt kê; không suy các tiêu chí mẫu thành đạt AA toàn hệ thống."
        ],
        "dependency_use": {
          "R045": "Phiếu kiểm chéo xác định lỗi và thao tác cần kiểm sâu bằng công cụ trợ năng."
        }
      }
    },
    {
      "id": "R047",
      "package": "SD06",
      "title": "Sửa lỗi giao diện và trợ năng",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R046"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
      "steps": "Ưu tiên chặn tác vụ; sửa và kiểm lại ca bị ảnh hưởng",
      "done_when": "Có bằng chứng lỗi đã đóng hoặc giới hạn được chấp thuận",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa lỗi chặn tác vụ và thông báo",
          "instructions": "Đọc R045/R046, ưu tiên lỗi bàn phím, focus và trạng thái gây hiểu nhầm. Sửa trong phạm vi UI; thêm ca tái hiện để tránh lỗi trở lại.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Mã sửa và ca hồi quy UI",
          "done_when": "Mỗi sửa gắn lỗi đã báo; không đổi nội dung chuyên môn chưa duyệt.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R047.01"
        },
        {
          "title": "Kiểm lại trợ năng và bản dựng",
          "instructions": "Chạy lại luồng từng lỗi cùng ca liên quan, gồm zoom và chế độ hiển thị bị ảnh hưởng. Dựng bản mới; ghi lỗi đạt, chưa đạt và bản bàn giao.",
          "output": "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md — Kết quả kiểm lại UI",
          "done_when": "Bằng chứng gắn đúng bản mới; lỗi chưa xử lý không bị xóa khỏi báo cáo.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R047.02"
        }
      ],
      "source_paths": [
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "frontend/src/App.vue",
        "frontend/tests/App.test.js",
        "frontend/README.md"
      ],
      "resume_note": "Kế thừa Vue mô phỏng, test và cách dựng. Bổ sung kết nối API thật, trạng thái lỗi, trợ năng và bằng chứng kiểm đúng bản dựng.",
      "reader_notes": {
        "purpose": "Sửa các lỗi đã tái hiện giúp giao diện đáp ứng đúng tác vụ trước khi đóng gói.",
        "acceptance_checks": [
          "Mỗi lỗi R046 có bản sửa và ca kiểm lại, hoặc giới hạn được chấp thuận đúng thẩm quyền.",
          "Test/bản dựng và kết quả trợ năng gắn phiên bản mới; lỗi chưa xử lý vẫn được giữ mở."
        ],
        "dependency_use": {
          "R046": "Biên bản trợ năng cung cấp lỗi cụ thể và thứ tự ưu tiên để NCS sửa rồi kiểm lại."
        }
      }
    },
    {
      "id": "R048",
      "package": "SD14",
      "title": "Hoàn thiện kế hoạch kiểm thử tổng thể",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R019"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md",
      "steps": "Ghép yêu cầu/rủi ro/ca kiểm; tách đơn vị, tích hợp, hệ thống và tải",
      "done_when": "Mọi yêu cầu có phép kiểm và người kiểm",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Lập bảng yêu cầu và ca kiểm",
          "instructions": "Đối chiếu yêu cầu, rủi ro và thiết kế với hiện vật. Gắn mỗi yêu cầu với ca kiểm, dữ liệu và đầu ra quan sát.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bảng yêu cầu–ca kiểm",
          "done_when": "Yêu cầu thiếu ca kiểm được ghi thành việc còn lại.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R048.01"
        },
        {
          "title": "Chốt cách chạy theo mức",
          "instructions": "Tách kiểm đơn vị, tích hợp, hệ thống và tải. Ghi môi trường, vai thực hiện, điều kiện vào và tiêu chí ra.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Quy trình chạy và nghiệm thu",
          "done_when": "Mỗi mức có người nhận và nơi lưu bằng chứng.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R048.02"
        }
      ],
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp.",
      "reader_notes": {
        "purpose": "Mỗi yêu cầu cần có cách kiểm và người chịu trách nhiệm. Kế hoạch chung giúp nhóm không bỏ sót kiểm tích hợp, hệ thống hoặc tải.",
        "acceptance_checks": [
          "Yêu cầu và rủi ro được nối với ca kiểm.",
          "Các mức kiểm đơn vị, tích hợp, hệ thống và tải được tách rõ.",
          "Mọi yêu cầu có phép kiểm và người kiểm."
        ],
        "dependency_use": {
          "R019": "Hợp đồng và bộ kiểm đã được xét cung cấp cấu trúc dữ liệu cùng yêu cầu cần đưa vào kế hoạch kiểm thử."
        }
      }
    },
    {
      "id": "R049",
      "package": "SD14",
      "title": "Tách kiểm camera và dữ liệu đánh giá",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 180
      },
      "ai_runs": 0,
      "deps": [
        "R048"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md",
      "steps": "Đề xuất điều kiện thiết bị; thất bại; mất quyền; không đo được",
      "done_when": "Không gộp độ đúng kỹ thuật với giá trị lâm sàng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Lập ca kỹ thuật camera",
          "instructions": "Liệt kê thiết bị, quyền, mất hình, rời trang và không đo được. Tách dữ liệu giả với dữ liệu người được phép.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bảng thiết bị và lỗi camera",
          "done_when": "Dữ liệu giả không chứng minh hiệu lực đo trên người.",
          "minutes": {
            "NCS2": 90
          },
          "ai_runs": 0,
          "id": "R049.01"
        },
        {
          "title": "Tách đánh giá phép đo",
          "instructions": "Ghi chuẩn đối chiếu, sai số, tỷ lệ không đo được và dữ liệu thiếu. Gắn nguồn protocol; không suy bệnh từ chỉ số.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Kế hoạch đánh giá camera",
          "done_when": "Kiểm kỹ thuật, phép đo và review y khoa có đầu ra riêng.",
          "minutes": {
            "NCS2": 90
          },
          "ai_runs": 0,
          "id": "R049.02"
        }
      ],
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp.",
      "reader_notes": {
        "purpose": "Camera có thể chạy đúng mã nhưng chưa đo đáng tin trong điều kiện sử dụng. Kế hoạch phải tách hai loại bằng chứng này.",
        "acceptance_checks": [
          "Có điều kiện thiết bị và ca thất bại.",
          "Mất quyền và không đo được có cách kiểm.",
          "Độ đúng kỹ thuật không bị gộp với giá trị lâm sàng."
        ],
        "dependency_use": {
          "R048": "Kế hoạch kiểm tổng thể là khung để bổ sung thiết bị, đường lỗi và cách đánh giá camera."
        }
      }
    },
    {
      "id": "R050",
      "package": "SD14",
      "title": "Khóa tiêu chí chuyên môn và nhãn trước đánh giá",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 480
      },
      "ai_runs": 0,
      "deps": [
        "R049",
        "K01D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md",
      "steps": "Phân xử hai bộ safety; chọn mẫu số/ngưỡng; ghi bất đồng và dữ liệu thiếu",
      "done_when": "Quy tắc có nguồn; không chọn ngưỡng theo kết quả đã nhìn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu hai bộ an toàn",
          "instructions": "Kiểm mục tiêu, phạm vi và trùng lặp. Ghi ca phát triển, ca đánh giá riêng và phần cần người xét xác nhận.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bảng phân công hai bộ ca",
          "done_when": "Hai vai trò bộ ca được phân biệt rõ.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R050.01"
        },
        {
          "title": "Kiểm nhãn bằng nguồn",
          "instructions": "Đọc nguồn cho ca đúng, sai và không đủ thông tin. Ghi nhãn và bất đồng theo từng ca.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bảng nhãn, nguồn và bất đồng",
          "done_when": "Nhãn có căn cứ; bất đồng chưa giải quyết không tự tính đạt.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R050.02"
        },
        {
          "title": "Khóa tiêu chí và mẫu số",
          "instructions": "Xác định cách tính, mẫu số và tiêu chí cần đạt. Ghi phạm vi kết luận và điều kiện không được suy rộng.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Đặc tả tiêu chí và phép tính",
          "done_when": "Không chọn ngưỡng sau khi xem kết quả.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R050.03"
        },
        {
          "title": "Khóa xử lý dữ liệu thiếu",
          "instructions": "Ghi cách xử lý bỏ dở, không trả lời hoặc không đánh giá được. Gắn phiên bản, quyền truy cập và bằng chứng khóa.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bản khóa tiêu chí và dữ liệu thiếu",
          "done_when": "Khóa trước đánh giá; không loại ca để làm đẹp kết quả.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R050.04"
        }
      ],
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp.",
      "reader_notes": {
        "purpose": "Nếu chọn nhãn hoặc ngưỡng sau khi thấy kết quả, phép đánh giá có thể thiên lệch. Nhóm cần khóa cách chấm và xử lý dữ liệu thiếu trước.",
        "acceptance_checks": [
          "Hai bộ an toàn được phân xử và xác định cách dùng.",
          "Mẫu số, tiêu chí, bất đồng và dữ liệu thiếu được ghi rõ.",
          "Quy tắc có nguồn và được khóa trước khi xem kết quả."
        ],
        "dependency_use": {
          "R049": "Phân biệt kiểm camera và đánh giá chuyên môn giúp chọn đúng phép tính và loại kết luận.",
          "K01D": "Nguồn và quyết định lô đầu cung cấp căn cứ để xét nhãn cùng tiêu chí chuyên môn."
        }
      }
    },
    {
      "id": "R051",
      "package": "SD14",
      "title": "Chuẩn bị bộ đánh giá riêng và review độc lập",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_YK": 480
      },
      "ai_runs": 0,
      "deps": [
        "R050"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md",
      "steps": "Chọn ca đúng phạm vi; khóa nhãn; bảo quản tập cuối; xác nhận độc lập thực",
      "done_when": "Chuyên môn và vai trò được xác nhận; NCS không xem đáp án tập cuối",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Thiết kế bộ đánh giá riêng",
          "instructions": "Người review y khoa độc lập đọc tiêu chí. Lập phân bố tình huống, kiểm độc lập với ca phát triển và quyền truy cập.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Ma trận bộ đánh giá riêng",
          "done_when": "Người làm mã không nhận đáp án để sửa sản phẩm.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R051.01"
        },
        {
          "title": "Soạn ca độc lập",
          "instructions": "Tạo ca theo ma trận và nguồn. Tránh sao chép ca phát triển. Ghi locator để người có quyền kiểm chứng.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bộ đầu vào đánh giá riêng",
          "done_when": "Mỗi ca có căn cứ; không giả danh tình huống người thật.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R051.02"
        },
        {
          "title": "Xét nhãn và tình huống biên",
          "instructions": "Kiểm nhãn, đáp án được chấp nhận và cách chấm. Xử lý bất đồng hoặc ca chưa đủ căn cứ trước khóa.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Nhãn và hướng dẫn chấm",
          "done_when": "Không mặc định đúng cho ca chưa đủ căn cứ.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R051.03"
        },
        {
          "title": "Khóa và phân quyền bộ ca",
          "instructions": "Khóa phiên bản, lưu dấu kiểm tra và quyền truy cập. Giao đầu vào, đáp án và biên bản đúng vai. Nêu xử lý khi lộ đáp án.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bản kê khóa và quyền truy cập",
          "done_when": "Tính độc lập có bằng chứng, không chỉ dựa vào tên vai.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R051.04"
        }
      ],
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp.",
      "reader_notes": {
        "purpose": "Đánh giá độc lập cần bộ ca không được dùng để sửa mã. Người giữ đáp án phải có chuyên môn và vai trò được xác nhận.",
        "acceptance_checks": [
          "Ca đánh giá nằm trong phạm vi và có nhãn được khóa.",
          "Có cách bảo quản tập cuối cùng và quyền truy cập rõ.",
          "NCS không xem đáp án tập cuối; tính độc lập được xác nhận thực."
        ],
        "dependency_use": {
          "R050": "Tiêu chí và nhãn đã khóa xác định cách chọn, xét và bảo quản bộ đánh giá riêng."
        }
      }
    },
    {
      "id": "R052",
      "package": "SD14",
      "title": "Review thiết kế đánh giá và quyền truy cập",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 120
      },
      "ai_runs": 0,
      "deps": [
        "R051"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md",
      "steps": "Kiểm độc lập, nguồn, phiên bản, cỡ mẫu và giới hạn",
      "done_when": "Q05 có người thật; không xem AI như người chấm độc lập",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review thiết kế đánh giá và quyền truy cập",
          "instructions": "Kiểm độc lập, nguồn, phiên bản, cỡ mẫu và giới hạn. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Phần R052: Review thiết kế đánh giá và quyền truy cập",
          "done_when": "Q05 có người thật; không xem AI như người chấm độc lập",
          "minutes": {
            "GVHD": 120
          },
          "ai_runs": 0,
          "id": "R052.01"
        }
      ],
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp.",
      "reader_notes": {
        "purpose": "Cần kiểm lại người chấm, nguồn và quyền xem đáp án trước khi đánh giá. AI không thể được tính là người chấm độc lập.",
        "acceptance_checks": [
          "Nguồn, phiên bản, cỡ mẫu và giới hạn được review.",
          "Quyền truy cập phù hợp với yêu cầu độc lập.",
          "Q05 có người thật được xác nhận."
        ],
        "dependency_use": {
          "R051": "Bộ đánh giá và hồ sơ phân quyền cho GVHD kiểm tính độc lập cùng giới hạn thiết kế."
        }
      }
    },
    {
      "id": "R053",
      "package": "SD14",
      "title": "Chuẩn hóa công cụ ghi kết quả",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R052"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md; testing/scripts/",
      "steps": "Tạo mẫu kết quả và script tính theo quy tắc khóa; dùng số giả để thử",
      "done_when": "Mẫu số, dữ liệu thiếu và lỗi không bị bỏ khỏi báo cáo",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chuẩn hóa biểu mẫu kết quả",
          "instructions": "Lập trường ID, phiên bản, kết quả, lỗi, dữ liệu thiếu và người ghi. Đối chiếu từng trường với phép tính đã khóa.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md; testing/scripts/ — Biểu mẫu ghi kết quả",
          "done_when": "Giữ đủ mẫu số và ca bỏ dở hoặc thiếu.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R053.01"
        },
        {
          "title": "Kiểm công cụ tính bằng dữ liệu giả",
          "instructions": "Viết hoặc sửa công cụ tính. Thử số nhỏ biết trước, mẫu số bằng không và dữ liệu thiếu. Ghi kết quả mong đợi và thực tế.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md; testing/scripts/ — Công cụ tính và ca kiểm giả",
          "done_when": "Phép tính tái lập được; không tự suy diễn giá trị thiếu.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R053.02"
        }
      ],
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp.",
      "reader_notes": {
        "purpose": "Biểu mẫu và phép tính phải giữ cả ca lỗi hoặc thiếu dữ liệu. Công cụ được thử trước giúp tránh bỏ sai mẫu số khi tổng hợp.",
        "acceptance_checks": [
          "Mẫu kết quả và công cụ tính bám quy tắc đã khóa.",
          "Có kết quả thử công cụ bằng số giả.",
          "Mẫu số, dữ liệu thiếu và lỗi không bị bỏ khỏi báo cáo."
        ],
        "dependency_use": {
          "R052": "Thiết kế đánh giá đã review xác định trường cần ghi và quy tắc công cụ phải tính."
        }
      }
    },
    {
      "id": "A11",
      "package": "SD11",
      "title": "Sửa SQL và thiết kế chuyển đổi",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R019",
        "R030"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/database/init_schema.sql; deployment/database/QUY_TRINH_CHUYEN_DOI.md",
      "steps": "Sửa lô lệnh, chạy lại, AuditLog; thêm phiên bản và ca lỗi",
      "done_when": "Bản nháp không chạy vào DB thật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nháp SQL và bước chuyển đổi phiên bản",
          "instructions": "Đọc schema và SQL hiện có, đề xuất ràng buộc, AuditLog và quản lý phiên bản. Thêm ca chạy lại, lỗi giữa chừng và dữ liệu sai; chưa chạy lên DB thật.",
          "output": "deployment/database/init_schema.sql; deployment/database/QUY_TRINH_CHUYEN_DOI.md — SQL và kịch bản chuyển đổi để review",
          "done_when": "Lệnh có đích rõ, dữ liệu thử tổng hợp và cách xử lý thất bại.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A11.01"
        }
      ],
      "source_paths": [
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa SQL nháp và yêu cầu dữ liệu. Bổ sung chuyển đổi phiên bản, quyền, chạy lại và thử phục hồi trên cơ sở dữ liệu riêng.",
      "reader_notes": {
        "purpose": "SQL cần phản ánh hợp đồng dữ liệu đã kiểm và có đường xử lý khi chuyển đổi thất bại.",
        "acceptance_checks": [
          "Bản nháp SQL có phiên bản, ràng buộc, AuditLog và ca chạy lại/lỗi giữa chừng.",
          "Chỉ dùng dữ liệu tổng hợp để thiết kế; chưa chạy bản nháp vào DB thật."
        ],
        "dependency_use": {
          "R019": "Hợp đồng schema và kết quả bộ kiểm xác định trường/ràng buộc SQL cần thực hiện.",
          "R030": "Biên bản phân tách môi trường xác định DB thử và giới hạn quyền phải giữ trong kịch bản SQL."
        }
      }
    },
    {
      "id": "R054",
      "package": "SD11",
      "title": "Review mã SQL và kịch bản chuyển đổi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "A11"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md",
      "steps": "Đối chiếu từ điển; rà ràng buộc, khóa và chạy lại",
      "done_when": "Schema/validator/DB thống nhất",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu SQL với từ điển dữ liệu",
          "instructions": "Đọc từng bảng, trường và quan hệ trong SQL A11. So kiểu, bắt buộc, khóa và dữ liệu được phép giữ; ghi sai khác trước chạy.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Bảng đối chiếu schema–SQL",
          "done_when": "Không thêm dữ liệu ngoài phạm vi; khác biệt có quyết định xử lý.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R054.01"
        },
        {
          "title": "Review ràng buộc, log và quyền",
          "instructions": "Kiểm khóa, ràng buộc và trường AuditLog bằng ví dụ tổng hợp. Đối chiếu quyền app/DB và dữ liệu log; sửa SQL không phù hợp.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — SQL đã review quyền và log",
          "done_when": "Không ghi bí mật hoặc nội dung ngoài quyền; lỗi dữ liệu có hành vi rõ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R054.02"
        },
        {
          "title": "Hoàn thiện kịch bản chạy lại và thất bại",
          "instructions": "Mô tả thứ tự chuyển đổi, kiểm phiên bản trước/sau và tình huống dừng giữa chừng. Viết phép kiểm dữ liệu sau chạy hoặc quay lại; bàn giao OPS.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Quy trình chuyển đổi và ca lỗi",
          "done_when": "Không dùng chạy lại tùy ý để che lỗi; từng bước có điều kiện tiếp tục.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R054.03"
        }
      ],
      "source_paths": [
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa SQL nháp và yêu cầu dữ liệu. Bổ sung chuyển đổi phiên bản, quyền, chạy lại và thử phục hồi trên cơ sở dữ liệu riêng.",
      "reader_notes": {
        "purpose": "NCS cần kiểm SQL do AI viết để schema, bộ kiểm và DB không hiểu dữ liệu khác nhau.",
        "acceptance_checks": [
          "Từ điển trường, schema, ràng buộc và khóa DB được đối chiếu, có bản sửa sai khác.",
          "Kịch bản chạy lại và thất bại chỉ rõ trạng thái dữ liệu, phiên bản và cách khôi phục."
        ],
        "dependency_use": {
          "A11": "Mã SQL nháp và các ca lỗi cung cấp nội dung cụ thể để NCS review trước diễn tập."
        }
      }
    },
    {
      "id": "R055",
      "package": "SD11",
      "title": "Diễn tập SQL trên DB thử riêng",
      "status": "PLANNED",
      "minutes": {
        "OPS": 480
      },
      "ai_runs": 0,
      "deps": [
        "R054"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md",
      "steps": "Cài theo bản kê; kiểm quyền tối thiểu; thử lỗi giữa chừng và khôi phục",
      "done_when": "Có log, tên DB đích và kết quả dữ liệu; không dùng tài khoản quản trị cho ứng dụng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chuẩn bị DB thử và bản trước chuyển đổi",
          "instructions": "Xác nhận tên máy/DB thử, quyền và dữ liệu tổng hợp. Lưu bản kê trạng thái ban đầu và phiên bản; kiểm đích lệnh trước thao tác.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Bản kê DB thử trước chạy",
          "done_when": "Không thao tác DB vận hành; có trạng thái nền để đối chiếu.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R055.01"
        },
        {
          "title": "Chạy chuyển đổi và kiểm dữ liệu",
          "instructions": "Thực hiện theo R054, ghi lệnh và kết quả từng bước. Kiểm bảng, khóa, quyền tối thiểu và dữ liệu sau chuyển đổi; giữ log đã lọc.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Log chuyển đổi thành công hoặc lỗi",
          "done_when": "Đủ kết quả trước/sau; không chỉ nhận mã thoát của script.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R055.02"
        },
        {
          "title": "Thử dữ liệu sai và lỗi giữa chừng",
          "instructions": "Dùng dữ liệu sai và lỗi được thiết kế trên DB thử. Ghi bước dừng, trạng thái dữ liệu và khả năng chạy lại; không tự bỏ ràng buộc.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Bằng chứng ca thất bại SQL",
          "done_when": "Dữ liệu không bị âm thầm hỏng; trạng thái sau lỗi được xác định.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R055.03"
        },
        {
          "title": "Khôi phục trạng thái và bàn giao kết quả",
          "instructions": "Thực hiện cách khôi phục đã nêu, kiểm lại dữ liệu và phiên bản. Tổng hợp thời gian, quyền dùng và lỗi cần sửa để reviewer tái hiện.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Biên bản diễn tập chuyển đổi",
          "done_when": "DB thử trở về trạng thái xác định; không nhận khôi phục khi thiếu phép kiểm.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R055.04"
        }
      ],
      "source_paths": [
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa SQL nháp và yêu cầu dữ liệu. Bổ sung chuyển đổi phiên bản, quyền, chạy lại và thử phục hồi trên cơ sở dữ liệu riêng.",
      "reader_notes": {
        "purpose": "Diễn tập trên DB riêng cho biết chuyển đổi thực sự làm gì với dữ liệu và quyền ứng dụng.",
        "acceptance_checks": [
          "Log ghi tên máy/DB thử, lệnh, phiên bản trước/sau và kết quả kiểm dữ liệu.",
          "Ca lỗi giữa chừng, dữ liệu sai và khôi phục được ghi đầy đủ; ứng dụng không dùng tài khoản quản trị."
        ],
        "dependency_use": {
          "R054": "SQL và kịch bản đã review cung cấp thứ tự chạy, ca lỗi và phép kiểm cho OPS diễn tập."
        }
      }
    },
    {
      "id": "R056",
      "package": "SD11",
      "title": "Kiểm chuyển đổi độc lập",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "R055"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md",
      "steps": "Thử chạy lại, dữ liệu sai, quyền hạn chế và trạng thái sau lỗi",
      "done_when": "Đủ bằng chứng để dùng script cùng gói phát hành",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm độc lập đường chạy lại và dữ liệu sai",
          "instructions": "Đọc quy trình R054 và log R055. Tự chạy các ca trong DB thử được giao; thử dữ liệu sai và tài khoản hạn chế; ghi sai khác.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Phiếu kiểm độc lập SQL",
          "done_when": "Không dùng quyền quản trị để bỏ qua lỗi quyền tối thiểu.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R056.01"
        },
        {
          "title": "Kiểm trạng thái sau lỗi và kết luận review",
          "instructions": "Đối chiếu dữ liệu/phiên bản sau lỗi với kỳ vọng. Rà cách khôi phục, log và các bước khó tái hiện; lập lỗi chặn và phần đã có bằng chứng.",
          "output": "deployment/database/QUY_TRINH_CHUYEN_DOI.md — Biên bản review chuyển đổi",
          "done_when": "Mỗi kết luận gắn ca và phiên bản; không tự cho phép chạy vận hành.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R056.02"
        }
      ],
      "source_paths": [
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa SQL nháp và yêu cầu dữ liệu. Bổ sung chuyển đổi phiên bản, quyền, chạy lại và thử phục hồi trên cơ sở dữ liệu riêng.",
      "reader_notes": {
        "purpose": "Review độc lập xác nhận script có đủ bằng chứng trước khi được đưa vào gói ứng viên.",
        "acceptance_checks": [
          "Các ca chạy lại, sai dữ liệu và quyền hạn chế có kết quả trên DB thử.",
          "Trạng thái sau lỗi và cách khôi phục khớp kỳ vọng; phần chưa kiểm được nêu trước dùng script phát hành."
        ],
        "dependency_use": {
          "R055": "Log và trạng thái DB sau diễn tập cung cấp cơ sở để reviewer tái hiện và đối chiếu độc lập."
        }
      }
    },
    {
      "id": "A16",
      "package": "SD16",
      "title": "Hoàn thiện quy trình đóng gói",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R012",
        "R026"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "tools/; deployment/BAN_KE_PHAT_HANH.md",
      "steps": "Tạo bản kê hash/phiên bản/phụ thuộc/giấy phép; kiểm bí mật và cấu hình mẫu",
      "done_when": "Gói không chứa khóa, dữ liệu hạn chế hoặc thẻ chưa được phép",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nháp quy trình đóng gói và bản kê",
          "instructions": "Dựa các thành phần đã có, đề xuất bản kê mã băm, phiên bản, phụ thuộc và giấy phép. Thêm kiểm bí mật, cấu hình mẫu và đường dẫn dựng; chưa phát hành ra ngoài.",
          "output": "tools/; deployment/BAN_KE_PHAT_HANH.md — Quy trình đóng gói để NCS kiểm",
          "done_when": "Phân biệt gói chữ và gói mở rộng; không chép khóa hoặc dữ liệu thật vào gói.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A16.01"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "backend/requirements.txt",
        "frontend/package-lock.json",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa phụ thuộc và quy trình dựng đã có. Bổ sung bản kê, hash, cấu hình, kiểm phát hành và gói riêng cho chữ hoặc kết hợp.",
      "reader_notes": {
        "purpose": "Quy trình đóng gói giúp biết chính xác thành phần nào được giao và tránh đưa bí mật hoặc nội dung chưa có quyền vào gói.",
        "acceptance_checks": [
          "Bản nháp ghi cách lập mã băm, phiên bản, phụ thuộc, giấy phép và cấu hình mẫu.",
          "Có bước kiểm loại khóa, dữ liệu hạn chế và thẻ chưa được phép trước đóng gói."
        ],
        "dependency_use": {
          "R012": "Hướng dẫn dựng đã sửa cung cấp lệnh và phiên bản nền để đóng gói tái lập.",
          "R026": "Thiết kế bảo mật đã review cung cấp yêu cầu bí mật, quyền và cấu hình phải kiểm khi đóng gói."
        }
      }
    },
    {
      "id": "R057",
      "package": "SD16",
      "title": "Đóng gói ứng viên phát hành chữ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "A16",
        "R047",
        "R056",
        "R043"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/BAN_KE_PHAT_HANH.md",
      "steps": "Dựng frontend/backend; ghép gói tri thức; đóng băng phiên bản và cấu hình",
      "done_when": "Có gói tái dựng cùng các test; không tự cấp quyền phát hành",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Dựng backend/frontend đúng phiên bản",
          "instructions": "Kiểm đầu vào đã hoàn thành, khóa phiên bản mã và môi trường. Dựng backend/frontend theo quy trình; lưu lệnh và lỗi, không lấy bản dựng cũ thay thế.",
          "output": "deployment/BAN_KE_PHAT_HANH.md — Log dựng ứng viên chữ",
          "done_when": "Bản dựng truy được tới mã và phụ thuộc cụ thể.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R057.01"
        },
        {
          "title": "Ghép tri thức và cấu hình vào gói chữ",
          "instructions": "Đối chiếu gói tri thức được xét hợp lệ với cấu hình phát hành. Ghép đúng thành phần, mẫu cấu hình không bí mật và tài liệu cần thiết; kiểm phần không được phân phối.",
          "output": "deployment/BAN_KE_PHAT_HANH.md — Gói ứng viên chữ và cấu hình mẫu",
          "done_when": "Không chứa DRAFT, nguồn hết quyền hoặc bí mật; phiên bản thành phần khớp nhau.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R057.02"
        },
        {
          "title": "Lập bản kê và đóng băng ứng viên",
          "instructions": "Tính mã băm, ghi phiên bản, giấy phép và kết quả kiểm. Ghi lỗi còn mở, hướng dẫn nhận dạng gói và điều kiện đổi ứng viên; bàn giao reviewer.",
          "output": "deployment/BAN_KE_PHAT_HANH.md — Bản kê phát hành chữ",
          "done_when": "Không tự gọi ứng viên là bản được phép dùng; thay thành phần phải cập nhật bản kê.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R057.03"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "backend/requirements.txt",
        "frontend/package-lock.json",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa phụ thuộc và quy trình dựng đã có. Bổ sung bản kê, hash, cấu hình, kiểm phát hành và gói riêng cho chữ hoặc kết hợp.",
      "reader_notes": {
        "purpose": "Một gói ứng viên chữ thống nhất giúp mọi phép kiểm tiếp theo dùng cùng mã, giao diện và tri thức.",
        "acceptance_checks": [
          "Có log dựng frontend/backend, bản kê tri thức/cấu hình, mã băm và kết quả test tương ứng.",
          "Gói dựng lại được từ đầu vào đã ghi; trạng thái vẫn là ứng viên, chưa tự được phép phát hành."
        ],
        "dependency_use": {
          "A16": "Quy trình đóng gói cung cấp cách dựng, kiểm bí mật và lập bản kê ứng viên.",
          "R047": "Giao diện đã sửa và kiểm lại cung cấp thành phần UI để đưa vào gói chữ.",
          "R056": "Review chuyển đổi SQL cung cấp script và bằng chứng DB phù hợp để ghép cùng ứng viên.",
          "R043": "Gói tri thức và API đã nối đúng quyền cung cấp phần trả lời/nguồn cho ứng viên chữ."
        }
      }
    },
    {
      "id": "R058",
      "package": "SD16",
      "title": "Kiểm thành phần và bản phát hành",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "R057"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/BAN_KE_PHAT_HANH.md",
      "steps": "Kiểm lỗ hổng, giấy phép, hash, cấu hình và mức lỗi cho phép",
      "done_when": "Có danh mục thành phần và xử lý lỗi theo rủi ro",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm thành phần, giấy phép và cảnh báo",
          "instructions": "Đối chiếu bản kê R057 với tệp gói, phụ thuộc và giấy phép. Rà cảnh báo lỗ hổng theo nguồn được chọn; ghi phiên bản, thời điểm và giới hạn kiểm.",
          "output": "deployment/BAN_KE_PHAT_HANH.md — Phiếu kiểm thành phần phát hành",
          "done_when": "Thành phần thiếu giấy phép hoặc cảnh báo chưa xử lý được nêu rõ.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R058.01"
        },
        {
          "title": "Kiểm mã băm, cấu hình và kết luận gói",
          "instructions": "So mã băm, mẫu cấu hình, dấu bí mật và mức lỗi được dự án chấp nhận. Ghi yêu cầu sửa hoặc kết quả review đúng phiên bản.",
          "output": "deployment/BAN_KE_PHAT_HANH.md — Biên bản review ứng viên",
          "done_when": "Không tự nhận gói được phát hành khi chưa đủ cổng và quyết định.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R058.02"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "backend/requirements.txt",
        "frontend/package-lock.json",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa phụ thuộc và quy trình dựng đã có. Bổ sung bản kê, hash, cấu hình, kiểm phát hành và gói riêng cho chữ hoặc kết hợp.",
      "reader_notes": {
        "purpose": "Kiểm gói trước cài giúp phát hiện thành phần sai phiên bản, thiếu giấy phép hoặc lỗi bảo mật chưa được xử lý.",
        "acceptance_checks": [
          "Danh mục tệp/thành phần khớp mã băm, phiên bản, giấy phép và cấu hình trong gói.",
          "Cảnh báo lỗ hổng và lỗi được ghi theo rủi ro, cách xử lý và giới hạn kiểm; không tự cấp quyền phát hành."
        ],
        "dependency_use": {
          "R057": "Gói ứng viên cùng bản kê cung cấp tệp thực để reviewer kiểm thành phần và tính nhất quán."
        }
      }
    },
    {
      "id": "R059",
      "package": "SD12",
      "title": "Cài bản thử IIS và HTTPS",
      "status": "PLANNED",
      "minutes": {
        "OPS": 600
      },
      "ai_runs": 0,
      "deps": [
        "R030",
        "R012",
        "R026"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/iis/HUONG_DAN_CAI_DAT.md",
      "steps": "Cài IIS/HTTPS và ASGI bằng API ngoại tuyến đã có; kiểm binding, quyền, timeout, log và khởi động lại. R060 mới kiểm gói thật.",
      "done_when": "Khởi động/dừng/khởi động lại được; không dùng reload trong vận hành",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu host và kế hoạch cài bản ngoại tuyến",
          "instructions": "Kiểm quyền đã được giao, bản kê máy và cấu hình IIS hiện có. Chốt đích website, tài khoản, thư mục và phương án quay lui; dùng API ngoại tuyến cho lượt cài đầu.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Phiếu kiểm trước cài IIS",
          "done_when": "Không mặc định cài lại IIS hoặc sửa ứng dụng khác; thiếu quyền thì dừng.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R059.01"
        },
        {
          "title": "Cấu hình tiến trình ứng dụng và quyền thư mục",
          "instructions": "Theo thiết kế đã review, cấu hình tiến trình ASGI, đường nạp app, cổng nội bộ và quyền thư mục. Kiểm API ngoại tuyến khởi động; không bật hỏi đáp thật.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Cấu hình tiến trình và log khởi động",
          "done_when": "Đúng tài khoản/đường dẫn được giao; không dùng reload khi vận hành.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R059.02"
        },
        {
          "title": "Cấu hình binding và HTTPS",
          "instructions": "Áp binding, chứng chỉ và đường truy cập trong phạm vi cho phép. Kiểm HTTPS, đích chuyển tiếp và quyền truy cập; không mở công khai chỉ để thử.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Bằng chứng binding và HTTPS",
          "done_when": "Đúng website/chứng chỉ; kết nối sai đích hoặc ngoài quyền bị chặn.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R059.03"
        },
        {
          "title": "Kiểm timeout, log và lỗi khởi động",
          "instructions": "Dùng ca ngoại tuyến để thử lỗi tiến trình, cổng hoặc thời gian chờ. Kiểm log tối thiểu và hành vi IIS; ghi cách nhận biết, dừng và phục hồi.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Biên bản lỗi IIS/ASGI",
          "done_when": "Log không chứa bí mật; giới hạn cấu hình có bằng chứng.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R059.04"
        },
        {
          "title": "Kiểm khởi động lại và bàn giao cấu hình",
          "instructions": "Khởi động lại trong vùng được phép theo kế hoạch. Kiểm app trở lại đúng trạng thái ngoại tuyến; chụp bản kê cấu hình và các lỗi còn mở cho R060.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Hướng dẫn cài bản thử đã đối chiếu",
          "done_when": "Health không bị hiểu là readiness; chưa dùng lượt này để nghiệm thu gói thật.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R059.05"
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "backend/README.md",
        "frontend/README.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa cấu hình mẫu và cách dựng từng phần. Bổ sung máy đích, IIS/HTTPS, quyền dịch vụ và kiểm sau cài; chưa coi mẫu là triển khai thật.",
      "reader_notes": {
        "purpose": "Cài API ngoại tuyến trước giúp kiểm cấu hình IIS/HTTPS mà chưa phụ thuộc gói hỏi đáp thật.",
        "acceptance_checks": [
          "Log cho thấy binding, quyền, thời gian chờ và tiến trình ngoại tuyến khớp cấu hình.",
          "Khởi động, dừng và khởi động lại được kiểm; cấu hình vận hành không dùng reload và không coi health là readiness."
        ],
        "dependency_use": {
          "R030": "Kết quả phân tách môi trường xác định host/thư mục/quyền được phép dùng cho lượt cài.",
          "R012": "Hướng dẫn môi trường đã tái lập cung cấp phiên bản và lệnh để chạy API ngoại tuyến.",
          "R026": "Thiết kế bảo mật đã review cung cấp giới hạn mạng, tài khoản và log cần áp trên IIS."
        }
      }
    },
    {
      "id": "R059B",
      "package": "SD12",
      "title": "Cài gói ứng viên chữ đã review lên máy thử",
      "status": "PLANNED",
      "minutes": {
        "OPS": 240
      },
      "ai_runs": 0,
      "deps": [
        "R059",
        "R058"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/iis/HUONG_DAN_CAI_DAT.md",
      "steps": "Kiểm bản kê; cài gói ứng viên vào môi trường thử kín; cấu hình; khởi động và bàn giao đúng phiên bản.",
      "done_when": "Gói thực đang chạy khớp bản kê; log cài và cấu hình được lưu. Không mở thử với người trước GC.",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "id": "R059B.01",
          "title": "Kiểm gói và cài ứng viên lên môi trường thử",
          "instructions": "Kiểm quyền, bản kê R058, mã băm và đích thử R059. Giữ cấu hình hiện tại để phục hồi. Cài backend, frontend và tri thức đúng gói; không dùng dữ liệu thật.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Log cài ứng viên và mã băm",
          "done_when": "Đúng gói, đúng host thử; lỗi cài được ghi và xử lý trước khi tiếp tục.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0
        },
        {
          "id": "R059B.02",
          "title": "Cấu hình, khởi động và bàn giao gói đang chạy",
          "instructions": "Áp cấu hình được phép, quyền kết nối và bản DB đã kiểm. Khởi động gói; kiểm health và readiness bằng ca tổng hợp. Ghi phiên bản thực, log lỗi và bàn giao NCS1 kiểm R060.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Bản kê ứng viên đang chạy",
          "done_when": "Không dùng API ngoại tuyến làm bằng chứng cài gói thật. Máy thử chỉ mở trong phạm vi được phép.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "backend/README.md",
        "frontend/README.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa cấu hình mẫu và cách dựng từng phần. Bổ sung máy đích, IIS/HTTPS, quyền dịch vụ và kiểm sau cài; chưa coi mẫu là triển khai thật.",
      "reader_notes": {
        "purpose": "Máy thử cần được cài đúng ứng viên đã review trước khi kiểm hành vi ứng dụng thật.",
        "acceptance_checks": [
          "Bản ứng viên đang chạy khớp mã băm và phiên bản từ bản kê; log cài và cấu hình được lưu.",
          "Khởi động/kiểm nhanh dùng môi trường thử kín và dữ liệu tổng hợp; chưa mở hoạt động với người trước GC."
        ],
        "dependency_use": {
          "R059": "Cấu hình IIS/HTTPS ngoại tuyến đã kiểm cung cấp môi trường để cài ứng viên thật.",
          "R058": "Biên bản review và bản kê xác định đúng gói được phép đưa lên máy thử."
        }
      }
    },
    {
      "id": "R060",
      "package": "SD12",
      "title": "Kiểm ứng dụng sau cài",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R059B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/iis/HUONG_DAN_CAI_DAT.md",
      "steps": "Kiểm tài nguyên Vue, routing, API và trạng thái sẵn sàng",
      "done_when": "Health và readiness được hiểu đúng; lỗi không lộ bí mật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm tài nguyên và routing của gói thật",
          "instructions": "Đối chiếu gói được giao với mã băm và cấu hình IIS. Kiểm tệp Vue, đường dẫn, tải lại trang và lỗi tài nguyên; ghi chính xác bản đang chạy.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Bằng chứng frontend sau cài",
          "done_when": "Không lấy kết quả API ngoại tuyến R059 thay gói thật.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R060.01"
        },
        {
          "title": "Kiểm API và điều kiện sẵn sàng sau cài",
          "instructions": "Dùng ca tổng hợp được phép kiểm endpoint, nguồn và trạng thái không sẵn sàng. So API/UI/tri thức với bản kê; ghi lỗi cài hoặc giao tiếp.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Biên bản kiểm ứng dụng sau cài",
          "done_when": "Chỉ báo sẵn sàng khi điều kiện thực đủ; không mở sử dụng với người.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R060.02"
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "backend/README.md",
        "frontend/README.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa cấu hình mẫu và cách dựng từng phần. Bổ sung máy đích, IIS/HTTPS, quyền dịch vụ và kiểm sau cài; chưa coi mẫu là triển khai thật.",
      "reader_notes": {
        "purpose": "Kiểm sau cài xác nhận người dùng tới đúng giao diện và API của gói đang chạy trên host.",
        "acceptance_checks": [
          "Tài nguyên Vue, đường dẫn trang, API và ca lỗi được kiểm trên đúng phiên bản đã cài.",
          "Health và readiness được phân biệt bằng kết quả; lỗi không làm lộ bí mật."
        ],
        "dependency_use": {
          "R059B": "Gói ứng viên thực đã cài cùng log/phiên bản là đối tượng NCS kiểm qua giao diện và API."
        }
      }
    },
    {
      "id": "R061",
      "package": "SD12",
      "title": "Review cấu hình máy đích",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "R060"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/iis/HUONG_DAN_CAI_DAT.md",
      "steps": "Đối chiếu bản kê với host; thử lỗi cổng/quyền; kiểm log",
      "done_when": "Không lấy guide mẫu làm bằng chứng tương thích",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review cấu hình host so với bản kê",
          "instructions": "Đọc hướng dẫn và kết quả R059/R060. Đối chiếu tiến trình, quyền, binding, chứng chỉ và phiên bản trên host được giao; ghi phần khác tài liệu.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Phiếu đối chiếu host",
          "done_when": "Không suy cấu hình mẫu là cấu hình đã áp thực tế.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R061.01"
        },
        {
          "title": "Kiểm lỗi cổng, quyền và nhật ký",
          "instructions": "Trong môi trường thử được phép, tạo lỗi đã định để kiểm từ chối và log. Ghi cách phục hồi cấu hình; tổng hợp yêu cầu sửa và giới hạn kiểm.",
          "output": "deployment/iis/HUONG_DAN_CAI_DAT.md — Biên bản review triển khai",
          "done_when": "Không còn sai khác bị bỏ qua; chưa cấp quyền vận hành cho người thật.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R061.02"
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "backend/README.md",
        "frontend/README.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa cấu hình mẫu và cách dựng từng phần. Bổ sung máy đích, IIS/HTTPS, quyền dịch vụ và kiểm sau cài; chưa coi mẫu là triển khai thật.",
      "reader_notes": {
        "purpose": "Review máy đích giúp phát hiện khoảng cách giữa hướng dẫn mẫu và cấu hình thực tế.",
        "acceptance_checks": [
          "Biên bản đối chiếu host, tiến trình, binding, quyền, chứng chỉ và gói đang chạy.",
          "Ca lỗi cổng/quyền và log có bằng chứng; không dùng guide mẫu để kết luận tương thích."
        ],
        "dependency_use": {
          "R060": "Kết quả kiểm ứng dụng sau cài cung cấp host, phiên bản và vấn đề cần reviewer kiểm cấu hình."
        }
      }
    },
    {
      "id": "R062",
      "package": "SD17",
      "title": "Chốt dữ liệu và mục tiêu phục hồi",
      "status": "PLANNED",
      "minutes": {
        "DATA": 120
      },
      "ai_runs": 0,
      "deps": [
        "R055"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "steps": "Xác định nơi giữ, hạn giữ, khóa mã hóa, quyền và dữ liệu được phục hồi",
      "done_when": "Bản sao không kéo dài quyền nội dung đã thu hồi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xác định phạm vi dữ liệu và mục tiêu phục hồi",
          "instructions": "Lập danh sách dữ liệu, nơi giữ, thời hạn, khóa và người có quyền. Ghi mức mất dữ liệu/thời gian gián đoạn cần quyết định; xác định dữ liệu được phép phục hồi.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Phạm vi và tiêu chí phục hồi",
          "done_when": "Không tự đặt mục tiêu thay người chịu trách nhiệm; thiếu quyết định được ghi chờ.",
          "minutes": {
            "DATA": 120
          },
          "ai_runs": 0,
          "id": "R062.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa hướng dẫn phục hồi và SQL nháp. Bổ sung mục tiêu, bản sao lưu thật, phục hồi trên môi trường riêng và kiểm ứng dụng sau phục hồi.",
      "reader_notes": {
        "purpose": "Mục tiêu và phạm vi phục hồi phải rõ để việc sao lưu không giữ hoặc khôi phục dữ liệu ngoài quyền.",
        "acceptance_checks": [
          "Danh sách nêu nơi giữ, thời hạn, khóa, người có quyền và dữ liệu được phép phục hồi.",
          "Mục tiêu phục hồi và phần cần quyết định được ghi rõ; bản sao không gia hạn quyền nguồn đã bị rút."
        ],
        "dependency_use": {
          "R055": "Kết quả diễn tập SQL xác định cấu trúc DB và dữ liệu cần xét trong phạm vi sao lưu/phục hồi."
        }
      }
    },
    {
      "id": "R063",
      "package": "SD17",
      "title": "Diễn tập sao lưu và phục hồi DB thử",
      "status": "PLANNED",
      "minutes": {
        "OPS": 480
      },
      "ai_runs": 0,
      "deps": [
        "R059",
        "R056",
        "R062"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "steps": "Sao lưu; phục hồi vào DB riêng; kiểm nhất quán và dữ liệu tổng hợp; đo thời gian; ghi hướng dẫn. Quay lui gói thật ở R063B.",
      "done_when": "Có kiểm dữ liệu và DBCC CHECKDB phù hợp; VERIFYONLY không thay restore",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chuẩn bị tình huống và sao lưu dữ liệu thử",
          "instructions": "Xác nhận DB thử, dữ liệu tổng hợp, quyền và tiêu chí R062. Ghi trạng thái nền; tạo bản sao theo quy trình, lưu nơi giữ và cách bảo vệ khóa.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Bản kê và log sao lưu thử",
          "done_when": "Không lấy dữ liệu vận hành để diễn tập; bản sao nhận dạng được.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R063.01"
        },
        {
          "title": "Phục hồi sang DB riêng",
          "instructions": "Kiểm đích DB và dung lượng, phục hồi bản sao vào môi trường riêng. Ghi thời điểm bắt đầu/kết thúc và lỗi; không nhận VERIFYONLY là đã phục hồi.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Log phục hồi DB thử",
          "done_when": "Có thao tác phục hồi thật trên DB thử và kết quả quan sát.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R063.02"
        },
        {
          "title": "Kiểm nhất quán và dữ liệu sau phục hồi",
          "instructions": "Chạy phép kiểm nhất quán phù hợp, đối chiếu bảng/dữ liệu tổng hợp và quyền. So mục tiêu R062 với thời gian đo; ghi sai lệch và phần thiếu.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Bằng chứng nhất quán và thời gian",
          "done_when": "Không kết luận từ tệp sao lưu đọc được; sai lệch có người xử lý.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R063.03"
        },
        {
          "title": "Hoàn thiện hướng dẫn phục hồi từ kết quả",
          "instructions": "Gộp lệnh, thời gian, quyền và lỗi phục hồi DB vào hướng dẫn. Ghi giới hạn của lượt này; phần quay lui ứng dụng thật chờ R063B.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Hướng dẫn phục hồi có bằng chứng",
          "done_when": "Tách thành công thực tế, lỗi và việc chưa thử; không ghi vượt phạm vi diễn tập.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R063.04"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa hướng dẫn phục hồi và SQL nháp. Bổ sung mục tiêu, bản sao lưu thật, phục hồi trên môi trường riêng và kiểm ứng dụng sau phục hồi.",
      "reader_notes": {
        "purpose": "Thử phục hồi DB xác nhận bản sao có thể đưa dữ liệu trở lại trạng thái dùng được, thay vì chỉ tồn tại một tệp backup.",
        "acceptance_checks": [
          "Log ghi sao lưu và phục hồi thật sang DB thử riêng, gồm đích và thời gian đo.",
          "Dữ liệu và DBCC CHECKDB phù hợp có kết quả; VERIFYONLY không thay phép phục hồi.",
          "Hướng dẫn nêu giới hạn lượt DB; quay lui gói ứng dụng thật được để ở R063B."
        ],
        "dependency_use": {
          "R059": "Môi trường IIS/host thử đã chuẩn bị cung cấp bối cảnh cấu hình cho diễn tập DB riêng.",
          "R056": "SQL và kết quả review chuyển đổi cung cấp phiên bản/ràng buộc để kiểm DB sau phục hồi.",
          "R062": "Phạm vi dữ liệu và mục tiêu phục hồi xác định bản sao được dùng, quyền và tiêu chí đối chiếu."
        }
      }
    },
    {
      "id": "R063B",
      "package": "SD17",
      "title": "Diễn tập quay lui gói ứng dụng thật trên môi trường thử",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "R063",
        "R060"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "steps": "Tạo thay đổi phiên bản thử có kiểm soát; quay lại gói ứng viên đã biết; đối chiếu mã, DB, cấu hình và tri thức.",
      "done_when": "Có bằng chứng quay lui gói thật tương thích. Nguồn bị thu hồi không được khôi phục quyền sử dụng.",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Diễn tập quay lui gói thật đã cài",
          "instructions": "Kiểm bộ app, cấu hình, DB và bản sao còn khớp. Nếu đã đổi, sao lưu lại trước diễn tập. Trên host thử, tạo thay đổi có kiểm soát rồi quay lại gói R060 đã kiểm. Đối chiếu tri thức, nguồn thu hồi; ghi thời gian, lỗi và điểm dừng. Thiếu giờ hoặc không tương thích phải bổ sung việc, không bỏ bước.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Log quay lui phiên bản",
          "done_when": "Có bằng chứng quay lui gói thật tương thích. Nguồn bị thu hồi không được khôi phục quyền sử dụng.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R063B.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa hướng dẫn phục hồi và SQL nháp. Bổ sung mục tiêu, bản sao lưu thật, phục hồi trên môi trường riêng và kiểm ứng dụng sau phục hồi.",
      "reader_notes": {
        "purpose": "Quay lui cần được thử với gói ứng dụng thật để kiểm mã, DB và tri thức còn tương thích khi trở về bản trước.",
        "acceptance_checks": [
          "Có log thay đổi thử rồi quay lại gói đã biết, ghi phiên bản mã/DB/cấu hình và thời gian.",
          "Kiểm tương thích và nguồn thu hồi sau quay lui có kết quả; không phục hồi quyền dùng nội dung đã bị rút."
        ],
        "dependency_use": {
          "R063": "Bằng chứng và hướng dẫn phục hồi DB cung cấp nền dữ liệu/bản sao để kiểm tương thích khi quay lui gói.",
          "R060": "Ứng viên đã được kiểm trên host xác định gói thật cần dùng làm mốc quay lại."
        }
      }
    },
    {
      "id": "R064",
      "package": "SD17",
      "title": "Kiểm ứng dụng sau phục hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R063B",
        "R060"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "steps": "Kiểm dữ liệu, quyền, phiên bản tri thức và lỗi; sửa runbook",
      "done_when": "Không chỉ xác nhận tệp backup tồn tại",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm dữ liệu và quyền qua ứng dụng phục hồi",
          "instructions": "Dùng ca tổng hợp đối chiếu chức năng trước/sau R063B và kết quả phục hồi DB R063. Kiểm quyền truy cập, cấu hình và phản hồi lỗi. Ghi trạng thái DB/app thực đang chạy.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Phiếu kiểm app sau phục hồi",
          "done_when": "Dữ liệu và quyền không chỉ kiểm ở DB; có kết quả qua API/UI.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R064.01"
        },
        {
          "title": "Kiểm tri thức, phiên bản và sửa hướng dẫn",
          "instructions": "So gói tri thức, nguồn thu hồi và bản app sau quay lui. Chạy ca liên quan; sửa hướng dẫn phục hồi ở bước gây sai hoặc thiếu kiểm.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Kết quả kiểm phiên bản và hướng dẫn sửa",
          "done_when": "Không đưa nguồn đã rút trở lại sử dụng; kết quả gắn bản phục hồi.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R064.02"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa hướng dẫn phục hồi và SQL nháp. Bổ sung mục tiêu, bản sao lưu thật, phục hồi trên môi trường riêng và kiểm ứng dụng sau phục hồi.",
      "reader_notes": {
        "purpose": "Ứng dụng phải được kiểm sau phục hồi vì DB khôi phục được chưa chứng minh toàn bộ chức năng và quyền vẫn đúng.",
        "acceptance_checks": [
          "Ca tổng hợp kiểm dữ liệu, quyền, nguồn và phản hồi ứng dụng trên đúng bản phục hồi.",
          "Hướng dẫn được sửa theo lỗi quan sát; không lấy việc tệp backup tồn tại làm tiêu chí hoàn tất."
        ],
        "dependency_use": {
          "R063B": "Trạng thái gói sau quay lui và log tương thích cung cấp đối tượng cần kiểm qua ứng dụng.",
          "R060": "Kết quả kiểm gói trước quay lui cung cấp trạng thái đối chiếu để phát hiện thay đổi sau phục hồi."
        }
      }
    },
    {
      "id": "R065",
      "package": "SD17",
      "title": "Review bằng chứng phục hồi và quay lui",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 240
      },
      "ai_runs": 0,
      "deps": [
        "R064"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "steps": "Đối chiếu mã/DB/cấu hình; kiểm tương thích; ghi giới hạn",
      "done_when": "Có điều kiện dừng/quay lại và người quyết",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review độc lập bằng chứng sao lưu/phục hồi",
          "instructions": "Đối chiếu bản sao, log, thời gian và phép kiểm dữ liệu của R063/R064. Kiểm đầy đủ mã/DB/cấu hình, quyền thực hiện và các trường hợp chưa thử.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Biên bản review phục hồi",
          "done_when": "Không dùng VERIFYONLY hoặc log sao lưu làm chứng cứ phục hồi.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R065.01"
        },
        {
          "title": "Kiểm tương thích quay lui và chốt giới hạn",
          "instructions": "Rà phiên bản DB/app/tri thức sau quay lui, nguồn đã thu hồi và lỗi mở. Yêu cầu sửa thiếu bằng chứng; ghi giới hạn, người quyết và điều kiện dừng.",
          "output": "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md — Kết luận review quay lui",
          "done_when": "Không cho phép quay lui làm phục hồi nguồn hết quyền; không tự ký cổng.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R065.02"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "deployment/database/init_schema.sql",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa hướng dẫn phục hồi và SQL nháp. Bổ sung mục tiêu, bản sao lưu thật, phục hồi trên môi trường riêng và kiểm ứng dụng sau phục hồi.",
      "reader_notes": {
        "purpose": "Review bằng chứng phục hồi giúp người vận hành biết khi nào có thể tiếp tục và khi nào phải dừng.",
        "acceptance_checks": [
          "Mã, DB, cấu hình, tri thức và phép kiểm sau phục hồi được đối chiếu cùng phiên bản.",
          "Biên bản ghi giới hạn, điều kiện dừng/quay lại và người quyết; không coi sao lưu là đã phục hồi."
        ],
        "dependency_use": {
          "R064": "Kết quả kiểm app sau phục hồi và hướng dẫn sửa cung cấp bằng chứng reviewer cần xem trước kết luận."
        }
      }
    },
    {
      "id": "A18",
      "package": "SD18",
      "title": "Hoàn thiện sổ tay quản trị và sự cố",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R059"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "steps": "Mô tả quyền, log, cảnh báo, dừng/khởi động và chuyển lỗi",
      "done_when": "Nêu trách nhiệm, kênh và giờ hỗ trợ dự kiến",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nháp sổ tay quản trị theo môi trường đã kiểm",
          "instructions": "Ghép bản kê quyền, log và phục hồi; mô tả theo dõi, cảnh báo, dừng/khởi động và chuyển lỗi. Đặt vị trí điền kết quả diễn tập, không ghi đã vận hành.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Sổ tay quản trị để OPS diễn tập",
          "done_when": "Mỗi tình huống có dấu hiệu, hành động, người nhận và điều kiện dừng.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A18.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Sổ tay giúp người nhận vận hành biết cách phát hiện lỗi, dừng an toàn và chuyển đúng người xử lý.",
        "acceptance_checks": [
          "Bản nháp mô tả quyền, log, cảnh báo và thao tác dừng/khởi động theo cấu hình hiện có.",
          "Mỗi đường chuyển lỗi nêu đầu mối, trách nhiệm và giờ hỗ trợ dự kiến, không tự hứa trực liên tục."
        ],
        "dependency_use": {
          "R059": "Cấu hình và log IIS ngoại tuyến đã kiểm cung cấp lệnh và dấu hiệu kỹ thuật để soạn sổ tay."
        }
      }
    },
    {
      "id": "R066",
      "package": "SD18",
      "title": "Diễn tập sự cố và hoàn thiện sổ tay",
      "status": "PLANNED",
      "minutes": {
        "OPS": 360
      },
      "ai_runs": 0,
      "deps": [
        "A18",
        "R065"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "steps": "Giả lập API lỗi, DB mất kết nối, khóa hết hạn, nội dung bị thu hồi",
      "done_when": "Người vận hành thực hiện được; không hứa trực 24/7",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Diễn tập API lỗi và DB mất kết nối",
          "instructions": "Trên môi trường thử, tạo tình huống API không phản hồi và DB mất kết nối đã thống nhất. Làm theo sổ tay, ghi thời gian, trạng thái và bước còn mơ hồ.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Phiếu diễn tập lỗi API/DB",
          "done_when": "Không thử gây lỗi trên hệ thống vận hành; có cách trở về trạng thái xác định.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R066.01"
        },
        {
          "title": "Diễn tập khóa hết hạn và nguồn bị thu hồi",
          "instructions": "Dùng cấu hình/gói thử, mô phỏng khóa không hợp lệ và nội dung bị rút. Kiểm đóng tính năng, log tối thiểu và đường chuyển đúng người phụ trách.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Phiếu diễn tập khóa và thu hồi",
          "done_when": "Không tự thay hoặc cấp lại quyền thật; nội dung bị rút không còn được dùng.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R066.02"
        },
        {
          "title": "Sửa sổ tay và kiểm lại đường xử lý",
          "instructions": "Bổ sung lệnh, điểm dừng, người nhận lỗi và cách khởi động lại từ hai lượt diễn tập. Kiểm lại bước đã sửa; ghi lỗi chưa xử lý và phạm vi hỗ trợ.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Sổ tay đã đối chiếu diễn tập",
          "done_when": "Người vận hành đọc được dấu hiệu và bước tiếp; không hứa hỗ trợ chưa có người nhận.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R066.03"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Diễn tập cho biết sổ tay có đủ rõ để xử lý sự cố mà không dựa vào trí nhớ người viết.",
        "acceptance_checks": [
          "API lỗi, DB mất kết nối, khóa hết hạn và nguồn bị thu hồi có phiếu diễn tập.",
          "Sổ tay được sửa theo vướng mắc, có log kiểm lại và người nhận hỗ trợ thực tế; không hứa 24/7 chưa xác nhận."
        ],
        "dependency_use": {
          "A18": "Sổ tay dự thảo cung cấp hướng dẫn cần thử và đánh dấu chỗ chưa rõ.",
          "R065": "Review phục hồi cung cấp điều kiện dừng, quay lại và giới hạn an toàn cho diễn tập sự cố."
        }
      }
    },
    {
      "id": "R067",
      "package": "SD18",
      "title": "Kiểm xử lý yêu cầu dữ liệu và sự cố",
      "status": "PLANNED",
      "minutes": {
        "DATA": 120
      },
      "ai_runs": 0,
      "deps": [
        "R066"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "steps": "Diễn tập truy cập, sửa/xóa/rút lui đúng phạm vi; kiểm bản sao",
      "done_when": "Nhật ký tối thiểu; có đầu mối và cách lưu bằng chứng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Diễn tập yêu cầu dữ liệu đúng phạm vi",
          "instructions": "Dùng hồ sơ tổng hợp để đi qua yêu cầu xem, sửa, xóa hoặc rút lui. Đối chiếu quyền, thời hạn, bản sao và người quyết; ghi trường hợp phải dừng.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Biên bản xử lý yêu cầu dữ liệu",
          "done_when": "Không thực hiện xóa dữ liệu thật; không tuyên bố xóa bản sao ngoài kiểm soát.",
          "minutes": {
            "DATA": 120
          },
          "ai_runs": 0,
          "id": "R067.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Yêu cầu xem, sửa, xóa hoặc rút lui cần một đường xử lý rõ, kể cả dữ liệu trong bản sao.",
        "acceptance_checks": [
          "Diễn tập bằng hồ sơ tổng hợp ghi đúng quyền, đầu mối và cách xử lý bản sao.",
          "Nhật ký chỉ giữ thông tin cần thiết, có nơi lưu bằng chứng và các tình huống phải chờ quyết định."
        ],
        "dependency_use": {
          "R066": "Sổ tay và kết quả diễn tập sự cố cung cấp đầu mối và thao tác để kiểm đường xử lý yêu cầu dữ liệu."
        }
      }
    },
    {
      "id": "R068",
      "package": "SD18",
      "title": "Review đường xử lý lỗi nội dung",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "R066"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "steps": "Phân biệt lỗi y khoa và lỗi kỹ thuật; xác định cách tạm khóa nội dung",
      "done_when": "Không để người vận hành tự thay nội dung đã duyệt",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review đường chuyển lỗi nội dung y khoa",
          "instructions": "Đọc tình huống R066 và sổ tay; phân biệt lỗi nội dung với lỗi kỹ thuật. Ghi khi nào cần tạm khóa, chuyển CVYK và xét lại phiên bản; không tạo tư vấn y khoa mới.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Nhận xét chuyên môn cho sổ tay",
          "done_when": "Người vận hành biết điểm dừng; AI/NCS không tự sửa nội dung APPROVED.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "R068.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Lỗi nội dung sức khỏe cần chuyển đúng CVYK để người vận hành không tự thay nội dung đã duyệt.",
        "acceptance_checks": [
          "Review phân biệt lỗi chuyên môn và kỹ thuật, ghi khi nào tạm khóa nội dung.",
          "Sổ tay chỉ rõ người nhận, phiên bản cần xét lại và cấm người vận hành tự sửa nội dung APPROVED."
        ],
        "dependency_use": {
          "R066": "Tình huống diễn tập và sổ tay đã sửa cung cấp đường xử lý nội dung cần CVYK kiểm giới hạn."
        }
      }
    },
    {
      "id": "A19",
      "package": "SD19",
      "title": "Soạn hướng dẫn sản phẩm chữ từ UI thật",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R047"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "steps": "Viết tác vụ NCT/người chăm sóc, trích dẫn, cờ đỏ, dừng, lỗi; dùng hình đúng phiên bản",
      "done_when": "Tái dùng hướng dẫn mô phỏng, bỏ mô tả chức năng chưa có",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Soạn hướng dẫn chữ theo UI thật",
          "instructions": "Dùng UI và tài liệu hiện có để soạn bước cho người cao tuổi và người chăm sóc. Gồm nguồn, cờ đỏ, dừng, lỗi và hỗ trợ. Gắn ảnh đúng phiên bản; không bịa tính năng.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Nháp hướng dẫn chữ và danh sách ảnh",
          "done_when": "Nháp được bàn giao để NCS đọc hiểu và kiểm; AI không tự nghiệm thu hoặc phê duyệt.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A19.01"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review.",
      "reader_notes": {
        "purpose": "Người dùng cần hướng dẫn khớp sản phẩm đang có. Tài liệu mô phỏng phải được cập nhật trước khi dùng cho bản chữ thực.",
        "acceptance_checks": [
          "Các bước bám giao diện và hình đúng phiên bản.",
          "Có tác vụ người cao tuổi, người chăm sóc, dừng và xử lý lỗi.",
          "Tái dùng tài liệu có sẵn và bỏ chức năng chưa có."
        ],
        "dependency_use": {
          "R047": "Giao diện đã sửa cung cấp tên nút, hình và thao tác thật để soạn hướng dẫn."
        }
      }
    },
    {
      "id": "R069",
      "package": "SD19",
      "title": "Kiểm hướng dẫn từng bước trên sản phẩm",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 300
      },
      "ai_runs": 0,
      "deps": [
        "A19"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "steps": "Làm theo hướng dẫn; sửa tên nút/hình; kiểm chữ lớn và bản in; kiểm riêng luồng người chăm sóc và quyền dừng của NCT",
      "done_when": "Mỗi bước thực hiện được, người đọc biết khi cần hỗ trợ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm đường dùng của người cao tuổi",
          "instructions": "Mở sản phẩm đúng phiên bản. Làm từng bước hướng dẫn; kiểm tên nút, ảnh, nguồn và dừng. Ghi chỗ không làm được.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Nhận xét đường dùng người cao tuổi",
          "done_when": "Mỗi bước gắn UI thật; không thêm tính năng chưa có.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "R069.01"
        },
        {
          "title": "Kiểm đường dùng có người chăm sóc",
          "instructions": "Kiểm vai hỗ trợ, giải thích đồng ý và quyền dừng của người dùng. So nội dung trên màn hình với hướng dẫn.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Nhận xét đường dùng có hỗ trợ",
          "done_when": "Người hỗ trợ không thay quyền quyết định của người dùng.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "R069.02"
        },
        {
          "title": "Kiểm khả năng đọc và lỗi",
          "instructions": "Kiểm chữ lớn, tương phản, bản in, liên kết và lỗi. Sửa hướng dẫn; gắn ảnh với phiên bản sản phẩm.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Bản hướng dẫn đã đối chiếu UI",
          "done_when": "Người đọc tìm được cách dừng, hỗ trợ và giới hạn sản phẩm.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R069.03"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review.",
      "reader_notes": {
        "purpose": "Hướng dẫn dễ đọc vẫn có thể sai tên nút hoặc thiếu bước. NCS phải làm theo trên sản phẩm để tìm các chỗ gây bối rối.",
        "acceptance_checks": [
          "Mỗi bước thực hiện được trên đúng phiên bản sản phẩm.",
          "Tên nút, hình, chữ lớn và bản in được kiểm.",
          "Luồng người chăm sóc giữ quyền dừng của người cao tuổi.",
          "Người đọc biết khi nào cần hỗ trợ."
        ],
        "dependency_use": {
          "A19": "Nháp hướng dẫn xác định các bước NCS phải làm thử và sửa theo giao diện thật."
        }
      }
    },
    {
      "id": "R070",
      "package": "SD19",
      "title": "Review giới hạn và câu an toàn trong hướng dẫn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 120
      },
      "ai_runs": 0,
      "deps": [
        "R069"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "steps": "Kiểm câu khám bác sĩ, giới hạn AI, dừng và phản hồi sức khỏe",
      "done_when": "Không biến hướng dẫn dùng thành chỉ định điều trị",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review giới hạn và câu an toàn trong hướng dẫn",
          "instructions": "Kiểm câu khám bác sĩ, giới hạn AI, dừng và phản hồi sức khỏe. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Ghi review từng nội dung và phiên bản. Tách phần đủ, cần sửa và điều kiện xét lại; không tự gán APPROVED.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Phần R070: Review giới hạn và câu an toàn trong hướng dẫn",
          "done_when": "Không biến hướng dẫn dùng thành chỉ định điều trị",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R070.01"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review.",
      "reader_notes": {
        "purpose": "Hướng dẫn sử dụng có thể vô tình bị hiểu thành lời chỉ định sức khỏe. CVYK cần xét câu khám bác sĩ, giới hạn AI và dừng.",
        "acceptance_checks": [
          "Câu về đi khám, giới hạn AI, dừng và phản hồi sức khỏe được review.",
          "Nhận xét chỉ rõ nội dung cần sửa.",
          "Hướng dẫn không trở thành chỉ định điều trị."
        ],
        "dependency_use": {
          "R069": "Bản hướng dẫn đã kiểm thao tác giúp CVYK xét lời an toàn trong đúng ngữ cảnh sử dụng."
        }
      }
    },
    {
      "id": "R071",
      "package": "SD19",
      "title": "Sửa và khóa hướng dẫn chữ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "R070"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "steps": "Đối chiếu phản hồi; kiểm liên kết; gắn phiên bản ứng dụng",
      "done_when": "Có bản hướng dẫn dùng để trình GC",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa và khóa hướng dẫn chữ",
          "instructions": "Đối chiếu phản hồi; kiểm liên kết; gắn phiên bản ứng dụng. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Phần R071: Sửa và khóa hướng dẫn chữ",
          "done_when": "Có bản hướng dẫn dùng để trình GC",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R071.01"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review.",
      "reader_notes": {
        "purpose": "Hồ sơ xin phép cần một bản hướng dẫn cố định và truy vết được. Sửa xong nhưng chưa gắn phiên bản sẽ khó biết người dùng đã đọc bản nào.",
        "acceptance_checks": [
          "Phản hồi chuyên môn được đối chiếu và xử lý.",
          "Liên kết và phiên bản ứng dụng được kiểm.",
          "Có bản hướng dẫn xác định để trình GC."
        ],
        "dependency_use": {
          "R070": "Nhận xét của CVYK xác định câu cần sửa trước khi khóa hướng dẫn chữ."
        }
      }
    },
    {
      "id": "A20",
      "package": "SD20",
      "title": "Soạn bộ cài, nâng cấp, gỡ và xử lý lỗi",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "R065"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md",
      "steps": "Ghép IIS/SQL/môi trường; viết kiểm sau từng bước; nêu quay lui",
      "done_when": "Có điều kiện đầu vào, cấu hình mẫu và chẩn đoán lỗi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nháp hướng dẫn cài, nâng cấp và gỡ",
          "instructions": "Ghép quy trình môi trường, IIS, SQL và gói ứng viên. Viết điều kiện trước bước, lệnh mẫu, phép kiểm sau bước, lỗi thường gặp và cách quay lui; không đưa bí mật thật.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Bộ hướng dẫn cài/nâng cấp/gỡ dự thảo",
          "done_when": "Đích thao tác rõ; không dùng lệnh xóa chung chung hoặc nhận tài liệu là đã triển khai.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A20.01"
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1"
      ],
      "resume_note": "Kế thừa hướng dẫn và script hiện có. Bổ sung cài, nâng cấp, gỡ, điểm kiểm và xử lý lỗi; người khác thực hiện để kiểm tính dùng được.",
      "reader_notes": {
        "purpose": "Hướng dẫn liền mạch giúp người khác cài, nâng cấp hoặc gỡ đúng đích và biết cách xử lý khi bước trước thất bại.",
        "acceptance_checks": [
          "Bản nháp có điều kiện đầu vào, cấu hình mẫu và phép kiểm sau từng bước cài/nâng cấp/gỡ.",
          "Chẩn đoán lỗi, điểm dừng và cách quay lui dẫn tới cấu hình và quy trình đã có bằng chứng."
        ],
        "dependency_use": {
          "R065": "Review phục hồi cung cấp cách quay lui và điều kiện dừng cần đưa vào hướng dẫn cài/nâng cấp."
        }
      }
    },
    {
      "id": "R072",
      "package": "SD20",
      "title": "Review bộ tài liệu cài đặt",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "A20"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md",
      "steps": "Đối chiếu script thực; sửa thiếu; kiểm tránh hardcode và bí mật",
      "done_when": "Có cài mới, nâng cấp, quay lui, gỡ và giới hạn xóa dữ liệu",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu hướng dẫn với script và gói thực",
          "instructions": "Đọc A20, kiểm từng lệnh, đường dẫn và cấu hình với mã/đầu ra hiện có. Thay giá trị máy cá nhân bằng tham số; bỏ bí mật và ghi quyền cần có.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Hướng dẫn đã đối chiếu lệnh",
          "done_when": "Mỗi lệnh có đích và đầu vào rõ; không tạo bước không có script hoặc cách làm.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R072.01"
        },
        {
          "title": "Review kiểm sau bước và xử lý lỗi",
          "instructions": "Rà cài, nâng cấp, quay lui và gỡ; thêm cách kiểm phiên bản/dữ liệu, điều kiện dừng và người nhận lỗi. Chuẩn bị bản để OPS tự làm theo.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Bản hướng dẫn cho lượt độc lập",
          "done_when": "Không đòi hỏi trí nhớ của người viết; thao tác ảnh hưởng dữ liệu có điều kiện rõ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R072.02"
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1"
      ],
      "resume_note": "Kế thừa hướng dẫn và script hiện có. Bổ sung cài, nâng cấp, gỡ, điểm kiểm và xử lý lỗi; người khác thực hiện để kiểm tính dùng được.",
      "reader_notes": {
        "purpose": "Đối chiếu tài liệu với script thực giúp tránh lệnh sai, đường dẫn riêng hoặc thao tác xóa không rõ phạm vi.",
        "acceptance_checks": [
          "Lệnh và tham số được so với script/gói, không chứa bí mật hoặc đường dẫn máy cá nhân.",
          "Có phần cài mới, nâng cấp, quay lui, gỡ và giới hạn xử lý dữ liệu; mỗi bước có cách kiểm."
        ],
        "dependency_use": {
          "A20": "Bộ hướng dẫn dự thảo cung cấp toàn bộ bước để NCS đối chiếu với mã và cấu hình thực."
        }
      }
    },
    {
      "id": "R073",
      "package": "SD20",
      "title": "Người vận hành thực hiện theo bộ hướng dẫn",
      "status": "PLANNED",
      "minutes": {
        "OPS": 360
      },
      "ai_runs": 0,
      "deps": [
        "R072"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md",
      "steps": "Dùng môi trường riêng; ghi mọi bước không rõ; thử lỗi mẫu",
      "done_when": "Cài và khôi phục được mà không cần trí nhớ của người viết",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Thực hiện cài mới theo tài liệu",
          "instructions": "Dùng môi trường riêng được giao và gói đúng bản. Làm tuần tự theo hướng dẫn mà không nhờ giải thích ngoài; ghi mọi bước thiếu, kết quả và sai khác.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Log cài độc lập",
          "done_when": "Có đích máy, gói và kiểm sau từng bước; không che lỗi hướng dẫn.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R073.01"
        },
        {
          "title": "Thực hiện nâng cấp và lỗi mẫu",
          "instructions": "Theo hướng dẫn, nâng cấp bản thử; tạo lỗi mẫu được phép. Kiểm dữ liệu/phiên bản, dùng điểm dừng và cách quay lui; ghi bước không làm được.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Log nâng cấp và xử lý lỗi",
          "done_when": "Không tiếp tục khi bước trước thất bại chưa xử lý; có trạng thái cuối xác định.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R073.02"
        },
        {
          "title": "Thực hiện khôi phục/gỡ trong vùng thử",
          "instructions": "Kiểm điều kiện giữ dữ liệu rồi làm theo phần khôi phục hoặc gỡ trên môi trường thử. Ghi tài khoản, tệp/cấu hình còn lại và nhận xét để sửa tài liệu.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Biên bản kiểm hướng dẫn trọn luồng",
          "done_when": "Không xóa ngoài đích được giao; cài và khôi phục không cần trí nhớ người soạn.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R073.03"
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1"
      ],
      "resume_note": "Kế thừa hướng dẫn và script hiện có. Bổ sung cài, nâng cấp, gỡ, điểm kiểm và xử lý lỗi; người khác thực hiện để kiểm tính dùng được.",
      "reader_notes": {
        "purpose": "Một người vận hành làm theo tài liệu sẽ phát hiện những bước không thể thực hiện nếu chỉ biết kết quả của người viết.",
        "acceptance_checks": [
          "Log cài/nâng cấp và lỗi mẫu ghi môi trường riêng, gói dùng và bước không rõ.",
          "Có kết quả khôi phục theo hướng dẫn; không cần hướng dẫn miệng ngoài tài liệu để hoàn thành thao tác."
        ],
        "dependency_use": {
          "R072": "Bộ tài liệu đã review cung cấp trình tự và điểm kiểm để OPS thực hiện độc lập."
        }
      }
    },
    {
      "id": "R074",
      "package": "SD20",
      "title": "Kiểm tài liệu và kết quả cài độc lập",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "R073"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md",
      "steps": "Đối chiếu gói/host/hash; kiểm điểm dừng và quyền; đọc sổ tay sự cố A18/R066 và xác nhận thao tác",
      "done_when": "Các bước nguy hiểm có đích rõ; lỗi đã xử lý",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm độc lập gói và bằng chứng cài",
          "instructions": "Đối chiếu mã băm, phiên bản host và log R073. Rà các điểm dừng, quyền và dữ liệu còn lại; ghi sai khác hoặc thiếu bằng chứng.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Phiếu kiểm tài liệu cài",
          "done_when": "Không lấy gói hoặc log phiên bản khác để nghiệm thu.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R074.01"
        },
        {
          "title": "Kiểm sổ tay sự cố cùng luồng cài",
          "instructions": "Đọc A18/R066 và hướng dẫn đã sửa. Đối chiếu cách dừng, chuyển lỗi, phục hồi với thao tác thực; yêu cầu sửa chỗ nguy hiểm hoặc mơ hồ.",
          "output": "deployment/HUONG_DAN_CAI_NANG_CAP_GO.md — Biên bản review hướng dẫn vận hành",
          "done_when": "Mỗi thao tác ảnh hưởng dữ liệu có đích rõ; lỗi mở được giữ nguyên.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R074.02"
        }
      ],
      "source_paths": [
        "deployment/iis/W1_D06_IIS_Config_Guide.md",
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "tools/KIEM_TRA_MOI_TRUONG_SACH.ps1"
      ],
      "resume_note": "Kế thừa hướng dẫn và script hiện có. Bổ sung cài, nâng cấp, gỡ, điểm kiểm và xử lý lỗi; người khác thực hiện để kiểm tính dùng được.",
      "reader_notes": {
        "purpose": "Kiểm độc lập cuối giúp bảo đảm hướng dẫn cài và sổ tay sự cố thống nhất với gói được giao.",
        "acceptance_checks": [
          "Gói, host, mã băm, quyền và log cài độc lập được đối chiếu.",
          "Các thao tác nguy hiểm có đích/điểm dừng rõ, lỗi hướng dẫn có kết quả xử lý; cách chuyển sự cố khớp sổ tay."
        ],
        "dependency_use": {
          "R073": "Log người vận hành làm theo tài liệu cung cấp bằng chứng về bước đã làm được và bước còn lỗi."
        }
      }
    },
    {
      "id": "R075",
      "package": "SD22",
      "title": "Xét đối tượng đọc và quyền xuất bản Q08",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 120
      },
      "ai_runs": 0,
      "deps": [
        "Q03",
        "R005"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
      "steps": "Chốt danh sách file, kênh nội bộ/công khai và người xuất bản",
      "done_when": "Quyền theo tài nguyên, không duyệt toàn kho mặc định",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 5,
      "work_steps": [
        {
          "title": "Xét danh sách tài nguyên và kênh xuất bản",
          "instructions": "Đọc Q03, R005 và từng tài nguyên dự kiến xuất. Ghi đối tượng đọc, kênh nội bộ/công khai, người xuất bản và căn cứ quyền; chỉ người có thẩm quyền ghi quyết định thật.",
          "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Hồ sơ xét Q08 theo tài nguyên",
          "done_when": "Không duyệt toàn kho mặc định; thiếu căn cứ phải ghi chờ và chặn xuất.",
          "minutes": {
            "LEGAL": 120
          },
          "ai_runs": 0,
          "id": "R075.01"
        }
      ],
      "source_paths": [
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi.",
      "reader_notes": {
        "purpose": "Quyền xuất bản phải được xét theo từng tài nguyên và đối tượng đọc, tránh công bố nhầm cả kho.",
        "acceptance_checks": [
          "Hồ sơ nêu danh sách file, kênh nội bộ/công khai, người xuất bản và căn cứ quyền.",
          "Quyết định thật hoặc trạng thái chờ được ghi theo tài nguyên; không mặc định duyệt toàn kho."
        ],
        "dependency_use": {
          "Q03": "Quyết định quyền nguồn/dịch vụ cung cấp căn cứ để xét tài nguyên có được đưa ra ngoài hay không.",
          "R005": "Ma trận yêu cầu đã kiểm xác định phần sản phẩm/tài liệu thực sự cần xuất bản."
        }
      }
    },
    {
      "id": "A22",
      "package": "SD22",
      "title": "Hoàn thiện bộ sinh có kiểm quyền",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 2,
      "deps": [
        "R075",
        "R019"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "tools/; docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
      "steps": "Tái dùng preflight; nối danh sách cho phép; kiểm trang/search/sitemap/tải xuống",
      "done_when": "Không chỉ bỏ liên kết với nội dung bị cấm",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nháp bộ sinh theo danh sách được phép",
          "instructions": "Đọc R075 và bộ kiểm trước xuất hiện có. Nối kiểm quyền/phiên bản với danh sách cho phép; tạo ca tổng hợp cho tài nguyên bị cấm, thiếu quyền và hết hạn.",
          "output": "tools/; docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Mã kiểm trước xuất và ca quyền",
          "done_when": "Mặc định không xuất khi thiếu điều kiện; chưa sinh hoặc công bố kho thật.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A22.01"
        },
        {
          "title": "Nháp kiểm mọi dạng đầu ra và thu hồi",
          "instructions": "Bổ sung kiểm trang, chỉ mục tìm kiếm, sitemap và tệp tải xuống. Tạo ca thu hồi/cập nhật để phát hiện nội dung còn sót; ghi giới hạn đối với bản sao ngoài kiểm soát.",
          "output": "tools/; docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Bộ kiểm đầu ra dẫn xuất",
          "done_when": "Không chỉ bỏ liên kết tới nội dung bị cấm; chưa nhận ca giả là kiểm xuất thật.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A22.02"
        }
      ],
      "source_paths": [
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi.",
      "reader_notes": {
        "purpose": "Bộ sinh phải kiểm cả nội dung trang lẫn đầu ra phụ để tài nguyên bị cấm không còn lộ qua tìm kiếm hoặc tải xuống.",
        "acceptance_checks": [
          "Bản nháp nối danh sách cho phép với kiểm quyền/phiên bản trước sinh.",
          "Ca kiểm bao phủ trang, tìm kiếm, sitemap và bản tải; không chỉ xóa liên kết khỏi menu."
        ],
        "dependency_use": {
          "R075": "Danh sách tài nguyên/kênh được xét xác định nội dung bộ sinh được phép xuất.",
          "R019": "Hợp đồng dữ liệu và bộ kiểm đã review cung cấp quy tắc trạng thái/phiên bản để kiểm đầu vào sinh trang."
        }
      }
    },
    {
      "id": "R076",
      "package": "SD22",
      "title": "Tích hợp kiểm trước xuất và thu hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 480
      },
      "ai_runs": 0,
      "deps": [
        "A22",
        "GA"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
      "steps": "Review mã; dùng gói đã xét; kiểm cache, bản tải và nguồn hết quyền",
      "done_when": "Không để trang cũ lộ lại sau cập nhật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review bộ sinh và điều kiện quyền",
          "instructions": "Đọc A22, đối chiếu Q08 và GA. Rà đầu vào, trạng thái, phiên bản và đường xuất; sửa chỗ bỏ qua kiểm trước xuất trước dùng gói đã xét.",
          "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Bản review mã sinh và quyền",
          "done_when": "Không chạy xuất thật khi thiếu quyền; mọi đường xuất qua kiểm điều kiện.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R076.01"
        },
        {
          "title": "Tích hợp danh sách cho phép với gói hợp lệ",
          "instructions": "Dùng gói đúng phạm vi đã xét trên môi trường thử. Kiểm tài nguyên được phép và bị chặn; ghi phiên bản gói, danh sách và cấu hình sinh.",
          "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Bằng chứng tích hợp quyền xuất",
          "done_when": "Không suy quyền đọc nguồn thành quyền công bố; lỗi kiểm làm dừng xuất.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R076.02"
        },
        {
          "title": "Kiểm thu hồi trên trang và đầu ra phụ",
          "instructions": "Rút tài nguyên thử, kiểm trang, tìm kiếm, sitemap và bản tải xuống. Sửa đường để nội dung không tiếp tục được sinh hoặc truy cập trong phạm vi kiểm soát.",
          "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Ca thu hồi mọi đầu ra",
          "done_when": "Không chỉ ẩn menu; ghi rõ bản sao ngoài kiểm soát chưa được xác minh.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R076.03"
        },
        {
          "title": "Kiểm cache, bản cũ và hoàn thiện quy trình",
          "instructions": "Thử cập nhật/khôi phục phiên bản đầu ra trong vùng thử; kiểm cache và nguồn hết quyền. Cập nhật cách kiểm trước/sau và bằng chứng cho reviewer.",
          "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Quy trình xuất/thu hồi đã đối chiếu",
          "done_when": "Bản cũ không vô ý đưa nguồn bị rút trở lại; lỗi còn mở được nêu rõ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R076.04"
        }
      ],
      "source_paths": [
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi.",
      "reader_notes": {
        "purpose": "Nối kiểm quyền và thu hồi vào bộ sinh giúp cập nhật tài liệu mà không đưa lại nội dung đã hết quyền.",
        "acceptance_checks": [
          "Mã được review và thử bằng gói đúng phạm vi đã xét, có bản kê nguồn/phiên bản.",
          "Ca cache, bản tải, nguồn hết quyền và cập nhật bản cũ có kết quả; tài nguyên bị rút không lộ lại."
        ],
        "dependency_use": {
          "A22": "Mã bộ sinh và ca kiểm quyền dự thảo cung cấp phần NCS cần tích hợp và kiểm lại.",
          "GA": "Hồ sơ gói được xét hợp lệ cung cấp nội dung và phiên bản có thể dùng trong lượt tích hợp xuất."
        }
      }
    },
    {
      "id": "R077",
      "package": "SD22",
      "title": "Kiểm xuất bản và thu hồi trên môi trường thử",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 240
      },
      "ai_runs": 0,
      "deps": [
        "R076"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
      "steps": "Thử tài nguyên bị cấm qua mọi đầu ra; kiểm phục hồi bản cũ",
      "done_when": "Bằng chứng đầu ra phù hợp, không chứng nhận xóa bản sao ngoài kiểm soát",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Thử tài nguyên bị cấm qua mọi đầu ra",
          "instructions": "Độc lập tạo các trường hợp thiếu quyền/hết hạn theo tập được phép. Kiểm trang, đường dẫn trực tiếp, tìm kiếm, sitemap và tải xuống; ghi bằng chứng.",
          "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Phiếu kiểm quyền đầu ra",
          "done_when": "Tài nguyên bị chặn không còn lộ qua đầu ra phụ trong phạm vi thử.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R077.01"
        },
        {
          "title": "Kiểm thu hồi khi cập nhật hoặc phục hồi",
          "instructions": "Thử phục hồi bản cũ trong vùng thử và kiểm lại tài nguyên đã rút. Rà cache, bản tải và nhật ký; tổng hợp lỗi, giới hạn và việc cần xử lý.",
          "output": "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md — Biên bản review thu hồi",
          "done_when": "Không tuyên bố xóa bản sao ngoài kiểm soát; thiếu bằng chứng phải giữ lỗi.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R077.02"
        }
      ],
      "source_paths": [
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi.",
      "reader_notes": {
        "purpose": "Kiểm độc lập đầu ra phát hiện nội dung còn sót sau thu hồi hoặc khi phục hồi bản cũ.",
        "acceptance_checks": [
          "Tài nguyên bị cấm được thử qua đường trực tiếp, trang, tìm kiếm, sitemap và tải xuống.",
          "Kết quả phục hồi bản cũ ghi rõ phạm vi kiểm soát; không tuyên bố xóa được mọi bản sao bên ngoài."
        ],
        "dependency_use": {
          "R076": "Bộ sinh đã tích hợp và các ca thu hồi cung cấp bản chạy cần reviewer thử độc lập."
        }
      }
    },
    {
      "id": "R078",
      "package": "SD22",
      "title": "Diễn tập cập nhật, thu hồi và ngừng dịch vụ",
      "status": "PLANNED",
      "minutes": {
        "OPS": 240
      },
      "ai_runs": 0,
      "deps": [
        "R077",
        "R065",
        "SRC-M03"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md",
      "steps": "Cập nhật thử; rút nguồn; thu hồi khóa; ghi cách lưu/xóa đúng quyền",
      "done_when": "Có người quyết, người thực hiện, biên bản và kế hoạch ngừng; bao gồm app/API/DB, tài khoản, khóa, nhà cung cấp và bản sao",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Diễn tập cập nhật và rút nguồn",
          "instructions": "Theo quy trình đã review, cập nhật gói thử rồi rút một nguồn tổng hợp. Kiểm app/API/DB và đầu ra; ghi người quyết, người thực hiện, trạng thái cuối và lỗi.",
          "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md — Log cập nhật/thu hồi thử",
          "done_when": "Nguồn bị rút không được dùng lại; không thu hồi nguồn thật ngoài quyết định.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R078.01"
        },
        {
          "title": "Diễn tập ngừng dịch vụ và thu hồi quyền",
          "instructions": "Trong vùng thử, đi qua dừng app/API, xử lý DB/bản sao, thu hồi tài khoản/khóa và kết nối nhà cung cấp. Ghi phần lưu/xóa cần quyết định và điều kiện khởi động lại.",
          "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md — Biên bản ngừng dịch vụ thử",
          "done_when": "Đủ phạm vi app, DB, khóa, nhà cung cấp và bản sao; không xóa theo ngày lịch đơn thuần.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R078.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi.",
      "reader_notes": {
        "purpose": "Diễn tập cập nhật và ngừng dịch vụ giúp việc thu hồi quyền không bỏ sót tài khoản, dữ liệu hoặc bản sao.",
        "acceptance_checks": [
          "Biên bản ghi người quyết, người thực hiện, kết quả cập nhật/rút nguồn và thu hồi khóa trên môi trường thử.",
          "Kế hoạch ngừng bao phủ app/API/DB, tài khoản, nhà cung cấp và bản sao; lưu/xóa theo quyền đã ghi."
        ],
        "dependency_use": {
          "R077": "Kết quả kiểm thu hồi đầu ra cung cấp cách cập nhật/rút nguồn cần đưa vào diễn tập vận hành.",
          "R065": "Điều kiện phục hồi/quay lui đã review giúp giữ trạng thái xác định khi diễn tập cập nhật hoặc ngừng.",
          "SRC-M03": "Bằng chứng chặn bản dẫn xuất mất quyền trong cache, chỉ mục và bản phục hồi để diễn tập vận hành."
        }
      }
    },
    {
      "id": "R079",
      "package": "SD15",
      "title": "Chạy kiểm hệ thống chữ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 480
      },
      "ai_runs": 0,
      "deps": [
        "R053",
        "R061",
        "R065",
        "R071",
        "R077"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Khóa gói; chạy ca kỹ thuật/phát triển đầu tới cuối, tải, lỗi, nguồn, quyền và hồi quy. Không mở bộ y khoa cuối.",
      "done_when": "Có môi trường, phiên bản, mẫu số và kết quả ca lỗi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Khóa bản kiểm và chuẩn bị ma trận ca kỹ thuật",
          "instructions": "Đối chiếu gói, môi trường và đầu ra phụ thuộc. Ghi phiên bản, tập ca phát triển, mẫu số và cách ghi lỗi; không mở bộ y khoa cuối.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Bản kê kiểm hệ thống chữ",
          "done_when": "Mỗi ca có kỳ vọng và đích; bộ y khoa cuối vẫn được bảo vệ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R079.01"
        },
        {
          "title": "Kiểm luồng chữ từ đầu tới cuối",
          "instructions": "Chạy ca kỹ thuật tổng hợp từ UI qua API, bộ lọc, nguồn và phản hồi. Ghi kết quả từng bước, trích dẫn và hành vi lỗi; không bỏ ca thất bại.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Kết quả kiểm toàn luồng kỹ thuật",
          "done_when": "Kết quả gắn phiên bản đã khóa; không suy thành hiệu quả y khoa.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R079.02"
        },
        {
          "title": "Kiểm tải, quyền và lỗi kết nối",
          "instructions": "Trong môi trường được phép, chạy tải đã chọn, sai quyền và dịch vụ lỗi/chậm. Ghi tài nguyên, thời gian và trạng thái UI/API theo từng ca.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Kết quả tải và đường lỗi",
          "done_when": "Không vượt phạm vi thử; có mẫu số, cấu hình và ca lỗi đầy đủ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R079.03"
        },
        {
          "title": "Chạy hồi quy và bàn giao lỗi",
          "instructions": "Kiểm lại chức năng bị ảnh hưởng sau tích hợp, so với bản kê. Tổng hợp ca đạt/chưa đạt, lỗi tái hiện và người xử lý để reviewer độc lập tiếp tục.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Báo cáo kiểm hệ thống trước review",
          "done_when": "Không giấu lỗi hoặc mở tập y khoa cuối; bằng chứng truy vết được.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R079.04"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Kiểm hệ thống chữ xác nhận các phần đã ghép làm việc cùng nhau trước khi mở bộ đánh giá y khoa cuối.",
        "acceptance_checks": [
          "Báo cáo ghi môi trường, gói khóa, mẫu số và kết quả từng ca kỹ thuật/phát triển, gồm ca lỗi.",
          "Có kiểm toàn luồng, tải, quyền, nguồn và hồi quy; bộ y khoa cuối chưa bị mở."
        ],
        "dependency_use": {
          "R053": "Mẫu kết quả và công cụ tính đã kiểm giúp ghi đủ ca lỗi, dữ liệu thiếu và mẫu số khi chạy hệ thống.",
          "R061": "Review host cung cấp cấu hình máy đích đã đối chiếu để chạy kiểm trên môi trường xác định.",
          "R065": "Review phục hồi cung cấp điều kiện và bằng chứng quay lại khi phép kiểm hệ thống gặp lỗi.",
          "R071": "Hướng dẫn chữ đã khóa cung cấp luồng và giới hạn cần đối chiếu với hành vi thật.",
          "R077": "Kết quả kiểm xuất/thu hồi cung cấp bằng chứng rằng đầu ra tài liệu không làm lộ nguồn ngoài quyền."
        }
      }
    },
    {
      "id": "R080",
      "package": "SD15",
      "title": "Kiểm độc lập bảo mật, tải và trợ năng",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 480
      },
      "ai_runs": 0,
      "deps": [
        "R079"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Chạy tập ASVS đã chọn; kiểm giới hạn tài nguyên; kiểm luồng trợ năng",
      "done_when": "Không lỗi nghiêm trọng còn mở; ghi giới hạn kiểm",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm độc lập truy cập và đầu vào",
          "instructions": "Nhận bản khóa R079, chọn các ca ASVS đã thống nhất. Kiểm sai quyền, đầu vào không hợp lệ và đường lỗi; ghi mã yêu cầu, ca và kết quả riêng.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Bằng chứng kiểm ASVS được chọn",
          "done_when": "Không nhận đạt toàn ASVS; kết quả độc lập có môi trường và phiên bản.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R080.01"
        },
        {
          "title": "Kiểm giới hạn tài nguyên và phục hồi lỗi",
          "instructions": "Chạy tải/giới hạn trong phạm vi thử, ghi CPU/bộ nhớ/thời gian và trạng thái khi lỗi. Kiểm hệ thống hồi phục theo thiết kế, lập lỗi vượt tiêu chí.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Kết quả tải độc lập",
          "done_when": "Không dùng số đo thiếu cấu hình hoặc mẫu số; không bỏ ca chậm/lỗi.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R080.02"
        },
        {
          "title": "Kiểm trợ năng toàn luồng bản khóa",
          "instructions": "Dùng bàn phím, công cụ đọc màn hình và chế độ hiển thị đã chọn. Kiểm luồng chính cùng thông báo lỗi/chờ; ghi thao tác không thể hoàn thành.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Kết quả trợ năng độc lập",
          "done_when": "Bằng chứng thuộc bản khóa, không dùng kết quả UI cũ thay thế.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R080.03"
        },
        {
          "title": "Đối chiếu lỗi và kết luận phạm vi kiểm",
          "instructions": "Gộp bằng chứng bảo mật/tải/trợ năng, phân loại lỗi và giới hạn chưa kiểm. Chuyển lỗi chặn cho người sửa; giữ rõ điều kiện chưa đạt thay vì tự cấp GO.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Biên bản review kỹ thuật hệ thống",
          "done_when": "Không lỗi nghiêm trọng bị bỏ qua; nếu còn lỗi thì hồ sơ phải ghi chưa đủ điều kiện.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R080.04"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Reviewer độc lập kiểm bảo mật, tải và trợ năng để kết quả không chỉ dựa vào người xây dựng hệ thống.",
        "acceptance_checks": [
          "Tập ASVS đã chọn, phép đo tài nguyên và luồng trợ năng có kết quả theo gói khóa.",
          "Lỗi nghiêm trọng còn mở được ghi là chặn; báo cáo nêu giới hạn và không nhận đạt toàn chuẩn."
        ],
        "dependency_use": {
          "R079": "Gói khóa, kết quả kỹ thuật và danh sách lỗi của hệ thống cung cấp phiên bản để reviewer kiểm độc lập."
        }
      }
    },
    {
      "id": "R081",
      "package": "SD15",
      "title": "Chấm phản hồi trên bộ ca khóa",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_YK": 480
      },
      "ai_runs": 0,
      "deps": [
        "R079",
        "R051",
        "GB"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Dùng nhãn và tiêu chí đã khóa; ghi kết quả từng ca, bất đồng",
      "done_when": "Không loại ca lỗi hoặc sửa ngưỡng sau khi biết kết quả",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Mở tập khóa sau GB và chấm phần đầu",
          "instructions": "Kiểm quyết định GB, phiên bản gói và quyền của reviewer trước mở tập cuối. Chấm tuần tự phần đầu theo nhãn/tiêu chí đã khóa; ghi ID ca và mọi bất đồng.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Phiếu chấm phần đầu của tập khóa",
          "done_when": "Không đổi nhãn/ngưỡng hoặc lược ca; hồ sơ chỉ chứa dữ liệu được phép.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R081.01"
        },
        {
          "title": "Chấm phần tiếp theo và đối chiếu nguồn",
          "instructions": "Tiếp tục từ ID chưa chấm, dùng cùng tiêu chí và bản gói. Ghi lỗi nội dung, trích dẫn và câu an toàn theo biểu mẫu; đánh dấu ca cần phân xử.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Phiếu chấm phần giữa của tập khóa",
          "done_when": "Mỗi ca chỉ tính một lần; không sửa phản hồi sau khi biết điểm.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R081.02"
        },
        {
          "title": "Hoàn thành các ca còn lại",
          "instructions": "Đối chiếu danh sách tập khóa, chấm hết phần còn lại và ca phản hồi lỗi. Ghi không trả lời hoặc lỗi kỹ thuật theo quy ước; không tự loại khỏi mẫu số.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Phiếu chấm phần cuối của tập khóa",
          "done_when": "Tổng ca khớp danh sách; không biến ca lỗi thành ca bị loại.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R081.03"
        },
        {
          "title": "Tổng hợp điểm và bàn giao bất đồng",
          "instructions": "Cộng kết quả theo tiêu chí khóa, so mẫu số với toàn tập. Lập danh sách bất đồng, bằng chứng và phần cần CVYK phân xử; không tự sửa ngưỡng.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Bảng kết quả và hồ sơ bất đồng",
          "done_when": "Kết quả truy vết tới từng ca; không kết luận an toàn toàn diện từ điểm số.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R081.04"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Chấm trên tập đã khóa giúp đánh giá phản hồi theo cùng tiêu chí, không sửa tiêu chí để hợp kết quả.",
        "acceptance_checks": [
          "Phiếu chấm giữ từng ID ca, mẫu số, phản hồi lỗi và bất đồng theo nhãn đã khóa.",
          "Không bỏ ca thất bại hoặc đổi ngưỡng sau khi xem kết quả; phiên bản gói được ghi rõ."
        ],
        "dependency_use": {
          "R079": "Bản hệ thống đã kiểm kỹ thuật cung cấp gói cụ thể để tạo phản hồi chấm cuối.",
          "R051": "Bộ ca/nhãn được bảo quản và vai reviewer đã xác nhận cung cấp tập đánh giá độc lập.",
          "GB": "Quyết định GB thực tế xác nhận điều kiện mở bước đánh giá cuối, không thay quyền thử với người."
        }
      }
    },
    {
      "id": "R082",
      "package": "SD15",
      "title": "Phân xử lỗi chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "R081"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Review bất đồng; xác định nội dung cần khóa/sửa; ghi quyết định",
      "done_when": "Không kết luận an toàn toàn diện từ số test kỹ thuật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review các ca bất đồng và lỗi chuyên môn",
          "instructions": "Đọc phiếu R081, nguồn và tiêu chí đã khóa. Đối chiếu từng bất đồng, ghi nhận định chuyên môn và phần chưa đủ căn cứ; không sửa kết quả gốc.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Phiếu phân xử chuyên môn",
          "done_when": "Bảo toàn phản hồi và nhãn gốc; bất đồng có căn cứ truy vết.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "R082.01"
        },
        {
          "title": "Xác định nội dung phải khóa hoặc sửa",
          "instructions": "Ghi rõ nội dung, phiên bản và phạm vi cần xử lý; phân biệt lỗi chuyên môn với lỗi thực thi. Chỉ người có thẩm quyền ghi quyết định và yêu cầu review lại.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Yêu cầu xử lý nội dung và giới hạn",
          "done_when": "Không dùng test kỹ thuật để tuyên bố an toàn; thiếu căn cứ thì giữ trạng thái chờ.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "R082.02"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Bất đồng chuyên môn cần được phân xử bằng nguồn và phạm vi để nhóm biết nội dung nào phải khóa hoặc sửa.",
        "acceptance_checks": [
          "Các ca bất đồng có nhận xét, căn cứ và trạng thái xử lý được ghi lại.",
          "Quyết định nêu nội dung/phiên bản cần khóa hoặc review lại; không kết luận an toàn toàn diện từ test kỹ thuật."
        ],
        "dependency_use": {
          "R081": "Phiếu chấm và danh sách bất đồng cung cấp từng phản hồi cần CVYK đối chiếu nguồn và phân xử."
        }
      }
    },
    {
      "id": "R083",
      "package": "SD15",
      "title": "Sửa vòng lỗi tích hợp",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 480
      },
      "ai_runs": 0,
      "deps": [
        "R080",
        "R082"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Sửa mã/nội dung đúng thẩm quyền; thêm hồi quy; dựng lại phiên bản",
      "done_when": "Lỗi thay đổi nội dung phải review lại; không tự sửa APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Phân loại lỗi và lập phạm vi sửa",
          "instructions": "Đọc R080/R082, gắn lỗi với mã, nội dung hoặc cấu hình. Tách việc NCS được sửa và việc cần người có thẩm quyền; ghi ca hồi quy tương ứng.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Danh sách sửa theo lỗi",
          "done_when": "Không tự sửa nội dung APPROVED hoặc đổi mục tiêu đánh giá.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R083.01"
        },
        {
          "title": "Sửa lỗi kỹ thuật và thêm ca tái hiện",
          "instructions": "Sửa các đường mã/cấu hình được giao, bắt đầu từ lỗi chặn. Viết hoặc bổ sung ca tái hiện trước kiểm lại; ghi thay đổi theo ID lỗi.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Mã sửa và ca hồi quy",
          "done_when": "Ca từng thất bại được kiểm lại; không che lỗi bằng bỏ kiểm.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R083.02"
        },
        {
          "title": "Tích hợp nội dung được xét lại đúng quyền",
          "instructions": "Chỉ nhận nội dung/phiên bản được xử lý theo R082. Kiểm điều kiện duyệt và nguồn trước tích hợp; nếu chưa đủ thì giữ nhánh đóng, ghi phần chờ.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Bằng chứng tích hợp nội dung sửa",
          "done_when": "Không dùng NCS/AI thay CVYK; phiên bản thay đổi được truy vết.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R083.03"
        },
        {
          "title": "Dựng bản sửa và bàn giao kiểm lại",
          "instructions": "Chạy hồi quy kỹ thuật bị ảnh hưởng, dựng gói mới và cập nhật bản kê. Giữ kết quả bản cũ riêng; bàn giao lỗi đã xử lý/chưa xử lý cho reviewer.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Gói sửa và báo cáo thay đổi",
          "done_when": "Không chấm lại tập cuối đã lộ để nhận kết quả mới; giữ yêu cầu tập thay thế.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R083.04"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Vòng sửa xử lý lỗi đã được xác định mà vẫn giữ ranh giới giữa sửa mã và thay nội dung chuyên môn.",
        "acceptance_checks": [
          "Mỗi lỗi có thay đổi mã/cấu hình hoặc yêu cầu xử lý nội dung đúng thẩm quyền, kèm ca hồi quy.",
          "Nội dung APPROVED không bị NCS tự sửa; gói mới có phiên bản và bản kê để kiểm lại."
        ],
        "dependency_use": {
          "R080": "Review kỹ thuật cung cấp ca lỗi bảo mật/tải/trợ năng cần sửa và tái hiện.",
          "R082": "Kết quả phân xử chuyên môn xác định nội dung được phép xử lý và phần phải tiếp tục khóa."
        }
      }
    },
    {
      "id": "R084",
      "package": "SD15",
      "title": "Kiểm lại lỗi kỹ thuật và gói",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 240
      },
      "ai_runs": 0,
      "deps": [
        "R083"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Chạy hồi quy bị ảnh hưởng và kiểm gói; ghi lỗi còn mở",
      "done_when": "Không lỗi chặn phát hành",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm lại ca kỹ thuật từng thất bại",
          "instructions": "Nhận gói R083 đúng mã băm, chạy các ca lỗi R080 và hồi quy liên quan. Ghi kết quả mới cạnh kết quả cũ; không xóa ca thất bại lịch sử.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Phiếu kiểm lại lỗi kỹ thuật",
          "done_when": "Bằng chứng gắn bản sửa; ca còn lỗi giữ trạng thái mở.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R084.01"
        },
        {
          "title": "Kiểm gói và phạm vi ảnh hưởng",
          "instructions": "Đối chiếu mã, cấu hình, phụ thuộc và lỗi mở; kiểm thành phần bị tác động ngoài ca trực tiếp. Nêu có hay chưa còn lỗi chặn trước bước đánh giá tiếp.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Biên bản kiểm gói sửa",
          "done_when": "Không báo đủ điều kiện khi còn lỗi chặn hoặc thiếu bằng chứng.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "R084.02"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Kiểm lại trên gói sửa xác nhận lỗi kỹ thuật được xử lý mà không làm hỏng phần liên quan.",
        "acceptance_checks": [
          "Ca từng thất bại và hồi quy bị ảnh hưởng có log theo bản mới.",
          "Bản kê gói khớp mã/cấu hình; lỗi chặn còn lại được giữ mở thay vì báo sẵn sàng phát hành."
        ],
        "dependency_use": {
          "R083": "Gói sửa và danh sách thay đổi cung cấp phiên bản cùng các ca cần reviewer kiểm lại."
        }
      }
    },
    {
      "id": "R085",
      "package": "SD15",
      "title": "Kiểm lại lỗi chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 120
      },
      "ai_runs": 0,
      "deps": [
        "R083",
        "R125"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Đối chiếu thay đổi với nguồn và phạm vi; ghi xét lại",
      "done_when": "Bằng chứng chuyên môn khớp gói mới",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét lại chuyên môn trên gói và kết quả mới",
          "instructions": "Đọc R083/R125, nguồn và quyết định sửa. Đối chiếu nội dung, câu an toàn và phạm vi; ghi kết quả xét đúng bản hoặc yêu cầu tiếp tục khóa/sửa.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Biên bản xét chuyên môn gói mới",
          "done_when": "Không dùng kết quả bản cũ thay gói mới; thiếu điều kiện phải giữ chưa đạt.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R085.01"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Nội dung và kết quả đánh giá phải được xem lại trên đúng gói sửa, vì nhận xét của bản cũ có thể không còn phù hợp.",
        "acceptance_checks": [
          "Biên bản đối chiếu thay đổi, nguồn, phạm vi và kết quả đánh giá mới.",
          "Nhận xét chuyên môn gắn đúng phiên bản, ghi phần chưa đạt hoặc cần xét tiếp thay vì tự nhận thông qua."
        ],
        "dependency_use": {
          "R083": "Bản sửa xác định nội dung và cấu hình chuyên môn cần CVYK xét lại.",
          "R125": "Kết quả trên tập thay thế cung cấp bằng chứng mới để đánh giá tác động của vòng sửa."
        }
      }
    },
    {
      "id": "GB-R",
      "package": "SD15",
      "title": "Phiên xét lại GB sau vòng sửa",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R084",
        "R085"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Kiểm ma trận yêu cầu, lỗi, phiên bản và ý kiến đúng vai",
      "done_when": "Chỉ ghi đạt khi đủ bằng chứng thực; chưa cấp quyền nghiên cứu",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Xét lại GB bằng hồ sơ sau sửa",
          "instructions": "Kiểm R084/R085, ma trận yêu cầu, mã băm và lỗi còn mở. GVHD ghi quyết định thực cùng phạm vi/lý do hoặc yêu cầu bổ sung; chưa cấp quyền nghiên cứu với người.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Biên bản xét lại GB",
          "done_when": "Chỉ ghi đạt nếu bằng chứng và thẩm quyền đủ; lịch dự kiến không tạo quyết định.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "GB-R.01"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Xét lại GB giúp kiểm toàn bộ bằng chứng sau sửa trước khi dùng bản mới cho bước tiếp theo.",
        "acceptance_checks": [
          "Hồ sơ khớp ma trận yêu cầu, lỗi, phiên bản và ý kiến đúng vai từ lượt kiểm lại.",
          "Quyết định thực hoặc yêu cầu bổ sung được ghi; phiên này chưa cấp quyền nghiên cứu với người."
        ],
        "dependency_use": {
          "R084": "Biên bản kiểm kỹ thuật bản sửa cho biết lỗi chặn và tính nhất quán gói.",
          "R085": "Nhận xét chuyên môn của gói mới cung cấp phần bằng chứng y khoa cần xem khi xét lại GB."
        }
      }
    },
    {
      "id": "R086",
      "package": "SD23",
      "title": "NCS hoàn thiện phương pháp thử giới hạn",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R009",
        "PREP"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Tự chọn câu hỏi, mẫu, đo lường và cách phân tích; giữ bản đầu",
      "done_when": "Số người phù hợp mục tiêu; 10 lượt chỉ là giả định dự toán",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS viết câu hỏi và cách thử",
          "instructions": "NCS1 tự viết câu hỏi nghiên cứu, mục tiêu và tác vụ chữ. Đối chiếu hiện vật trước; giữ lịch sử bản thảo gốc.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần câu hỏi và phương pháp do NCS viết",
          "done_when": "AI không tạo thay bản phương pháp đầu tiên.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R086.01"
        },
        {
          "title": "NCS viết mẫu và trình tự",
          "instructions": "NCS1 nêu cách chọn người, tiêu chí, vai hỗ trợ và trình tự buổi. Ghi 10 lượt là kịch bản dự toán, chưa phải dữ liệu.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần mẫu, tác vụ và trình tự",
          "done_when": "Không bịa danh tính hoặc số lượt thực hiện.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R086.02"
        },
        {
          "title": "NCS viết cách xử lý kết quả",
          "instructions": "NCS1 mô tả phép đo, dữ liệu thiếu, rút, dừng và phân tích. Gắn điều kiện cần quyết định trước tuyển.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần phân tích và điều kiện triển khai",
          "done_when": "Thay phương pháp sau kết quả phải có ghi nhận và review lại.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R086.03"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Nghiên cứu cần câu hỏi và phương pháp do NCS tự xác định. Số lượt dùng để dự toán không tự trở thành cỡ mẫu được duyệt.",
        "acceptance_checks": [
          "Giữ bản đầu NCS tự viết về câu hỏi, mẫu, đo lường và phân tích.",
          "Số người được lý giải theo mục tiêu nghiên cứu.",
          "10 lượt được ghi là giả định dự toán."
        ],
        "dependency_use": {
          "R009": "Công cụ nghiên cứu đã sửa cung cấp tác vụ và cách hỏi để NCS xây dựng phương pháp thử.",
          "PREP": "Phạm vi sơ bộ giúp giới hạn câu hỏi nghiên cứu và hoạt động dự kiến."
        }
      }
    },
    {
      "id": "R087",
      "package": "SD23",
      "title": "Đối chiếu hồ sơ camera và dữ liệu",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 120
      },
      "ai_runs": 0,
      "deps": [
        "R086"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Tách phạm vi chữ/camera; ghi đồng ý, rút lui và người hỗ trợ",
      "done_when": "GC chữ không tự áp dụng camera",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu hồ sơ camera và dữ liệu",
          "instructions": "Tách phạm vi chữ/camera; ghi đồng ý, rút lui và người hỗ trợ. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần R087: Đối chiếu hồ sơ camera và dữ liệu",
          "done_when": "GC chữ không tự áp dụng camera",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R087.01"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Thử chữ và thử camera có hoạt động, dữ liệu và rủi ro khác nhau. Hồ sơ phải tách rõ để tránh dùng nhầm quyền.",
        "acceptance_checks": [
          "Phạm vi chữ và camera được tách trong hồ sơ.",
          "Đồng ý, rút lui và vai hỗ trợ được ghi rõ.",
          "GC chữ không tự áp dụng cho camera."
        ],
        "dependency_use": {
          "R086": "Phương pháp thử của NCS là cơ sở xác định hoạt động nào thuộc chữ hoặc camera."
        }
      }
    },
    {
      "id": "R088",
      "package": "SD23",
      "title": "Hoàn thiện thu, giữ và rút dữ liệu",
      "status": "PLANNED",
      "minutes": {
        "DATA": 180
      },
      "ai_runs": 0,
      "deps": [
        "R087",
        "R016"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Viết mã hóa ID, giữ riêng khóa, rút lui, dữ liệu thiếu và lưu bằng chứng",
      "done_when": "Thời hạn và người giữ rõ; không thu thừa",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xác định vòng đời dữ liệu chữ",
          "instructions": "Lập trường cần thu, mục đích, ID, người truy cập và thời hạn. Tách khóa định danh khỏi dữ liệu phân tích.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Bảng trường dữ liệu và quyền",
          "done_when": "Mỗi trường có mục đích; không thu thêm chỉ vì có thể.",
          "minutes": {
            "DATA": 90
          },
          "ai_runs": 0,
          "id": "R088.01"
        },
        {
          "title": "Kiểm rút dữ liệu và bằng chứng",
          "instructions": "Mô tả tiếp nhận rút, dữ liệu thiếu và xóa theo quyết định. Thử bằng dữ liệu giả; ghi vai chịu trách nhiệm.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Quy trình rút dữ liệu và thử giả",
          "done_when": "Truy vết được yêu cầu mà không lộ thông tin riêng tư trong báo cáo.",
          "minutes": {
            "DATA": 90
          },
          "ai_runs": 0,
          "id": "R088.02"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Dữ liệu chỉ nên được thu đúng mục đích và giữ trong thời hạn đã xác định. Nhóm cần biết cách xử lý yêu cầu rút và phần thiếu.",
        "acceptance_checks": [
          "Có cách mã hóa ID và giữ riêng khóa định danh.",
          "Người giữ dữ liệu và thời hạn được ghi rõ.",
          "Có quy trình rút, dữ liệu thiếu và lưu bằng chứng.",
          "Không thu thừa dữ liệu."
        ],
        "dependency_use": {
          "R087": "Hồ sơ tách chữ và camera xác định từng loại đồng ý, dữ liệu và quyền rút cần thực hiện.",
          "R016": "Thiết kế vòng đời dữ liệu cung cấp quy tắc ID, truy cập, lưu giữ và xóa để đưa vào quy trình thử."
        }
      }
    },
    {
      "id": "R089",
      "package": "SD23",
      "title": "Review đồng ý và phạm vi xử lý",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 120
      },
      "ai_runs": 0,
      "deps": [
        "R088"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Kiểm mẫu đồng ý; chủ thể; quyền và hồ sơ xét nghiên cứu",
      "done_when": "Mâu thuẫn phải được phân xử trước tuyển",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review đồng ý và phạm vi xử lý",
          "instructions": "Kiểm mẫu đồng ý; chủ thể; quyền và hồ sơ xét nghiên cứu. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần R089: Review đồng ý và phạm vi xử lý",
          "done_when": "Mâu thuẫn phải được phân xử trước tuyển",
          "minutes": {
            "LEGAL": 120
          },
          "ai_runs": 0,
          "id": "R089.01"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Mẫu đồng ý phải khớp chủ thể, hoạt động và cách xử lý dữ liệu thực tế. Mâu thuẫn cần được giải quyết trước khi mời người tham gia.",
        "acceptance_checks": [
          "Mẫu đồng ý, chủ thể và quyền được đối chiếu.",
          "Hồ sơ xét nghiên cứu khớp phạm vi xử lý.",
          "Mâu thuẫn được phân xử trước tuyển người."
        ],
        "dependency_use": {
          "R088": "Quy trình thu, giữ và rút dữ liệu cho người review kiểm nội dung đồng ý cùng quyền tương ứng."
        }
      }
    },
    {
      "id": "R090",
      "package": "SD23",
      "title": "Review hoạt động chữ dự kiến với người",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 120
      },
      "ai_runs": 0,
      "deps": [
        "R089"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Kiểm rủi ro, câu hỏi, điểm dừng và chuyển khám",
      "done_when": "Không yêu cầu bỏ thuốc hoặc làm bài vận động chưa duyệt",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review hoạt động chữ dự kiến với người",
          "instructions": "Kiểm rủi ro, câu hỏi, điểm dừng và chuyển khám. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Ghi review từng nội dung và phiên bản. Tách phần đủ, cần sửa và điều kiện xét lại; không tự gán APPROVED.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần R090: Review hoạt động chữ dự kiến với người",
          "done_when": "Không yêu cầu bỏ thuốc hoặc làm bài vận động chưa duyệt",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R090.01"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Trước khi xin phép thử chữ, hoạt động dự kiến cần được xét về an toàn. Câu hỏi và điểm dừng phải phù hợp với giới hạn sản phẩm.",
        "acceptance_checks": [
          "Rủi ro, câu hỏi, điểm dừng và chuyển khám có nhận xét.",
          "Không yêu cầu bỏ thuốc.",
          "Không yêu cầu bài vận động chưa được duyệt."
        ],
        "dependency_use": {
          "R089": "Hồ sơ đồng ý và phạm vi đã review xác định hoạt động chữ CVYK phải xét rủi ro."
        }
      }
    },
    {
      "id": "R091",
      "package": "SD21",
      "title": "Chuẩn bị bài thực hành sử dụng và hỗ trợ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 180
      },
      "ai_runs": 0,
      "deps": [
        "R071"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/DAO_TAO_VA_HO_TRO.md",
      "steps": "Soạn phiếu tác vụ, hướng dẫn hỏi lỗi, giờ hỗ trợ; tách việc quản trị; có phiếu làm lại cho NCT và người chăm sóc",
      "done_when": "Không tính chuẩn bị là đã đào tạo người tham gia",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chuẩn bị bài thực hành theo vai",
          "instructions": "Soạn tác vụ NCT và người chăm sóc từ UI thật. Nêu dừng, rút và báo lỗi. Tách quyền quản trị.",
          "output": "community/DAO_TAO_VA_HO_TRO.md — Phiếu thực hành người dùng và người chăm sóc",
          "done_when": "Chỉ dùng chức năng và hoạt động đã được phép.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "R091.01"
        },
        {
          "title": "Chuẩn bị kiểm làm lại và hỗ trợ",
          "instructions": "Ghi tiêu chí tự làm lại, kênh và giờ hỗ trợ cần xác nhận. Nêu cách chuyển lỗi kỹ thuật hoặc câu hỏi y khoa.",
          "output": "community/DAO_TAO_VA_HO_TRO.md — Phiếu kiểm làm lại và chuyển hỗ trợ",
          "done_when": "Người nhận và giờ hỗ trợ phải xác nhận trước vận hành.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "R091.02"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nội dung hướng dẫn, chưa coi là đã đào tạo. Bổ sung bài thực hành, người hỗ trợ, giới hạn, cách dừng và bằng chứng làm lại đúng.",
      "reader_notes": {
        "purpose": "Người học cần bài thực hành và cách hỏi hỗ trợ cụ thể. Chuẩn bị phiếu giúp kiểm họ tự làm được, thay vì chỉ nghe giới thiệu.",
        "acceptance_checks": [
          "Có phiếu tác vụ và phiếu làm lại cho người cao tuổi, người chăm sóc.",
          "Có cách hỏi lỗi và giờ hỗ trợ cần xác nhận.",
          "Việc quản trị được tách khỏi việc người dùng.",
          "Không ghi chuẩn bị tài liệu thành đã đào tạo người tham gia."
        ],
        "dependency_use": {
          "R071": "Hướng dẫn chữ đã khóa cung cấp các thao tác thật để chuyển thành bài thực hành và phiếu làm lại."
        }
      }
    },
    {
      "id": "R092",
      "package": "SD21",
      "title": "Tập quy trình hỗ trợ nội bộ",
      "status": "PLANNED",
      "minutes": {
        "SUPPORT": 120
      },
      "ai_runs": 0,
      "deps": [
        "R091",
        "R066"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/DAO_TAO_VA_HO_TRO.md",
      "steps": "Đọc kịch bản; thử dữ liệu giả; chuyển lỗi kỹ thuật/y khoa",
      "done_when": "Có người nhận và giờ hỗ trợ thực; không tư vấn thay CVYK",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Tập quy trình hỗ trợ nội bộ",
          "instructions": "Đọc kịch bản; thử dữ liệu giả; chuyển lỗi kỹ thuật/y khoa. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Dùng dữ liệu giả để kiểm người nhận tự làm lại. Ghi lỗi thao tác và sửa hướng dẫn trước buổi được phép.",
          "output": "community/DAO_TAO_VA_HO_TRO.md — Phần R092: Tập quy trình hỗ trợ nội bộ",
          "done_when": "Có người nhận và giờ hỗ trợ thực; không tư vấn thay CVYK",
          "minutes": {
            "SUPPORT": 120
          },
          "ai_runs": 0,
          "id": "R092.01"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nội dung hướng dẫn, chưa coi là đã đào tạo. Bổ sung bài thực hành, người hỗ trợ, giới hạn, cách dừng và bằng chứng làm lại đúng.",
      "reader_notes": {
        "purpose": "Người hỗ trợ cần biết lúc nào xử lý kỹ thuật và lúc nào chuyển câu hỏi y khoa. Tập nội bộ giúp tìm thiếu sót trước khi hỗ trợ người dùng.",
        "acceptance_checks": [
          "Có kết quả tập kịch bản bằng dữ liệu giả.",
          "Có người nhận và giờ hỗ trợ thực.",
          "Lỗi được chuyển đúng vai; không tư vấn thay CVYK."
        ],
        "dependency_use": {
          "R091": "Phiếu tác vụ và quy trình hỗ trợ cung cấp tình huống để người hỗ trợ thực hành.",
          "R066": "Sổ tay sự cố cho biết cách nhận lỗi, chuyển xử lý và giới hạn thao tác hỗ trợ."
        }
      }
    },
    {
      "id": "R093",
      "package": "SD21",
      "title": "Đào tạo người vận hành và kiểm làm lại",
      "status": "PLANNED",
      "minutes": {
        "OPS": 180
      },
      "ai_runs": 0,
      "deps": [
        "R074",
        "R066"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/DAO_TAO_VA_HO_TRO.md",
      "steps": "Người nhận tự kiểm, dừng, phục hồi tình huống giả; ghi kết quả",
      "done_when": "Có người thực hiện độc lập theo sổ tay",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "OPS tự thực hành vận hành",
          "instructions": "OPS dùng hướng dẫn kiểm trạng thái, đọc log và dừng dịch vụ trong môi trường được phép. Ghi thiếu sót; không nhờ người viết làm hộ.",
          "output": "community/DAO_TAO_VA_HO_TRO.md — Phiếu kiểm thao tác vận hành",
          "done_when": "Có bằng chứng OPS tự làm và biết giới hạn quyền.",
          "minutes": {
            "OPS": 90
          },
          "ai_runs": 0,
          "id": "R093.01"
        },
        {
          "title": "OPS tự thực hành phục hồi",
          "instructions": "Dùng dữ liệu giả để thử phục hồi và lỗi theo hướng dẫn. Ghi thời gian, kết quả và yêu cầu sửa tài liệu.",
          "output": "community/DAO_TAO_VA_HO_TRO.md — Biên bản kiểm làm lại phục hồi",
          "done_when": "Không dùng dữ liệu thật chưa được quyền; lỗi tài liệu có người nhận.",
          "minutes": {
            "OPS": 90
          },
          "ai_runs": 0,
          "id": "R093.02"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nội dung hướng dẫn, chưa coi là đã đào tạo. Bổ sung bài thực hành, người hỗ trợ, giới hạn, cách dừng và bằng chứng làm lại đúng.",
      "reader_notes": {
        "purpose": "Tài liệu vận hành chỉ hữu ích khi người nhận tự làm theo được. Kiểm làm lại giúp phát hiện hướng dẫn thiếu trước khi bàn giao.",
        "acceptance_checks": [
          "Người nhận tự kiểm, dừng và phục hồi tình huống giả.",
          "Có kết quả thực hiện độc lập theo sổ tay.",
          "Thiếu sót hoặc lỗi thao tác được ghi lại."
        ],
        "dependency_use": {
          "R074": "Kết quả cài độc lập cung cấp bộ hướng dẫn và cấu hình để người vận hành thực hành làm lại.",
          "R066": "Sổ tay sự cố cung cấp trình tự kiểm, dừng và phục hồi cho buổi đào tạo."
        }
      }
    },
    {
      "id": "GC",
      "package": "SD23",
      "title": "Phiên xét GC cho nghiên cứu chữ",
      "status": "PLANNED",
      "minutes": {
        "AUTH": 180
      },
      "ai_runs": 0,
      "deps": [
        "GB-R",
        "R090",
        "R092",
        "R093"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Bên có thẩm quyền xét hồ sơ đúng phiên bản; ghi phạm vi, thời hạn và điều kiện",
      "done_when": "Có văn bản thật trước tuyển; thời gian chờ 5 ngày chỉ là giả định",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 5,
      "work_steps": [
        {
          "title": "Xem hồ sơ thử chữ",
          "instructions": "Người có thẩm quyền đọc phương pháp, đồng ý, an toàn, dữ liệu và nhân sự. Kiểm phiên bản, đối tượng và điều kiện dừng.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu xét hồ sơ GC",
          "done_when": "Hồ sơ thiếu phải bổ sung; kế hoạch không thay giấy phép.",
          "minutes": {
            "AUTH": 90
          },
          "ai_runs": 0,
          "id": "GC.01"
        },
        {
          "title": "Ghi quyết định GC thực",
          "instructions": "Ghi phạm vi, thời hạn, điều kiện và người ký quyết định thực. Nêu điều kiện mở lại xét duyệt; chỉ bàn giao khi có bằng chứng.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Quyết định GC hoặc yêu cầu bổ sung",
          "done_when": "GC chữ không cho phép camera; không tự coi thời gian chờ là đã duyệt.",
          "minutes": {
            "AUTH": 90
          },
          "ai_runs": 0,
          "id": "GC.02"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Thử với người cần quyết định thật cho đúng sản phẩm và hoạt động. Hồ sơ kỹ thuật đạt chưa tự cho phép tuyển người.",
        "acceptance_checks": [
          "Hồ sơ được xét đúng phiên bản, phạm vi, thời hạn và điều kiện.",
          "Có văn bản thật trước tuyển người.",
          "Năm ngày chờ chỉ là giả định lịch, không phải bằng chứng đã duyệt."
        ],
        "dependency_use": {
          "GB-R": "Kết luận kỹ thuật sau sửa cho biết bản chữ nào được đưa vào hồ sơ xin phép thử.",
          "R090": "Nhận xét an toàn xác định hoạt động chữ và điều kiện dừng phải đưa vào quyết định.",
          "R092": "Kết quả tập hỗ trợ chứng minh người nhận và cách hỗ trợ đã được chuẩn bị.",
          "R093": "Kết quả kiểm làm lại vận hành cung cấp bằng chứng người phụ trách có thể xử lý tình huống theo sổ tay."
        }
      }
    },
    {
      "id": "R094",
      "package": "SD23",
      "title": "Tuyển và giải thích đồng ý đúng phạm vi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 180
      },
      "ai_runs": 0,
      "deps": [
        "GC"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Liên hệ sau phép; dùng tiêu chí duyệt; xếp lượt, nghỉ và quyền rút",
      "done_when": "Không tính người từ chối vào mẫu đã đo",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Liên hệ theo tiêu chí được phép",
          "instructions": "Sau GC hợp lệ, dùng tiêu chí và cách liên hệ được phép. Ghi tối thiểu số liên hệ, đủ điều kiện, từ chối hoặc chờ.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Nhật ký tuyển đúng phạm vi",
          "done_when": "Không liên hệ trước quyền cần thiết; từ chối không là lượt đo.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "R094.01"
        },
        {
          "title": "Giải thích đồng ý và xác nhận lịch",
          "instructions": "Giải thích tác vụ, nghỉ, dừng, rút và dữ liệu. Kiểm hiểu biết theo hồ sơ; xác nhận lịch chỉ khi đủ điều kiện.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Bằng chứng đồng ý và lịch dự kiến",
          "done_when": "Người hỗ trợ không đồng ý thay nếu thiếu thẩm quyền.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "R094.02"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Người tham gia cần được giải thích và tự quyết định trong phạm vi đã cho phép. Tuyển đúng tiêu chí giúp tránh mời người ngoài thiết kế nghiên cứu.",
        "acceptance_checks": [
          "Chỉ tuyển sau quyết định phù hợp.",
          "Có giải thích đồng ý và bằng chứng thật theo phạm vi.",
          "Người từ chối hoặc chưa đủ điều kiện không được tính thành lượt thử."
        ],
        "dependency_use": {
          "GC": "Quyết định GC xác định đối tượng, hoạt động và điều kiện được phép dùng khi tuyển và giải thích đồng ý."
        }
      }
    },
    {
      "id": "R095",
      "package": "SD23",
      "title": "Điều phối lịch thử chữ",
      "status": "PLANNED",
      "minutes": {
        "SUPPORT": 120
      },
      "ai_runs": 0,
      "deps": [
        "R094"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Xác nhận thời gian, phương tiện, hỗ trợ; giải thích kênh hỏi",
      "done_when": "Không thay người tham gia đồng ý; không thu dữ liệu trước phép",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Điều phối lịch thử chữ",
          "instructions": "Xác nhận thời gian, phương tiện, hỗ trợ; giải thích kênh hỏi. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần R095: Điều phối lịch thử chữ",
          "done_when": "Không thay người tham gia đồng ý; không thu dữ liệu trước phép",
          "minutes": {
            "SUPPORT": 120
          },
          "ai_runs": 0,
          "id": "R095.01"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Người tham gia cần biết thời gian, cách tới và nơi hỏi hỗ trợ. Điều phối tốt giúp buổi thử diễn ra đúng điều kiện đã giải thích.",
        "acceptance_checks": [
          "Thời gian, phương tiện và hỗ trợ được xác nhận.",
          "Người tham gia biết kênh hỏi.",
          "Không đồng ý thay hoặc thu dữ liệu trước phép."
        ],
        "dependency_use": {
          "R094": "Kết quả tuyển và giải thích đồng ý cho biết người đủ điều kiện để điều phối lịch phù hợp."
        }
      }
    },
    {
      "id": "PILOT-CORE",
      "package": "SD23",
      "title": "Thực hiện tối đa 10 lượt chữ theo kịch bản dự toán",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 600,
        "SUPPORT": 600,
        "PART_CORE": 600
      },
      "ai_runs": 0,
      "deps": [
        "R095"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Mỗi lượt 60 phút gồm đồng ý, tác vụ, nghỉ và phản hồi; ghi thiếu/rút/sự cố; bố trí cơ cấu NCT/người chăm sóc theo phương pháp được duyệt",
      "done_when": "Chỉ tính hoạt động thực; cỡ mẫu phải được duyệt trước; không suy hiệu quả điều trị",
      "condition": "GC thật và đúng phiên bản; tối đa một lượt/ngày. Tổng 10 lượt là giả định kế hoạch; số người và lượt lặp phải được duyệt, chưa tuyển.",
      "joint": true,
      "session_minutes": 60,
      "work_steps": [
        {
          "title": "Phiên dự toán 1/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 01; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.01"
        },
        {
          "title": "Phiên dự toán 2/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 02; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.02"
        },
        {
          "title": "Phiên dự toán 3/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 03; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.03"
        },
        {
          "title": "Phiên dự toán 4/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 04; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.04"
        },
        {
          "title": "Phiên dự toán 5/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 05; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.05"
        },
        {
          "title": "Phiên dự toán 6/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 06; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.06"
        },
        {
          "title": "Phiên dự toán 7/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 07; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.07"
        },
        {
          "title": "Phiên dự toán 8/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 08; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.08"
        },
        {
          "title": "Phiên dự toán 9/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 09; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.09"
        },
        {
          "title": "Phiên dự toán 10/10: thử tác vụ chữ",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phiếu phiên dự toán 10; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS1": 60,
            "SUPPORT": 60,
            "PART_CORE": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS1": "Kiểm GC, đồng ý và phiên bản. Điều phối tác vụ chữ; ghi thao tác, phản hồi, dữ liệu thiếu và sự cố.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CORE": "Thực hiện tác vụ chữ đã được phép theo vai người tham gia. Nêu khó khăn; có quyền nghỉ, dừng hoặc rút theo hồ sơ."
          },
          "id": "PILOT-CORE.10"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Nhóm cần quan sát người dùng làm tác vụ chữ để biết khó khăn thực tế. Hoạt động chỉ diễn ra trong phạm vi đã phép và tự nguyện.",
        "acceptance_checks": [
          "Chỉ ghi hoạt động thực trong phạm vi, cỡ mẫu đã được duyệt.",
          "Có ghi dữ liệu thiếu, rút, dừng và sự cố; không ép đủ 10 người hoặc 10 lượt.",
          "Cơ cấu người cao tuổi và người chăm sóc bám phương pháp được duyệt.",
          "Không suy hiệu quả điều trị từ kết quả sử dụng."
        ],
        "dependency_use": {
          "R095": "Lịch, phương tiện và hỗ trợ đã xác nhận giúp tổ chức các lượt thử đúng điều kiện tham gia."
        }
      }
    },
    {
      "id": "R096",
      "package": "SD02",
      "title": "NCS tổng hợp nhu cầu từ hoạt động thực",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 180
      },
      "ai_runs": 0,
      "deps": [
        "PILOT-CORE"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md",
      "steps": "Đọc dữ liệu hợp lệ; đối chiếu giả thuyết ban đầu; ghi thay đổi yêu cầu",
      "done_when": "Phân biệt quan sát với suy luận; không dùng người dùng giả",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đọc dữ liệu nhu cầu hợp lệ",
          "instructions": "Kiểm đồng ý, dữ liệu thiếu và rút lui. Đọc phản hồi theo vai NCT/người chăm sóc.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Đọc dữ liệu nhu cầu hợp lệ",
          "done_when": "Không dùng dữ liệu ngoài quyền hoặc bù kết quả bằng AI.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R096.01"
        },
        {
          "title": "Đối chiếu giả thuyết ban đầu",
          "instructions": "So luồng tác vụ đề xuất với hành vi đã ghi. Tách điều quan sát được khỏi suy luận của NCS.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Đối chiếu giả thuyết ban đầu",
          "done_when": "Mỗi nhận định có dữ liệu hoặc ghi là giả thuyết.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R096.02"
        },
        {
          "title": "Đề xuất sửa yêu cầu và hướng dẫn",
          "instructions": "Liệt kê khó khăn theo tác vụ; đánh dấu ảnh hưởng UI, hỗ trợ và phạm vi. Gửi đầu vào cho R097/R099.",
          "output": "user-research/LUONG_TAC_VU_VA_NHU_CAU.md — Đề xuất sửa yêu cầu và hướng dẫn",
          "done_when": "Không mở rộng chức năng âm thầm sau nghiên cứu.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R096.03"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/research/instruments/W1_D04_ExpertInterviewGuide_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/project/intended_use.md"
      ],
      "resume_note": "Kế thừa công cụ nhu cầu và mẫu đồng ý dự thảo. Bổ sung luồng chữ/camera, review câu hỏi và điều kiện dùng với người.",
      "reader_notes": {
        "purpose": "Quan sát từ hoạt động thực giúp NCS kiểm lại giả thuyết nhu cầu thay vì tiếp tục dựa vào suy đoán ban đầu.",
        "acceptance_checks": [
          "Bảng tổng hợp dẫn tới dữ liệu hợp lệ và tách quan sát trực tiếp khỏi suy luận.",
          "Thay đổi yêu cầu có căn cứ; không dùng người dùng giả hoặc bổ sung trải nghiệm bằng AI."
        ],
        "dependency_use": {
          "PILOT-CORE": "Phiếu tác vụ, phản hồi và diễn biến thực của các lượt được phép cung cấp dữ liệu để NCS đối chiếu nhu cầu."
        }
      }
    },
    {
      "id": "R097",
      "package": "SD19",
      "title": "Sửa hướng dẫn theo khó khăn đã quan sát",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "R096"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "steps": "Sửa câu và hình; kiểm lại tác vụ có lỗi",
      "done_when": "Thay đổi lớn phải mở lại kiểm tương ứng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa hướng dẫn theo khó khăn đã quan sát",
          "instructions": "Sửa câu và hình; kiểm lại tác vụ có lỗi. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Phần R097: Sửa hướng dẫn theo khó khăn đã quan sát",
          "done_when": "Thay đổi lớn phải mở lại kiểm tương ứng",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R097.01"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review.",
      "reader_notes": {
        "purpose": "Khó khăn quan sát được cho biết hướng dẫn còn chỗ chưa rõ. Cần sửa đúng câu, hình và thao tác gây lỗi rồi kiểm lại.",
        "acceptance_checks": [
          "Câu và hình được sửa theo khó khăn đã ghi nhận.",
          "Tác vụ từng có lỗi được kiểm lại.",
          "Thay đổi lớn mở lại kiểm tương ứng."
        ],
        "dependency_use": {
          "R096": "Tổng hợp nhu cầu từ hoạt động thật xác định điểm nào trong hướng dẫn cần sửa và kiểm lại."
        }
      }
    },
    {
      "id": "R098",
      "package": "SD23",
      "title": "Khóa tập dữ liệu chữ đúng quyền",
      "status": "PLANNED",
      "minutes": {
        "DATA": 120
      },
      "ai_runs": 0,
      "deps": [
        "PILOT-CORE"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md",
      "steps": "Đối chiếu đồng ý, ID, dữ liệu thiếu/rút; lưu bản kê",
      "done_when": "Có dữ liệu thật và nhật ký; không điền dữ liệu thiếu bằng AI",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Khóa tập dữ liệu chữ đúng quyền",
          "instructions": "Đối chiếu đồng ý, ID, dữ liệu thiếu/rút; lưu bản kê. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "user-research/QUY_TRINH_THU_NGHIEM_GIOI_HAN.md — Phần R098: Khóa tập dữ liệu chữ đúng quyền",
          "done_when": "Có dữ liệu thật và nhật ký; không điền dữ liệu thiếu bằng AI",
          "minutes": {
            "DATA": 120
          },
          "ai_runs": 0,
          "id": "R098.01"
        }
      ],
      "source_paths": [
        "docs/research/instruments/W1_D04_OlderAdultSurvey_v0.1.md",
        "docs/legal/W1_D04_ConsentForm_DRAFT.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa công cụ và mẫu đồng ý nháp. NCS tự hoàn thiện phương pháp; xin phép, tuyển, thu và giữ dữ liệu chỉ sau điều kiện tương ứng.",
      "reader_notes": {
        "purpose": "Phân tích phải dùng tập dữ liệu đúng đồng ý và truy vết được. Khóa tập giúp giữ rõ các lượt thiếu hoặc rút thay vì lấp bằng suy đoán.",
        "acceptance_checks": [
          "ID và đồng ý được đối chiếu với dữ liệu thật.",
          "Dữ liệu thiếu hoặc rút được giữ trong bản kê theo quyền xử lý.",
          "Có nhật ký và không điền dữ liệu thiếu bằng AI."
        ],
        "dependency_use": {
          "PILOT-CORE": "Phiếu và dữ liệu hoạt động chữ cung cấp bằng chứng thực để đối chiếu quyền, ID và khóa tập phân tích."
        }
      }
    },
    {
      "id": "R099",
      "package": "SD24",
      "title": "NCS tự phân tích và viết kết quả chữ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 600
      },
      "ai_runs": 0,
      "deps": [
        "R098",
        "R096"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Dùng phương pháp đã khóa; báo sai số/giới hạn; giữ bản đầu và lệnh tính",
      "done_when": "NCS tự lập luận, không biến kết quả thử nhỏ thành hiệu quả điều trị",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS kiểm dữ liệu trước phân tích",
          "instructions": "Đối chiếu bản kê, ID, đồng ý, dữ liệu thiếu và phiên bản đã thử. Ghi quy tắc loại hoặc giữ theo phương pháp.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS kiểm dữ liệu trước phân tích",
          "done_when": "Có tập dữ liệu hợp lệ và lý do xử lý từng trường hợp.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R099.01"
        },
        {
          "title": "NCS thực hiện phép tính đã khóa",
          "instructions": "Chạy công cụ tính; kiểm lại mẫu số, lỗi, trợ giúp và các lượt chưa hoàn thành. Giữ lệnh tính.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS thực hiện phép tính đã khóa",
          "done_when": "Kết quả tái lập được; không đổi phương pháp theo số đẹp.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R099.02"
        },
        {
          "title": "NCS lập bảng kết quả và sai khác",
          "instructions": "Tách kết quả theo tác vụ hoặc nhóm đã định. Ghi sai số, dữ liệu thiếu và phản hồi không thuận lợi.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS lập bảng kết quả và sai khác",
          "done_when": "Không nhân số nhiệm vụ thành số người độc lập.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R099.03"
        },
        {
          "title": "NCS tự viết phân tích và giới hạn",
          "instructions": "Giải thích kết quả trong phạm vi đã nghiên cứu. Nêu hạn chế mẫu nhỏ và khác biệt giữa khả dụng với hiệu quả sức khỏe.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS tự viết phân tích và giới hạn",
          "done_when": "Không kết luận hiệu quả điều trị từ thử nghiệm này.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R099.04"
        },
        {
          "title": "NCS kiểm bản đầu trước gửi GVHD",
          "instructions": "Đối chiếu mọi số với dữ liệu; kiểm nguồn, hình và hồ sơ AI. Giữ bản đầu và bản sửa riêng.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS kiểm bản đầu trước gửi GVHD",
          "done_when": "GVHD nhận được dữ liệu, lệnh tính, bản đầu và các câu hỏi cần review.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R099.05"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "NCS cần tự phân tích dữ liệu và viết lập luận để kết quả nghiên cứu có nguồn gốc rõ và có thể giải thích.",
        "acceptance_checks": [
          "Bản đầu, lệnh tính và dữ liệu đầu vào được giữ để đối chiếu lại.",
          "Phân tích theo phương pháp đã khóa, báo sai số/giới hạn; không suy thử nhỏ thành hiệu quả điều trị."
        ],
        "dependency_use": {
          "R098": "Tập dữ liệu đã khóa đúng quyền cung cấp số liệu được phép phân tích, gồm phần thiếu hoặc rút lui.",
          "R096": "Bảng nhu cầu thực và thay đổi yêu cầu giúp NCS giải thích quan sát trong bối cảnh sử dụng."
        }
      }
    },
    {
      "id": "R100",
      "package": "SD24",
      "title": "Review phương pháp và bản đầu chữ",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 120
      },
      "ai_runs": 0,
      "deps": [
        "R099"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Đối chiếu số liệu, giới hạn, nguồn và hồ sơ AI",
      "done_when": "Không viết kết luận thay NCS",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review phương pháp và dữ liệu chữ",
          "instructions": "So báo cáo với phương pháp khóa, dữ liệu thiếu và phép tính. Ghi nhận xét gắn từng bảng hoặc kết luận.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Review phương pháp và dữ liệu chữ",
          "done_when": "Nhận xét đủ vị trí và lý do để NCS tự xử lý.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R100.01"
        },
        {
          "title": "Review giới hạn và nguồn gốc bản đầu",
          "instructions": "Đọc hồ sơ AI, nguồn và các giới hạn. Trả phản hồi; không viết lại kết luận thay NCS.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Review giới hạn và nguồn gốc bản đầu",
          "done_when": "Không hợp thức hóa số liệu hoặc bản đầu chưa có bằng chứng.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R100.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Review bản đầu giúp NCS phát hiện sai lệch giữa dữ liệu, phương pháp và điều mình kết luận.",
        "acceptance_checks": [
          "Nhận xét chỉ rõ số liệu, nguồn, giới hạn và hồ sơ AI cần kiểm hoặc sửa.",
          "Bản đầu NCS được giữ; GVHD góp ý mà không viết kết luận thay NCS."
        ],
        "dependency_use": {
          "R099": "Bản phân tích, lệnh tính và bản đầu của NCS cung cấp nội dung cụ thể để review phương pháp."
        }
      }
    },
    {
      "id": "R101",
      "package": "SD15",
      "title": "Sửa lỗi sau thử chữ và dựng bản bàn giao",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R100",
        "R097"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Ưu tiên lỗi chặn; review nội dung cần thiết; chạy lại kiểm bị ảnh hưởng",
      "done_when": "Đổi phương pháp/phạm vi phải mở lại cổng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu lỗi sau thử chữ và tác động cổng",
          "instructions": "Đọc R100/R097, phân loại lỗi chặn, nội dung và phương pháp. Ghi phạm vi sửa; nếu đổi phương pháp/phạm vi, chuyển yêu cầu mở lại cổng trước tiếp tục.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Danh sách lỗi sau thử và phạm vi sửa",
          "done_when": "Không tự mở rộng hoạt động hoặc dùng ngày lịch làm quyền.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R101.01"
        },
        {
          "title": "Sửa mã được giao và chuẩn bị nội dung cần review",
          "instructions": "Sửa lỗi kỹ thuật ưu tiên, thêm ca tái hiện. Tách nội dung cần CVYK review; không tự sửa APPROVED hoặc nhận phản hồi người dùng thành kết luận y khoa.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Mã sửa và danh sách nội dung xét lại",
          "done_when": "Mỗi sửa có ID lỗi, ca kiểm và người chịu trách nhiệm.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R101.02"
        },
        {
          "title": "Dựng bản bàn giao chữ và kiểm hồi quy",
          "instructions": "Chạy ca bị ảnh hưởng, ghi bản gói/cấu hình và lỗi còn mở. Chuẩn bị hồ sơ cho R123 và R102; chỉ ghép nội dung đúng quyền.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Ứng viên bàn giao chữ sau sửa",
          "done_when": "Bản mới có bằng chứng riêng; chưa tự chấp thuận bàn giao.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R101.03"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Sửa sau thử chữ giúp gói bàn giao xử lý các lỗi đã quan sát mà không âm thầm đổi phạm vi nghiên cứu.",
        "acceptance_checks": [
          "Lỗi sau thử có bản sửa đúng thẩm quyền và ca kiểm bị ảnh hưởng, kèm phiên bản gói mới.",
          "Thay đổi phương pháp/phạm vi được chuyển xét mở lại cổng; nội dung chuyên môn cần review vẫn được tách riêng."
        ],
        "dependency_use": {
          "R100": "Nhận xét phương pháp và bản đầu giúp phân biệt lỗi sản phẩm với thay đổi có thể ảnh hưởng phương pháp nghiên cứu.",
          "R097": "Hướng dẫn đã sửa từ khó khăn thực giúp NCS xác định tác vụ và nội dung giao diện cần đồng bộ với mã."
        }
      }
    },
    {
      "id": "R102",
      "package": "SD15",
      "title": "Kiểm bản chữ sau sửa",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 180
      },
      "ai_runs": 0,
      "deps": [
        "R101",
        "R123"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Đối chiếu gói với GB và ca hồi quy",
      "done_when": "Bản giao có chứng cứ, không lấy kết quả bản cũ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm bản chữ mới so với hồ sơ GB",
          "instructions": "Nhận gói sau R101/R123, kiểm mã băm, cấu hình, nội dung và phạm vi cổng. Đối chiếu những thay đổi có thể làm bằng chứng cũ không còn phù hợp.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Phiếu kiểm gói chữ sau thử",
          "done_when": "Không lấy biên bản của bản trước làm phê duyệt bản mới.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R102.01"
        },
        {
          "title": "Chạy hồi quy và kết luận kỹ thuật bản giao",
          "instructions": "Chạy các ca liên quan lỗi sau thử và thành phần bị ảnh hưởng. Ghi kết quả, giới hạn và lỗi mở; bàn giao hồ sơ đúng phiên bản để xét tiếp.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Biên bản kiểm bản chữ sau sửa",
          "done_when": "Không nhận bản giao có chứng cứ khi thiếu phép kiểm hoặc còn lỗi chặn.",
          "minutes": {
            "REVIEW_TECH": 90
          },
          "ai_runs": 0,
          "id": "R102.02"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Bản chữ sau sửa cần bằng chứng riêng trước khi được nhận bàn giao, vì kết quả của bản trước không tự chuyển sang bản mới.",
        "acceptance_checks": [
          "Mã băm/phiên bản gói khớp hồ sơ GB và phạm vi các thay đổi đã xét.",
          "Ca hồi quy có kết quả trên bản mới; lỗi chặn và phần chưa kiểm được ghi rõ."
        ],
        "dependency_use": {
          "R101": "Ứng viên chữ sau sửa và danh sách thay đổi cung cấp gói để kiểm nhận kỹ thuật.",
          "R123": "Review chuyên môn sau thử xác định nội dung/hướng dẫn nào đã được xét đúng phiên bản để kiểm cùng gói."
        }
      }
    },
    {
      "id": "R103",
      "package": "SD24",
      "title": "Nhận gói chữ và tài liệu vận hành",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "R102"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Kiểm hash, khóa, nơi lưu, cài/phục hồi và người hỗ trợ",
      "done_when": "Người nhận xác nhận có thể vận hành trong phạm vi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm gói chữ được bàn giao",
          "instructions": "So hash, phiên bản, cấu hình và danh mục tài liệu. Kiểm đường dẫn gói và nơi giữ thông tin truy cập.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm gói chữ được bàn giao",
          "done_when": "Gói khớp biên bản; không đưa bí mật vào báo cáo.",
          "minutes": {
            "OPS": 60
          },
          "ai_runs": 0,
          "id": "R103.01"
        },
        {
          "title": "Xác nhận khả năng vận hành chữ",
          "instructions": "Đối chiếu biên bản cài/phục hồi, đầu mối hỗ trợ và quyền. Ghi phần nhận hoặc yêu cầu bổ sung.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Xác nhận khả năng vận hành chữ",
          "done_when": "Người nhận thật xác nhận phạm vi có thể vận hành.",
          "minutes": {
            "OPS": 60
          },
          "ai_runs": 0,
          "id": "R103.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Người nhận vận hành cần hiểu gói, quyền và cách phục hồi để có thể tiếp quản sản phẩm chữ thực tế.",
        "acceptance_checks": [
          "Biên bản nhận đối chiếu mã băm, cấu hình, nơi lưu, khóa theo quyền và tài liệu cài/phục hồi.",
          "Người nhận xác nhận khả năng vận hành cùng đầu mối hỗ trợ hoặc ghi phần chưa thể nhận."
        ],
        "dependency_use": {
          "R102": "Gói chữ đã được kiểm trên bản sửa cùng bằng chứng cung cấp phiên bản để người vận hành kiểm nhận."
        }
      }
    },
    {
      "id": "GD-CORE",
      "package": "SD24",
      "title": "Phiên nghiệm thu sản phẩm chữ",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R103",
        "R100",
        "R078",
        "CORE-REV"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Tổng hợp quyết định chuyên môn, quyền và người nhận; ghi phạm vi phát hành",
      "done_when": "Ngày chỉ là kịch bản; không tự xuất bản hoặc gửi thông báo",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Phiên nghiệm thu sản phẩm chữ",
          "instructions": "Tổng hợp quyết định chuyên môn, quyền và người nhận; ghi phạm vi phát hành.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Phiên nghiệm thu sản phẩm chữ",
          "done_when": "Ngày chỉ là kịch bản; không tự xuất bản hoặc gửi thông báo.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "GD-CORE.01"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Nghiệm thu riêng nhánh chữ giúp xác định phạm vi bàn giao có thể thực hiện khi camera chưa sẵn sàng.",
        "acceptance_checks": [
          "Hồ sơ gom quyết định chuyên môn, quyền, lỗi và người nhận của đúng gói chữ.",
          "Quyết định thực ghi phạm vi được nhận hoặc phần phải chờ; ngày dự kiến không tự cho xuất bản/gửi thông báo."
        ],
        "dependency_use": {
          "R103": "Biên bản nhận gói của người vận hành cho biết khả năng tiếp quản và tồn đọng thực tế.",
          "R100": "Review phương pháp cung cấp nhận xét học thuật cần đối chiếu khi nghiệm thu sản phẩm nghiên cứu chữ.",
          "R078": "Kết quả diễn tập cập nhật/thu hồi/ngừng cung cấp điều kiện quản lý sản phẩm sau bàn giao.",
          "CORE-REV": "Review hồ sơ chữ độc lập xác nhận phần hồ sơ có thể xét mà không chờ cổng camera."
        }
      }
    },
    {
      "id": "C01",
      "package": "SD08",
      "title": "CAM-Y: hoàn thiện gói nguồn và đề xuất một chỉ số",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 480
      },
      "ai_runs": 0,
      "deps": [
        "R031",
        "R021"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Đọc thư viện chuẩn; định vị quy trình; đánh dấu khoảng trống; đề xuất nguồn bổ sung qua review",
      "done_when": "CYK-S/P/K/A/T có bản kê; chưa chọn chỉ số bằng ý thích kỹ thuật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Rà căn cứ có sẵn cho ứng viên",
          "instructions": "Đọc ma trận CYK và nguồn đã trích. Chọn một ứng viên để đề xuất, ghi điều chưa biết. Tái sử dụng đọc nền và thẻ hiện có.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — CYK-S: nguồn hiện có và khoảng trống",
          "done_when": "Chọn ứng viên không đồng nghĩa phê duyệt protocol.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C01.01"
        },
        {
          "title": "Đối chiếu căn cứ phép đo",
          "instructions": "Tìm trang hoặc mục về đối tượng, quy trình, giới hạn và chuẩn đối chiếu. Tách bài kỹ thuật camera khỏi nguồn quy trình lâm sàng.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — CYK-S/P: locator và căn cứ quy trình",
          "done_when": "Không suy protocol từ bài tập chung hoặc chỉ từ bài camera.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C01.02"
        },
        {
          "title": "Lập khoảng trống nội dung và quyền",
          "instructions": "Nối lời giải thích với thẻ hoặc nguồn đã xét. Ghi quyền, mâu thuẫn và câu hỏi cần CVYK hoặc LEGAL.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — CYK-K/A: nội dung, quyền và câu hỏi",
          "done_when": "Chỉ số không là thẻ; kiến thức và lời giải thích vẫn cần căn cứ đã xét.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C01.03"
        },
        {
          "title": "Bàn giao đề xuất một chỉ số",
          "instructions": "Lập gói nguồn, protocol dự kiến, đầu ra kỹ thuật và tiêu chí bằng chứng. Nêu điều kiện không triển khai; gửi đúng vai review.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Gói CYK-S/P/K/A/T",
          "done_when": "Nguồn và phiên bản truy vết được; không tạo approval giả.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C01.04"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Một chỉ số camera phải xuất phát từ nguồn và quy trình đo phù hợp. Việc này giúp tránh chọn tính năng chỉ vì dễ viết mã.",
        "acceptance_checks": [
          "Có bản kê nguồn, quy trình, nội dung, quyền và kiểm thử theo CYK-S/P/K/A/T.",
          "Nguồn được định vị tới trang hoặc mục; khoảng trống được ghi rõ.",
          "Nguồn bổ sung đi qua review trước sử dụng."
        ],
        "dependency_use": {
          "R031": "Đối chiếu lô đầu cho biết kiến thức dùng chung đã có và phần CAM-Y còn phải bổ sung.",
          "R021": "Danh mục nguồn camera xác định quy trình nào đã có căn cứ và câu hỏi nào cần đọc thêm."
        }
      }
    },
    {
      "id": "C02",
      "package": "SD08",
      "title": "Kiểm quyền nguồn và dữ liệu camera còn thiếu",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 120
      },
      "ai_runs": 0,
      "deps": [
        "C01",
        "Q03",
        "C-SRC02"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Xác minh riêng nguồn bổ sung; ghi quyền theo thao tác",
      "done_when": "Không coi nguồn công khai là quyền huấn luyện hoặc phân phối",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm quyền nguồn và dữ liệu camera còn thiếu",
          "instructions": "Xác minh riêng nguồn bổ sung; ghi quyền theo thao tác. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C02: Kiểm quyền nguồn và dữ liệu camera còn thiếu",
          "done_when": "Không coi nguồn công khai là quyền huấn luyện hoặc phân phối",
          "minutes": {
            "LEGAL": 120
          },
          "ai_runs": 0,
          "id": "C02.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Nguồn bổ sung cho camera có thể có điều kiện sử dụng khác thư viện chung. Cần kiểm từng thao tác trước khi đưa vào phép đo hoặc sản phẩm.",
        "acceptance_checks": [
          "Nguồn bổ sung có kết quả xác minh quyền riêng.",
          "Quyền được ghi theo từng thao tác sử dụng.",
          "Nguồn công khai không bị coi là quyền huấn luyện hoặc phân phối."
        ],
        "dependency_use": {
          "C01": "Gói đề xuất chỉ số chỉ ra nguồn bổ sung và thao tác cần xác minh quyền.",
          "Q03": "Quyết định quyền chung cho biết phần đã được phép và phần camera còn phải xét riêng.",
          "C-SRC02": "Danh mục nguồn tìm bổ sung và nhật ký sàng lọc xác định quyền phải kiểm trước tải hoặc OCR."
        }
      }
    },
    {
      "id": "C03",
      "package": "SD08",
      "title": "CAM-Y: xét căn cứ và phạm vi một chỉ số",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "C02",
        "C-SRC04"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Đọc nguồn; xét đối tượng, cờ đỏ, điều kiện dừng và chuẩn đo",
      "done_when": "Có căn cứ đủ cho protocol; nếu thiếu thì giữ camera chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và đối tượng ứng viên",
          "instructions": "CVYK đọc nguồn gốc và C01. Kiểm đối tượng, bối cảnh và giới hạn. Ghi phần đủ hoặc cần bổ sung.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Nhận xét căn cứ và phạm vi",
          "done_when": "Căn cứ chưa đủ thì ứng viên vẫn chờ.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "C03.01"
        },
        {
          "title": "Xét dừng và chuẩn đối chiếu",
          "instructions": "Đối chiếu nguồn cho chống chỉ định, dừng và chuẩn đo. Ghi nhận xét theo phiên bản; yêu cầu sửa khi cần.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Nhận xét an toàn và chuẩn đối chiếu",
          "done_when": "Không đặt ngưỡng mới hoặc cho phép người thật bằng nhận xét kỹ thuật.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "C03.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Có phép đo kỹ thuật chưa đủ để hướng dẫn người dùng thực hiện. CVYK cần xét căn cứ, đối tượng và điều kiện dừng trước thiết kế.",
        "acceptance_checks": [
          "Nguồn, đối tượng, cờ đỏ và điều kiện dừng có nhận xét.",
          "Chuẩn đo có căn cứ cho quy trình đề xuất.",
          "Thiếu căn cứ thì camera tiếp tục bị chặn."
        ],
        "dependency_use": {
          "C02": "Kết quả kiểm quyền xác định nguồn camera được phép đưa vào phiên xét căn cứ chuyên môn.",
          "C-SRC04": "Markdown kiểm chéo đầy đủ và câu hỏi có vị trí để CVYK xét; kiểm chéo không thay review này."
        }
      }
    },
    {
      "id": "C04",
      "package": "SD08",
      "title": "T14a: hoàn thiện quy trình đo và thiết kế",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 480
      },
      "ai_runs": 0,
      "deps": [
        "C03",
        "C-SRC05"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Chốt sự kiện đầu/cuối, thiết bị, không đo được, riêng tư và chuẩn đối chiếu",
      "done_when": "Thiết kế theo nguồn được xét; không thêm chẩn đoán",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đặc tả sự kiện và trình tự đo",
          "instructions": "Từ căn cứ đã xét, viết vị trí, trình tự, bắt đầu và kết thúc một phép đo. Gắn từng bước với nguồn và điều kiện dừng.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Protocol: trình tự và sự kiện",
          "done_when": "Không thêm thao tác lâm sàng khi thiếu nguồn và review.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C04.01"
        },
        {
          "title": "Đặc tả thiết bị và hiệu chỉnh",
          "instructions": "Ghi thiết bị, góc quan sát, chất lượng hình ảnh và cách hiệu chỉnh. Chỉ rõ khi nào không được trả kết quả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Protocol: thiết bị và chất lượng ảnh",
          "done_when": "Điều kiện có cách kiểm; thất bại chuyển sang không đo được.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C04.02"
        },
        {
          "title": "Đặc tả trạng thái và riêng tư",
          "instructions": "Vẽ trạng thái quyền, chuẩn bị, đo, dừng và lỗi. Ghi xử lý tại thiết bị, tài nguyên và cấm lưu ảnh hoặc khung xương.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Thiết kế trạng thái và dữ liệu",
          "done_when": "Dừng hoặc rút quyền phải ngừng xử lý; không truyền video lên máy chủ.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C04.03"
        },
        {
          "title": "Đặc tả kết quả và đối chiếu",
          "instructions": "Nêu cấu trúc chỉ số, đơn vị, phiên bản và dữ liệu thiếu. Mô tả so với chuẩn được xét; chuẩn bị câu hỏi C05–C07.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Hợp đồng kết quả và chuẩn đối chiếu",
          "done_when": "Không suy bệnh hoặc nguy cơ chưa có căn cứ từ chỉ số.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C04.04"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Mã camera cần biết đo từ lúc nào, kết thúc khi nào và khi nào phải từ chối kết quả. Thiết kế này biến căn cứ đã xét thành hành vi kiểm được.",
        "acceptance_checks": [
          "Có sự kiện đầu, cuối và yêu cầu thiết bị.",
          "Có trạng thái không đo được, quy tắc riêng tư và chuẩn đối chiếu.",
          "Thiết kế theo nguồn đã xét, không thêm chẩn đoán."
        ],
        "dependency_use": {
          "C03": "Nhận xét căn cứ và phạm vi chỉ số xác định giới hạn phải giữ khi viết quy trình đo và thiết kế.",
          "C-SRC05": "Bản sửa nguồn camera có mã kiểm tra và lỗi mở; chỉ dùng phần được xét, không tự mở cổng camera."
        }
      }
    },
    {
      "id": "C05",
      "package": "SD08",
      "title": "Kiểm chéo CYK và giao tiếp chữ-camera",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 180
      },
      "ai_runs": 0,
      "deps": [
        "C04"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Nối nguồn/thẻ/phép đo/đầu ra; so hợp đồng dữ liệu và thu hồi",
      "done_when": "Mỗi tính năng có dòng CYK và điều kiện đủ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm nguồn đến kết quả",
          "instructions": "NCS1 đối chiếu CYK với C04. Ghi nguồn, thẻ, trạng thái, phiên bản và phần thiếu cho mỗi nội dung hiển thị.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bảng kiểm truy vết CYK",
          "done_when": "Nội dung chưa xét không xuất hiện như kiến thức được phép.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "C05.01"
        },
        {
          "title": "Kiểm giao tiếp và thu hồi",
          "instructions": "Kiểm chỉ số, nguồn giải thích, lưu dữ liệu và hành vi khi nguồn bị thu hồi. Tách trả lời chữ với phép đo.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Nhận xét giao tiếp và thu hồi",
          "done_when": "Camera bị chặn khi nguồn mất hiệu lực; nhánh chữ có đường độc lập.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "C05.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Kết quả camera phải truy ngược được đến nguồn và quy trình. Kiểm chéo giúp phát hiện nội dung hiển thị hoặc dữ liệu lưu vượt phạm vi.",
        "acceptance_checks": [
          "Nguồn, thẻ, phép đo và đầu ra được nối thành từng dòng CYK.",
          "Hợp đồng dữ liệu và cách thu hồi được đối chiếu.",
          "Mỗi tính năng ghi rõ điều kiện đủ hoặc phần còn thiếu."
        ],
        "dependency_use": {
          "C04": "Thiết kế phép đo cung cấp sự kiện, dữ liệu và đầu ra để kiểm chuỗi truy vết CYK."
        }
      }
    },
    {
      "id": "C06",
      "package": "SD08",
      "title": "Review protocol, nhãn và tiêu chí đo",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "C05"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Xét quy trình, giới hạn và ngưỡng chấp nhận trước đo",
      "done_when": "Quy trình được xét đúng phiên bản, không dùng ngưỡng quốc tế tự động",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét protocol và lời hướng dẫn",
          "instructions": "CVYK đọc trình tự, đối tượng, nhãn và điều kiện dừng. So từng điểm với nguồn; ghi phản hồi theo phiên bản.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Nhận xét protocol và an toàn",
          "done_when": "Quy trình thiếu căn cứ không được tự chấp nhận.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "C06.01"
        },
        {
          "title": "Xét tiêu chí trước thử",
          "instructions": "Kiểm chuẩn đối chiếu, sai số, dữ liệu thiếu và giới hạn. Ghi tiêu chí cần khóa trước thu dữ liệu.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Nhận xét tiêu chí và chuẩn đo",
          "done_when": "Không tự áp ngưỡng lâm sàng quốc tế khi chưa xét phạm vi.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "C06.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Quy trình và tiêu chí chấp nhận phải được xét trước khi có kết quả đo. Điều này tránh thay ngưỡng để hợp thức hóa một kết quả thuận lợi.",
        "acceptance_checks": [
          "Quy trình, nhãn, giới hạn và tiêu chí được xét đúng phiên bản.",
          "Tiêu chí chấp nhận được xác định trước đo.",
          "Không tự áp ngưỡng quốc tế khi chưa xét phạm vi sử dụng."
        ],
        "dependency_use": {
          "C05": "Bảng kiểm CYK chỉ ra nguồn và khoảng trống cần CVYK kiểm khi xét quy trình cùng tiêu chí đo."
        }
      }
    },
    {
      "id": "C07",
      "package": "SD08",
      "title": "Kiểm tính thực hiện được của chuẩn đối chiếu",
      "status": "PLANNED",
      "minutes": {
        "MEASURE": 120
      },
      "ai_runs": 0,
      "deps": [
        "C06"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Rà dụng cụ, cách bấm thời gian, sự kiện và ghi lỗi bằng mô tả",
      "done_when": "Chưa đo người; người kiểm đo có năng lực phù hợp",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm tính thực hiện được của chuẩn đối chiếu",
          "instructions": "Rà dụng cụ, cách bấm thời gian, sự kiện và ghi lỗi bằng mô tả. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C07: Kiểm tính thực hiện được của chuẩn đối chiếu",
          "done_when": "Chưa đo người; người kiểm đo có năng lực phù hợp",
          "minutes": {
            "MEASURE": 120
          },
          "ai_runs": 0,
          "id": "C07.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Chuẩn đối chiếu chỉ hữu ích nếu người kiểm đo hiểu và thực hiện được. Cần rà dụng cụ và sự kiện đo trước khi lập trình thử.",
        "acceptance_checks": [
          "Dụng cụ, cách bấm thời gian và sự kiện được đối chiếu bằng mô tả.",
          "Cách ghi lỗi được nêu rõ.",
          "Chưa đo người; năng lực người kiểm đo được xác nhận phù hợp."
        ],
        "dependency_use": {
          "C06": "Quy trình và tiêu chí đã xét xác định chuẩn đo, sự kiện và thao tác người kiểm đo phải kiểm tính khả thi."
        }
      }
    },
    {
      "id": "GCA",
      "package": "SD08",
      "title": "Phiên xét GCA cho thử kỹ thuật camera",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "C07",
        "R026"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Kiểm gói nguồn, protocol, thiết kế và quyền dữ liệu thử",
      "done_when": "Chỉ mở dữ liệu tổng hợp/được phép; GC riêng trước mọi người thật",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Phiên xét GCA cho thử kỹ thuật camera",
          "instructions": "Kiểm gói nguồn, protocol, thiết kế và quyền dữ liệu thử. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Ghi quyết định thực, thẩm quyền, phiên bản và phạm vi. Hồ sơ thiếu phải ghi yêu cầu bổ sung; không tự đánh dấu đã duyệt.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần GCA: Phiên xét GCA cho thử kỹ thuật camera",
          "done_when": "Chỉ mở dữ liệu tổng hợp/được phép; GC riêng trước mọi người thật",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "GCA.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Nhóm cần quyết định rõ điều kiện được bắt đầu thử kỹ thuật camera. Cổng này chưa thay quyền thực hiện hoạt động trên người.",
        "acceptance_checks": [
          "Gói nguồn, quy trình, thiết kế và quyền dữ liệu thử được kiểm.",
          "Chỉ mở thử với dữ liệu tổng hợp hoặc dữ liệu được phép.",
          "Hoạt động với người thật vẫn phải qua GC riêng."
        ],
        "dependency_use": {
          "C07": "Kết quả rà chuẩn đối chiếu cho biết phép đo dự kiến có thể thực hiện và ghi lỗi theo thiết kế hay không.",
          "R026": "Review bảo mật cung cấp các điều kiện quyền truy cập và dữ liệu phải giữ khi mở thử kỹ thuật."
        }
      }
    },
    {
      "id": "A08",
      "package": "SD08",
      "title": "Hỗ trợ mã POC camera một chỉ số",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 3,
      "deps": [
        "GCA"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "frontend/src/camera/; testing/camera/",
      "steps": "Viết nháp mô-đun tại thiết bị; trạng thái quyền/dừng/không đo; tạo dữ liệu tổng hợp",
      "done_when": "Không gửi hoặc lưu video/khung xương; không tự gán ý nghĩa y khoa",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Soạn nháp trạng thái camera",
          "instructions": "Dùng protocol đã xét để tạo trạng thái quyền, chuẩn bị, đo, dừng và không đo được. Chỉ xử lý tại thiết bị.",
          "output": "frontend/src/camera/; testing/camera/ — Nháp trạng thái POC",
          "done_when": "Nháp được bàn giao để NCS đọc hiểu và kiểm; AI không tự nghiệm thu hoặc phê duyệt.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A08.01"
        },
        {
          "title": "Soạn nháp phép tính một chỉ số",
          "instructions": "Tạo mã theo sự kiện, đơn vị và hợp đồng đã đặc tả. Thêm dữ liệu giả biết trước kết quả. Không thêm ngưỡng y khoa.",
          "output": "frontend/src/camera/; testing/camera/ — Nháp phép tính và dữ liệu giả",
          "done_when": "Nháp được bàn giao để NCS đọc hiểu và kiểm; AI không tự nghiệm thu hoặc phê duyệt.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A08.02"
        },
        {
          "title": "Soạn ca lỗi POC",
          "instructions": "Tạo ca từ chối quyền, mất hình, dừng, thiếu dữ liệu và xử lý muộn. Nêu cách kiểm mạng và lưu trữ. Không lưu ảnh, video hoặc khung xương.",
          "output": "frontend/src/camera/; testing/camera/ — Nháp ca lỗi và riêng tư",
          "done_when": "Nháp được bàn giao để NCS đọc hiểu và kiểm; AI không tự nghiệm thu hoặc phê duyệt.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A08.03"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Nháp mô-đun giúp NCS2 kiểm cách biến thiết kế thành mã tại thiết bị. Dữ liệu tổng hợp cho phép kiểm trạng thái mà chưa thử người.",
        "acceptance_checks": [
          "Nháp có trạng thái quyền, dừng và không đo được.",
          "Có dữ liệu tổng hợp cho ca kiểm kỹ thuật.",
          "Không gửi hoặc lưu video, khung xương; không gán ý nghĩa y khoa."
        ],
        "dependency_use": {
          "GCA": "Quyết định GCA xác định phạm vi và điều kiện được phép dùng để tạo nháp camera."
        }
      }
    },
    {
      "id": "C08",
      "package": "SD08",
      "title": "T14b: thực hiện và kiểm POC trên dữ liệu được phép",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 1200
      },
      "ai_runs": 0,
      "deps": [
        "A08"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Review mã; kiểm thiết bị và tài nguyên bằng đầu vào hợp lệ; ghi lỗi",
      "done_when": "Không người thật trước GC-C; dữ liệu tổng hợp không chứng minh hiệu lực đo",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đọc mã và cấu hình POC",
          "instructions": "NCS2 đọc mã AI, đối chiếu protocol và giải thích cấu trúc. Khóa phiên bản thư viện, mô hình và cấu hình thử được phép.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Mã POC và cấu hình ban đầu",
          "done_when": "NCS2 giải thích được mã; chưa thử người khi thiếu GC-C.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.01"
        },
        {
          "title": "Tạo dữ liệu giả cho sự kiện",
          "instructions": "Chuẩn bị ca bắt đầu, kết thúc, thiếu điểm và thứ tự sai. Ghi kết quả mong đợi từ đặc tả kỹ thuật.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bộ ca sự kiện và dữ liệu giả",
          "done_when": "Dữ liệu giả không chứng minh độ chính xác trên người.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.02"
        },
        {
          "title": "Cài sự kiện của một phép đo",
          "instructions": "Cài nhận biết sự kiện theo protocol đã xét. Thử dữ liệu giả và ghi trường hợp không xác định được.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Mã sự kiện và kết quả kiểm",
          "done_when": "Không thêm chỉ số khác ngoài ứng viên được chọn.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.03"
        },
        {
          "title": "Cài phép tính và đơn vị",
          "instructions": "Cài phép tính đã đặc tả. Thử số biết trước, thời điểm sai và thiếu dữ liệu. Ghi phiên bản kết quả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Mã phép tính và ca kiểm giá trị",
          "done_when": "Không trả số khi đầu vào thiếu; đơn vị luôn xác định.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.04"
        },
        {
          "title": "Cài kiểm chất lượng hình ảnh",
          "instructions": "Cài điều kiện đủ quan sát. Thử mất điểm, góc sai và thiếu khung bằng dữ liệu được phép.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Kiểm chất lượng và không đo được",
          "done_when": "Hình ảnh kém không được biến thành kết quả hợp lệ.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.05"
        },
        {
          "title": "Cài vòng đời quyền camera",
          "instructions": "Thử cấp, từ chối và thu hồi quyền hoặc chuyển trang. Dừng luồng hình ảnh đúng thời điểm.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Mã quản lý quyền và tài nguyên",
          "done_when": "Không tiếp tục xử lý sau rút quyền.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.06"
        },
        {
          "title": "Cài dừng và hủy xử lý chờ",
          "instructions": "Thử nút dừng, lỗi và xử lý bất đồng bộ kết thúc muộn. Không cho kết quả muộn xuất hiện sau dừng.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Mã dừng và ca xử lý muộn",
          "done_when": "Mỗi đường dừng xóa dữ liệu tạm và không tự tiếp tục.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.07"
        },
        {
          "title": "Kiểm xử lý tại thiết bị",
          "instructions": "Đọc mã mạng, bộ nhớ và lưu trữ. Dùng dữ liệu giả xác nhận không gửi hoặc lưu ảnh, video hay khung xương.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Biên bản dữ liệu POC",
          "done_when": "Chỉ dữ liệu được phép mới có đầu ra; chưa tự bật lưu chỉ số.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.08"
        },
        {
          "title": "Kiểm tài nguyên và cấu hình",
          "instructions": "Đo hiệu năng bằng dữ liệu giả trên cấu hình được phép. Ghi lỗi, giới hạn bộ nhớ và thiết bị không hỗ trợ.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bảng tài nguyên, cấu hình và lỗi",
          "done_when": "Hiệu năng dữ liệu giả không là bằng chứng hiệu lực y khoa.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.09"
        },
        {
          "title": "Chạy hồi quy và bàn giao POC",
          "instructions": "Chạy ca đã có, ghi phiên bản và lỗi còn mở. Nối yêu cầu với kết quả rồi bàn giao C09 kiểm độc lập.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bản kê POC và kết quả hồi quy",
          "done_when": "POC có bằng chứng kỹ thuật; thử người vẫn cần GC-C.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C08.10"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "NCS2 phải hiểu mã và kiểm giới hạn thiết bị trước khi xin phép thử người. Chạy được dữ liệu tổng hợp chưa chứng minh phép đo có hiệu lực.",
        "acceptance_checks": [
          "Mã được review và có kết quả kiểm thiết bị, tài nguyên bằng đầu vào hợp lệ.",
          "Lỗi và cấu hình thử được ghi lại.",
          "Không thử người trước GC-C hoặc dùng dữ liệu tổng hợp để tuyên bố hiệu lực đo."
        ],
        "dependency_use": {
          "A08": "Nháp mô-đun và ca tổng hợp là đầu vào để NCS2 đọc, sửa và kiểm bản thử kỹ thuật."
        }
      }
    },
    {
      "id": "C09",
      "package": "SD08",
      "title": "Kiểm riêng tư và đường lỗi camera",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 240
      },
      "ai_runs": 0,
      "deps": [
        "C08"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Kiểm mạng, bộ nhớ, quyền, mất tab, mất mặt phẳng và từ chối đo",
      "done_when": "Không rò video/khung xương; có trạng thái thất bại rõ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm dữ liệu và quyền POC",
          "instructions": "Người review kiểm mạng, bộ nhớ, lưu trữ, cấp và rút quyền. Ghi bằng chứng theo cấu hình và mã POC.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Biên bản riêng tư POC",
          "done_when": "Không gửi hoặc lưu ảnh, video, khung xương ngoài phạm vi.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "C09.01"
        },
        {
          "title": "Kiểm lỗi và vòng đời POC",
          "instructions": "Thử mất hình, rời trang, dừng, lỗi thiết bị và kết quả muộn. Kiểm không đo được; ghi lỗi tái hiện được.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Biên bản đường lỗi POC",
          "done_when": "Lỗi nghiêm trọng có người xử lý trước khóa cấu hình.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "C09.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Camera có thể rò dữ liệu hoặc trả số sai khi quyền, hình ảnh hay màn hình thay đổi. Kiểm độc lập cần tìm các đường lỗi này.",
        "acceptance_checks": [
          "Có bằng chứng kiểm mạng, bộ nhớ, quyền và rời trang.",
          "Có kiểm mất mặt phẳng và từ chối đo.",
          "Không rò video hoặc khung xương; trạng thái thất bại hiển thị rõ."
        ],
        "dependency_use": {
          "C08": "Bản thử và kết quả kiểm của NCS2 cung cấp cấu hình cố định để người review kiểm riêng tư và đường lỗi."
        }
      }
    },
    {
      "id": "C10",
      "package": "SD08",
      "title": "Sửa POC và khóa cấu hình thử",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 240
      },
      "ai_runs": 0,
      "deps": [
        "C09"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Sửa lỗi; thêm hồi quy; gắn phiên bản model, mã và protocol",
      "done_when": "Có gói thử đúng cấu hình để trình GC-C",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa lỗi POC theo review",
          "instructions": "Đối chiếu từng lỗi C09 với mã. Sửa, ghi phần chưa đủ căn cứ hoặc chưa thể xử lý.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Mã sửa và bảng phản hồi",
          "done_when": "Không đóng lỗi chỉ bằng mô tả; có bằng chứng sửa.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C10.01"
        },
        {
          "title": "Kiểm lại và khóa cấu hình",
          "instructions": "Chạy hồi quy ca lỗi và ca cũ. Ghi phiên bản mã, mô hình, thiết bị và protocol cho GC-C.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bản kê cấu hình thử đã kiểm",
          "done_when": "Thay đổi ảnh hưởng protocol hoặc riêng tư phải vào hồ sơ xin phép.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C10.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Hồ sơ thử người cần một cấu hình xác định đã xử lý lỗi kỹ thuật. Gắn phiên bản giúp kết quả sau này truy về đúng mã và quy trình.",
        "acceptance_checks": [
          "Lỗi review được sửa và có kiểm hồi quy.",
          "Phiên bản mô hình, mã và quy trình đo được gắn cùng gói thử.",
          "Có gói đúng cấu hình để trình GC-C."
        ],
        "dependency_use": {
          "C09": "Biên bản kiểm riêng tư và đường lỗi xác định lỗi phải sửa trước khi khóa cấu hình thử."
        }
      }
    },
    {
      "id": "C11",
      "package": "SD08",
      "title": "Hoàn thiện hồ sơ thử camera riêng",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 240
      },
      "ai_runs": 0,
      "deps": [
        "C10",
        "R087"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "NCS tự viết mục tiêu, phương pháp, mẫu và kế hoạch phân tích; dự toán 10 lượt",
      "done_when": "Giữ bản đầu NCS; không dùng cỡ mẫu dự toán làm thiết kế được duyệt",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS2 viết phương pháp camera",
          "instructions": "NCS2 tự viết mục tiêu, một chỉ số, chuẩn đối chiếu và thao tác thu. Tách kỹ thuật với ý nghĩa y khoa; giữ bản đầu.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phương pháp do NCS2 viết",
          "done_when": "AI không viết thay bản đầu; phép đo bám protocol đã xét.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C11.01"
        },
        {
          "title": "NCS2 viết mẫu và phân tích",
          "instructions": "NCS2 mô tả mẫu, 10 lượt dự toán, dữ liệu thiếu và sai số. Gắn đồng ý, dừng và điều kiện xin phép.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần mẫu, phân tích và giới hạn",
          "done_when": "Không bịa danh tính hoặc kết quả; review thiết kế trước thu dữ liệu.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C11.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Camera cần hồ sơ nghiên cứu riêng vì hoạt động và chuẩn đối chiếu khác bản chữ. NCS2 phải tự viết phương pháp và giữ bản đầu.",
        "acceptance_checks": [
          "Có mục tiêu, phương pháp, mẫu và cách phân tích do NCS2 viết.",
          "Bản đầu của NCS2 được giữ lại.",
          "10 lượt chỉ là dự toán, không được coi là cỡ mẫu đã duyệt."
        ],
        "dependency_use": {
          "C10": "Cấu hình thử đã khóa xác định thiết bị, mã và quy trình thực được mô tả trong phương pháp.",
          "R087": "Hồ sơ tách chữ và camera xác định phần đồng ý, rút và hỗ trợ phải có riêng cho thử camera."
        }
      }
    },
    {
      "id": "C12",
      "package": "SD08",
      "title": "Chốt dữ liệu đo và lưu giữ camera",
      "status": "PLANNED",
      "minutes": {
        "DATA": 120
      },
      "ai_runs": 0,
      "deps": [
        "C11"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Đối chiếu consent, chỉ số, ID, thời hạn, xóa và rút lui",
      "done_when": "Không có video/skeleton trong gói dữ liệu",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chốt dữ liệu đo và lưu giữ camera",
          "instructions": "Đối chiếu consent, chỉ số, ID, thời hạn, xóa và rút lui. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C12: Chốt dữ liệu đo và lưu giữ camera",
          "done_when": "Không có video/skeleton trong gói dữ liệu",
          "minutes": {
            "DATA": 120
          },
          "ai_runs": 0,
          "id": "C12.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Chỉ số camera và thông tin tham gia phải được quản lý đúng quyền. Hồ sơ cần nói rõ dữ liệu nào được giữ, xóa hoặc rút.",
        "acceptance_checks": [
          "Đồng ý, chỉ số và ID được đối chiếu với mục đích.",
          "Có thời hạn, xóa và cách xử lý rút lui.",
          "Gói dữ liệu không chứa video hoặc khung xương."
        ],
        "dependency_use": {
          "C11": "Phương pháp camera xác định dữ liệu cần thu và hoạt động cần đưa vào quy định lưu giữ, xóa hoặc rút."
        }
      }
    },
    {
      "id": "C13",
      "package": "SD08",
      "title": "Review an toàn buổi đo camera",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 120
      },
      "ai_runs": 0,
      "deps": [
        "C12"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Chốt người giám sát, điểm dừng, hỗ trợ và giới hạn",
      "done_when": "Nếu cần người chuyên môn tại buổi đo, phải thêm tải rồi lập lại lịch",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review an toàn buổi đo camera",
          "instructions": "Chốt người giám sát, điểm dừng, hỗ trợ và giới hạn. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Ghi review từng nội dung và phiên bản. Tách phần đủ, cần sửa và điều kiện xét lại; không tự gán APPROVED.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C13: Review an toàn buổi đo camera",
          "done_when": "Nếu cần người chuyên môn tại buổi đo, phải thêm tải rồi lập lại lịch",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "C13.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Buổi đo cần biết ai hỗ trợ và khi nào phải dừng. Nếu cần người chuyên môn tại chỗ, lịch phải phản ánh nhân lực đó.",
        "acceptance_checks": [
          "Có nhận xét về giám sát, điểm dừng, hỗ trợ và giới hạn.",
          "Vai cần có trong buổi đo được xác định.",
          "Nếu cần người chuyên môn tại chỗ, phải thêm tải và lập lại lịch."
        ],
        "dependency_use": {
          "C12": "Hồ sơ dữ liệu và đồng ý xác định hoạt động cùng phạm vi người tham gia mà CVYK cần xét an toàn."
        }
      }
    },
    {
      "id": "GC-C",
      "package": "SD08",
      "title": "Phiên xét GC riêng cho hoạt động camera",
      "status": "PLANNED",
      "minutes": {
        "AUTH": 120
      },
      "ai_runs": 0,
      "deps": [
        "C13",
        "GB-R",
        "R089",
        "R092",
        "R093",
        "C24",
        "C25",
        "C26"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Xét thiết bị/protocol/người hỗ trợ/dữ liệu; ghi phạm vi và điều kiện thật",
      "done_when": "Không dùng GC chữ làm quyền mở camera",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 5,
      "work_steps": [
        {
          "title": "Phiên xét GC riêng cho hoạt động camera",
          "instructions": "Xét thiết bị/protocol/người hỗ trợ/dữ liệu; ghi phạm vi và điều kiện thật. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Ghi quyết định thực, thẩm quyền, phiên bản và phạm vi. Hồ sơ thiếu phải ghi yêu cầu bổ sung; không tự đánh dấu đã duyệt.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần GC-C: Phiên xét GC riêng cho hoạt động camera",
          "done_when": "Không dùng GC chữ làm quyền mở camera",
          "minutes": {
            "AUTH": 120
          },
          "ai_runs": 0,
          "id": "GC-C.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Quyền thử chữ không tự cho phép camera. Người có thẩm quyền cần xét đúng thiết bị, quy trình, người hỗ trợ và dữ liệu dự kiến.",
        "acceptance_checks": [
          "Có quyết định thực về phạm vi, thiết bị, quy trình và dữ liệu.",
          "Nhân sự hỗ trợ và điều kiện triển khai được ghi rõ.",
          "Không dùng GC chữ làm quyền mở camera."
        ],
        "dependency_use": {
          "C13": "Review an toàn cung cấp điều kiện giám sát, dừng và hỗ trợ phải đưa vào quyết định camera.",
          "GB-R": "Kết luận kỹ thuật bản chữ xác định nền sản phẩm dùng trong hồ sơ thử kết hợp.",
          "R089": "Review đồng ý cung cấp điều kiện chủ thể, quyền và phạm vi xử lý cần giữ khi xét camera.",
          "R092": "Kết quả tập hỗ trợ nội bộ cung cấp phần chuẩn bị hỗ trợ chung trong hồ sơ xin phép.",
          "R093": "Kết quả kiểm làm lại vận hành cung cấp bằng chứng người phụ trách có thể xử lý sự cố theo sổ tay.",
          "C24": "Kết quả tập hỗ trợ camera chứng minh người hỗ trợ biết dừng và xử lý không đo được theo quy trình.",
          "C25": "Kết quả tập ghi chuẩn đối chiếu chứng minh người kiểm đo hiểu sự kiện đầu, cuối và cách ghi sai khác.",
          "C26": "Nhận xét phương pháp xác định mục tiêu, mẫu và cách phân tích đã được rà trước phiên xin phép."
        }
      }
    },
    {
      "id": "C14",
      "package": "SD08",
      "title": "T19a: chuẩn bị đo, tuyển và đồng ý đúng phạm vi",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 360
      },
      "ai_runs": 0,
      "deps": [
        "GC-C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Kiểm chuẩn đối chiếu, dụng cụ; tuyển sau phép; tập ghi trên dữ liệu giả",
      "done_when": "Người đủ điều kiện và đồng ý thật; thời gian bố trí được ghi",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chuẩn bị thiết bị và chuẩn đo",
          "instructions": "Kiểm GC-C, cấu hình, protocol và dụng cụ. Ghi người phụ trách, chuẩn đối chiếu và điều kiện không tiến hành.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu thiết bị và sẵn sàng",
          "done_when": "Thiết bị và protocol khớp phiên bản được cho phép.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C14.01"
        },
        {
          "title": "Tuyển và giải thích đồng ý camera",
          "instructions": "Chỉ liên hệ sau khi đủ quyền. Giải thích phép đo, giới hạn, dữ liệu, nghỉ và rút. Ghi bằng chứng tối thiểu.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bằng chứng tuyển và đồng ý camera",
          "done_when": "Người từ chối hoặc không đủ điều kiện không là lượt đo.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C14.02"
        },
        {
          "title": "Diễn tập và kiểm biểu mẫu",
          "instructions": "Dùng dữ liệu giả kiểm biểu mẫu, ghi chuẩn và dừng. Kiểm đầu vào C24, C25 trước buổi người thật.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Biên bản diễn tập và biểu mẫu",
          "done_when": "Lỗi chuẩn bị được xử lý; dữ liệu giả không thành dữ liệu đánh giá.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C14.03"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Buổi đo chỉ có thể bắt đầu khi thiết bị, người đủ điều kiện và đồng ý khớp quyết định. Chuẩn bị giúp tránh thay đổi cấu hình ngay lúc thu dữ liệu.",
        "acceptance_checks": [
          "Chuẩn đối chiếu và dụng cụ được kiểm theo phạm vi được phép.",
          "Chỉ tuyển sau phép; người tham gia đủ điều kiện và có đồng ý thật.",
          "Có kết quả tập ghi bằng dữ liệu giả và thời gian bố trí được ghi rõ."
        ],
        "dependency_use": {
          "GC-C": "Quyết định GC-C xác định thiết bị, quy trình, đối tượng và điều kiện cho việc chuẩn bị, tuyển và giải thích đồng ý."
        }
      }
    },
    {
      "id": "PILOT-CAM",
      "package": "SD08",
      "title": "T19a: tối đa 10 lượt đo và đối chiếu",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 600,
        "MEASURE": 600,
        "SUPPORT": 600,
        "PART_CAM": 600
      },
      "ai_runs": 0,
      "deps": [
        "C14"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Mỗi lượt 60 phút gồm đồng ý, chuẩn bị, nghỉ, đo và ghi lỗi; chỉ lưu dữ liệu cho phép",
      "done_when": "Giữ cả ca không đo được và rút lui; mẫu dự toán không tự chứng minh độ chính xác",
      "condition": "GC-C thật và đúng protocol; một lượt/ngày. MEASURE phải được xác nhận phù hợp và độc lập; yêu cầu thêm giám sát phải lập lại lịch.",
      "joint": true,
      "session_minutes": 60,
      "work_steps": [
        {
          "title": "Phiên dự toán 1/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 01; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.01"
        },
        {
          "title": "Phiên dự toán 2/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 02; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.02"
        },
        {
          "title": "Phiên dự toán 3/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 03; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.03"
        },
        {
          "title": "Phiên dự toán 4/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 04; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.04"
        },
        {
          "title": "Phiên dự toán 5/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 05; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.05"
        },
        {
          "title": "Phiên dự toán 6/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 06; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.06"
        },
        {
          "title": "Phiên dự toán 7/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 07; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.07"
        },
        {
          "title": "Phiên dự toán 8/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 08; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.08"
        },
        {
          "title": "Phiên dự toán 9/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 09; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.09"
        },
        {
          "title": "Phiên dự toán 10/10: đo camera và đối chiếu",
          "instructions": "Lượt này là dự toán, không phải người hoặc lượt đã thực hiện. Chỉ tiến hành khi đủ quyền, đồng ý và điều kiện an toàn. Thực hiện đúng phương pháp, có nghỉ và dừng. Ghi diễn biến thật, dữ liệu thiếu, rút và sự cố. Không bịa danh tính hoặc bù lượt bằng dữ liệu giả.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu phiên dự toán 10; ID thực khi có quyền; dữ liệu hoặc lý do không thực hiện",
          "done_when": "Phiếu giữ đúng diễn biến, phiên bản và quyền dữ liệu. Lượt không diễn ra hoặc dừng không được ghi thành hoàn tất. Sự cố được xử lý đúng quy trình.",
          "minutes": {
            "NCS2": 60,
            "MEASURE": 60,
            "SUPPORT": 60,
            "PART_CAM": 60
          },
          "ai_runs": 0,
          "role_instructions": {
            "NCS2": "Kiểm GC-C, đồng ý và phiên bản. Điều phối protocol, ghi chỉ số được phép, dữ liệu thiếu và sự cố. Không suy luận bệnh.",
            "SUPPORT": "Hỗ trợ tiếp cận và nghỉ theo hồ sơ. Tiếp nhận yêu cầu dừng hoặc rút. Chuyển sự cố đúng người; không làm thay tác vụ được quan sát.",
            "PART_CAM": "Thực hiện thao tác camera đã được phép khi tự nguyện và đủ điều kiện. Có quyền nghỉ, dừng hoặc rút theo hồ sơ.",
            "MEASURE": "Ghi chuẩn đối chiếu độc lập đúng protocol, thiết bị và thời điểm. Giữ dữ liệu thiếu hoặc sai lệch; không chép số camera làm chuẩn."
          },
          "id": "PILOT-CAM.10"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Nhóm cần quan sát phép đo và chuẩn đối chiếu trong điều kiện đã cho phép. Dữ liệu phải giữ cả thất bại để đánh giá đúng giới hạn camera.",
        "acceptance_checks": [
          "Chỉ thực hiện hoạt động đã được phép và ghi dữ liệu được phép lưu.",
          "Giữ ca không đo được, dừng, rút và dữ liệu thiếu; không ép đủ 10 người hoặc 10 lượt.",
          "Có ghi chuẩn đối chiếu, diễn biến và lỗi của lượt thực hiện.",
          "Mẫu dự toán không được dùng để tự chứng minh độ chính xác."
        ],
        "dependency_use": {
          "C14": "Thiết bị đã kiểm, người đủ điều kiện và đồng ý thật cung cấp điều kiện tổ chức từng lượt đo trong phạm vi GC-C."
        }
      }
    },
    {
      "id": "C15",
      "package": "SD08",
      "title": "NCS2 tự phân tích sai số và thất bại camera",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 360
      },
      "ai_runs": 0,
      "deps": [
        "PILOT-CAM"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Khóa dữ liệu; tính theo phương pháp đã định; đối chiếu chuẩn; viết bản đầu",
      "done_when": "Có mẫu số, dữ liệu thiếu, sai số và giới hạn thiết bị; không kết luận chẩn đoán",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS2 kiểm dữ liệu đã thu",
          "instructions": "So dữ liệu với đồng ý, phiên bản và chuẩn độc lập. Giữ trường hợp không đo được, bỏ dở và thiếu.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bảng kiểm dữ liệu trước phân tích",
          "done_when": "Không tạo thêm lượt hoặc lấp dữ liệu thiếu bằng AI.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C15.01"
        },
        {
          "title": "NCS2 tính sai số và thất bại",
          "instructions": "Dùng phương pháp đã khóa để tính sai số, tỷ lệ không đo được và mẫu số. Ghi công cụ hoặc phép tính có thể làm lại.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bảng phép tính và kết quả thật",
          "done_when": "Kết quả truy vết đến lượt được phép; không chọn lại ngưỡng để làm đẹp.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C15.02"
        },
        {
          "title": "NCS2 tự viết phân tích đầu tiên",
          "instructions": "NCS2 tự viết kết quả, lỗi và giới hạn từ số liệu thật. Tách quan sát kỹ thuật với kết luận chưa đủ căn cứ.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bản phân tích đầu tiên của NCS2",
          "done_when": "Không chẩn đoán hoặc tuyên bố hiệu quả lâm sàng từ phép thử kỹ thuật.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C15.03"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Sai số và tỷ lệ thất bại cần được tính từ dữ liệu thật theo phương pháp đã định. NCS2 tự phân tích để hiểu kết quả và giới hạn.",
        "acceptance_checks": [
          "Tập dữ liệu được khóa và đối chiếu chuẩn đo.",
          "Bản phân tích đầu có mẫu số, dữ liệu thiếu, sai số và giới hạn thiết bị.",
          "Không kết luận chẩn đoán từ chỉ số."
        ],
        "dependency_use": {
          "PILOT-CAM": "Dữ liệu đo, chuẩn đối chiếu và lỗi thực cung cấp số liệu để tính sai số cùng tỷ lệ không đo được."
        }
      }
    },
    {
      "id": "C16",
      "package": "SD08",
      "title": "Kiểm chéo truy vết và phép tính",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 180
      },
      "ai_runs": 0,
      "deps": [
        "C15"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Tái tính từ dữ liệu hợp lệ; so version và CYK; ghi sai khác",
      "done_when": "Không đổi phương pháp để làm đẹp kết quả",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Tính lại kết quả và mẫu số",
          "instructions": "NCS1 kiểm độc lập phép tính từ dữ liệu được quyền xem. So sai số, không đo được và thiếu; ghi bất đồng.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phiếu tính lại kết quả",
          "done_when": "Chênh lệch được truy nguyên; không sửa dữ liệu để khớp kỳ vọng.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "C16.01"
        },
        {
          "title": "Kiểm phiên bản và CYK",
          "instructions": "Nối kết quả với mã, thiết bị, protocol, nguồn và đồng ý. Ghi phần cần NCS2 hoặc CVYK giải quyết trước GCB.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bảng truy vết bằng chứng camera",
          "done_when": "Không âm thầm đổi phương pháp sau khi biết kết quả.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "C16.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Phép tính đúng và nguồn đúng đều cần kiểm chéo. NCS1 giúp phát hiện chênh lệch số liệu hoặc phiên bản trước khi xét kết quả.",
        "acceptance_checks": [
          "Có kết quả tái tính từ dữ liệu hợp lệ.",
          "Phiên bản và truy vết CYK được đối chiếu.",
          "Sai khác được ghi lại; không đổi phương pháp để làm đẹp kết quả."
        ],
        "dependency_use": {
          "C15": "Phân tích của NCS2 cung cấp phép tính, mẫu số và phiên bản để NCS1 kiểm lại độc lập."
        }
      }
    },
    {
      "id": "C17",
      "package": "SD08",
      "title": "Review ý nghĩa và giới hạn kết quả camera",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "C16"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Đối chiếu nguồn/protocol/kết quả; xét đủ hay chưa đủ cho phạm vi tích hợp",
      "done_when": "Không suy hiệu lực lâm sàng từ POC hoặc mẫu nhỏ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét kết quả theo nguồn",
          "instructions": "CVYK đọc nguồn, protocol và số liệu thật. Kiểm giới hạn đối tượng, điều kiện đo và diễn giải chỉ số.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Nhận xét kết quả theo căn cứ",
          "done_when": "Sai số kỹ thuật không biến thành bằng chứng hiệu quả lâm sàng.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "C17.01"
        },
        {
          "title": "Xét thông điệp và điều kiện tích hợp",
          "instructions": "Ghi nội dung được phép diễn đạt, phần thiếu bằng chứng và điều kiện dừng. Chuyển kết luận thực cho GCB.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Nhận xét giới hạn và đầu vào GCB",
          "done_when": "Kết luận gắn người, phiên bản và phạm vi; không tự ghi đã duyệt.",
          "minutes": {
            "CVYK": 90
          },
          "ai_runs": 0,
          "id": "C17.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Kết quả kỹ thuật cần được đặt lại trong phạm vi nguồn và quy trình. CVYK xét xem bằng chứng đã đủ cho cách tích hợp dự kiến chưa.",
        "acceptance_checks": [
          "Nguồn, quy trình và kết quả được đối chiếu.",
          "Có kết luận đủ hoặc chưa đủ cho phạm vi tích hợp dự kiến.",
          "Không suy hiệu lực lâm sàng từ bản thử kỹ thuật hoặc mẫu nhỏ."
        ],
        "dependency_use": {
          "C16": "Kết quả kiểm chéo cung cấp số liệu đã đối chiếu và sai khác còn lại để CVYK xét ý nghĩa, giới hạn."
        }
      }
    },
    {
      "id": "GCB",
      "package": "SD08",
      "title": "Phiên xét GCB",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "C17"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Tổng hợp sai số, thất bại, quyền, riêng tư và review chuyên môn",
      "done_when": "Không đạt thì dừng T19b; vẫn có thể bàn giao core nếu Q07 cho phép",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Phiên xét GCB",
          "instructions": "Tổng hợp sai số, thất bại, quyền, riêng tư và review chuyên môn. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Ghi quyết định thực, thẩm quyền, phiên bản và phạm vi. Hồ sơ thiếu phải ghi yêu cầu bổ sung; không tự đánh dấu đã duyệt.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần GCB: Phiên xét GCB",
          "done_when": "Không đạt thì dừng T19b; vẫn có thể bàn giao core nếu Q07 cho phép",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "GCB.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Nhánh tích hợp camera chỉ nên mở khi đủ bằng chứng theo phạm vi đã xét. Không đạt camera vẫn cần giữ rõ khả năng bàn giao bản chữ.",
        "acceptance_checks": [
          "Sai số, thất bại, quyền, riêng tư và review chuyên môn được tổng hợp.",
          "Quyết định ghi rõ điều kiện mở hoặc dừng T19b.",
          "Nếu không đạt, T19b dừng; khả năng bàn giao bản chữ bám Q07."
        ],
        "dependency_use": {
          "C17": "Review kết quả chuyên môn xác định phần đủ, thiếu và giới hạn cần đưa vào quyết định tích hợp camera."
        }
      }
    },
    {
      "id": "A08I",
      "package": "SD08",
      "title": "Hỗ trợ tích hợp kết quả camera",
      "status": "PLANNED",
      "minutes": {},
      "ai_runs": 1,
      "deps": [
        "GCB",
        "R102"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "frontend/src/camera/; backend/app/; testing/camera/",
      "steps": "Ghép hợp đồng chỉ số, UI và nguồn; không đưa video lên server",
      "done_when": "Nháp mã có trạng thái không đủ bằng chứng và nút dừng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Soạn nháp tích hợp camera",
          "instructions": "Nối chỉ số, phiên bản và nội dung có nguồn theo hợp đồng. Gồm thiếu bằng chứng, không đo được và dừng. Không gửi video hoặc tự bật lưu chỉ số.",
          "output": "frontend/src/camera/; backend/app/; testing/camera/ — Nháp tích hợp UI, API và ca kiểm",
          "done_when": "Nháp được bàn giao để NCS đọc hiểu và kiểm; AI không tự nghiệm thu hoặc phê duyệt.",
          "minutes": {},
          "ai_runs": 1,
          "id": "A08I.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Nháp tích hợp cần nối đúng chỉ số, giao diện và nguồn giải thích. Trạng thái thiếu bằng chứng phải hiện rõ trước khi NCS hoàn thiện mã.",
        "acceptance_checks": [
          "Nháp bám hợp đồng chỉ số, giao diện và nguồn đã xét.",
          "Có trạng thái không đủ bằng chứng và nút dừng.",
          "Không đưa video lên máy chủ."
        ],
        "dependency_use": {
          "GCB": "Quyết định GCB xác định chỉ số và phạm vi được phép dùng trong nháp tích hợp.",
          "R102": "Bản chữ sau kiểm sửa cung cấp nền giao diện và API để nối nhánh camera."
        }
      }
    },
    {
      "id": "C18",
      "package": "SD08",
      "title": "T19b: tích hợp nhánh camera",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 480
      },
      "ai_runs": 0,
      "deps": [
        "A08I"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Review mã; nối UI/API; kiểm đồng ý, riêng tư và thu hồi",
      "done_when": "Camera chỉ thấy cử động bên ngoài; không suy kết quả chữ từ chỉ số chưa đủ căn cứ",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đọc và sửa hợp đồng tích hợp",
          "instructions": "NCS2 kiểm mã AI, cấu trúc chỉ số và phiên bản. Nối quyền lưu với quyết định thực; thiếu quyền thì không lưu.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Hợp đồng kết quả đã kiểm",
          "done_when": "Dữ liệu gửi lên không có ảnh, video hoặc khung xương.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C18.01"
        },
        {
          "title": "Nối giao diện và giới hạn",
          "instructions": "Cài đủ dữ liệu, không đo được và dừng. Hiện câu Camera chỉ thấy cử động bên ngoài. Dùng nội dung có nguồn đã xét.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Giao diện kết quả camera",
          "done_when": "Không tạo chẩn đoán hoặc suy nguy cơ từ chỉ số.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C18.02"
        },
        {
          "title": "Nối API và kiểm dữ liệu truyền",
          "instructions": "Kiểm API nhận đúng chỉ số được phép và phiên bản. Thử dữ liệu sai, thiếu quyền hoặc nguồn hết hiệu lực.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — API và bằng chứng kiểm hợp đồng",
          "done_when": "Xử lý tại thiết bị không tự cho phép lưu chỉ số.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C18.03"
        },
        {
          "title": "Kiểm tích hợp và thu hồi",
          "instructions": "Thử thu hồi nguồn hoặc protocol, tắt camera và lỗi riêng tư. Kiểm nhánh chữ vẫn hoạt động đúng phạm vi.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Kết quả hồi quy và thu hồi",
          "done_when": "Camera bị chặn khi mất hiệu lực; nhánh chữ không phụ thuộc camera.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C18.04"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Nối camera vào sản phẩm có thể tạo đường dữ liệu và diễn giải mới. NCS2 phải kiểm lại quyền, riêng tư và thu hồi trên bản kết hợp.",
        "acceptance_checks": [
          "Mã, giao diện và API được review, kiểm tích hợp.",
          "Có kiểm đồng ý, riêng tư và thu hồi.",
          "Hiện câu Camera chỉ thấy cử động bên ngoài.",
          "Không suy kết quả chữ từ chỉ số chưa đủ căn cứ."
        ],
        "dependency_use": {
          "A08I": "Nháp tích hợp là đầu vào để NCS2 đọc, sửa và kiểm các trạng thái cùng dữ liệu của bản kết hợp."
        }
      }
    },
    {
      "id": "C19",
      "package": "SD08",
      "title": "Kiểm tích hợp hai nhánh và gói tri thức",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "C18"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Kiểm bản kê, version, nguồn, bộ lọc và nhánh camera tắt",
      "done_when": "Nhánh chữ vẫn hoạt động đúng khi camera bị tắt",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm nguồn hai nhánh",
          "instructions": "NCS1 so bản kê tri thức, bộ lọc và camera. Kiểm lời giải thích, nguồn, protocol và dữ liệu lưu theo phiên bản.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Bảng kiểm nguồn và hợp đồng",
          "done_when": "Nội dung chưa xét không lọt qua đường camera.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "C19.01"
        },
        {
          "title": "Kiểm nhánh chữ khi camera tắt",
          "instructions": "Tắt hoặc chặn camera rồi chạy ca chữ cũ. Thử nguồn bị thu hồi, thiếu quyền và không đo được. Ghi ảnh hưởng lên cổng hiện hành.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Kết quả nhánh chữ độc lập",
          "done_when": "Thay đổi quan trọng được chuyển mở lại cổng đúng thẩm quyền.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "C19.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Camera không được làm bản chữ mất khả năng hoạt động độc lập. Kiểm chéo giúp giữ đúng gói tri thức và bộ lọc của cả hai nhánh.",
        "acceptance_checks": [
          "Bản kê, phiên bản, nguồn và bộ lọc được đối chiếu.",
          "Có kết quả kiểm khi nhánh camera bị tắt.",
          "Nhánh chữ vẫn hoạt động đúng phạm vi."
        ],
        "dependency_use": {
          "C18": "Bản tích hợp của NCS2 cung cấp luồng dữ liệu và giao diện để NCS1 kiểm nguồn, bộ lọc cùng nhánh chữ độc lập."
        }
      }
    },
    {
      "id": "C20",
      "package": "SD08",
      "title": "Kiểm bản kết hợp và riêng tư",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_TECH": 240
      },
      "ai_runs": 0,
      "deps": [
        "C19"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Kiểm mạng, quyền, lỗi, hồi quy và giới hạn tài nguyên",
      "done_when": "Không có dữ liệu cấm truyền/lưu; mọi lỗi chặn đã xử lý",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm riêng tư bản kết hợp",
          "instructions": "Người review kiểm mạng, quyền, API và lưu trữ. Thử từ chối, rút quyền, lỗi và dừng.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Biên bản riêng tư bản tích hợp",
          "done_when": "Không dựa riêng vào kiểm POC trước tích hợp; dữ liệu không vượt quyền.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "C20.01"
        },
        {
          "title": "Kiểm tài nguyên và hồi quy",
          "instructions": "Chạy ca hợp đồng, thiết bị, tài nguyên và nhánh chữ độc lập. Ghi phiên bản, lỗi và tác động phát hành.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Biên bản hồi quy bản kết hợp",
          "done_when": "Lỗi có bằng chứng và người nhận; không tự cấp quyết định cổng.",
          "minutes": {
            "REVIEW_TECH": 120
          },
          "ai_runs": 0,
          "id": "C20.02"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Kết quả kiểm bản thử trước đây chưa bao phủ thay đổi do tích hợp. Cần kiểm lại mạng, quyền và tài nguyên trên bản kết hợp thực.",
        "acceptance_checks": [
          "Có kiểm mạng, quyền, đường lỗi và hồi quy.",
          "Giới hạn tài nguyên được kiểm.",
          "Không truyền hoặc lưu dữ liệu cấm; mọi lỗi chặn đã xử lý."
        ],
        "dependency_use": {
          "C19": "Kết quả kiểm chéo hai nhánh xác định phiên bản và tình huống tích hợp cần review kỹ thuật độc lập."
        }
      }
    },
    {
      "id": "C21",
      "package": "SD19",
      "title": "Bổ sung hướng dẫn camera theo UI thật",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 180
      },
      "ai_runs": 0,
      "deps": [
        "C20"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "steps": "Viết đặt máy, điều kiện trước đo, dừng, không đo được và giới hạn",
      "done_when": "Chỉ đúng protocol đã xét; không tự hướng dẫn bài tập mới",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Viết hướng dẫn từ UI camera thật",
          "instructions": "NCS2 chụp hoặc mô tả UI đúng phiên bản. Viết chuẩn bị, vị trí và bắt đầu chỉ theo protocol đã xét.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Phần chuẩn bị và thao tác",
          "done_when": "Không thêm bài tập hoặc thao tác thiếu nguồn và review.",
          "minutes": {
            "NCS2": 90
          },
          "ai_runs": 0,
          "id": "C21.01"
        },
        {
          "title": "Viết dừng và không đo được",
          "instructions": "Mô tả mất quyền, hình ảnh không đủ, nghỉ, dừng và hỗ trợ. Ghi quyền người dùng, giới hạn và cảnh báo bắt buộc.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Phần lỗi, dừng, hỗ trợ và giới hạn",
          "done_when": "Có câu Camera chỉ thấy cử động bên ngoài; không đưa kết luận bệnh.",
          "minutes": {
            "NCS2": 90
          },
          "ai_runs": 0,
          "id": "C21.02"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review.",
      "reader_notes": {
        "purpose": "Người dùng cần hướng dẫn camera khớp giao diện và quy trình đã xét. Hướng dẫn phải giúp họ nhận ra lúc không đo được hoặc cần dừng.",
        "acceptance_checks": [
          "Bước đặt máy, điều kiện trước đo và thao tác bám giao diện camera thật.",
          "Có cách dừng, xử lý không đo được và giới hạn sử dụng.",
          "Nội dung chỉ dựa trên quy trình đã được xét."
        ],
        "dependency_use": {
          "C20": "Bản kết hợp đã kiểm cung cấp giao diện, trạng thái lỗi và giới hạn thực để viết hướng dẫn camera."
        }
      }
    },
    {
      "id": "C22",
      "package": "SD19",
      "title": "Review hướng dẫn camera cuối",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "C21"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/HUONG_DAN_SU_DUNG.md",
      "steps": "Kiểm câu an toàn, đối tượng, dừng và giải thích chỉ số",
      "done_when": "Câu Camera chỉ thấy cử động bên ngoài có trong kết quả",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review hướng dẫn camera cuối",
          "instructions": "Kiểm câu an toàn, đối tượng, dừng và giải thích chỉ số. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Ghi review từng nội dung và phiên bản. Tách phần đủ, cần sửa và điều kiện xét lại; không tự gán APPROVED.",
          "output": "community/HUONG_DAN_SU_DUNG.md — Phần C22: Review hướng dẫn camera cuối",
          "done_when": "Câu Camera chỉ thấy cử động bên ngoài có trong kết quả",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "C22.01"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "frontend/DAC_TA_GIAO_DIEN_VA_TRO_NANG.md",
        "docs/project/intended_use.md",
        "docs/research/plans/DAC_TA_CAMERA.md"
      ],
      "resume_note": "Kế thừa hướng dẫn mô phỏng và giới hạn sử dụng. Bổ sung hướng dẫn theo giao diện thật, người chăm sóc, trợ năng và câu an toàn đã review.",
      "reader_notes": {
        "purpose": "Lời hướng dẫn cuối có thể bị hiểu là hướng dẫn chẩn đoán. CVYK cần xét lại cảnh báo và giới hạn ngay trên phiên bản sẽ bàn giao.",
        "acceptance_checks": [
          "Câu an toàn, đối tượng, dừng và cách giải thích chỉ số được xét đúng phiên bản.",
          "Câu cảnh báo Camera chỉ thấy cử động bên ngoài được giữ rõ.",
          "Phản hồi chuyên môn cần sửa được ghi cụ thể."
        ],
        "dependency_use": {
          "C21": "Hướng dẫn camera theo giao diện thật cung cấp nội dung và cảnh báo để CVYK xét bản cuối."
        }
      }
    },
    {
      "id": "C23",
      "package": "SD21",
      "title": "Tập hỗ trợ nhánh camera trên dữ liệu giả",
      "status": "PLANNED",
      "minutes": {
        "SUPPORT": 120
      },
      "ai_runs": 0,
      "deps": [
        "C22"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "community/DAO_TAO_VA_HO_TRO.md",
      "steps": "Thử tình huống quyền/không đo/dừng; thực hành chuyển lỗi",
      "done_when": "Người hỗ trợ biết giới hạn và không tự diễn giải y khoa",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Tập hỗ trợ nhánh camera trên dữ liệu giả",
          "instructions": "Thử tình huống quyền/không đo/dừng; thực hành chuyển lỗi. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ. Dùng dữ liệu giả để kiểm người nhận tự làm lại. Ghi lỗi thao tác và sửa hướng dẫn trước buổi được phép.",
          "output": "community/DAO_TAO_VA_HO_TRO.md — Phần C23: Tập hỗ trợ nhánh camera trên dữ liệu giả",
          "done_when": "Người hỗ trợ biết giới hạn và không tự diễn giải y khoa",
          "minutes": {
            "SUPPORT": 120
          },
          "ai_runs": 0,
          "id": "C23.01"
        }
      ],
      "source_paths": [
        "community/HUONG_DAN_BAN_MO_PHONG.md",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nội dung hướng dẫn, chưa coi là đã đào tạo. Bổ sung bài thực hành, người hỗ trợ, giới hạn, cách dừng và bằng chứng làm lại đúng.",
      "reader_notes": {
        "purpose": "Người hỗ trợ bản chữ chưa chắc xử lý được lỗi camera. Tập riêng giúp họ biết dừng và chuyển lỗi, không diễn giải chỉ số sức khỏe.",
        "acceptance_checks": [
          "Có kết quả tập hỗ trợ bằng dữ liệu giả trên nhánh camera.",
          "Từ chối quyền, không đo được và dừng được xử lý theo hướng dẫn.",
          "Câu hỏi sức khỏe được chuyển đúng vai, không tự diễn giải chỉ số."
        ],
        "dependency_use": {
          "C22": "Hướng dẫn camera đã review xác định thao tác, câu giới hạn và đường chuyển hỗ trợ cần tập."
        }
      }
    },
    {
      "id": "R104",
      "package": "SD24",
      "title": "Cài bản chữ vào môi trường được nhận",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "GD-CORE"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Dùng gói đã xét; cấu hình theo quyền; kiểm nhanh và sẵn sàng quay lui",
      "done_when": "Chỉ môi trường/đối tượng đã được phép; có biên bản cài",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đối chiếu quyền và gói trước cài chữ",
          "instructions": "Mở GD-CORE và bản kê gói. Kiểm môi trường đích, hash, tài khoản và bản quay lại.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Đối chiếu quyền và gói trước cài chữ",
          "done_when": "Thiếu quyền hoặc sai hash thì dừng trước cài.",
          "minutes": {
            "OPS": 30
          },
          "ai_runs": 0,
          "id": "R104.01"
        },
        {
          "title": "Cài bản chữ theo hướng dẫn đã kiểm",
          "instructions": "Thực hiện đúng lệnh và cấu hình của gói. Ghi kết quả từng điểm kiểm, không nới quyền để vượt lỗi.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Cài bản chữ theo hướng dẫn đã kiểm",
          "done_when": "Phiên bản trên máy khớp bản đã được nhận.",
          "minutes": {
            "OPS": 60
          },
          "ai_runs": 0,
          "id": "R104.02"
        },
        {
          "title": "Kiểm nhanh và bàn giao kiểm nhận",
          "instructions": "Kiểm tiến trình, trạng thái sẵn sàng, log và khả năng quay lui. Gửi biên bản cho NCS1.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm nhanh và bàn giao kiểm nhận",
          "done_when": "Không mở ngoài đối tượng hoặc môi trường đã được phép.",
          "minutes": {
            "OPS": 30
          },
          "ai_runs": 0,
          "id": "R104.03"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Cài vào môi trường đã được nhận giúp chuyển từ ứng viên thử sang đúng bản chữ và phạm vi được quyết định.",
        "acceptance_checks": [
          "Log cài ghi gói, mã băm, host và cấu hình theo quyền.",
          "Kiểm nhanh và phương án quay lui có kết quả; không triển khai cho môi trường/đối tượng ngoài quyết định."
        ],
        "dependency_use": {
          "GD-CORE": "Quyết định nghiệm thu chữ xác định gói, môi trường và phạm vi được phép cài."
        }
      }
    },
    {
      "id": "R105",
      "package": "SD24",
      "title": "Kiểm nhận sản phẩm chữ trên máy đích",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "R104"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Kiểm tác vụ, nguồn, giới hạn và kênh hỗ trợ",
      "done_when": "Bản được giao khớp hồ sơ, không tự mở công khai",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm tác vụ chữ trên máy đích",
          "instructions": "Dùng dữ liệu được phép thử hỏi, nhận phản hồi và xem nguồn. So kết quả với bản nghiệm thu.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm tác vụ chữ trên máy đích",
          "done_when": "Nguồn và phiên bản đúng; không xem phản hồi 200 là đủ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R105.01"
        },
        {
          "title": "Kiểm đường lỗi và kênh hỗ trợ",
          "instructions": "Thử dữ liệu lỗi, thiếu nguồn và mất kết nối trong phạm vi. Đối chiếu hướng dẫn và người hỗ trợ.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm đường lỗi và kênh hỗ trợ",
          "done_when": "Biên bản ghi đủ kết quả và lỗi còn mở trước nhận sản phẩm.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R105.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Kiểm nhận trên máy đích giúp xác nhận bản thực đang phục vụ đúng nội dung và giới hạn đã bàn giao.",
        "acceptance_checks": [
          "Tác vụ chữ, nguồn, trạng thái lỗi và giới hạn được kiểm trên gói đã cài.",
          "Bản gói, hướng dẫn và kênh hỗ trợ khớp hồ sơ; chưa tự mở công khai."
        ],
        "dependency_use": {
          "R104": "Log và phiên bản cài trên máy được nhận cung cấp đối tượng thực để NCS kiểm tác vụ và hỗ trợ."
        }
      }
    },
    {
      "id": "R106",
      "package": "SD24",
      "title": "NCS1 tự hoàn thiện báo cáo và hồ sơ nghiên cứu",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 720
      },
      "ai_runs": 0,
      "deps": [
        "R105",
        "C20"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Tự viết bản đầu; dẫn dữ liệu; tách đóng góp hai NCS; kiểm hồ sơ AI",
      "done_when": "NCS tự giải thích, giữ nguồn gốc và giới hạn; không AI viết kết luận thay",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS1 tập hợp hồ sơ gốc",
          "instructions": "Đối chiếu bản đầu, phạm vi, công cụ nghiên cứu và dữ liệu hợp lệ. Lập danh mục phần cần cập nhật cho bản cuối.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 tập hợp hồ sơ gốc",
          "done_when": "Không dùng tài liệu AI thay lịch sử bản đầu.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R106.01"
        },
        {
          "title": "NCS1 viết phần thiết kế và triển khai",
          "instructions": "Tự mô tả quyết định kỹ thuật, đầu vào tri thức và phối hợp hai NCS. Dẫn hiện vật đúng phiên bản.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 viết phần thiết kế và triển khai",
          "done_when": "Mô tả phản ánh phần thực sự đã làm.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R106.02"
        },
        {
          "title": "NCS1 hoàn thiện phương pháp và kết quả",
          "instructions": "Tự đối chiếu dữ liệu với phương pháp khóa; kiểm bảng, hình và mẫu số. Giữ cả kết quả chưa đạt.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 hoàn thiện phương pháp và kết quả",
          "done_when": "Không suy kết luận vượt phạm vi dữ liệu.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R106.03"
        },
        {
          "title": "NCS1 viết giới hạn và đóng góp",
          "instructions": "Tự phân tích giới hạn của hệ thống, mẫu và quy trình. Tách đóng góp NCS1, NCS2, người review và AI.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 viết giới hạn và đóng góp",
          "done_when": "Không nhận công việc người khác là phần NCS tự làm.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R106.04"
        },
        {
          "title": "NCS1 kiểm tài liệu kèm và hồ sơ AI",
          "instructions": "Rà trích dẫn, quyền hình, phụ lục và nhật ký. Nối mã, gói phát hành, hướng dẫn và bằng chứng kiểm.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 kiểm tài liệu kèm và hồ sơ AI",
          "done_when": "Mỗi phụ lục có nguồn gốc và phạm vi được chia sẻ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R106.05"
        },
        {
          "title": "NCS1 đóng bản gửi review",
          "instructions": "So định dạng nộp, số trang và liên kết. Lưu bản đầu, lịch sử sửa và câu hỏi gửi GVHD.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 đóng bản gửi review",
          "done_when": "Có bản review hoàn chỉnh; chưa coi là hồ sơ đã được nhận.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R106.06"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "NCS1 cần tự nối kết quả, nguồn và đóng góp của mình thành hồ sơ nghiên cứu có thể giải trình.",
        "acceptance_checks": [
          "Bản đầu do NCS1 tự viết, dẫn dữ liệu và giữ lịch sử nguồn gốc.",
          "Đóng góp hai NCS, giới hạn và cách dùng AI được nêu rõ; AI không viết kết luận thay NCS."
        ],
        "dependency_use": {
          "R105": "Kết quả kiểm nhận chữ cung cấp phiên bản và bằng chứng sản phẩm cốt lõi để NCS1 mô tả đúng thực tế.",
          "C20": "Bằng chứng kiểm bản kết hợp giúp NCS1 trình bày phần tích hợp và giới hạn camera, tách khỏi đóng góp riêng."
        }
      }
    },
    {
      "id": "R107",
      "package": "SD24",
      "title": "NCS2 tự hoàn thiện phần camera và nhật ký",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 480
      },
      "ai_runs": 0,
      "deps": [
        "C20"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Tự trình bày căn cứ, phương pháp, sai số và đóng góp; đối chiếu phiên bản",
      "done_when": "Không bỏ kết quả xấu; mọi hình/bảng có nguồn và quyền",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS2 tự viết căn cứ và phạm vi camera",
          "instructions": "Đối chiếu CYK, nguồn, quyết định chọn chỉ số và giới hạn. Tự ghi phần đã kiểm và phần chưa đủ căn cứ.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS2 tự viết căn cứ và phạm vi camera",
          "done_when": "Không lấy tài liệu kỹ thuật thay bằng chứng y khoa.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R107.01"
        },
        {
          "title": "NCS2 tự trình bày phương pháp và triển khai",
          "instructions": "Mô tả protocol, chuẩn đối chiếu, thiết bị, người kiểm đo và xử lý tại thiết bị. Dẫn phiên bản thật.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS2 tự trình bày phương pháp và triển khai",
          "done_when": "Không trình bày phép thử ngoài phạm vi được cho phép.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R107.02"
        },
        {
          "title": "NCS2 tự viết kết quả và giới hạn",
          "instructions": "Đối chiếu sai số, không đo được, rút lui và riêng tư. Tự diễn giải trong phạm vi dữ liệu.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS2 tự viết kết quả và giới hạn",
          "done_when": "Không bỏ kết quả xấu hoặc tuyên bố chẩn đoán.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R107.03"
        },
        {
          "title": "NCS2 kiểm nhật ký và gói minh chứng",
          "instructions": "Đối chiếu mã, hình/bảng, nguồn, quyền và bản đầu. Ghi đóng góp cùng phần hỗ trợ AI, chuyển GVHD.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS2 kiểm nhật ký và gói minh chứng",
          "done_when": "Mọi hình/bảng có căn cứ và lịch sử NCS tự thực hiện.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "R107.04"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "NCS2 phải tự giải thích căn cứ và sai số camera để phần báo cáo phản ánh đúng những gì đã kiểm.",
        "acceptance_checks": [
          "Bản đầu nêu căn cứ, phương pháp, sai số, giới hạn và đóng góp của NCS2 theo phiên bản.",
          "Kết quả xấu vẫn được báo; từng hình/bảng có nguồn và quyền sử dụng."
        ],
        "dependency_use": {
          "C20": "Kết quả kiểm bản kết hợp và riêng tư cung cấp bằng chứng camera thực tế để NCS2 tự phân tích, không chỉ kể thiết kế."
        }
      }
    },
    {
      "id": "R108",
      "package": "SD24",
      "title": "Review hồ sơ học thuật và trình bày",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 180
      },
      "ai_runs": 0,
      "deps": [
        "R106",
        "R107"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Kiểm phương pháp, nguồn gốc, hạn nộp và AI; nghe NCS giải thích",
      "done_when": "NCS xử lý phản hồi; không điền chữ ký giả",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review phương pháp và tính nhất quán",
          "instructions": "Đọc hai phần báo cáo và đối chiếu dữ liệu/phương pháp. Ghi khác biệt giữa bản chữ và camera.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Review phương pháp và tính nhất quán",
          "done_when": "Có danh sách nhận xét theo vị trí.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R108.01"
        },
        {
          "title": "Review nguồn gốc và giới hạn",
          "instructions": "Kiểm bản đầu, nhật ký, hồ sơ AI và quyền công bố. Đối chiếu kết luận với phạm vi bằng chứng.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Review nguồn gốc và giới hạn",
          "done_when": "Không bỏ qua nguồn gốc chưa xác minh.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R108.02"
        },
        {
          "title": "Giao phản hồi để NCS tự sửa",
          "instructions": "Đọc giải trình NCS đã gửi; ghi câu hỏi cần chuẩn bị cho bảo vệ. Chốt danh mục sửa theo hạn nộp.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Giao phản hồi để NCS tự sửa",
          "done_when": "GVHD không viết kết luận hoặc phần học thuật thay NCS.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R108.03"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Review hồ sơ cùng phần giải thích của NCS giúp phát hiện lập luận chưa hiểu hoặc nguồn gốc chưa rõ trước khi nộp.",
        "acceptance_checks": [
          "Nhận xét đối chiếu phương pháp, nguồn, dữ liệu, hạn nộp và hồ sơ AI với hai bản đầu.",
          "Có ghi phần NCS cần tự sửa/giải thích; không điền chữ ký hoặc kết luận thay NCS."
        ],
        "dependency_use": {
          "R106": "Bản đầu và hồ sơ nguồn của NCS1 cung cấp phần chữ/tích hợp để GVHD review.",
          "R107": "Bản đầu camera của NCS2 cung cấp phương pháp, sai số và quyền hình/bảng để GVHD đối chiếu."
        }
      }
    },
    {
      "id": "R109",
      "package": "SD24",
      "title": "NCS1 sửa bản đầu và diễn tập trình bày",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 240
      },
      "ai_runs": 0,
      "deps": [
        "R108"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Tự sửa phản hồi; kiểm số liệu; chuẩn bị bản nộp đúng quy định",
      "done_when": "Có lịch sử chỉnh sửa và khả năng giải thích độc lập",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS1 sửa bản đầu theo nhận xét",
          "instructions": "Tự xử lý từng phản hồi, kiểm lại số liệu và lưu lý do giữ hoặc sửa. Giữ dấu vết phiên bản.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 sửa bản đầu theo nhận xét",
          "done_when": "Mọi nhận xét có phản hồi hoặc được ghi còn chờ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R109.01"
        },
        {
          "title": "NCS1 tự diễn tập trình bày",
          "instructions": "Tập giải thích thiết kế, kết quả, nguồn và giới hạn. Kiểm bản nộp đúng quy định, ghi câu chưa trả lời được.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS1 tự diễn tập trình bày",
          "done_when": "Có nội dung trình bày do NCS hiểu; không học thuộc kết luận do AI viết.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "R109.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "NCS1 tự sửa và diễn tập giúp kiểm khả năng giải thích bài làm, không chỉ có văn bản đã được góp ý.",
        "acceptance_checks": [
          "Lịch sử sửa nối từng phản hồi với phần NCS1 tự chỉnh và số liệu đã kiểm.",
          "Bản nộp phù hợp quy định; NCS1 giải thích được phương pháp, kết quả và giới hạn độc lập."
        ],
        "dependency_use": {
          "R108": "Nhận xét hồ sơ và phần trình bày xác định những điểm NCS1 phải tự sửa và luyện giải thích."
        }
      }
    },
    {
      "id": "R110",
      "package": "SD24",
      "title": "NCS2 sửa phần camera và diễn tập",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 180
      },
      "ai_runs": 0,
      "deps": [
        "R108"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Tự sửa; kiểm gói minh chứng; tập giải thích giới hạn",
      "done_when": "Số liệu và kết luận khớp bản được review",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS2 tự sửa phần camera",
          "instructions": "Đối chiếu phản hồi với nguồn và dữ liệu. Sửa phần diễn giải, hình/bảng và gói minh chứng.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS2 tự sửa phần camera",
          "done_when": "Không làm mất số liệu không thuận lợi.",
          "minutes": {
            "NCS2": 90
          },
          "ai_runs": 0,
          "id": "R110.01"
        },
        {
          "title": "NCS2 tự diễn tập phần camera",
          "instructions": "Tập giải thích protocol, chuẩn đo, sai số và giới hạn. Đối chiếu câu trả lời với phiên bản đã review.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS2 tự diễn tập phần camera",
          "done_when": "NCS giải thích được vì sao camera không chẩn đoán.",
          "minutes": {
            "NCS2": 90
          },
          "ai_runs": 0,
          "id": "R110.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "NCS2 cần tự sửa phần camera và giải thích sai số/giới hạn để bảo vệ đúng kết quả đã có.",
        "acceptance_checks": [
          "Bản sửa và gói minh chứng đối chiếu được với từng phản hồi review.",
          "Số liệu/kết luận khớp phiên bản đã xét; NCS2 tự giải thích được phần hạn chế camera."
        ],
        "dependency_use": {
          "R108": "Nhận xét hồ sơ chung xác định phần camera cần NCS2 chỉnh và chuẩn bị trả lời."
        }
      }
    },
    {
      "id": "R111",
      "package": "SD24",
      "title": "Kiểm quyền của gói bàn giao và công bố",
      "status": "PLANNED",
      "minutes": {
        "LEGAL": 120
      },
      "ai_runs": 0,
      "deps": [
        "R109",
        "R110"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Rà mã, nguồn, hình, dữ liệu và tài liệu theo đối tượng đọc",
      "done_when": "Phần không đủ quyền bị loại hoặc thay bằng dẫn nguồn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Lập danh mục tài nguyên cần bàn giao",
          "instructions": "Rà mã, nguồn, dữ liệu, hình và tài liệu. Gắn đối tượng đọc và bằng chứng quyền cho từng loại.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Lập danh mục tài nguyên cần bàn giao",
          "done_when": "Không coi quyền dùng nội bộ là quyền công bố.",
          "minutes": {
            "LEGAL": 60
          },
          "ai_runs": 0,
          "id": "R111.01"
        },
        {
          "title": "Ghi phần được chia sẻ và phần phải loại",
          "instructions": "Kiểm các mục thiếu quyền; đề nghị bỏ, thay bằng dẫn nguồn hoặc chờ xét. Trả bảng quyết định đúng phiên bản.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Ghi phần được chia sẻ và phần phải loại",
          "done_when": "Không có dữ liệu hạn chế lọt vào gói công bố.",
          "minutes": {
            "LEGAL": 60
          },
          "ai_runs": 0,
          "id": "R111.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Gói bàn giao hoặc công bố có thể chứa tài nguyên với quyền khác nhau nên phải xét đúng đối tượng đọc.",
        "acceptance_checks": [
          "Danh sách mã, nguồn, hình, dữ liệu và tài liệu ghi quyền theo kênh/đối tượng nhận.",
          "Phần không đủ quyền bị loại hoặc thay bằng dẫn nguồn; quyết định không mặc định áp toàn bộ kho."
        ],
        "dependency_use": {
          "R109": "Bản NCS1 đã tự sửa xác định tài liệu, hình và dữ liệu chữ cần rà quyền trước bàn giao.",
          "R110": "Bản NCS2 đã sửa cùng minh chứng camera xác định các tài nguyên camera cần kiểm quyền."
        }
      }
    },
    {
      "id": "R112",
      "package": "SD24",
      "title": "Nhận gói kết hợp, quyền và tài liệu",
      "status": "PLANNED",
      "minutes": {
        "OPS": 180
      },
      "ai_runs": 0,
      "deps": [
        "C23",
        "R111",
        "C28",
        "GCB-R"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Kiểm cài/khôi phục; nhận khóa đúng quyền; xác nhận người hỗ trợ",
      "done_when": "Có người nhận thật; không bàn giao bí mật qua báo cáo",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Nhận bản kê kết hợp và cấu hình",
          "instructions": "Đối chiếu C28, GCB-R và hồ sơ quyền. Kiểm hash, phiên bản, nơi giữ và tài liệu.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Nhận bản kê kết hợp và cấu hình",
          "done_when": "Không dùng bản kê chữ cũ cho mã camera mới.",
          "minutes": {
            "OPS": 60
          },
          "ai_runs": 0,
          "id": "R112.01"
        },
        {
          "title": "Kiểm khả năng cài và phục hồi gói nhận",
          "instructions": "Đọc biên bản thử và thao tác theo hướng dẫn được giao. Ghi phần chưa làm lại được để trả người soạn.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm khả năng cài và phục hồi gói nhận",
          "done_when": "Không nhận gói chỉ vì file tồn tại.",
          "minutes": {
            "OPS": 60
          },
          "ai_runs": 0,
          "id": "R112.02"
        },
        {
          "title": "Nhận trách nhiệm và thông tin truy cập",
          "instructions": "Xác nhận người quản, người hỗ trợ, giờ liên hệ và cách chuyển lỗi. Nhận khóa qua kênh được phép.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Nhận trách nhiệm và thông tin truy cập",
          "done_when": "Có người nhận thật; không chép bí mật vào báo cáo.",
          "minutes": {
            "OPS": 60
          },
          "ai_runs": 0,
          "id": "R112.03"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Người vận hành cần nhận đúng gói kết hợp và hiểu giới hạn camera trước khi nhận trách nhiệm hệ thống.",
        "acceptance_checks": [
          "Biên bản đối chiếu gói, mã băm, quyền, cài/khôi phục và đầu mối hỗ trợ.",
          "Khóa được chuyển theo quyền qua kênh phù hợp, không đưa bí mật vào báo cáo; người nhận là người đã xác nhận thật."
        ],
        "dependency_use": {
          "C23": "Kết quả tập hỗ trợ camera xác định đầu mối có thể xử lý quyền, dừng và không đo được.",
          "R111": "Hồ sơ rà quyền xác định tài nguyên nào được giao cho người nhận và đối tượng đọc.",
          "C28": "Bản kê riêng gói kết hợp xác định mã, cấu hình, DB và phiên bản cần nhận.",
          "GCB-R": "Kết quả xét tác động cổng sau tích hợp xác định gói có đủ điều kiện giữ nguyên hoặc đã được xét lại để nhận."
        }
      }
    },
    {
      "id": "GD",
      "package": "SD24",
      "title": "Phiên nghiệm thu gói kết hợp",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R112",
        "C22",
        "R109",
        "R110"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Tổng hợp cổng chữ/camera, hồ sơ AI, quyền, người nhận và lỗi",
      "done_when": "Chỉ phát hành đúng phạm vi đã được quyết định; Q07 chưa đạt thì giữ camera tắt",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Phiên nghiệm thu gói kết hợp",
          "instructions": "Tổng hợp cổng chữ/camera, hồ sơ AI, quyền, người nhận và lỗi.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Phiên nghiệm thu gói kết hợp",
          "done_when": "Chỉ phát hành đúng phạm vi đã được quyết định; Q07 chưa đạt thì giữ camera tắt.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "GD.01"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Nghiệm thu gói kết hợp xác định phiên bản và phạm vi chữ/camera được bàn giao sau các lượt kiểm và review.",
        "acceptance_checks": [
          "Hồ sơ đối chiếu cổng chữ/camera, quyền, người nhận, lỗi và hồ sơ AI theo đúng gói.",
          "Quyết định thực ghi phạm vi phát hành; Q07 chưa đạt thì camera vẫn tắt, không được mở theo lịch."
        ],
        "dependency_use": {
          "R112": "Biên bản người vận hành nhận gói kết hợp cung cấp xác nhận tiếp quản và phần còn thiếu.",
          "C22": "Review hướng dẫn camera cuối cung cấp câu an toàn và giới hạn cần đi cùng sản phẩm được xét.",
          "R109": "Bản học thuật NCS1 đã sửa cung cấp phần hồ sơ chữ/tích hợp dùng khi nghiệm thu nghiên cứu.",
          "R110": "Bản camera NCS2 đã sửa cung cấp số liệu và giới hạn đã đối chiếu để xét gói kết hợp."
        }
      }
    },
    {
      "id": "R113",
      "package": "SD24",
      "title": "Cài bản kết hợp vào môi trường được phép",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "GD"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Dùng gói đã xét; kiểm nhanh; giám sát và chuẩn bị quay lui",
      "done_when": "Có log cài và phiên bản, không triển khai ngoài môi trường được nhận",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm điều kiện trước cài bản kết hợp",
          "instructions": "Đối chiếu GD, hash gói, môi trường và bản quay lại. Kiểm quyền bật camera đúng thiết bị/phạm vi.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm điều kiện trước cài bản kết hợp",
          "done_when": "Điều kiện không khớp phải dừng.",
          "minutes": {
            "OPS": 30
          },
          "ai_runs": 0,
          "id": "R113.01"
        },
        {
          "title": "Cài gói kết hợp đã được xét",
          "instructions": "Thực hiện theo hướng dẫn và cấu hình đã nhận. Ghi log từng điểm kiểm và phiên bản thực.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Cài gói kết hợp đã được xét",
          "done_when": "Không tự mở rộng đối tượng đọc hoặc thiết bị hỗ trợ.",
          "minutes": {
            "OPS": 60
          },
          "ai_runs": 0,
          "id": "R113.02"
        },
        {
          "title": "Kiểm nhanh sau cài và chuyển kiểm nhận",
          "instructions": "Kiểm dịch vụ, nhật ký và cơ chế quay lui. Gửi phiên bản gói, lỗi và môi trường cho hai NCS.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm nhanh sau cài và chuyển kiểm nhận",
          "done_when": "Có biên bản cài để R114/R115 kiểm tiếp.",
          "minutes": {
            "OPS": 30
          },
          "ai_runs": 0,
          "id": "R113.03"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Cài bản kết hợp phải bám đúng quyết định nghiệm thu để không vô ý triển khai camera hoặc dữ liệu ra ngoài phạm vi.",
        "acceptance_checks": [
          "Log cài ghi mã băm, host, cấu hình và phiên bản gói kết hợp.",
          "Có kiểm nhanh, theo dõi và phương án quay lui; không cài ngoài môi trường được nhận."
        ],
        "dependency_use": {
          "GD": "Quyết định nghiệm thu gói kết hợp xác định phiên bản, môi trường và điều kiện tính năng được phép cài."
        }
      }
    },
    {
      "id": "R114",
      "package": "SD24",
      "title": "Kiểm nhận sản phẩm kết hợp",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "R113"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Thử luồng chữ/camera tắt/bật đúng quyền bằng dữ liệu được phép",
      "done_when": "Sản phẩm, tài liệu cài/sử dụng và hỗ trợ khớp phiên bản",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm nhận phần chữ và camera tắt",
          "instructions": "Thử luồng chữ, nguồn và đường lỗi bằng dữ liệu được phép. Xác nhận chữ vẫn hoạt động khi camera bị tắt.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm nhận phần chữ và camera tắt",
          "done_when": "Kết quả khớp phạm vi bản được giao.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R114.01"
        },
        {
          "title": "Kiểm luồng kết hợp được phép",
          "instructions": "Thử bật camera đúng quyền, nhận chỉ số và dừng. So hướng dẫn sử dụng, cấu hình và kênh hỗ trợ.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm luồng kết hợp được phép",
          "done_when": "Không dùng phép kiểm này thay nghiên cứu trên người hoặc phê duyệt mở rộng.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R114.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Kiểm nhận sau cài giúp biết ứng dụng, tài liệu và hỗ trợ đang cùng một phiên bản trên máy đích.",
        "acceptance_checks": [
          "Có kết quả luồng chữ và camera tắt/bật theo quyền bằng dữ liệu được phép.",
          "Gói đang chạy khớp tài liệu cài/sử dụng và đầu mối hỗ trợ; lỗi còn mở được ghi."
        ],
        "dependency_use": {
          "R113": "Log và bản kết hợp đã cài cung cấp trạng thái thực để NCS1 kiểm nhận toàn sản phẩm."
        }
      }
    },
    {
      "id": "R115",
      "package": "SD24",
      "title": "Kiểm nhận nhánh camera trên máy đích",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 120
      },
      "ai_runs": 0,
      "deps": [
        "R114"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Kiểm quyền, thiết bị, giới hạn và không đo được",
      "done_when": "Kết quả chỉ là quan sát cử động. Luôn hiện lời nhắc camera chỉ thấy cử động bên ngoài. Cấm gửi hoặc lưu video, khung hình và khung xương; chỉ lưu chỉ số được phép.",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm thiết bị và quyền camera trên máy đích",
          "instructions": "Đối chiếu ma trận thiết bị, trình duyệt và quyền. Kiểm mở, từ chối, đóng và giải phóng thiết bị.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm thiết bị và quyền camera trên máy đích",
          "done_when": "Thiết bị ngoài phạm vi vẫn ghi chưa hỗ trợ.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R115.01"
        },
        {
          "title": "Kiểm giới hạn và trạng thái không đo được",
          "instructions": "Thử các tình huống được phép, trạng thái lỗi và cảnh báo. Đối chiếu hướng dẫn và dữ liệu truyền/lưu.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Kiểm giới hạn và trạng thái không đo được",
          "done_when": "Kết quả chỉ là quan sát cử động. Luôn hiện lời nhắc camera chỉ thấy cử động bên ngoài. Cấm gửi hoặc lưu video, khung hình và khung xương; chỉ lưu chỉ số được phép.",
          "minutes": {
            "NCS2": 60
          },
          "ai_runs": 0,
          "id": "R115.02"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Kiểm camera trên máy đích giúp xác nhận quyền, thiết bị và giới hạn vẫn đúng sau triển khai.",
        "acceptance_checks": [
          "Ca quyền, thiết bị, dừng và không đo được có kết quả trên phiên bản đã cài.",
          "Kết quả hiện lời nhắc camera chỉ thấy cử động bên ngoài; không chẩn đoán.",
          "Không gửi/lưu video, khung hình hoặc khung xương; chỉ số chỉ được lưu trong phạm vi được phép."
        ],
        "dependency_use": {
          "R114": "Kết quả kiểm nhận bản kết hợp xác định gói và các luồng chung đã kiểm trước khi NCS2 kiểm riêng camera."
        }
      }
    },
    {
      "id": "R116",
      "package": "SD18",
      "title": "Kiểm vận hành sau một tuần",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "R115"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "steps": "Kiểm nhật ký tối thiểu, backup, tài nguyên và lỗi phản hồi",
      "done_when": "Lỗi chặn được xử lý theo quy trình; có bằng chứng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "lag_business_days": 5,
      "work_steps": [
        {
          "title": "Kiểm vận hành sau tuần đầu bản kết hợp",
          "instructions": "Đối chiếu bản đang chạy với R115. Rà log tối thiểu, sao lưu, tài nguyên và lỗi phản hồi trong phạm vi được phép; ghi sự cố, người nhận và cách xử lý theo sổ tay.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Biên bản tuần đầu bản kết hợp",
          "done_when": "Lỗi chặn được chuyển đúng quy trình; không chép dữ liệu cá nhân vào báo cáo chung.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R116.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Theo dõi tuần đầu giúp phát hiện lỗi chỉ xuất hiện khi sản phẩm đã được bàn giao và vận hành đúng phạm vi.",
        "acceptance_checks": [
          "Biên bản đối chiếu log tối thiểu, backup, tài nguyên và phiếu lỗi theo phiên bản thực.",
          "Lỗi chặn được chuyển theo quy trình, có bằng chứng và người nhận xử lý."
        ],
        "dependency_use": {
          "R115": "Kết quả kiểm camera trên máy đích xác định bản kết hợp đã nhận và giới hạn cần theo dõi tuần đầu."
        }
      }
    },
    {
      "id": "R117",
      "package": "SD18",
      "title": "Tổng hợp hỗ trợ tuần đầu",
      "status": "PLANNED",
      "minutes": {
        "SUPPORT": 60
      },
      "ai_runs": 0,
      "deps": [
        "R116"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "steps": "Đọc phiếu lỗi đúng quyền; ghi tác vụ khó và chuyển người chịu trách nhiệm",
      "done_when": "Không đưa dữ liệu cá nhân vào báo cáo chung",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Tổng hợp hỗ trợ tuần đầu và chuyển việc",
          "instructions": "Đọc phiếu hỗ trợ đúng quyền, nhóm lỗi/tác vụ khó và đối chiếu đầu mối. Lập số lượng, trạng thái và người nhận xử lý; chỉ dùng thông tin tối thiểu cần thiết.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Bảng hỗ trợ tuần đầu",
          "done_when": "Không đưa dữ liệu cá nhân vào báo cáo chung; mỗi lỗi còn mở có người nhận.",
          "minutes": {
            "SUPPORT": 60
          },
          "ai_runs": 0,
          "id": "R117.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Tổng hợp hỗ trợ giúp chuyển những thao tác khó và lỗi lặp lại tới đúng người xử lý.",
        "acceptance_checks": [
          "Bảng tổng hợp nêu lỗi/tác vụ khó, trạng thái và đầu mối nhận từ phiếu được phép đọc.",
          "Báo cáo chung không chứa dữ liệu cá nhân hoặc thông tin ngoài phạm vi cần thiết."
        ],
        "dependency_use": {
          "R116": "Biên bản tuần đầu cung cấp lỗi vận hành và trạng thái xử lý để đối chiếu phiếu hỗ trợ."
        }
      }
    },
    {
      "id": "R118",
      "package": "SD22",
      "title": "Rà bảo trì và quyền sau một tháng",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "R116"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md",
      "steps": "Kiểm backup/phục hồi mẫu, chứng chỉ, phụ thuộc và nguồn bị thu hồi",
      "done_when": "Có lịch duy trì, chủ trách nhiệm và quy tắc dừng dịch vụ; bao gồm app/API/DB, tài khoản, khóa, nhà cung cấp và bản sao",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "lag_business_days": 15,
      "work_steps": [
        {
          "title": "Rà duy trì và quyền sau tháng đầu",
          "instructions": "Theo R116, kiểm sao lưu/phục hồi mẫu, chứng chỉ, phụ thuộc và nguồn bị rút trong phạm vi được phép. Rà app/API/DB, tài khoản, khóa, nhà cung cấp và bản sao; ghi việc cần quyết định.",
          "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md — Biên bản tháng đầu và lịch duy trì",
          "done_when": "Có chủ trách nhiệm, điều kiện dừng và giới hạn đã kiểm; không mặc nhiên gia hạn quyền.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "R118.01"
        }
      ],
      "source_paths": [
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi.",
      "reader_notes": {
        "purpose": "Rà sau tháng đầu giúp nhận diện quyền, chứng chỉ hoặc phụ thuộc cần cập nhật trước khi chúng làm gián đoạn dịch vụ.",
        "acceptance_checks": [
          "Có kết quả kiểm backup/phục hồi mẫu, chứng chỉ, phụ thuộc và nguồn bị thu hồi.",
          "Lịch duy trì, chủ trách nhiệm và điều kiện dừng bao phủ app/API/DB, tài khoản, khóa, nhà cung cấp và bản sao."
        ],
        "dependency_use": {
          "R116": "Biên bản tuần đầu cung cấp trạng thái nền và các lỗi cần theo dõi tiếp khi rà tháng đầu."
        }
      }
    },
    {
      "id": "R119",
      "package": "SD22",
      "title": "Kiểm thời hạn giữ và hồ sơ ngừng",
      "status": "PLANNED",
      "minutes": {
        "DATA": 60
      },
      "ai_runs": 0,
      "deps": [
        "R118"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md",
      "steps": "Kiểm dữ liệu tới hạn; xác nhận nơi giữ/bản sao; cập nhật kế hoạch xóa",
      "done_when": "Không thực hiện xóa chỉ vì đến ngày kế hoạch; tuân quyết định đã ghi; bao gồm app/API/DB, tài khoản, khóa, nhà cung cấp và bản sao",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Kiểm dữ liệu tới hạn và hồ sơ ngừng",
          "instructions": "Đối chiếu thời hạn giữ, nơi giữ và bản sao với quyết định hiện có. Kiểm app/API/DB, tài khoản, khóa và nhà cung cấp liên quan; đề xuất xử lý hoặc chuyển người có quyền.",
          "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md — Phiếu dữ liệu tới hạn và kế hoạch ngừng",
          "done_when": "Không xóa chỉ vì đến ngày dự kiến; mọi thao tác thật cần quyết định phù hợp.",
          "minutes": {
            "DATA": 60
          },
          "ai_runs": 0,
          "id": "R119.01"
        }
      ],
      "source_paths": [
        "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md",
        "docs/guides/DAC_TA_KIEM_TRA_TRUOC_XUAT_BAN.md",
        "tools/KIEM_TRA_TRUOC_XUAT_BAN.py",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
      ],
      "resume_note": "Kế thừa nguyên mẫu kiểm trước xuất và quy trình nháp. Bổ sung quyền thật, tích hợp kiểm, thu hồi, xử lý cache và ngừng dịch vụ đúng phạm vi.",
      "reader_notes": {
        "purpose": "Kiểm dữ liệu tới hạn giúp việc lưu/xóa bám quyết định thực và không bỏ sót bản sao hoặc bên đang giữ dữ liệu.",
        "acceptance_checks": [
          "Phiếu đối chiếu thời hạn, nơi giữ, bản sao và quyết định cho từng phạm vi liên quan.",
          "Kế hoạch ngừng nêu app/API/DB, tài khoản, khóa và nhà cung cấp; không xóa chỉ vì đến ngày dự kiến."
        ],
        "dependency_use": {
          "R118": "Kết quả rà bảo trì và quyền xác định những nguồn, tài khoản và bản sao cần kiểm thời hạn hoặc xử lý khi ngừng."
        }
      }
    },
    {
      "id": "R120",
      "package": "SD24",
      "title": "Chốt trách nhiệm sau bàn giao",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R117",
        "R119"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Xác nhận người vận hành, hỗ trợ, review tri thức và xử lý ngừng",
      "done_when": "Không để trách nhiệm kết thúc cùng buổi nghiệm thu",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Thiếu đầu vào thì dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chốt trách nhiệm sau bàn giao",
          "instructions": "Xác nhận người vận hành, hỗ trợ, review tri thức và xử lý ngừng.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Chốt trách nhiệm sau bàn giao",
          "done_when": "Không để trách nhiệm kết thúc cùng buổi nghiệm thu.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "R120.01"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Trách nhiệm sau bàn giao phải được nhận rõ để hỗ trợ và review tri thức không kết thúc cùng buổi nghiệm thu.",
        "acceptance_checks": [
          "Có xác nhận người vận hành, hỗ trợ, review tri thức và xử lý ngừng theo phạm vi.",
          "Tồn đọng từ hỗ trợ/dữ liệu có người nhận, cách chuyển và điều kiện theo dõi tiếp."
        ],
        "dependency_use": {
          "R117": "Bảng hỗ trợ tuần đầu cung cấp lỗi/tác vụ còn mở cần giao trách nhiệm dài hơn.",
          "R119": "Hồ sơ thời hạn và ngừng dịch vụ cung cấp các việc dữ liệu/quyền cần có người tiếp tục quản lý."
        }
      }
    },
    {
      "id": "K02A",
      "package": "SD04",
      "title": "Lô 2: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R122",
        "K01A",
        "MK02D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_02/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_02/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K02A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_02/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K02A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_02/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K02A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_02/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K02A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_02/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K02A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_02/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K02A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 2 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R122": "Kết luận sau lô đầu xác định phạm vi cùng dự toán đã hiệu chỉnh trước khi làm thêm lô nội dung.",
          "K01A": "Bản nháp và bản kê lô 1 giúp tránh trùng ID, câu hỏi hoặc nguồn khi soạn lô 2.",
          "MK02D": "Markdown lô 2 đã sửa, kiểm lại và ghi quyền; lỗi mở vẫn chặn sử dụng."
        }
      }
    },
    {
      "id": "K02B",
      "package": "SD04",
      "title": "Lô 2: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K02A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K02B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K02B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K02B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 2 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K02A": "Bản nháp, nguồn và bản kê lô 2 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K02C",
      "package": "SD04",
      "title": "Lô 2: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K02B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K02C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K02C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 2 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K02B": "Nhận xét theo từng mục của lô 2 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K02D",
      "package": "SD04",
      "title": "Lô 2: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K02C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Chỉ tiếp tục nếu lô trước đạt và ước lượng đã hiệu chỉnh.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K02D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 2 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K02C": "Bản sửa và truy vết lô 2 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "K03A",
      "package": "SD04",
      "title": "Lô 3: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R122",
        "K02A",
        "MK03D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_03/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_03/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K03A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_03/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K03A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_03/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K03A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_03/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K03A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_03/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K03A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_03/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K03A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 3 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R122": "Kết luận sau lô đầu xác định phạm vi cùng dự toán đã hiệu chỉnh trước khi làm thêm lô nội dung.",
          "K02A": "Bản nháp và bản kê lô 2 giúp tránh trùng ID, câu hỏi hoặc nguồn khi soạn lô 3.",
          "MK03D": "Markdown lô 3 đã sửa, kiểm lại và ghi quyền; lỗi mở vẫn chặn sử dụng."
        }
      }
    },
    {
      "id": "K03B",
      "package": "SD04",
      "title": "Lô 3: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K03A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K03B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K03B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K03B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 3 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K03A": "Bản nháp, nguồn và bản kê lô 3 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K03C",
      "package": "SD04",
      "title": "Lô 3: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K03B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K03C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K03C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 3 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K03B": "Nhận xét theo từng mục của lô 3 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K03D",
      "package": "SD04",
      "title": "Lô 3: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K03C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Chỉ tiếp tục nếu lô trước đạt và ước lượng đã hiệu chỉnh.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K03D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 3 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K03C": "Bản sửa và truy vết lô 3 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "K04A",
      "package": "SD04",
      "title": "Lô 4: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R122",
        "K03A",
        "MK04D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_04/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_04/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K04A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_04/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K04A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_04/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K04A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_04/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K04A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_04/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K04A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_04/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K04A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 4 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R122": "Kết luận sau lô đầu xác định phạm vi cùng dự toán đã hiệu chỉnh trước khi làm thêm lô nội dung.",
          "K03A": "Bản nháp và bản kê lô 3 giúp tránh trùng ID, câu hỏi hoặc nguồn khi soạn lô 4.",
          "MK04D": "Markdown lô 4 đã sửa, kiểm lại và ghi quyền; lỗi mở vẫn chặn sử dụng."
        }
      }
    },
    {
      "id": "K04B",
      "package": "SD04",
      "title": "Lô 4: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K04A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K04B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K04B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K04B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 4 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K04A": "Bản nháp, nguồn và bản kê lô 4 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K04C",
      "package": "SD04",
      "title": "Lô 4: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K04B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K04C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K04C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 4 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K04B": "Nhận xét theo từng mục của lô 4 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K04D",
      "package": "SD04",
      "title": "Lô 4: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K04C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Chỉ tiếp tục nếu lô trước đạt và ước lượng đã hiệu chỉnh.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K04D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 4 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K04C": "Bản sửa và truy vết lô 4 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "K05A",
      "package": "SD04",
      "title": "Lô 5: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R122",
        "K04A",
        "MK05D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_05/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_05/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K05A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_05/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K05A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_05/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K05A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_05/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K05A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_05/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K05A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_05/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K05A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 5 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R122": "Kết luận sau lô đầu xác định phạm vi cùng dự toán đã hiệu chỉnh trước khi làm thêm lô nội dung.",
          "K04A": "Bản nháp và bản kê lô 4 giúp tránh trùng ID, câu hỏi hoặc nguồn khi soạn lô 5.",
          "MK05D": "Markdown lô 5 đã sửa, kiểm lại và ghi quyền; lỗi mở vẫn chặn sử dụng."
        }
      }
    },
    {
      "id": "K05B",
      "package": "SD04",
      "title": "Lô 5: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K05A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K05B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K05B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K05B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 5 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K05A": "Bản nháp, nguồn và bản kê lô 5 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K05C",
      "package": "SD04",
      "title": "Lô 5: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K05B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K05C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K05C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 5 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K05B": "Nhận xét theo từng mục của lô 5 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K05D",
      "package": "SD04",
      "title": "Lô 5: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K05C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Chỉ tiếp tục nếu lô trước đạt và ước lượng đã hiệu chỉnh.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K05D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 5 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K05C": "Bản sửa và truy vết lô 5 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "K06A",
      "package": "SD04",
      "title": "Lô 6: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R122",
        "K05A",
        "MK06D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_06/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_06/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K06A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_06/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K06A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_06/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K06A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_06/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K06A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_06/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K06A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_06/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K06A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 6 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R122": "Kết luận sau lô đầu xác định phạm vi cùng dự toán đã hiệu chỉnh trước khi làm thêm lô nội dung.",
          "K05A": "Bản nháp và bản kê lô 5 giúp tránh trùng ID, câu hỏi hoặc nguồn khi soạn lô 6.",
          "MK06D": "Markdown lô 6 đã sửa, kiểm lại và ghi quyền; lỗi mở vẫn chặn sử dụng."
        }
      }
    },
    {
      "id": "K06B",
      "package": "SD04",
      "title": "Lô 6: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K06A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K06B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K06B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K06B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 6 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K06A": "Bản nháp, nguồn và bản kê lô 6 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K06C",
      "package": "SD04",
      "title": "Lô 6: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K06B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K06C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K06C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 6 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K06B": "Nhận xét theo từng mục của lô 6 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K06D",
      "package": "SD04",
      "title": "Lô 6: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K06C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Chỉ tiếp tục nếu lô trước đạt và ước lượng đã hiệu chỉnh.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K06D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 6 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K06C": "Bản sửa và truy vết lô 6 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "K07A",
      "package": "SD04",
      "title": "Lô 7: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R122",
        "K06A",
        "MK07D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_07/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_07/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K07A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_07/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K07A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_07/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K07A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_07/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K07A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_07/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K07A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_07/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K07A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 7 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R122": "Kết luận sau lô đầu xác định phạm vi cùng dự toán đã hiệu chỉnh trước khi làm thêm lô nội dung.",
          "K06A": "Bản nháp và bản kê lô 6 giúp tránh trùng ID, câu hỏi hoặc nguồn khi soạn lô 7.",
          "MK07D": "Markdown lô 7 đã sửa, kiểm lại và ghi quyền; lỗi mở vẫn chặn sử dụng."
        }
      }
    },
    {
      "id": "K07B",
      "package": "SD04",
      "title": "Lô 7: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K07A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K07B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K07B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K07B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 7 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K07A": "Bản nháp, nguồn và bản kê lô 7 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K07C",
      "package": "SD04",
      "title": "Lô 7: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K07B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K07C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K07C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 7 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K07B": "Nhận xét theo từng mục của lô 7 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K07D",
      "package": "SD04",
      "title": "Lô 7: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K07C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Chỉ tiếp tục nếu lô trước đạt và ước lượng đã hiệu chỉnh.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K07D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 7 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K07C": "Bản sửa và truy vết lô 7 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "K08A",
      "package": "SD04",
      "title": "Lô 8: đọc nguồn, hoàn thiện 5 thẻ và 5 FAQ",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R122",
        "K07A",
        "MK08D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/LO_08/",
      "steps": "Đối chiếu bản nháp có sẵn; kiểm nguồn/trang; viết và tự kiểm phạm vi",
      "done_when": "5 thẻ và 5 FAQ có ID, nguồn, quyền, câu an toàn; chưa tự APPROVED",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chọn bản nháp của lô",
          "instructions": "Mở 5 thẻ và 5 FAQ dự kiến. Tái sử dụng DRAFT, kiểm ID và trùng chủ đề. Không sửa nội dung đã APPROVED ngoài quyền.",
          "output": "knowledge-base/releases/LO_08/ — Danh sách bản nháp tái sử dụng",
          "done_when": "Phần đã có, phần sửa và phần thiếu được ghi riêng.",
          "minutes": {
            "NCS1": 45
          },
          "ai_runs": 0,
          "id": "K08A.01"
        },
        {
          "title": "Đọc nguồn cho 5 thẻ",
          "instructions": "Đọc nguồn gốc có mục tiêu tại trang hoặc mục được dẫn. Ghi phát biểu, đối tượng, giới hạn và phiên bản. Không số hóa lại toàn thư viện.",
          "output": "knowledge-base/releases/LO_08/ — Phiếu nguồn và locator cho 5 thẻ",
          "done_when": "Mỗi phát biểu có vị trí kiểm chứng hoặc được đánh dấu thiếu.",
          "minutes": {
            "NCS1": 90
          },
          "ai_runs": 0,
          "id": "K08A.02"
        },
        {
          "title": "Đối chiếu 5 FAQ với nguồn",
          "instructions": "So câu hỏi, câu trả lời dự kiến, thẻ và quy tắc an toàn. Ghi mâu thuẫn, cờ đỏ và giới hạn; không tự giải quyết bất đồng chuyên môn.",
          "output": "knowledge-base/releases/LO_08/ — Bảng FAQ–thẻ–nguồn và bất đồng",
          "done_when": "Câu trả lời không suy rộng vượt nguồn; bất đồng có người nhận.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K08A.03"
        },
        {
          "title": "Hoàn thiện bản nháp 5 thẻ",
          "instructions": "Sửa DRAFT đã chọn theo phiếu nguồn. Ghi locator, phiên bản và giới hạn. Giữ trạng thái thật; không gán người review hoặc APPROVED.",
          "output": "knowledge-base/releases/LO_08/ — Bản nháp 5 thẻ có truy vết",
          "done_when": "Nội dung có nguồn; phần thiếu căn cứ vẫn ghi chờ.",
          "minutes": {
            "NCS1": 75
          },
          "ai_runs": 0,
          "id": "K08A.04"
        },
        {
          "title": "Hoàn thiện bản nháp 5 FAQ",
          "instructions": "Viết câu trả lời ngắn theo nguồn đã đối chiếu. Nối thẻ, nguồn và lời khuyên an toàn. Ghi câu hỏi cần CVYK quyết định.",
          "output": "knowledge-base/releases/LO_08/ — Bản nháp 5 FAQ có truy vết",
          "done_when": "Không tạo lời khuyên điều trị cụ thể hoặc bỏ thuốc.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K08A.05"
        },
        {
          "title": "Tự kiểm và bàn giao lô",
          "instructions": "Kiểm schema, thuật ngữ, liên kết và số lượng dự kiến. Ghi phiên bản, câu hỏi cho CVYK và thời gian sửa thực tế.",
          "output": "knowledge-base/releases/LO_08/ — Bản kê lô và kết quả tự kiểm",
          "done_when": "Lỗi cấu trúc được xử lý; lô chưa tự được phê duyệt chuyên môn.",
          "minutes": {
            "NCS1": 30
          },
          "ai_runs": 0,
          "id": "K08A.06"
        }
      ],
      "source_paths": [
        "docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md",
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Lô 8 cần bản nháp có nguồn để CVYK xét từng nội dung. Tái sử dụng bản có sẵn giúp tập trung vào phần còn thiếu.",
        "acceptance_checks": [
          "Có 5 thẻ và 5 FAQ theo phạm vi lô dự kiến, dùng lại bản nháp phù hợp.",
          "Mỗi mục có ID, nguồn, trang hoặc mục dẫn, quyền và câu an toàn.",
          "Đã tự kiểm phạm vi; không tự gán APPROVED."
        ],
        "dependency_use": {
          "R122": "Kết luận sau lô đầu xác định phạm vi cùng dự toán đã hiệu chỉnh trước khi làm thêm lô nội dung.",
          "K07A": "Bản nháp và bản kê lô 7 giúp tránh trùng ID, câu hỏi hoặc nguồn khi soạn lô 8.",
          "MK08D": "Markdown lô 8 đã sửa, kiểm lại và ghi quyền; lỗi mở vẫn chặn sử dụng."
        }
      }
    },
    {
      "id": "K08B",
      "package": "SD04",
      "title": "Lô 8: review nội dung chuyên môn",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 180
      },
      "ai_runs": 0,
      "deps": [
        "K08A"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đọc nguyên văn nguồn liên quan; xem diễn giải; ghi lỗi và giới hạn",
      "done_when": "Có phản hồi từng mục và phiên bản, không duyệt theo số lượng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xét nguồn và 5 thẻ",
          "instructions": "CVYK đọc nguồn gốc và từng thẻ. Kiểm đối tượng, phát biểu, giới hạn và mâu thuẫn. Ghi nhận xét theo ID và phiên bản.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review nguồn và thẻ",
          "done_when": "Nhận xét có căn cứ; không chỉ xác nhận đủ số lượng.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K08B.01"
        },
        {
          "title": "Xét 5 FAQ và an toàn",
          "instructions": "CVYK đọc từng FAQ, câu trả lời và nguồn. Kiểm cờ đỏ, giới hạn và lời khuyên an toàn. Ghi yêu cầu sửa theo ID.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu review FAQ và an toàn",
          "done_when": "Câu trả lời không vượt căn cứ hoặc phạm vi sản phẩm.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K08B.02"
        },
        {
          "title": "Bàn giao kết luận từng mục",
          "instructions": "CVYK ghi kết luận thực, ưu tiên sửa và câu hỏi còn mở cho từng ID. Nêu điều kiện xét lại; không duyệt theo số lượng.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phiếu kết luận và sửa đổi theo ID",
          "done_when": "Review không tự chuyển APPROVED; phần thiếu vẫn giữ trạng thái thật.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K08B.03"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Diễn giải trong lô 8 có thể sai dù đã dẫn nguồn. CVYK cần đọc nguồn gốc và phản hồi theo từng thẻ, FAQ.",
        "acceptance_checks": [
          "Nguồn gốc liên quan được đối chiếu với diễn giải trong từng mục.",
          "Có phản hồi về lỗi và giới hạn theo ID, phiên bản.",
          "Không duyệt chỉ vì đã đủ số lượng."
        ],
        "dependency_use": {
          "K08A": "Bản nháp, nguồn và bản kê lô 8 xác định đúng nội dung CVYK cần xét."
        }
      }
    },
    {
      "id": "K08C",
      "package": "SD04",
      "title": "Lô 8: sửa và kiểm lại theo phản hồi",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 120
      },
      "ai_runs": 0,
      "deps": [
        "K08B"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Sửa mục bị đánh dấu; kiểm schema; cập nhật truy vết thay đổi",
      "done_when": "Đủ bằng chứng xử lý; lỗi xung đột vẫn chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Sửa theo phản hồi chuyên môn",
          "instructions": "NCS1 đối chiếu từng nhận xét với nguồn và bản nháp. Sửa đúng phạm vi; ghi phần chưa giải quyết. Không tự xử lý bất đồng y khoa.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Bảng phản hồi–thay đổi và nội dung sửa",
          "done_when": "Mỗi nhận xét có trạng thái; mâu thuẫn nguồn còn lại được ghi rõ.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K08C.01"
        },
        {
          "title": "Kiểm lại và gửi xét bản sửa",
          "instructions": "Kiểm schema, thuật ngữ và liên kết. Ghi thay đổi theo ID, phiên bản và bằng chứng rồi gửi CVYK. Không tự đổi quyết định chuyên môn.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Kết quả kiểm và gói xét lại",
          "done_when": "NCS không tự gán APPROVED; người xét nhận đúng phiên bản sửa.",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "K08C.02"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Phản hồi chuyên môn của lô 8 phải được chuyển thành thay đổi có thể kiểm lại. Giữ dấu vết giúp CVYK biết lỗi nào đã xử lý.",
        "acceptance_checks": [
          "Mục bị đánh dấu có sửa đổi và bằng chứng đối chiếu phản hồi.",
          "Cấu trúc thẻ được kiểm và truy vết thay đổi được cập nhật.",
          "Xung đột chưa giải quyết tiếp tục chặn nội dung."
        ],
        "dependency_use": {
          "K08B": "Nhận xét theo từng mục của lô 8 xác định nội dung cần sửa và điểm còn phải hỏi CVYK."
        }
      }
    },
    {
      "id": "K08D",
      "package": "SD04",
      "title": "Lô 8: phiên xét nội dung đã sửa",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 60
      },
      "ai_runs": 0,
      "deps": [
        "K08C"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu phản hồi; ghi quyết định đúng trạng thái; khóa phiên bản nếu đạt",
      "done_when": "Chỉ người có thẩm quyền đổi trạng thái thật",
      "condition": "Chỉ tiếp tục nếu lô trước đạt và ước lượng đã hiệu chỉnh.",
      "decision": true,
      "work_steps": [
        {
          "title": "CVYK xét lại bản sửa",
          "instructions": "Đọc phần đã sửa và nguồn liên quan. Ghi quyết định thực theo từng ID và phiên bản. Chỉ người có thẩm quyền cập nhật trạng thái khi đủ căn cứ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Quyết định thực theo ID và phiên bản",
          "done_when": "Không mặc định mọi mục đạt; mâu thuẫn hoặc thiếu căn cứ tiếp tục chờ.",
          "minutes": {
            "CVYK": 60
          },
          "ai_runs": 0,
          "id": "K08D.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Nội dung lô 8 sau sửa cần được xét lại trước khi đổi trạng thái. Chỉ người có thẩm quyền mới ghi quyết định thực.",
        "acceptance_checks": [
          "Phần sửa được đối chiếu với phản hồi trước.",
          "Quyết định gắn đúng trạng thái và phiên bản từng mục.",
          "Chỉ người có thẩm quyền đổi trạng thái; chỉ khóa phiên bản nếu đạt."
        ],
        "dependency_use": {
          "K08C": "Bản sửa và truy vết lô 8 cho CVYK kiểm cách xử lý phản hồi trước khi kết luận."
        }
      }
    },
    {
      "id": "R121",
      "package": "SD04",
      "title": "Đo và hiệu chỉnh dự toán lô sau",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 60
      },
      "ai_runs": 0,
      "deps": [
        "K01D"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Ghi giờ thật, lỗi và số mục sửa; so dự toán; đề xuất lại phạm vi Q04",
      "done_when": "Không nhân rộng lô khi chưa hiểu năng suất thực",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Đo và hiệu chỉnh dự toán lô sau",
          "instructions": "Ghi giờ thật, lỗi và số mục sửa; so dự toán; đề xuất lại phạm vi Q04. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phần R121: Đo và hiệu chỉnh dự toán lô sau",
          "done_when": "Không nhân rộng lô khi chưa hiểu năng suất thực",
          "minutes": {
            "NCS1": 60
          },
          "ai_runs": 0,
          "id": "R121.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Giờ dự toán ban đầu chưa phản ánh công sức sửa thực tế. Lô đầu cung cấp dữ liệu để điều chỉnh các lô sau.",
        "acceptance_checks": [
          "Có giờ thật, lỗi và số mục phải sửa của lô đầu.",
          "Kết quả được so với dự toán và đưa vào đề xuất Q04.",
          "Chưa hiểu năng suất thực thì chưa nhân rộng lô."
        ],
        "dependency_use": {
          "K01D": "Kết quả xét lại lô đầu xác định phạm vi đã xử lý và phần sửa để đối chiếu giờ thực."
        }
      }
    },
    {
      "id": "R122",
      "package": "SD04",
      "title": "Xem xét phạm vi và lịch sau lô đầu",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 30
      },
      "ai_runs": 0,
      "deps": [
        "R121",
        "R031"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json",
      "steps": "Đối chiếu độ bao phủ, giờ CVYK và khả dụng; xác nhận lịch còn lại",
      "done_when": "Nếu đổi số thẻ/FAQ thì sửa dữ liệu lịch và sinh lại",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "decision": true,
      "work_steps": [
        {
          "title": "Xem xét phạm vi và lịch sau lô đầu",
          "instructions": "Đối chiếu độ bao phủ, giờ CVYK và khả dụng; xác nhận lịch còn lại. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
          "output": "knowledge-base/releases/BAN_KE_LO_TRI_THUC.json — Phần R122: Xem xét phạm vi và lịch sau lô đầu",
          "done_when": "Nếu đổi số thẻ/FAQ thì sửa dữ liệu lịch và sinh lại",
          "minutes": {
            "GVHD": 30
          },
          "ai_runs": 0,
          "id": "R122.01"
        }
      ],
      "source_paths": [
        "knowledge-base/evidence-matrix/source_registry.csv",
        "docs/legal/W1_D02_RightsRegister.csv",
        "knowledge-base/knowledge-cards/W1_D03_KnowledgeCards_v0.1.md",
        "knowledge-base/faq/W1_D05_FAQ_Draft_v0.1.md"
      ],
      "resume_note": "Kế thừa nguồn đã số hóa, sổ quyền và thẻ/FAQ nháp. Hoàn thiện lô nhỏ có định vị nguồn, review, sửa và bản kê phát hành thật.",
      "reader_notes": {
        "purpose": "Số lượng nội dung chỉ khả thi khi đủ thời gian review và bao phủ nhu cầu. Lịch còn lại cần dựa vào lô đã làm thực.",
        "acceptance_checks": [
          "Độ bao phủ, giờ CVYK và khả dụng được đối chiếu.",
          "Kết luận phạm vi và lịch còn lại được ghi rõ.",
          "Nếu số thẻ hoặc FAQ thay đổi, dữ liệu lịch phải sửa và sinh lại."
        ],
        "dependency_use": {
          "R121": "Dữ liệu giờ và lỗi thực của lô đầu cho biết dự toán nào cần điều chỉnh.",
          "R031": "Đối chiếu CYK cho biết phần đọc chung đã có và phần camera còn phải làm thêm."
        }
      }
    },
    {
      "id": "R123",
      "package": "SD15",
      "title": "Review lại nội dung và hướng dẫn sau thử chữ",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 120
      },
      "ai_runs": 0,
      "deps": [
        "R101",
        "R097"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Đối chiếu thay đổi; kiểm câu an toàn; xác nhận bản hoặc yêu cầu mở lại đánh giá",
      "done_when": "Không dùng R085/R070 để duyệt nội dung phiên bản mới",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review nội dung và hướng dẫn bản chữ sau thử",
          "instructions": "Đọc thay đổi R101 và phản hồi R097; so nguồn, câu an toàn và phạm vi đã được xét. Ghi nhận xét/ quyết định đúng bản hoặc yêu cầu mở lại đánh giá.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Biên bản review chuyên môn sau thử chữ",
          "done_when": "Không dùng R085/R070 để duyệt nội dung mới; NCS không tự điền kết quả review.",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "R123.01"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Nội dung và hướng dẫn sau thử có thể khác bản đã duyệt nên cần được xét lại đúng phiên bản.",
        "acceptance_checks": [
          "Nhận xét đối chiếu thay đổi với nguồn, phạm vi và câu an toàn của bản mới.",
          "Biên bản ghi xác nhận đúng thẩm quyền hoặc yêu cầu mở lại đánh giá; không dùng R085/R070 để duyệt thay."
        ],
        "dependency_use": {
          "R101": "Bản chữ sau sửa xác định mã/nội dung mới cần CVYK xem tác động.",
          "R097": "Hướng dẫn sửa từ quan sát thực cung cấp câu chữ và tác vụ cần review chuyên môn lại."
        }
      }
    },
    {
      "id": "C24",
      "package": "SD08",
      "title": "Tập quy trình hỗ trợ camera trước thử",
      "status": "PLANNED",
      "minutes": {
        "SUPPORT": 120
      },
      "ai_runs": 0,
      "deps": [
        "C13",
        "C10"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Dùng dữ liệu tổng hợp; thực hành dừng, không đo được và gọi hỗ trợ theo protocol",
      "done_when": "Người hỗ trợ làm lại đúng; không dùng huấn luyện chữ thay camera",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Tập quy trình hỗ trợ camera trước thử",
          "instructions": "Dùng dữ liệu tổng hợp; thực hành dừng, không đo được và gọi hỗ trợ theo protocol. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ. Dùng dữ liệu giả để kiểm người nhận tự làm lại. Ghi lỗi thao tác và sửa hướng dẫn trước buổi được phép.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C24: Tập quy trình hỗ trợ camera trước thử",
          "done_when": "Người hỗ trợ làm lại đúng; không dùng huấn luyện chữ thay camera",
          "minutes": {
            "SUPPORT": 120
          },
          "ai_runs": 0,
          "id": "C24.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Người hỗ trợ phải thực hành tình huống camera trước khi thử người. Tập chữ không đủ để xác nhận cách dừng phép đo hoặc xử lý thiếu hình.",
        "acceptance_checks": [
          "Dữ liệu tổng hợp được dùng để tập dừng và không đo được.",
          "Người hỗ trợ làm lại đúng cách gọi hỗ trợ theo quy trình.",
          "Không dùng huấn luyện chữ thay phần camera."
        ],
        "dependency_use": {
          "C13": "Review an toàn xác định điểm dừng và vai hỗ trợ phải tập trước buổi đo.",
          "C10": "Bản thử đã khóa cung cấp đúng giao diện, lỗi và cấu hình để tập hỗ trợ camera."
        }
      }
    },
    {
      "id": "C25",
      "package": "SD08",
      "title": "Tập ghi chuẩn đối chiếu trước thử",
      "status": "PLANNED",
      "minutes": {
        "MEASURE": 120
      },
      "ai_runs": 0,
      "deps": [
        "C24"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Làm lại thao tác trên dữ liệu giả; đối chiếu điểm bắt đầu/kết thúc; ghi sai khác",
      "done_when": "Người kiểm đo hiểu quy trình; không dùng người thật trước GC-C",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Tập ghi chuẩn đối chiếu trước thử",
          "instructions": "Làm lại thao tác trên dữ liệu giả; đối chiếu điểm bắt đầu/kết thúc; ghi sai khác. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ. Dùng dữ liệu giả để kiểm người nhận tự làm lại. Ghi lỗi thao tác và sửa hướng dẫn trước buổi được phép.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C25: Tập ghi chuẩn đối chiếu trước thử",
          "done_when": "Người kiểm đo hiểu quy trình; không dùng người thật trước GC-C",
          "minutes": {
            "MEASURE": 120
          },
          "ai_runs": 0,
          "id": "C25.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Chuẩn đối chiếu phải được ghi nhất quán với sự kiện đầu và cuối. Người kiểm đo cần làm lại trên dữ liệu giả trước khi thử người.",
        "acceptance_checks": [
          "Có kết quả làm lại thao tác ghi chuẩn bằng dữ liệu giả.",
          "Điểm bắt đầu, kết thúc và sai khác được đối chiếu.",
          "Người kiểm đo hiểu quy trình; chưa dùng người thật trước GC-C."
        ],
        "dependency_use": {
          "C24": "Kết quả tập hỗ trợ camera xác định trình tự phối hợp và dừng để người kiểm đo luyện ghi chuẩn đúng buổi thử."
        }
      }
    },
    {
      "id": "CORE-DOC",
      "package": "SD24",
      "title": "NCS tự hoàn thiện hồ sơ bàn giao chữ độc lập",
      "status": "PLANNED",
      "minutes": {
        "NCS1": 360
      },
      "ai_runs": 0,
      "deps": [
        "R100"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Tự hoàn thiện báo cáo, tài liệu, nguồn gốc và giới hạn chữ; kiểm bản nộp",
      "done_when": "Có gói học thuật và kỹ thuật chữ nếu camera phải dừng",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "NCS lập gói hồ sơ chữ độc lập",
          "instructions": "Tập hợp bản đầu, dữ liệu, phương pháp và hiện vật chữ. Ghi rõ camera chưa là điều kiện nghiệm thu gói này.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS lập gói hồ sơ chữ độc lập",
          "done_when": "Không chờ kết quả camera để hoàn thiện hồ sơ chữ.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "CORE-DOC.01"
        },
        {
          "title": "NCS tự hoàn thiện báo cáo chữ",
          "instructions": "Tự viết phần còn thiếu về kết quả, giới hạn và đóng góp. Đối chiếu số liệu với R099/R100.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS tự hoàn thiện báo cáo chữ",
          "done_when": "Không dùng tài liệu quản trị AI thay bản đầu.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "CORE-DOC.02"
        },
        {
          "title": "NCS kiểm hướng dẫn và gói bàn giao chữ",
          "instructions": "Rà quyền, phiên bản, mã, cài đặt, sử dụng và hỗ trợ. Chuẩn bị hồ sơ gửi CORE-REV.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — NCS kiểm hướng dẫn và gói bàn giao chữ",
          "done_when": "Có bộ hồ sơ chữ đầy đủ trong phạm vi được xét.",
          "minutes": {
            "NCS1": 120
          },
          "ai_runs": 0,
          "id": "CORE-DOC.03"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Hồ sơ chữ độc lập giúp nhóm vẫn bàn giao được phần có bằng chứng nếu camera phải dừng.",
        "acceptance_checks": [
          "NCS tự hoàn thiện bản đầu, nguồn gốc, dữ liệu và giới hạn của nhánh chữ.",
          "Gói hồ sơ học thuật/kỹ thuật đủ để review riêng, không lấy nội dung camera chưa đạt để lấp chỗ thiếu."
        ],
        "dependency_use": {
          "R100": "Nhận xét bản đầu chữ xác định các phần NCS phải tự sửa để có hồ sơ độc lập hoàn chỉnh."
        }
      }
    },
    {
      "id": "CORE-REV",
      "package": "SD24",
      "title": "Review hồ sơ chữ độc lập",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "CORE-DOC"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md",
      "steps": "Xem bản đầu, dữ liệu, quyền và giới hạn; yêu cầu NCS sửa nếu cần",
      "done_when": "Không phụ thuộc quyết định GCB của camera",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review hồ sơ chữ độc lập",
          "instructions": "Xem bản đầu, dữ liệu, quyền và giới hạn; yêu cầu NCS sửa nếu cần.",
          "output": "docs/reports/HO_SO_BAN_GIAO_SAN_PHAM.md — Review hồ sơ chữ độc lập",
          "done_when": "Không phụ thuộc quyết định GCB của camera.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "CORE-REV.01"
        }
      ],
      "source_paths": [
        "docs/research/reports/OUTLINE_BAO_CAO_15_TRANG.md",
        "docs/research/requirements/PHU_LUC_6_MAU_BAO_CAO_KET_QUA.md",
        "docs/project/HO_SO_SU_DUNG_AI.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md"
      ],
      "resume_note": "Kế thừa khung báo cáo, hồ sơ AI và mẫu bằng chứng. NCS tự phân tích, viết bản đầu; bổ sung nghiệm thu, kiểm nhận và người nhận vận hành.",
      "reader_notes": {
        "purpose": "Review riêng hồ sơ chữ giúp quyết định nhánh này dựa trên bằng chứng của nó thay vì chờ camera.",
        "acceptance_checks": [
          "Nhận xét đối chiếu bản đầu, dữ liệu, quyền và giới hạn của gói chữ.",
          "Phần cần sửa được giao NCS; kết luận review không phụ thuộc việc camera đạt GCB."
        ],
        "dependency_use": {
          "CORE-DOC": "Gói hồ sơ chữ độc lập do NCS hoàn thiện cung cấp tài liệu để GVHD xem trước nghiệm thu riêng."
        }
      }
    },
    {
      "id": "CORE-W1",
      "package": "SD18",
      "title": "Theo dõi tuần đầu sản phẩm chữ",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "R105"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md",
      "steps": "Kiểm lỗi, nhật ký, backup và đầu mối hỗ trợ sau giao chữ",
      "done_when": "Nhánh chữ có vận hành dù camera chưa đạt",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "lag_business_days": 5,
      "work_steps": [
        {
          "title": "Kiểm tuần đầu riêng cho sản phẩm chữ",
          "instructions": "Theo bản giao R105, kiểm lỗi, log tối thiểu, sao lưu và đầu mối hỗ trợ. Ghi trạng thái app/API/DB của nhánh chữ và việc cần xử lý, dù camera chưa đạt.",
          "output": "deployment/SO_TAY_QUAN_TRI_VA_SU_CO.md — Biên bản tuần đầu nhánh chữ",
          "done_when": "Có trách nhiệm vận hành nhánh chữ; không chờ camera để bỏ kiểm sau bàn giao.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "CORE-W1.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Nhánh chữ cần được theo dõi ngay sau giao dù camera chưa được tích hợp hoặc chưa đạt.",
        "acceptance_checks": [
          "Biên bản tuần đầu ghi lỗi, log, backup và đầu mối hỗ trợ của đúng bản chữ.",
          "Lỗi mở có người xử lý; không bỏ theo dõi chữ vì đang chờ camera."
        ],
        "dependency_use": {
          "R105": "Kết quả kiểm nhận chữ trên máy đích xác định bản và phạm vi bắt đầu theo dõi vận hành."
        }
      }
    },
    {
      "id": "CORE-M1",
      "package": "SD18",
      "title": "Rà tháng đầu sản phẩm chữ",
      "status": "PLANNED",
      "minutes": {
        "OPS": 120
      },
      "ai_runs": 0,
      "deps": [
        "CORE-W1"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md",
      "steps": "Kiểm nguồn/quyền, bản sao, phụ thuộc và lịch hỗ trợ",
      "done_when": "Có trách nhiệm duy trì chữ độc lập; bao gồm app/API/DB, tài khoản, khóa, nhà cung cấp và bản sao",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "lag_business_days": 15,
      "work_steps": [
        {
          "title": "Rà tháng đầu riêng cho sản phẩm chữ",
          "instructions": "Đối chiếu CORE-W1, kiểm nguồn/quyền, bản sao, phụ thuộc và hỗ trợ. Rà app/API/DB, tài khoản/khóa, nhà cung cấp; ghi lịch duy trì và điều kiện ngừng nhánh chữ.",
          "output": "deployment/QUY_TRINH_CAP_NHAT_THU_HOI_VA_NGUNG.md — Biên bản tháng đầu nhánh chữ",
          "done_when": "Trách nhiệm chữ độc lập rõ; không gia hạn nguồn hoặc xóa dữ liệu ngoài quyết định.",
          "minutes": {
            "OPS": 120
          },
          "ai_runs": 0,
          "id": "CORE-M1.01"
        }
      ],
      "source_paths": [
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
        "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
        "safety/risk_register.md"
      ],
      "resume_note": "Kế thừa tài liệu vận hành và sổ rủi ro. Bổ sung người nhận, theo dõi, thay khóa, sự cố và diễn tập chuyển xử lý đúng phạm vi.",
      "reader_notes": {
        "purpose": "Rà tháng đầu giữ trách nhiệm vận hành chữ liên tục, độc lập với tiến độ camera.",
        "acceptance_checks": [
          "Có đối chiếu nguồn/quyền, bản sao, phụ thuộc và lịch hỗ trợ nhánh chữ.",
          "Chủ trách nhiệm và điều kiện duy trì/ngừng bao phủ app/API/DB, tài khoản, khóa và nhà cung cấp."
        ],
        "dependency_use": {
          "CORE-W1": "Biên bản tuần đầu chữ cung cấp trạng thái nền và lỗi còn mở để rà duy trì sau một tháng."
        }
      }
    },
    {
      "id": "G0",
      "package": "SD01",
      "title": "Phiên xét G0 đầy đủ",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R005",
        "Q03",
        "R019",
        "R012",
        "R026",
        "R090"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/project/YEU_CAU_VA_TRUY_VET.md",
      "steps": "Kiểm D01–D04/D09, điều khoản, giờ, schema và hồ sơ T01–T06",
      "done_when": "Thiếu điều kiện thì tiếp tục chuẩn bị, không mở công việc bị chặn",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Phiên xét G0 đầy đủ",
          "instructions": "Kiểm D01–D04/D09, điều khoản, giờ, schema và hồ sơ T01–T06.",
          "output": "docs/project/YEU_CAU_VA_TRUY_VET.md — Phiên xét G0 đầy đủ",
          "done_when": "Thiếu điều kiện thì tiếp tục chuẩn bị, không mở công việc bị chặn.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "G0.01"
        }
      ],
      "source_paths": [
        "docs/project/project_charter.md",
        "docs/project/intended_use.md",
        "docs/project/SO_QUYET_DINH_THAY_DOI.md",
        "docs/research/plans/KE_HOACH_CON_LAI/DOI_SOAT_HIEN_TRANG.md"
      ],
      "resume_note": "Kế thừa điều lệ, mục đích sử dụng và bằng chứng đã làm. Bổ sung yêu cầu còn thiếu, người nhận, phạm vi và quyết định mở.",
      "reader_notes": {
        "purpose": "Cổng G0 đầy đủ kiểm các điều kiện chung trước khi mở những việc triển khai còn bị chặn.",
        "acceptance_checks": [
          "Hồ sơ đối chiếu phạm vi, quy định, quyền, giờ, schema, môi trường và hồ sơ T01–T06.",
          "Quyết định thực ghi đủ điều kiện hoặc phần phải tiếp tục chuẩn bị; lịch không tự mở cổng."
        ],
        "dependency_use": {
          "R005": "Ma trận yêu cầu đã kiểm cung cấp phạm vi và tiêu chí cần đối chiếu trong hồ sơ G0.",
          "Q03": "Quyết định quyền nguồn/dịch vụ cung cấp bằng chứng thao tác nào được phép mở.",
          "R019": "Review hợp đồng dữ liệu và bộ kiểm cung cấp bằng chứng schema không còn mâu thuẫn kỹ thuật bị bỏ qua.",
          "R012": "Hướng dẫn môi trường đã sửa cung cấp bằng chứng tái lập và những giới hạn cần nêu.",
          "R026": "Review bảo mật cung cấp rủi ro, cách xử lý và điều kiện trước triển khai.",
          "R090": "Review hoạt động chữ dự kiến cung cấp giới hạn câu hỏi, rủi ro và điểm dừng cần đưa vào hồ sơ chung."
        }
      }
    },
    {
      "id": "GB",
      "package": "SD15",
      "title": "Phiên xét GB trước đánh giá cuối",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 60
      },
      "ai_runs": 0,
      "deps": [
        "R080",
        "R065",
        "R053",
        "R074"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Kiểm test kỹ thuật, phiên bản, bảo mật, UI, phục hồi và tập đã khóa",
      "done_when": "Có quyết định thực trước chạy đánh giá y khoa cuối",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "decision": true,
      "lag_business_days": 2,
      "work_steps": [
        {
          "title": "Xét GB trước mở bộ đánh giá cuối",
          "instructions": "Kiểm R080/R065/R053/R074: test kỹ thuật, bản gói, bảo mật, UI, phục hồi và tập khóa. GVHD ghi quyết định thật hoặc yêu cầu bổ sung trước đánh giá y khoa cuối.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Biên bản xét GB",
          "done_when": "Không mở tập cuối vì đã tới ngày lịch; không cấp quyền thử với người.",
          "minutes": {
            "GVHD": 60
          },
          "ai_runs": 0,
          "id": "GB.01"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Xét GB trước đánh giá cuối giữ bộ ca khóa không bị dùng quá sớm khi bản hệ thống chưa đủ điều kiện kỹ thuật.",
        "acceptance_checks": [
          "Hồ sơ khớp gói, test kỹ thuật, bảo mật, UI, phục hồi và trạng thái tập đã khóa.",
          "Có quyết định thực trước mở đánh giá y khoa cuối; không suy GB thành GC cho hoạt động với người."
        ],
        "dependency_use": {
          "R080": "Kết quả kiểm độc lập hệ thống cho biết lỗi chặn và phạm vi bảo mật/tải/trợ năng đã kiểm.",
          "R065": "Review phục hồi cung cấp bằng chứng có thể dừng/quay lại khi hệ thống lỗi.",
          "R053": "Mẫu ghi kết quả và công cụ tính cung cấp cách giữ đúng mẫu số và ca lỗi trong đánh giá cuối.",
          "R074": "Review tài liệu/cài độc lập cung cấp bằng chứng bản chạy có thể cài và xử lý lỗi theo hướng dẫn."
        }
      }
    },
    {
      "id": "R124",
      "package": "SD14",
      "title": "Xử lý bộ cuối đã dùng để sửa và khóa tập thay thế",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_YK": 240
      },
      "ai_runs": 0,
      "deps": [
        "R083"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md",
      "steps": "Ghi tập đã lộ thành tập phát triển; tạo/khóa ca thay thế theo tiêu chí cũ",
      "done_when": "Không tuyên bố độc lập khi tái dùng đáp án để sửa",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Xử lý bộ cuối đã dùng để sửa",
          "instructions": "Người review ghi ca đã dùng sửa sản phẩm. Chuyển vai trò bộ đó thành phát triển; giữ lịch sử và lý do.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Biên bản mất độc lập của bộ ca",
          "done_when": "Không tuyên bố bộ đã dùng sửa vẫn độc lập.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R124.01"
        },
        {
          "title": "Khóa bộ thay thế",
          "instructions": "Tạo và xét ca thay thế theo tiêu chí đã khóa và nguồn. Kiểm trùng lặp, khóa nhãn, phân quyền và ghi phiên bản.",
          "output": "testing/KE_HOACH_KIEM_THU_TONG_THE.md — Bộ thay thế và bản kê khóa",
          "done_when": "Độc lập có bằng chứng; thiếu năng lực hoặc nguồn phải ghi chờ.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R124.02"
        }
      ],
      "source_paths": [
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "safety/W1_D05_SafetyTests_v0.1.yaml",
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"
      ],
      "resume_note": "Kế thừa quy ước nhãn, mẫu báo cáo và ca kiểm nháp. Bổ sung tiêu chí khóa, bộ phát triển/đánh giá riêng và phương pháp camera phù hợp.",
      "reader_notes": {
        "purpose": "Bộ cuối đã dùng sửa sản phẩm sẽ mất tính độc lập. Phải ghi nhận thay đổi đó và chuẩn bị bộ thay thế trước đánh giá lại.",
        "acceptance_checks": [
          "Tập đã lộ đáp án được ghi thành tập phát triển.",
          "Ca thay thế theo tiêu chí cũ được tạo và khóa.",
          "Không tuyên bố độc lập khi tái dùng đáp án để sửa."
        ],
        "dependency_use": {
          "R083": "Bằng chứng vòng sửa cho biết ca đánh giá nào đã được dùng sửa và cần thay thế."
        }
      }
    },
    {
      "id": "R125",
      "package": "SD15",
      "title": "Đánh giá lại một vòng trên tập thay thế",
      "status": "PLANNED",
      "minutes": {
        "REVIEW_YK": 240
      },
      "ai_runs": 0,
      "deps": [
        "R124",
        "R084"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "testing/BAO_CAO_KIEM_HE_THONG.md",
      "steps": "Chấm gói sửa với tập mới; giữ mẫu số và ngưỡng; báo tất cả lỗi",
      "done_when": "Nếu còn lỗi chặn thì dừng, thêm vòng và lập lại lịch",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Chấm phần đầu tập thay thế trên bản sửa",
          "instructions": "Kiểm đầu ra R124/R084 và quyền reviewer; nhận tập thay thế đã khóa. Chấm tuần tự phần đầu bằng tiêu chí/ngưỡng giữ nguyên; ghi mọi lỗi và ID ca.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Phiếu chấm tập thay thế phần đầu",
          "done_when": "Không tái dùng tập đã lộ để nâng điểm; không sửa nhãn sau thấy kết quả.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R125.01"
        },
        {
          "title": "Hoàn tất tập thay thế và tổng hợp vòng đánh giá",
          "instructions": "Chấm các ca còn lại, đối chiếu mẫu số và cộng kết quả. Ghi lỗi chặn, bất đồng và bằng chứng để CVYK xét; nếu chưa đạt, ghi cần vòng mới và lập lại lịch.",
          "output": "testing/BAO_CAO_KIEM_HE_THONG.md — Kết quả vòng đánh giá lại",
          "done_when": "Báo toàn bộ lỗi; không tự thêm vòng trong dự toán hoặc nhận đạt khi còn lỗi chặn.",
          "minutes": {
            "REVIEW_YK": 120
          },
          "ai_runs": 0,
          "id": "R125.02"
        }
      ],
      "source_paths": [
        "docs/reports/20260926_BIEN_BAN_NANG_CAP_DOT_3.md",
        "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
        "docs/guides/TEST_REPORT_TEMPLATE.md",
        "tools/KIEM_TRA_CXK.ps1"
      ],
      "resume_note": "Kế thừa phép kiểm kỹ thuật và kết quả có phạm vi. Bổ sung kiểm sản phẩm thật, review độc lập, sửa lỗi và đánh giá lại bằng bộ phù hợp.",
      "reader_notes": {
        "purpose": "Tập thay thế giúp đánh giá bản sửa mà không giả định bộ đáp án đã dùng sửa mã vẫn độc lập.",
        "acceptance_checks": [
          "Phiếu chấm gắn gói sửa và tập mới, giữ tiêu chí/ngưỡng/mẫu số đã khóa, gồm mọi lỗi.",
          "Kết quả nêu rõ lỗi chặn; chưa đạt thì dừng và lập lại lịch cho vòng mới, không tự nhận hoàn tất."
        ],
        "dependency_use": {
          "R124": "Tập thay thế đã khóa và hồ sơ bộ cũ đã lộ cung cấp đầu vào độc lập để chấm lại.",
          "R084": "Gói sửa đã kiểm lại kỹ thuật xác định phiên bản được đưa vào lượt đánh giá thay thế."
        }
      }
    },
    {
      "id": "C26",
      "package": "SD08",
      "title": "Review phương pháp camera trước xin phép",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 90
      },
      "ai_runs": 0,
      "deps": [
        "C11"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Rà mục tiêu, mẫu, chuẩn đo, dữ liệu thiếu và phân tích do NCS viết",
      "done_when": "Phương pháp có nhận xét trước trình GC-C",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review phương pháp camera trước xin phép",
          "instructions": "Rà mục tiêu, mẫu, chuẩn đo, dữ liệu thiếu và phân tích do NCS viết. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C26: Review phương pháp camera trước xin phép",
          "done_when": "Phương pháp có nhận xét trước trình GC-C",
          "minutes": {
            "GVHD": 90
          },
          "ai_runs": 0,
          "id": "C26.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Thiết kế nghiên cứu camera cần nhận xét trước khi xin phép. Việc này giúp phát hiện thiếu chuẩn đo hoặc cách xử lý dữ liệu thiếu.",
        "acceptance_checks": [
          "Có nhận xét về mục tiêu, mẫu và chuẩn đo.",
          "Dữ liệu thiếu và cách phân tích do NCS viết được rà.",
          "Nhận xét phương pháp có trước khi trình GC-C."
        ],
        "dependency_use": {
          "C11": "Bản phương pháp NCS2 tự viết là nội dung GVHD rà trước hồ sơ xin phép camera."
        }
      }
    },
    {
      "id": "C27",
      "package": "SD08",
      "title": "Review tác động tích hợp camera",
      "status": "PLANNED",
      "minutes": {
        "CVYK": 120
      },
      "ai_runs": 0,
      "deps": [
        "C20"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Kiểm phản hồi, câu an toàn và nguồn trong UI kết hợp; xem thay đổi phạm vi",
      "done_when": "Đúng phiên bản; nếu đổi protocol hoặc đối tượng phải xét lại GC-C",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Review tác động tích hợp camera",
          "instructions": "Kiểm phản hồi, câu an toàn và nguồn trong UI kết hợp; xem thay đổi phạm vi. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ. Ghi review từng nội dung và phiên bản. Tách phần đủ, cần sửa và điều kiện xét lại; không tự gán APPROVED.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần C27: Review tác động tích hợp camera",
          "done_when": "Đúng phiên bản; nếu đổi protocol hoặc đối tượng phải xét lại GC-C",
          "minutes": {
            "CVYK": 120
          },
          "ai_runs": 0,
          "id": "C27.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Tích hợp có thể đổi lời phản hồi hoặc phạm vi sử dụng dù phép đo không đổi. CVYK cần xét tác động này trên đúng giao diện kết hợp.",
        "acceptance_checks": [
          "Phản hồi, câu an toàn và nguồn trong giao diện kết hợp được kiểm.",
          "Nhận xét gắn đúng phiên bản.",
          "Thay quy trình hoặc đối tượng phải xét lại GC-C."
        ],
        "dependency_use": {
          "C20": "Kết quả kiểm bản kết hợp xác định phiên bản và đường phản hồi thực để CVYK xét tác động chuyên môn."
        }
      }
    },
    {
      "id": "C28",
      "package": "SD16",
      "title": "Đóng gói riêng bản kết hợp",
      "status": "PLANNED",
      "minutes": {
        "NCS2": 240
      },
      "ai_runs": 0,
      "deps": [
        "C20",
        "C27"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "deployment/BAN_KE_PHAT_HANH_KET_HOP.md",
      "steps": "Build hai nhánh; lập hash, cấu hình, phụ thuộc, DB và bản quay lại",
      "done_when": "Không tái dùng bản kê chữ R057 cho mã camera mới",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "work_steps": [
        {
          "title": "Dựng và đối chiếu các thành phần bản kết hợp",
          "instructions": "Nhận đầu ra C20/C27, dựng đúng hai nhánh và kiểm phiên bản API/UI/camera/tri thức. Đối chiếu cấu hình, DB và phụ thuộc; không dùng gói chữ cũ cho mã camera mới.",
          "output": "deployment/BAN_KE_PHAT_HANH_KET_HOP.md — Log dựng bản kết hợp",
          "done_when": "Đúng thành phần đã kiểm; lỗi hoặc sai phiên bản được ghi chặn.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C28.01"
        },
        {
          "title": "Lập bản kê riêng và phương án quay lại",
          "instructions": "Tính mã băm, ghi giấy phép, cấu hình, DB và bản tương thích để quay lại. Đính kèm kết quả kiểm, giới hạn camera và điều kiện sử dụng; chưa phát hành tự động.",
          "output": "deployment/BAN_KE_PHAT_HANH_KET_HOP.md — Bản kê phát hành kết hợp",
          "done_when": "Không tái dùng R057 làm bản kê cho mã mới; mọi thành phần truy vết được.",
          "minutes": {
            "NCS2": 120
          },
          "ai_runs": 0,
          "id": "C28.02"
        }
      ],
      "source_paths": [
        "docs/guides/MOI_TRUONG_VA_DONG_GOP.md",
        "backend/requirements.txt",
        "frontend/package-lock.json",
        "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
      ],
      "resume_note": "Kế thừa phụ thuộc và quy trình dựng đã có. Bổ sung bản kê, hash, cấu hình, kiểm phát hành và gói riêng cho chữ hoặc kết hợp.",
      "reader_notes": {
        "purpose": "Gói kết hợp cần bản kê riêng vì mã camera mới làm kết quả đóng gói nhánh chữ cũ không còn đủ.",
        "acceptance_checks": [
          "Có log dựng hai nhánh và bản kê mã băm, cấu hình, phụ thuộc, giấy phép, DB cùng phiên bản tri thức.",
          "Phương án quay lại chỉ rõ bản tương thích; không dùng R057 làm bản kê cho mã camera mới."
        ],
        "dependency_use": {
          "C20": "Kết quả kiểm bản kết hợp/riêng tư xác định mã và giới hạn đã kiểm để đóng gói.",
          "C27": "Review tác động tích hợp xác định phiên bản nội dung, câu an toàn và phạm vi cần giữ trong gói kết hợp."
        }
      }
    },
    {
      "id": "GCB-R",
      "package": "SD08",
      "title": "Xét lại tác động cổng sau tích hợp",
      "status": "PLANNED",
      "minutes": {
        "GVHD": 30
      },
      "ai_runs": 0,
      "deps": [
        "C28",
        "C27"
      ],
      "input": "Hiện vật đã có của gói và đầu ra các việc phụ thuộc; xem DOI_SOAT_HIEN_TRANG.md",
      "output": "docs/research/plans/DAC_TA_CAMERA.md",
      "steps": "Đối chiếu GCB/GB/GC và thay đổi; xác định cổng phải mở lại",
      "done_when": "Chỉ nhận gói nếu điều kiện giữ nguyên hoặc đã xét lại đúng quyền",
      "condition": "Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ.",
      "decision": true,
      "work_steps": [
        {
          "title": "Xét lại tác động cổng sau tích hợp",
          "instructions": "Đối chiếu GCB/GB/GC và thay đổi; xác định cổng phải mở lại. Người phụ trách nhận việc; dùng đúng phạm vi được quyết định. Nếu thiếu đầu vào, dừng nhánh và ghi phần chờ. Ghi quyết định thực, thẩm quyền, phiên bản và phạm vi. Hồ sơ thiếu phải ghi yêu cầu bổ sung; không tự đánh dấu đã duyệt.",
          "output": "docs/research/plans/DAC_TA_CAMERA.md — Phần GCB-R: Xét lại tác động cổng sau tích hợp",
          "done_when": "Chỉ nhận gói nếu điều kiện giữ nguyên hoặc đã xét lại đúng quyền",
          "minutes": {
            "GVHD": 30
          },
          "ai_runs": 0,
          "id": "GCB-R.01"
        }
      ],
      "source_paths": [
        "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md",
        "docs/research/plans/DAC_TA_CAMERA.md",
        "docs/research/plans/CAMERA_MODULE_TASK_BOARD.md",
        "knowledge-base/evidence-matrix/source_registry.csv"
      ],
      "resume_note": "Kế thừa ma trận CYK, đặc tả và nguồn thư viện. Bổ sung gói nguồn/protocol một chỉ số, review, POC, kiểm chứng và tích hợp qua đúng cổng.",
      "reader_notes": {
        "purpose": "Các quyết định trước tích hợp có thể không còn bao phủ bản đóng gói mới. Cần xác định điều kiện còn hiệu lực và cổng nào phải xét lại.",
        "acceptance_checks": [
          "Gói kết hợp được đối chiếu với GCB, GB và GC.",
          "Thay đổi và cổng phải mở lại được ghi rõ.",
          "Chỉ nhận gói khi điều kiện giữ nguyên hoặc đã xét lại đúng quyền."
        ],
        "dependency_use": {
          "C28": "Bản kê phát hành kết hợp xác định mã, cấu hình và thay đổi cần đối chiếu với các cổng trước.",
          "C27": "Review tác động chuyên môn xác định nội dung hoặc phạm vi cần xét lại trước nhận gói."
        }
      }
    }
    ,
    {
      "id": "SRC-01", "package": "SD04", "title": "Kiểm kê nguồn, trang và phiên bản", "status": "PLANNED",
      "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["R020"],
      "input": "Danh mục nguồn R020; chỉ đọc phần được phép.",
      "output": "knowledge-base/evidence-matrix/KIEM_KE_NGUON_MARKDOWN.md",
      "steps": "Kiểm kê bản gốc và dẫn xuất; đối soát trang, phiên bản và phần chưa biết.",
      "done_when": "Mỗi nguồn có ID, phiên bản, số trang biết/chưa biết và phạm vi đề xuất; không coi 104 chương đã được chọn.",
      "condition": "Chỉ kiểm kê quyền truy cập hiện có; không tải hoặc OCR khi chưa được phép. Ngân sách bổ sung tạm tính.",
      "work_steps": [
        {"id": "SRC-01.01", "title": "Đối chiếu danh mục và bản hiện có", "instructions": "Ghi ID, bản gốc, OCR và Markdown hiện có. Phân biệt phiên bản, nguồn trùng và nguồn chưa tiếp cận.", "output": "knowledge-base/evidence-matrix/KIEM_KE_NGUON_MARKDOWN.md — Danh mục nguồn và phiên bản", "done_when": "Không coi bản trích hiện có đã được kiểm đầy đủ.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-01.02", "title": "Kiểm kê tập trang", "instructions": "Ghi trang vật lý, trang in, chương và phần ngoài phạm vi. Chưa xác minh thì ghi UNKNOWN, không suy số trang.", "output": "knowledge-base/evidence-matrix/KIEM_KE_NGUON_MARKDOWN.md — Bảng trang và phạm vi đề xuất", "done_when": "Mọi phần chưa biết có người nhận kiểm; không cam kết toàn thư viện.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "knowledge-base/README.md"],
      "resume_note": "Kế thừa R020, không số hóa lại bản đã có bằng chứng kiểm.",
      "reader_notes": {"purpose": "Xác định khối lượng thực trước tìm kiếm và bóc tách.", "acceptance_checks": ["Đủ định danh và phiên bản.", "Trang chưa biết ghi UNKNOWN; phạm vi chọn chưa đồng nghĩa toàn kho."], "dependency_use": {"R020": "Danh sách nguồn sơ bộ làm đầu vào kiểm kê chi tiết."}}
    },
    {
      "id": "SRC-02", "package": "SD04", "title": "Lập ma trận bao phủ và khoảng trống nguồn", "status": "PLANNED",
      "minutes": {"NCS2": 180}, "ai_runs": 0, "deps": ["SRC-01", "R021"],
      "input": "Kiểm kê và nhu cầu nguồn camera.", "output": "knowledge-base/evidence-matrix/MA_TRAN_BAO_PHU_NGUON.md",
      "steps": "Nối chủ đề, câu hỏi, đối tượng, an toàn và camera; ghi khoảng trống.",
      "done_when": "Mỗi hàng có ID, nguồn/vị trí hoặc khoảng trống, lý do ngoài phạm vi và người nhận.",
      "condition": "Chỉ lập nhu cầu; chưa tự kết luận chuyên môn. Ngân sách tạm tính; phạm vi do người có thẩm quyền xét.",
      "work_steps": [
        {"id": "SRC-02.01", "title": "Lập hàng bao phủ", "instructions": "Nối chủ đề × câu hỏi × đối tượng × an toàn × camera. Không tạo tổ hợp máy móc; ghi lý do không áp dụng.", "output": "knowledge-base/evidence-matrix/MA_TRAN_BAO_PHU_NGUON.md — Ma trận có ID hàng", "done_when": "Mỗi câu hỏi có nhu cầu nguồn rõ.", "minutes": {"NCS2": 120}, "ai_runs": 0},
        {"id": "SRC-02.02", "title": "Bàn giao khoảng trống", "instructions": "Nối nguồn có sẵn với hàng; ghi thiếu, mâu thuẫn và phần đề nghị hoãn để CVYK/GVHD xét.", "output": "knowledge-base/evidence-matrix/MA_TRAN_BAO_PHU_NGUON.md — Danh sách khoảng trống ưu tiên", "done_when": "Có người nhận; URL không được coi là đủ căn cứ.", "minutes": {"NCS2": 60}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"],
      "resume_note": "Mở rộng kiểm kê theo nhu cầu, không làm lại nguồn camera đã xác định.",
      "reader_notes": {"purpose": "Tìm nguồn theo khoảng trống thay vì số lượng tài liệu.", "acceptance_checks": ["Đủ năm chiều phù hợp.", "Có trạng thái và lý do ngoài phạm vi."], "dependency_use": {"SRC-01": "Kiểm kê cung cấp nguồn và tập trang đã biết.", "R021": "Danh mục camera xác định nhu cầu quy trình còn thiếu."}}
    },
    {
      "id": "SRC-03", "package": "SD04", "title": "Viết quy tắc tìm và sàng lọc nguồn", "status": "PLANNED",
      "minutes": {"NCS1": 180}, "ai_runs": 0, "deps": ["SRC-02"],
      "input": "Ma trận khoảng trống.", "output": "knowledge-base/evidence-matrix/QUY_TAC_TIM_NGUON.md",
      "steps": "Chốt kênh, truy vấn VN/EN, bộ lọc, tiêu chí nhận/loại và biểu mẫu nhật ký.",
      "done_when": "Quy tắc tái lập được; phân biệt không có quyền toàn văn với bị loại chuyên môn.",
      "condition": "Tìm metadata được phép; không dùng tài khoản hoặc dịch vụ chưa có quyền. Ngân sách tạm tính.",
      "work_steps": [
        {"id": "SRC-03.01", "title": "Chọn kênh và chuỗi tìm", "instructions": "Lập truy vấn tiếng Việt/Anh theo hàng ma trận. Dự kiến Bộ Y tế, tổ chức hướng dẫn, PubMed và Cochrane; ghi bộ lọc.", "output": "knowledge-base/evidence-matrix/QUY_TAC_TIM_NGUON.md — Bảng kênh và truy vấn", "done_when": "Mỗi truy vấn nối câu hỏi; không nhận là nguồn đã xác minh.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-03.02", "title": "Chốt nhận loại và nhật ký", "instructions": "Ghi tiêu chí nhận/loại trước tìm chi tiết. Mẫu nhật ký gồm ngày, giao diện, truy vấn nguyên văn, số xem, lý do và giới hạn.", "output": "knowledge-base/evidence-matrix/QUY_TAC_TIM_NGUON.md — Quy tắc sàng lọc và mẫu nhật ký", "done_when": "Có quy tắc khử trùng và chuyển bất đồng tới người xét.", "minutes": {"NCS1": 60}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Dùng ma trận để giới hạn tìm kiếm.",
      "reader_notes": {"purpose": "Giữ việc tìm nguồn có thể kiểm lại.", "acceptance_checks": ["Có chuỗi VN/EN và bộ lọc.", "Có tiêu chí nhận/loại và nhật ký."], "dependency_use": {"SRC-02": "Các hàng thiếu xác định câu hỏi tìm nguồn."}}
    },
    {
      "id": "SRC-04", "package": "SD04", "title": "Thực hiện tìm, khử trùng và sàng lọc nguồn", "status": "PLANNED",
      "minutes": {"NCS1": 480}, "ai_runs": 0, "deps": ["SRC-03"],
      "input": "Quy tắc tìm và tiêu chí nhận/loại.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON.md",
      "steps": "Tìm thực tế trên kênh chính thức và cơ sở nghiên cứu; ghi nhật ký, sàng lọc và khoảng trống.",
      "done_when": "Ứng viên có định danh, phiên bản, lý do chọn/loại, truy vấn và giới hạn truy cập thực; không bịa kết quả.",
      "condition": "Chỉ truy cập metadata hợp pháp. Không tải/OCR toàn văn trước quyền phù hợp. Hết 480 phút còn thiếu phải lập thêm việc.",
      "work_steps": [
        {"id": "SRC-04.01", "title": "Tìm nguồn cơ quan ban hành", "instructions": "Tìm Bộ Y tế, tổ chức ban hành hướng dẫn và hội chuyên môn theo truy vấn đã chốt. Ghi ngày, URL, chuỗi, bộ lọc và số xem thực.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON.md — Nhật ký kênh chính thức", "done_when": "Có nguồn hoặc ghi không tìm thấy; không tự tạo kết quả.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-04.02", "title": "Tìm nghiên cứu và tổng quan", "instructions": "Tìm PubMed, Cochrane theo câu hỏi. Ghi chuỗi nguyên văn, giao diện, bộ lọc, số hiển thị/xem và giới hạn truy cập.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON.md — Nhật ký cơ sở nghiên cứu", "done_when": "DOI hoặc định danh được lưu; chưa tiếp cận toàn văn ghi riêng.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-04.03", "title": "Theo trích dẫn và khử trùng", "instructions": "Theo trích dẫn thuận/ngược được phép. Đối chiếu DOI, tên, cơ quan và phiên bản; không gộp bản cập nhật với bản cũ.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON.md — Danh sách ứng viên đã khử trùng", "done_when": "Mỗi nguồn nối truy vấn hoặc nguồn dẫn tới nó.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-04.04", "title": "Sàng lọc và bàn giao", "instructions": "Sàng lọc tiêu đề/tóm tắt theo tiêu chí. Chỉ đọc toàn văn đã có quyền; ghi lý do loại, bất đồng và khoảng trống còn lại.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON.md — Danh mục chọn/loại/chờ quyền", "done_when": "Bàn giao LEGAL/CVYK; không coi thiếu toàn văn là kết luận y khoa.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Chỉ bổ sung nguồn thiếu; giữ dấu vết tìm thực tế.",
      "reader_notes": {"purpose": "Biến chiến lược tìm thành việc có thời gian và bằng chứng.", "acceptance_checks": ["Có nhật ký thực từng kênh và quyết định sàng lọc.", "Báo đủ phần chưa tìm thấy hoặc chưa có quyền."], "dependency_use": {"SRC-03": "Quy tắc đã chốt điều khiển truy vấn và sàng lọc."}}
    },
    {
      "id": "SRC-05", "package": "SD04", "title": "Lập quyền thao tác cho nguồn mới", "status": "PLANNED",
      "minutes": {"LEGAL": 180}, "ai_runs": 0, "deps": ["SRC-04"],
      "input": "Ứng viên và giới hạn truy cập.", "output": "docs/legal/QUYEN_NGUON_MARKDOWN.md",
      "steps": "Kiểm riêng đọc, tải, OCR, lưu Markdown, gửi AI và phân phối; chuyển R022/Q03.",
      "done_when": "Mỗi thao tác có bằng chứng, người cấp, phạm vi, thời hạn hoặc trạng thái chưa rõ; chưa tự cho phép.",
      "condition": "LEGAL chuẩn bị hồ sơ; người có thẩm quyền quyết định. Không tải/OCR/gửi AI vì tài liệu công khai.",
      "work_steps": [
        {"id": "SRC-05.01", "title": "Đối chiếu quyền theo thao tác", "instructions": "Kiểm điều khoản đọc, tải, OCR, lưu, gửi AI và phân phối từng nguồn. Ghi phiên bản điều khoản, chủ thể, thời hạn và giới hạn.", "output": "docs/legal/QUYEN_NGUON_MARKDOWN.md — Bảng quyền nguồn mới", "done_when": "Mỗi thao tác ghi cho phép, không cho phép hoặc chưa rõ kèm căn cứ.", "minutes": {"LEGAL": 120}, "ai_runs": 0},
        {"id": "SRC-05.02", "title": "Bàn giao hồ sơ quyết định", "instructions": "Ghi điểm phải hỏi người cấp quyền, điều kiện thu hồi và dịch vụ ngoài. Bàn giao R022 để trình Q03.", "output": "docs/legal/QUYEN_NGUON_MARKDOWN.md — Hồ sơ quyền và điểm chờ", "done_when": "Không gán quyền từ quyền sở hữu sách; thao tác chưa rõ giữ chặn.", "minutes": {"LEGAL": 60}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/legal/W1_D02_RightsRegister.csv"], "resume_note": "Bổ sung bằng chứng cho R022, không thay phiên quyết định Q03.",
      "reader_notes": {"purpose": "Ngăn số hóa và chuyển nội dung vượt quyền.", "acceptance_checks": ["Tách đủ sáu thao tác.", "Điểm chưa rõ giữ chặn trước xử lý thật."], "dependency_use": {"SRC-04": "Danh mục ứng viên xác định nguồn phải xác minh quyền."}}
    },
    {
      "id": "SRC-06", "package": "SD04", "title": "Rà hiện hành, khả năng áp dụng và mâu thuẫn nguồn", "status": "PLANNED",
      "minutes": {"CVYK": 120}, "ai_runs": 0, "deps": ["SRC-04"],
      "input": "Metadata và phần nội dung được phép đọc của ứng viên.", "output": "knowledge-base/evidence-matrix/NHAN_XET_NGUON.md",
      "steps": "Kiểm đính chính, thu hồi, đối tượng và mâu thuẫn; xác định nguồn cần đọc thêm.",
      "done_when": "Nhận xét có phiên bản, ngày kiểm, giới hạn và điểm chờ; không suy duyệt nội dung từ metadata.",
      "condition": "Không cần Q03 để rà metadata công khai hợp pháp; nội dung chưa có quyền không được tải hoặc gửi ngoài.",
      "work_steps": [{"id": "SRC-06.01", "title": "Rà căn cứ và hiệu lực", "instructions": "Kiểm trang phát hành, đính chính, thay thế/thu hồi. Ghi đối tượng, điều kiện áp dụng và mâu thuẫn; thiếu toàn văn thì giữ chờ.", "output": "knowledge-base/evidence-matrix/NHAN_XET_NGUON.md — Nhận xét nguồn theo phiên bản", "done_when": "CVYK không tự cấp quyền thao tác; phần chưa đủ không được coi đã phê duyệt.", "minutes": {"CVYK": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Rà ứng viên độc lập với xét quyền; không thay thẩm định thẻ.",
      "reader_notes": {"purpose": "Tránh dùng nguồn lỗi thời hoặc sai phạm vi.", "acceptance_checks": ["Ghi ngày kiểm cập nhật/thu hồi.", "Mâu thuẫn và giới hạn còn mở được giữ rõ."], "dependency_use": {"SRC-04": "Danh mục và nhật ký sàng lọc cung cấp nguồn cần rà."}}
    },
    {
      "id": "SRC-TOOLS1", "package": "SD04", "title": "AI đề xuất công cụ bóc tách bằng dữ liệu tổng hợp", "status": "PLANNED",
      "minutes": {}, "ai_runs": 1, "deps": ["R019", "Q03"],
      "input": "Hợp đồng dữ liệu và quyết định quyền; chỉ dùng mẫu tổng hợp.", "output": "data-pipeline/DE_XUAT_CONG_CU_MARKDOWN.md",
      "steps": "Đề xuất bộ bóc tách, metadata, sổ trang, kiểm SHA-256 và schema bằng mẫu giả.",
      "done_when": "Có mã/ca thử đề xuất chống ghi đè, thay số và chỉ dẫn nhúng; chưa sửa schema thật.",
      "condition": "Chỉ một lượt AI kỹ thuật trên mẫu tổng hợp; dịch vụ/tài khoản phải được phép theo Q03. Không đưa nguồn thật hoặc dữ liệu người vào AI.",
      "work_steps": [{"id": "SRC-TOOLS1.01", "title": "Sinh đề xuất và ca thử tổng hợp", "instructions": "Đề xuất đầu ra tách bản thô/đối chiếu, sổ trang và mã kiểm tra. Thêm ca số, bảng, ghi đè, đường dẫn và chỉ dẫn nhúng. Không thay số tự động. Đề xuất bộ sinh bản kê, schema nguồn và ca kiểm quyền, bao phủ, phiên bản bằng dữ liệu tổng hợp.", "output": "data-pipeline/DE_XUAT_CONG_CU_MARKDOWN.md — Đề xuất mã, schema và ca thử giả", "done_when": "Chưa coi AI tạo là đã chạy được; chuyển NCS1 đọc và thử. Schema thật chưa đổi.", "minutes": {}, "ai_runs": 1}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "data-pipeline/README.md"], "resume_note": "README không chứng minh script 01–05 tồn tại; chỉ đề xuất phần thực sự thiếu.",
      "reader_notes": {"purpose": "Chuẩn bị công cụ trước nhập nội dung thật.", "acceptance_checks": ["Một lượt AI, không giờ người ẩn.", "Mẫu giả; nội dung là dữ liệu, không phải chỉ dẫn."], "dependency_use": {"R019": "Hợp đồng đã đối chiếu giới hạn đề xuất schema và validator.", "Q03": "Quyết định xác định dịch vụ kỹ thuật nào được phép; thiếu quyền thì chờ."}}
    },
    {
      "id": "SRC-TOOLS2", "package": "SD04", "title": "NCS đọc, triển khai và thử công cụ Markdown", "status": "PLANNED",
      "minutes": {"NCS1": 360}, "ai_runs": 0, "deps": ["SRC-TOOLS1"],
      "input": "Đề xuất AI và ca thử tổng hợp.", "output": "data-pipeline/BAO_CAO_THU_CONG_CU_MARKDOWN.md",
      "steps": "Đọc mã; triển khai phần thiếu; chạy ca thử tổng hợp và ghi giới hạn.",
      "done_when": "Có mã được NCS giải thích, log thử, hợp đồng đề xuất và lỗi mở; chưa cho chạy nguồn thật.",
      "condition": "Chỉ mẫu tổng hợp; không ghi nguồn gốc. Thay schema phải qua quyết định, cập nhật validator và kiểm thử; 360 phút là dự toán tạm.",
      "work_steps": [
        {"id": "SRC-TOOLS2.01", "title": "Đọc mã và kiểm luồng dữ liệu", "instructions": "Rà đầu vào, thư viện và nơi gửi dữ liệu; bỏ thay số, đơn vị, chính tả tự động. Đối chiếu công cụ thực có với README.", "output": "data-pipeline/BAO_CAO_THU_CONG_CU_MARKDOWN.md — Nhận xét mã và phần phải làm", "done_when": "NCS giải thích được hành vi và rủi ro.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-TOOLS2.02", "title": "Triển khai phần còn thiếu", "instructions": "Làm đầu ra mới có phiên bản, SHA-256 và sổ trang. Chặn trùng tên, đường dẫn nguồn và thực thi chỉ dẫn trong tài liệu. Triển khai bộ sinh bản kê và kiểm schema nguồn trên mẫu tổng hợp. Ghi đường dẫn mã và ca kiểm trong báo cáo.", "output": "data-pipeline/BAO_CAO_THU_CONG_CU_MARKDOWN.md — Mã công cụ và hợp đồng đề xuất", "done_when": "Không ghi đè nguồn; chưa tự đổi schema đang dùng.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-TOOLS2.03", "title": "Thử và bàn giao độc lập", "instructions": "Chạy mẫu số, phủ định, bảng, ảnh, lỗi đọc và ghi đè. Ghi cấu hình, phiên bản, mã kiểm tra trước/sau và ca chưa đạt. Thử bộ sinh bản kê và schema nguồn với quyền thiếu/hết hạn, trang UNKNOWN, phiên bản trộn và lỗi mở.", "output": "data-pipeline/BAO_CAO_THU_CONG_CU_MARKDOWN.md — Log thử cho SRC-07", "done_when": "Không tuyên bố đạt khi ca còn lỗi; thiếu giờ phải bổ sung dự toán.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "data-pipeline/README.md"], "resume_note": "NCS chịu trách nhiệm đọc và kiểm mã, không tin kết quả AI tự nhận.",
      "reader_notes": {"purpose": "Biến đề xuất thành công cụ có bằng chứng thử.", "acceptance_checks": ["Có ba phần đọc, triển khai, thử.", "Không nguồn thật hoặc ghi đè; thiếu giờ mở lại kế hoạch."], "dependency_use": {"SRC-TOOLS1": "Đề xuất kỹ thuật và ca giả là đầu vào đọc, sửa và thử."}}
    },
    {
      "id": "SRC-07", "package": "SD04", "title": "Kiểm độc lập công cụ và hợp đồng Markdown", "status": "PLANNED",
      "minutes": {"REVIEW_TECH": 240}, "ai_runs": 0, "deps": ["SRC-TOOLS2"],
      "input": "Mã, hợp đồng và log mẫu tổng hợp.", "output": "data-pipeline/BIEN_BAN_KIEM_CONG_CU_MARKDOWN.md",
      "steps": "Kiểm chống ghi đè, sửa số, gửi ngoài; xác minh metadata và sổ trang.",
      "done_when": "Có kết quả từng ca và hợp đồng dùng cho R039; lỗi an toàn chưa đóng thì chặn bóc tách thật.",
      "condition": "Chỉ mẫu tổng hợp; không sửa nguồn gốc. Kiểm kỹ thuật không cấp quyền nguồn hoặc duyệt chuyên môn.",
      "work_steps": [
        {"id": "SRC-07.01", "title": "Thử an toàn công cụ", "instructions": "Kiểm đích ghi, trùng tên, đường dẫn vượt phạm vi, thay số và gọi ngoài. So SHA-256 gốc trước/sau; thử nội dung có chỉ dẫn nhúng.", "output": "data-pipeline/BIEN_BAN_KIEM_CONG_CU_MARKDOWN.md — Kết quả ca chống ghi đè và truyền dữ liệu", "done_when": "Nguồn giả nguyên vẹn; lệnh nhúng không được thực thi.", "minutes": {"REVIEW_TECH": 120}, "ai_runs": 0},
        {"id": "SRC-07.02", "title": "Kiểm hợp đồng dẫn xuất", "instructions": "Đối chiếu metadata, quyền, vị trí trang, bảng/hình, lỗi mở và mã kiểm tra. Ghi điều kiện nhận công cụ và hợp đồng cho bộ nạp. Kiểm độc lập bộ sinh bản kê và schema nguồn trên các ca tổng hợp; UNKNOWN không được biến thành bao phủ đủ.", "output": "data-pipeline/BIEN_BAN_KIEM_CONG_CU_MARKDOWN.md — Hợp đồng Markdown và biên bản độc lập", "done_when": "Đủ ca số/đơn vị/phủ định; lỗi còn mở phải chặn. Không tự sửa schema.", "minutes": {"REVIEW_TECH": 120}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "data-pipeline/README.md"], "resume_note": "Cung cấp hợp đồng sớm, không bắt R039 chờ toàn bộ Markdown.",
      "reader_notes": {"purpose": "Ngăn công cụ làm mất dấu vết hoặc đổi nghĩa nguồn.", "acceptance_checks": ["Có SHA-256 trước/sau và ca chống ghi đè.", "Metadata, sổ trang và quyền đối soát được."], "dependency_use": {"SRC-TOOLS2": "Mã do NCS triển khai và log thử là đối tượng kiểm độc lập."}}
    },
    {
      "id": "SRC-08", "package": "SD04", "title": "Nhận mẫu có quyền và bóc tách thử", "status": "PLANNED",
      "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-07", "Q03", "SRC-06"],
      "input": "Công cụ đã kiểm, quyền thao tác và nhận xét nguồn.", "output": "knowledge-base/evidence-matrix/THU_MAU_MARKDOWN.md",
      "steps": "Chốt mẫu, nhận bản gốc có quyền, tính mã kiểm tra, sổ trang và bóc tách; đo giờ thực.",
      "done_when": "Mẫu có số trang/độ khó, metadata, quyền, bản thô và sổ trang; không làm mất trang khó.",
      "condition": "Q03 phải cho phép đúng nguồn và thao tác tải/OCR/lưu. SRC-07 đạt; không gửi ngoài khi quyền chưa rõ. 240 phút chỉ là suất thử.",
      "work_steps": [
        {"id": "SRC-08.01", "title": "Tiếp nhận mẫu và khóa bản gốc", "instructions": "Chọn chữ rõ, quét khó, bảng, công thức và nhiều cột nếu được phép. Ghi bản gốc, SHA-256, trang vật lý/in và quyền.", "output": "knowledge-base/evidence-matrix/THU_MAU_MARKDOWN.md — Bản kê mẫu và sổ trang", "done_when": "Thiếu quyền thì dừng; không thay bản gốc cùng tên.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-08.02", "title": "Bóc tách và đo thời gian", "instructions": "Xuất bản thô riêng; ghi công cụ, cấu hình, trang thiếu và vị trí đoạn. Đo thời gian theo độ khó; không điền phần không đọc được.", "output": "knowledge-base/evidence-matrix/THU_MAU_MARKDOWN.md — Markdown mẫu và số đo công sức", "done_when": "Sổ trang khớp mẫu; bản gốc nguyên vẹn; đủ dữ liệu cho kiểm chéo.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/legal/W1_D02_RightsRegister.csv"], "resume_note": "Thử nhỏ trước hiệu chỉnh; không suy sản lượng toàn kho từ công cụ chưa đo.",
      "reader_notes": {"purpose": "Đo chi phí thực và lỗi trên mẫu hợp pháp.", "acceptance_checks": ["Metadata nối quyền, hash và từng trang.", "Thời gian bóc tách tách khỏi chờ quyền."], "dependency_use": {"SRC-07": "Biên bản đạt và hợp đồng công cụ cho phép thử mẫu an toàn.", "Q03": "Quyết định xác định nguồn/thao tác thực được phép.", "SRC-06": "Nhận xét nguồn xác định mẫu phù hợp và giới hạn cần giữ."}}
    },
    {
      "id": "SRC-09", "package": "SD04", "title": "Kiểm chéo toàn bộ mẫu Markdown", "status": "PLANNED",
      "minutes": {"NCS2": 180}, "ai_runs": 0, "deps": ["SRC-08"],
      "input": "Bản gốc có quyền, Markdown mẫu và sổ trang.", "output": "knowledge-base/evidence-matrix/KIEM_CHEO_MAU_MARKDOWN.md",
      "steps": "Đối chiếu mọi trang mẫu, số liệu và thành phần; ghi lỗi có vị trí cùng giờ thực.",
      "done_when": "Có mẫu số trang và thành phần; mọi số, đơn vị, phủ định, điều kiện được kiểm, phần mơ hồ giữ chờ.",
      "condition": "Chỉ mẫu có quyền; không kiểm lấy mẫu thay toàn bộ tập thử. Hết ngân sách mà chưa đủ phải lập thêm việc.",
      "work_steps": [
        {"id": "SRC-09.01", "title": "So từng trang và đoạn rủi ro", "instructions": "Đối chiếu mọi trang mẫu. Kiểm số, thập phân, khoảng, đơn vị, phủ định, điều kiện, bảng/hình và chú thích.", "output": "knowledge-base/evidence-matrix/KIEM_CHEO_MAU_MARKDOWN.md — Sổ trang kiểm chéo và lỗi", "done_when": "Không bỏ trang khó; ghi mẫu số thực.", "minutes": {"NCS2": 120}, "ai_runs": 0},
        {"id": "SRC-09.02", "title": "Bàn giao lỗi và số đo", "instructions": "Ghi lỗi trước/sau dự kiến, vị trí, mức ảnh hưởng và người nhận. Tách giờ kiểm khỏi chờ CVYK; không tự sửa nghĩa.", "output": "knowledge-base/evidence-matrix/KIEM_CHEO_MAU_MARKDOWN.md — Danh sách sửa và giờ kiểm thực", "done_when": "Lỗi mơ hồ có câu hỏi chuyên môn; không tự duyệt.", "minutes": {"NCS2": 60}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Kiểm độc lập bởi NCS2, không tin OCR hoặc hash như bằng chứng đúng nghĩa.",
      "reader_notes": {"purpose": "Đo công kiểm và xác định lỗi trước mở rộng.", "acceptance_checks": ["Kiểm hết mẫu, không chỉ trang dễ.", "Lỗi có vị trí và người nhận."], "dependency_use": {"SRC-08": "Mẫu gốc, dẫn xuất, quyền và sổ trang là đầu vào đối chiếu."}}
    },
    {
      "id": "SRC-10", "package": "SD04", "title": "Sửa mẫu và kiểm lại công cụ", "status": "PLANNED",
      "minutes": {"NCS1": 120}, "ai_runs": 0, "deps": ["SRC-09"],
      "input": "Danh sách lỗi mẫu và giờ kiểm.", "output": "knowledge-base/evidence-matrix/SUA_MAU_MARKDOWN.md",
      "steps": "Sửa dẫn xuất có lịch sử; chạy lại ca kỹ thuật; chuyển lỗi chuyên môn còn mở.",
      "done_when": "Có bản trước/sau, log chạy lại và thời gian sửa; lỗi chưa được xét vẫn chặn.",
      "condition": "Không ghi đè bản gốc hoặc tự thay nghĩa. Cần review lại ngoài ngân sách thì bổ sung việc trước nghiệm thu.",
      "work_steps": [{"id": "SRC-10.01", "title": "Sửa và ghi bằng chứng lại", "instructions": "Sửa lỗi kỹ thuật được xác định; ghi trước/sau, vị trí và lý do. Chạy lại kiểm, giữ câu hỏi CVYK và đo công sửa thực.", "output": "knowledge-base/evidence-matrix/SUA_MAU_MARKDOWN.md — Bản mẫu sửa, hash và lỗi mở", "done_when": "Không tự đóng lỗi nghĩa; mẫu chưa đủ thì chưa mở rộng.", "minutes": {"NCS1": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Một suất sửa tạm tính; không mặc định mọi lỗi đã hết.",
      "reader_notes": {"purpose": "Có số đo sửa lỗi trước tính lại lịch.", "acceptance_checks": ["Có log trước/sau và mã kiểm tra mới.", "Lỗi chưa review giữ chặn."], "dependency_use": {"SRC-09": "Danh sách lỗi và thời gian kiểm xác định phần sửa."}}
    },
    {
      "id": "SRC-11", "package": "SD04", "title": "Hiệu chỉnh phạm vi và ngân sách nguồn Markdown", "status": "PLANNED",
      "minutes": {"GVHD": 60}, "ai_runs": 0, "deps": ["SRC-10", "SRC-06"],
      "input": "Giờ mẫu, lỗi mở, số trang biết/chưa biết và nhận xét nguồn.", "output": "docs/research/plans/KE_HOACH_CON_LAI/HIEU_CHINH_NGUON_MARKDOWN.md",
      "steps": "Xét phạm vi, ước lượng theo độ khó và số trang; yêu cầu thêm phiếu khi ngân sách không đủ.",
      "done_when": "Ghi phạm vi, khoảng ước lượng, ngân sách và điểm chờ; không dùng chữ ký GVHD thay xét y khoa.",
      "condition": "Đây là xét nguồn lực, không phê duyệt y khoa. Phải lặp phiên khi tăng nguồn/trang hoặc thay độ khó; chưa đủ quyền/lỗi thì giữ chặn.",
      "work_steps": [{"id": "SRC-11.01", "title": "Xét số đo và lập lại dự toán", "instructions": "Dùng giờ bóc tách, kiểm, sửa và chờ riêng. Đối chiếu trang đã chọn; tăng khối lượng phải thêm phiếu và lịch, không hứa 104 chương.", "output": "docs/research/plans/KE_HOACH_CON_LAI/HIEU_CHINH_NGUON_MARKDOWN.md — Biên bản hiệu chỉnh có điều kiện", "done_when": "Mỗi lô chỉ mở khi phạm vi và ngân sách đủ; UNKNOWN còn phải kiểm kê, không tính như bằng không.", "minutes": {"GVHD": 60}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Không dùng giờ thẻ cũ bù cho nguồn; thêm ngân sách công khai.",
      "reader_notes": {"purpose": "Ngăn suất giờ tạm tính bị hiểu là cam kết toàn kho.", "acceptance_checks": ["Có số trang và khoảng dự toán hoặc UNKNOWN.", "Mở rộng bắt buộc lặp xét; không thay CVYK."], "dependency_use": {"SRC-10": "Giờ sửa và lỗi còn mở bổ sung số đo thử mẫu.", "SRC-06": "Nhận xét nguồn xác định phạm vi phù hợp và phần chưa đủ căn cứ."}}
    },
    {
      "id": "SRC-12", "package": "SD04", "title": "Lập bản kê Markdown nghiên cứu toàn phạm vi chọn", "status": "PLANNED",
      "minutes": {"NCS1": 180}, "ai_runs": 0,
      "deps": ["MK01D", "MK02D", "MK03D", "MK04D", "MK05D", "MK06D", "MK07D", "MK08D"],
      "input": "Tám lô dẫn xuất và mọi phiếu lặp bổ sung đã được lập lại lịch.", "output": "knowledge-base/evidence-matrix/BAN_KE_MARKDOWN_NGHIEN_CUU.json",
      "steps": "Gộp bản kê theo nguồn/phiên bản, đối soát toàn bộ sổ trang và quyền; bàn giao R032.",
      "done_when": "Metadata, quyền, hash, sổ trang và lỗi mở nối được toàn phạm vi chọn; chưa đủ thì không báo hoàn tất.",
      "condition": "Mọi phiếu nguồn/trang phải được đối soát; phần thiếu/chặn báo riêng. Markdown nghiên cứu không tự được nạp AI hoặc phát hành; GA giữ nguyên.",
      "work_steps": [
        {"id": "SRC-12.01", "title": "Đối soát bao phủ toàn phạm vi", "instructions": "Gộp theo ID/phiên bản tránh đếm trùng. Đối soát trang chọn/loại/thiếu, đoạn rủi ro, bảng, hình, chú thích và mọi phiếu lặp.", "output": "knowledge-base/evidence-matrix/BAN_KE_MARKDOWN_NGHIEN_CUU.json — Bản kê nghiên cứu và báo cáo bao phủ", "done_when": "Báo tử/mẫu số thật; 100% ghi nhận không đồng nghĩa đúng hoàn toàn.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "SRC-12.02", "title": "Bàn giao điều kiện sử dụng", "instructions": "Nối quyền, hash, review, lỗi mở và phiên bản tới R032. Chỉ rõ danh sách được phép, phần bị chặn và đồ thị phụ thuộc để thu hồi.", "output": "knowledge-base/evidence-matrix/BAN_KE_MARKDOWN_NGHIEN_CUU.json — Hồ sơ bàn giao Markdown nghiên cứu", "done_when": "Không tự gán APPROVED hoặc nạp đệ quy thư mục dẫn xuất.", "minutes": {"NCS1": 60}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "knowledge-base/README.md"], "resume_note": "Bản kê nghiên cứu riêng, không thay bản kê phát hành R032.",
      "reader_notes": {"purpose": "Chứng minh bao phủ bằng sổ trang thay vì số lô hoặc số giờ.", "acceptance_checks": ["Nối metadata, quyền và toàn bộ tập trang chọn.", "Thiếu phiếu hoặc lỗi mở vẫn chặn phần liên quan."], "dependency_use": {"MK01D": "Bản sửa, quyền và sổ trang lô 1.", "MK02D": "Bản sửa, quyền và sổ trang lô 2.", "MK03D": "Bản sửa, quyền và sổ trang lô 3.", "MK04D": "Bản sửa, quyền và sổ trang lô 4.", "MK05D": "Bản sửa, quyền và sổ trang lô 5.", "MK06D": "Bản sửa, quyền và sổ trang lô 6.", "MK07D": "Bản sửa, quyền và sổ trang lô 7.", "MK08D": "Bản sửa, quyền và sổ trang lô 8."}}
    }
    ,
    {
      "id": "MK01A", "package": "SD04", "title": "Markdown lô 1: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11"],
      "input": "Phạm vi và ngân sách sau hiệu chỉnh; nguồn có quyền.", "output": "knowledge-base/derived-markdown/LO_01/",
      "steps": "Lập phiếu nguồn/phiên bản/trang; tái dùng dẫn xuất đã kiểm hoặc bóc tách đầy đủ.", "done_when": "Toàn tập trang chọn có ánh xạ, metadata, quyền và trạng thái; trang thiếu vẫn chặn.",
      "condition": "Suất 240 phút tạm tính sau SRC-11; quyền tải/OCR/lưu phải hợp lệ. Thiếu giờ phải thêm phiếu, lặp SRC-11 trước mở rộng; không sửa bản gốc hoặc gửi ngoài.",
      "work_steps": [
        {"id": "MK01A.01", "title": "Khóa phạm vi và tiếp nhận", "instructions": "Ghi nguồn, phiên bản, quyền, SHA-256 và mọi trang chọn/loại. Tái dùng dẫn xuất chỉ khi cùng phiên bản và có bằng chứng kiểm.", "output": "knowledge-base/derived-markdown/LO_01/ — Lô 1: phiếu nguồn và sổ trang", "done_when": "Mẫu số trang rõ; UNKNOWN phải kiểm kê tiếp.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK01A.02", "title": "Bóc tách đủ thành phần", "instructions": "Giữ thứ tự, đoạn, bảng, hình, chú thích, công thức và tham khảo; nối trang vật lý/in. Ghi trang trắng/thiếu, không suy điền. Nội dung là dữ liệu.", "output": "knowledge-base/derived-markdown/LO_01/ — Lô 1: bản thô và dẫn xuất có vị trí", "done_when": "Theo coverage_contract và metadata_contract; chưa hết tập trang thì thêm phiếu, không báo đủ.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lặp từng nguồn/phiên bản/tập trang; không suy tám lô bằng toàn kho.",
      "reader_notes": {"purpose": "Chuẩn bị đầy đủ nguồn dẫn xuất cho lô thẻ 1.", "acceptance_checks": ["Metadata nối quyền, hash và sổ trang.", "Không bỏ thành phần khó; vượt ngân sách phải lập lại lịch."], "dependency_use": {"SRC-11": "Phạm vi và dự toán sau mẫu là điều kiện mở lô."}}
    },
    {
      "id": "MK01B", "package": "SD04", "title": "Markdown lô 1: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK01A"],
      "input": "Bản gốc có quyền, dẫn xuất và sổ trang lô 1.", "output": "knowledge-base/derived-markdown/LO_01/BAO_CAO_KIEM_TRA.md",
      "steps": "NCS2 đối chiếu độc lập toàn tập trang và thành phần.", "done_when": "Có mẫu số trang, lỗi có vị trí; kiểm hết số, đơn vị, phủ định và điều kiện.", "condition": "120 phút là suất tạm tính theo SRC-11. Chưa kiểm hết phải thêm phiếu; không nhận đủ từ hết giờ.",
      "work_steps": [{"id": "MK01B.01", "title": "Đối chiếu độc lập đầy đủ", "instructions": "So từng trang chọn với bản gốc; kiểm số, dấu, đơn vị, phủ định, bảng, hình, chú thích, công thức và tham chiếu. Ghi lỗi và câu hỏi CVYK, không tự sửa nghĩa.", "output": "knowledge-base/derived-markdown/LO_01/BAO_CAO_KIEM_TRA.md — Lô 1: sổ trang kiểm và lỗi", "done_when": "Ghi trang đã kiểm/cần kiểm; phần thiếu không được coi đạt.", "minutes": {"NCS2": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Kiểm hết phạm vi, không chỉ lấy mẫu đoạn rủi ro.",
      "reader_notes": {"purpose": "Ngăn lỗi OCR đi vào thẻ lô 1.", "acceptance_checks": ["Mọi trang cần dùng được kiểm.", "Danh sách đoạn rủi ro được kiểm hết; lỗi giữ mở."], "dependency_use": {"MK01A": "Bản gốc, dẫn xuất, metadata và sổ trang xác định tập đối chiếu."}}
    },
    {
      "id": "MK01C", "package": "SD04", "title": "Markdown lô 1: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK01B"],
      "input": "Lỗi có vị trí và bản gốc được phép đọc.", "output": "knowledge-base/derived-markdown/LO_01/NHAN_XET_CHUYEN_MON.md",
      "steps": "Xét mơ hồ, mâu thuẫn và điều kiện theo đúng phiên bản.", "done_when": "Có nhận xét thực từng câu hỏi hoặc giữ chờ; không thay thẩm định thẻ.", "condition": "Suất 60 phút tạm tính sau SRC-11. Thiếu căn cứ giữ chặn; không có mơ hồ thì ghi đã rà, không tạo phê duyệt giả.",
      "work_steps": [{"id": "MK01C.01", "title": "Xét câu hỏi nguồn", "instructions": "Đọc vị trí gốc cho số liệu hoặc nghĩa mơ hồ; ghi kết luận, giới hạn hoặc yêu cầu thêm nguồn. Không cấp quyền phát hành thẻ/FAQ.", "output": "knowledge-base/derived-markdown/LO_01/NHAN_XET_CHUYEN_MON.md — Lô 1: nhận xét và lỗi còn mở", "done_when": "Không suy APPROVED từ việc CVYK đã xem; thiếu thời gian phải hẹn việc bổ sung.", "minutes": {"CVYK": 60}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Review nguồn riêng với review nội dung thẻ.",
      "reader_notes": {"purpose": "NCS không tự phân xử nghĩa chuyên môn lô 1.", "acceptance_checks": ["Nhận xét đúng vị trí và phiên bản.", "Mơ hồ chưa giải quyết vẫn chặn."], "dependency_use": {"MK01B": "Lỗi kiểm chéo xác định câu hỏi CVYK phải xét."}}
    },
    {
      "id": "MK01D", "package": "SD04", "title": "Markdown lô 1: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK01C"],
      "input": "Nhận xét nguồn, danh sách lỗi và dẫn xuất lô 1.", "output": "knowledge-base/derived-markdown/LO_01/BAN_KE.json",
      "steps": "Sửa có lịch sử, chạy kiểm lại và chuyển phần cần review lại.", "done_when": "Bản kê nối quyền, metadata, hash và sổ trang; chỉ đóng lỗi có bằng chứng xét lại đúng vai.", "condition": "Suất 60 phút sau SRC-11, không gồm giờ reviewer ẩn. Lỗi cần xét lại phải thêm phiếu đúng vai; chưa được xét thì giữ chặn, không tự APPROVED.",
      "work_steps": [{"id": "MK01D.01", "title": "Sửa và bàn giao đúng trạng thái", "instructions": "Ghi trước/sau, lý do, vị trí; tính hash và chạy lại kiểm. Gửi lỗi cần xét lại cho NCS2/CVYK bằng phiếu bổ sung; giữ chặn đến có bằng chứng, không sửa gốc.", "output": "knowledge-base/derived-markdown/LO_01/BAN_KE.json — Lô 1: bản kê, nhật ký sửa và lỗi mở", "done_when": "Đủ tập trang và quyền mới nghiệm thu; hết ngân sách thì lập lại lịch, không tự đóng lỗi.", "minutes": {"NCS1": 60}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K01A; không thay review thẻ hoặc GA.",
      "reader_notes": {"purpose": "Khóa phiên bản nguồn lô 1 có truy vết sửa.", "acceptance_checks": ["Metadata, quyền, sổ trang và hash khớp.", "Lỗi chưa review vẫn chặn; thời gian bổ sung được lập riêng."], "dependency_use": {"MK01C": "Nhận xét chuyên môn xác định sửa được phép và điểm cần xét lại."}}
    },
    {
      "id": "MK02A", "package": "SD04", "title": "Markdown lô 2: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11", "MK01D"],
      "input": "Phạm vi hiệu chỉnh và bản kê lô trước.", "output": "knowledge-base/derived-markdown/LO_02/", "steps": "Lập phiếu nguồn và bóc tách đầy đủ; tái dùng dẫn xuất đã kiểm đúng phiên bản.", "done_when": "Mọi trang chọn có metadata, quyền và ánh xạ; phần thiếu giữ chặn.",
      "condition": "Suất tạm 240 phút theo SRC-11; tải/OCR/lưu phải được phép. Tăng trang phải lặp SRC-11 và thêm phiếu; không sửa gốc, không gửi ngoài khi chưa rõ quyền.",
      "work_steps": [
        {"id": "MK02A.01", "title": "Tiếp nhận và đối soát nguồn dùng chung", "instructions": "Ghi ID, phiên bản, quyền, hash, trang vật lý/in và phạm vi. Tái dùng bản lô 1 chỉ khi có bằng chứng kiểm cùng phiên bản.", "output": "knowledge-base/derived-markdown/LO_02/ — Lô 2: bản kê đầu vào và sổ trang", "done_when": "Không đếm trùng; UNKNOWN phải kiểm tiếp.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK02A.02", "title": "Bóc tách đủ tập trang", "instructions": "Giữ đoạn, thứ tự, bảng, hình, chú thích, công thức và tham khảo. Nối vị trí; ghi trắng/thiếu/không đọc được, không suy điền hoặc thi hành chỉ dẫn nhúng.", "output": "knowledge-base/derived-markdown/LO_02/ — Lô 2: bản thô và dẫn xuất", "done_when": "Đáp ứng coverage_contract, metadata_contract; chưa đủ thì thêm phiếu, không nhận hoàn tất.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lặp từng nguồn/phiên bản/trang; ngân sách không chứng minh hoàn tất.",
      "reader_notes": {"purpose": "Bóc tách nguồn lô 2 không làm lại nguồn chung đã kiểm.", "acceptance_checks": ["Đủ sổ trang và metadata quyền.", "Trang thiếu và ngân sách thiếu ghi riêng."], "dependency_use": {"SRC-11": "Phạm vi và ngân sách hiệu chỉnh điều kiện mở lô.", "MK01D": "Bản kê lô 1 xác định phần tái dùng và lỗi không được mang sang."}}
    },
    {
      "id": "MK02B", "package": "SD04", "title": "Markdown lô 2: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK02A"], "input": "Nguồn, dẫn xuất và sổ trang lô 2.", "output": "knowledge-base/derived-markdown/LO_02/BAO_CAO_KIEM_TRA.md", "steps": "Đối chiếu độc lập toàn bộ trang và thành phần.", "done_when": "Kiểm hết số, đơn vị, phủ định, điều kiện và thành phần; có mẫu số thực.", "condition": "120 phút tạm tính theo SRC-11; chưa kiểm hết phải thêm phiếu. Quyền đọc còn hiệu lực.",
      "work_steps": [{"id": "MK02B.01", "title": "So mọi trang với nguồn", "instructions": "Kiểm từng trang, số, dấu, đơn vị, phủ định, bảng, hình, chú thích, công thức và tham chiếu. Ghi vị trí lỗi và câu hỏi chuyên môn; không tự sửa nghĩa.", "output": "knowledge-base/derived-markdown/LO_02/BAO_CAO_KIEM_TRA.md — Lô 2: sổ trang kiểm và lỗi", "done_when": "Báo trang kiểm/cần kiểm; không lấy mẫu thay kiểm hết.", "minutes": {"NCS2": 120}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Độc lập với người bóc tách.",
      "reader_notes": {"purpose": "Ngăn lỗi dẫn xuất lô 2.", "acceptance_checks": ["Kiểm hết tập trang và đoạn rủi ro.", "Lỗi có vị trí và người nhận."], "dependency_use": {"MK02A": "Bản gốc có quyền, dẫn xuất và sổ trang xác định tập kiểm."}}
    },
    {
      "id": "MK02C", "package": "SD04", "title": "Markdown lô 2: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK02B"], "input": "Câu hỏi có vị trí nguồn lô 2.", "output": "knowledge-base/derived-markdown/LO_02/NHAN_XET_CHUYEN_MON.md", "steps": "Xét nghĩa mơ hồ và mâu thuẫn theo phiên bản.", "done_when": "Có nhận xét thực hoặc giữ chờ; không thay review thẻ.", "condition": "60 phút tạm tính theo SRC-11; thiếu căn cứ giữ chặn, thiếu giờ thêm việc. Không tạo phê duyệt khi không có mơ hồ.",
      "work_steps": [{"id": "MK02C.01", "title": "Xét câu hỏi nguồn", "instructions": "Đọc nguồn được phép tại vị trí lỗi, ghi kết luận và giới hạn hoặc yêu cầu bổ sung. Không có mơ hồ thì ghi đã rà, không tự APPROVED.", "output": "knowledge-base/derived-markdown/LO_02/NHAN_XET_CHUYEN_MON.md — Lô 2: nhận xét và điểm chờ", "done_when": "Quyết định đúng phiên bản; không cấp quyền phát hành.", "minutes": {"CVYK": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Không thay review thẻ/FAQ lô 2.",
      "reader_notes": {"purpose": "Chuyển mơ hồ cho đúng vai.", "acceptance_checks": ["Có vị trí và nhận xét thực.", "Thiếu căn cứ vẫn chặn."], "dependency_use": {"MK02B": "Danh sách lỗi kiểm chéo cung cấp câu hỏi cần xét."}}
    },
    {
      "id": "MK02D", "package": "SD04", "title": "Markdown lô 2: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK02C"], "input": "Nhận xét và lỗi lô 2.", "output": "knowledge-base/derived-markdown/LO_02/BAN_KE.json", "steps": "Sửa dẫn xuất, ghi hash và lịch sử; chuyển lỗi cần xét lại.", "done_when": "Bản kê nối quyền, metadata, sổ trang; lỗi chưa xét vẫn chặn.", "condition": "60 phút tạm sau SRC-11 không gồm giờ reviewer. Thêm phiếu NCS2/CVYK nếu phải xét lại; không tự đóng lỗi hoặc APPROVED.",
      "work_steps": [{"id": "MK02D.01", "title": "Sửa và bàn giao có truy vết", "instructions": "Ghi trước/sau, vị trí và lý do; chạy lại kiểm và tính hash. Chuyển xét lại đúng vai bằng phiếu bổ sung; không sửa gốc hoặc đóng lỗi thiếu bằng chứng.", "output": "knowledge-base/derived-markdown/LO_02/BAN_KE.json — Lô 2: bản kê, nhật ký sửa, lỗi mở", "done_when": "Hết tập trang, đủ quyền và bằng chứng mới nghiệm thu; vượt giờ lập lại lịch.", "minutes": {"NCS1": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K02A; không thay review thẻ.",
      "reader_notes": {"purpose": "Giữ phiên bản lô 2 sau sửa có thể đối chiếu.", "acceptance_checks": ["Quyền, hash, sổ trang và metadata khớp.", "Chưa xét lại vẫn chặn."], "dependency_use": {"MK02C": "Nhận xét quy định sửa được phép và điểm phải xét lại."}}
    },
    {
      "id": "MK03A", "package": "SD04", "title": "Markdown lô 3: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11", "MK02D"], "input": "Phạm vi hiệu chỉnh và nguồn có quyền.", "output": "knowledge-base/derived-markdown/LO_03/", "steps": "Kiểm nguồn chung; bóc tách đầy đủ tập trang còn thiếu.", "done_when": "Mỗi trang chọn có ánh xạ và trạng thái; metadata nối quyền và hash.", "condition": "Suất 240 phút theo SRC-11; quyền tải/OCR/lưu phải rõ. Tăng khối lượng phải lặp SRC-11, thêm phiếu; không sửa gốc hoặc gửi ngoài chưa phép.",
      "work_steps": [
        {"id": "MK03A.01", "title": "Khóa nguồn và sổ trang", "instructions": "Ghi ID, phiên bản, quyền, hash và trang vật lý/in. Chỉ tái dùng dẫn xuất đã kiểm cùng phiên bản; phân biệt chọn/loại và UNKNOWN.", "output": "knowledge-base/derived-markdown/LO_03/ — Lô 3: bản kê đầu vào", "done_when": "Tập trang và phần chưa biết rõ; không đếm trùng.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK03A.02", "title": "Bóc tách toàn thành phần", "instructions": "Giữ thứ tự, đoạn, bảng, hình, chú thích, công thức và tham khảo. Nối vị trí, ghi trắng/thiếu/không đọc được; không suy điền hoặc thi hành chỉ dẫn nguồn.", "output": "knowledge-base/derived-markdown/LO_03/ — Lô 3: bản thô và dẫn xuất", "done_when": "Theo coverage_contract và metadata_contract; chưa hết trang thì thêm phiếu.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lặp phiếu từng nguồn; số giờ không là bằng chứng đầy đủ.",
      "reader_notes": {"purpose": "Bổ sung dẫn xuất đầy đủ cho lô 3.", "acceptance_checks": ["Đủ metadata quyền và sổ trang.", "Thiếu trang giữ chặn, thiếu ngân sách lập lại lịch."], "dependency_use": {"SRC-11": "Hiệu chỉnh phạm vi và ngân sách là điều kiện mở lô.", "MK02D": "Bản kê lô 2 cung cấp nguồn chung và lỗi phải giữ chặn."}}
    },
    {
      "id": "MK03B", "package": "SD04", "title": "Markdown lô 3: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK03A"], "input": "Nguồn, dẫn xuất, quyền và sổ trang lô 3.", "output": "knowledge-base/derived-markdown/LO_03/BAO_CAO_KIEM_TRA.md", "steps": "So độc lập từng trang và đoạn rủi ro.", "done_when": "Kiểm hết số, đơn vị, phủ định và thành phần; báo mẫu số thật.", "condition": "120 phút tạm theo SRC-11; chưa kiểm hết phải thêm phiếu, không tự nhận đạt.",
      "work_steps": [{"id": "MK03B.01", "title": "Đối chiếu toàn tập trang", "instructions": "So nguồn với mọi trang chọn; kiểm số, dấu, đơn vị, phủ định, điều kiện, bảng/hình, chú thích và tham chiếu. Ghi lỗi có vị trí, chuyển mơ hồ CVYK.", "output": "knowledge-base/derived-markdown/LO_03/BAO_CAO_KIEM_TRA.md — Lô 3: sổ kiểm và câu hỏi", "done_when": "Có trang kiểm/cần kiểm; không dùng lấy mẫu thay kiểm hết.", "minutes": {"NCS2": 120}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Người kiểm khác người bóc tách.",
      "reader_notes": {"purpose": "Kiểm lỗi nội dung dẫn xuất lô 3.", "acceptance_checks": ["Đối chiếu mọi trang cần dùng.", "Lỗi và đoạn rủi ro có vị trí."], "dependency_use": {"MK03A": "Nguồn có quyền, dẫn xuất và sổ trang xác định tập kiểm."}}
    },
    {
      "id": "MK03C", "package": "SD04", "title": "Markdown lô 3: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK03B"], "input": "Câu hỏi kiểm chéo có vị trí lô 3.", "output": "knowledge-base/derived-markdown/LO_03/NHAN_XET_CHUYEN_MON.md", "steps": "Xét mơ hồ và mâu thuẫn, giữ giới hạn nguồn.", "done_when": "Nhận xét đúng phiên bản hoặc ghi chờ; không thay thẩm định thẻ.", "condition": "Suất 60 phút theo SRC-11; thiếu căn cứ/giờ thì giữ chặn và thêm việc. Không bịa phê duyệt khi không có mơ hồ.",
      "work_steps": [{"id": "MK03C.01", "title": "Rà câu hỏi và ghi nhận xét", "instructions": "Đọc vị trí gốc được phép; ghi cách hiểu có căn cứ, giới hạn hoặc yêu cầu nguồn khác. Không có mơ hồ thì ghi đã rà; không cấp APPROVED cho thẻ.", "output": "knowledge-base/derived-markdown/LO_03/NHAN_XET_CHUYEN_MON.md — Lô 3: nhận xét và điểm chờ", "done_when": "Kết luận có vị trí và phiên bản, không suy quyền phát hành.", "minutes": {"CVYK": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Giữ review thẻ lô 3 riêng.",
      "reader_notes": {"purpose": "Không để NCS tự phân xử chuyên môn.", "acceptance_checks": ["Nhận xét thực theo câu hỏi.", "Chưa rõ thì giữ chặn."], "dependency_use": {"MK03B": "Danh sách lỗi xác định phần chuyên môn cần xét."}}
    },
    {
      "id": "MK03D", "package": "SD04", "title": "Markdown lô 3: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK03C"], "input": "Nhận xét và dẫn xuất lô 3.", "output": "knowledge-base/derived-markdown/LO_03/BAN_KE.json", "steps": "Sửa có lịch sử; chạy kiểm lại, hash và chuyển review cần thiết.", "done_when": "Bản kê nối metadata, quyền và sổ trang; lỗi chỉ đóng với bằng chứng đúng vai.", "condition": "Suất 60 phút sau SRC-11 không gồm reviewer. Phải thêm phiếu xét lại NCS2/CVYK; lỗi chưa xét giữ chặn, không tự APPROVED.",
      "work_steps": [{"id": "MK03D.01", "title": "Sửa và khóa phiên bản bàn giao", "instructions": "Ghi trước/sau, vị trí, lý do; chạy lại kiểm và hash. Chuyển phần cần xét lại bằng phiếu bổ sung; không sửa nguồn gốc hoặc tự đóng lỗi nghĩa.", "output": "knowledge-base/derived-markdown/LO_03/BAN_KE.json — Lô 3: bản kê và nhật ký sửa", "done_when": "Chưa đủ trang/quyền/review vẫn chặn; ngân sách hết phải lập lại lịch.", "minutes": {"NCS1": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K03A, không thay review thẻ hoặc GA.",
      "reader_notes": {"purpose": "Bảo toàn truy vết lô 3 sau sửa.", "acceptance_checks": ["Metadata, quyền, hash và sổ trang khớp.", "Lỗi mở không tự chuyển đạt."], "dependency_use": {"MK03C": "Nhận xét giới hạn phần sửa và phần cần xét lại."}}
    },
    {
      "id": "MK04A", "package": "SD04", "title": "Markdown lô 4: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11", "MK03D"], "input": "Phạm vi hiệu chỉnh, bản kê trước và nguồn có quyền.", "output": "knowledge-base/derived-markdown/LO_04/", "steps": "Khóa tập trang; tái dùng đúng phiên bản hoặc bóc tách đầy đủ.", "done_when": "Mọi trang có metadata, quyền và trạng thái; phần thiếu chặn sử dụng.", "condition": "Suất 240 phút sau SRC-11; chỉ tải/OCR/lưu có quyền. Tăng trang phải xét lại SRC-11 và thêm phiếu; không sửa gốc, không gửi ngoài chưa phép.",
      "work_steps": [
        {"id": "MK04A.01", "title": "Nhận nguồn và lập sổ trang", "instructions": "Ghi ID, phiên bản, quyền, hash, trang vật lý/in và chọn/loại. Tái dùng bản chung chỉ khi đã kiểm cùng phiên bản.", "output": "knowledge-base/derived-markdown/LO_04/ — Lô 4: phiếu nguồn", "done_when": "UNKNOWN ghi rõ; không đếm trùng nguồn chung.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK04A.02", "title": "Bóc tách toàn thành phần", "instructions": "Giữ đoạn, thứ tự, bảng, hình, chú thích, công thức và tham khảo; nối vị trí. Ghi trắng/thiếu/không đọc được, không suy điền hoặc thi hành lệnh nhúng.", "output": "knowledge-base/derived-markdown/LO_04/ — Lô 4: bản thô và dẫn xuất", "done_when": "Theo coverage_contract và metadata_contract; chưa hết trang phải thêm phiếu.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lặp theo nguồn và tập trang, không hứa toàn kho.",
      "reader_notes": {"purpose": "Nguồn đầy đủ cho lô thẻ 4.", "acceptance_checks": ["Sổ trang nối metadata quyền.", "Vượt suất giờ phải lập lại lịch."], "dependency_use": {"SRC-11": "Giới hạn phạm vi và ngân sách để mở lô.", "MK03D": "Bản kê lô 3 xác định nguồn chung có thể dùng lại."}}
    },
    {
      "id": "MK04B", "package": "SD04", "title": "Markdown lô 4: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK04A"], "input": "Nguồn, dẫn xuất và sổ trang lô 4.", "output": "knowledge-base/derived-markdown/LO_04/BAO_CAO_KIEM_TRA.md", "steps": "Đối chiếu độc lập từng trang và thành phần.", "done_when": "Kiểm hết số, đơn vị, phủ định và điều kiện; có mẫu số thực.", "condition": "120 phút tạm theo SRC-11; thiếu công kiểm phải bổ sung phiếu, không tự nhận hoàn tất.",
      "work_steps": [{"id": "MK04B.01", "title": "Kiểm đầy đủ với bản gốc", "instructions": "So mọi trang, số, dấu, đơn vị, phủ định, bảng/hình, chú thích, công thức và tham chiếu. Ghi lỗi, vị trí và câu hỏi CVYK.", "output": "knowledge-base/derived-markdown/LO_04/BAO_CAO_KIEM_TRA.md — Lô 4: sổ trang kiểm và lỗi", "done_when": "Không kiểm lấy mẫu thay toàn tập; thiếu trang giữ chặn.", "minutes": {"NCS2": 120}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Kiểm độc lập với người bóc tách.",
      "reader_notes": {"purpose": "Ngăn lỗi dẫn xuất lô 4.", "acceptance_checks": ["Đủ mọi trang cần dùng và đoạn rủi ro.", "Có mẫu số và vị trí lỗi."], "dependency_use": {"MK04A": "Nguồn có quyền và sổ trang xác định toàn tập kiểm."}}
    },
    {
      "id": "MK04C", "package": "SD04", "title": "Markdown lô 4: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK04B"], "input": "Câu hỏi có vị trí lô 4.", "output": "knowledge-base/derived-markdown/LO_04/NHAN_XET_CHUYEN_MON.md", "steps": "Xét mơ hồ, mâu thuẫn và điều kiện nguồn.", "done_when": "Nhận xét thực đúng phiên bản; phần thiếu giữ chờ.", "condition": "60 phút tạm sau SRC-11; thiếu căn cứ/giờ phải thêm việc, không tự APPROVED; không có mơ hồ ghi đã rà.",
      "work_steps": [{"id": "MK04C.01", "title": "Xét nghĩa tại nguồn", "instructions": "Đọc vị trí nguồn được phép; ghi kết luận có căn cứ hoặc yêu cầu bổ sung. Không dùng nhận xét dẫn xuất thay phê duyệt thẻ/FAQ.", "output": "knowledge-base/derived-markdown/LO_04/NHAN_XET_CHUYEN_MON.md — Lô 4: nhận xét và điểm chờ", "done_when": "Câu hỏi còn mở vẫn chặn; không tạo quyết định giả.", "minutes": {"CVYK": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Giữ review thẻ riêng.",
      "reader_notes": {"purpose": "Chuyển mơ hồ lô 4 tới CVYK.", "acceptance_checks": ["Có nhận xét và vị trí.", "Không thay quyền hoặc review thẻ."], "dependency_use": {"MK04B": "Danh sách lỗi cung cấp câu hỏi chuyên môn."}}
    },
    {
      "id": "MK04D", "package": "SD04", "title": "Markdown lô 4: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK04C"], "input": "Nhận xét và lỗi lô 4.", "output": "knowledge-base/derived-markdown/LO_04/BAN_KE.json", "steps": "Sửa có lịch sử, chạy kiểm và chuyển xét lại.", "done_when": "Metadata, quyền, hash, sổ trang khớp; lỗi chỉ đóng bằng bằng chứng đúng vai.", "condition": "60 phút sau SRC-11 không gồm reviewer. Thêm phiếu NCS2/CVYK khi cần xét lại; chưa xét thì chặn, không tự APPROVED.",
      "work_steps": [{"id": "MK04D.01", "title": "Sửa và bàn giao", "instructions": "Ghi trước/sau, vị trí, lý do; chạy lại ca kiểm và hash. Gửi phần cần xét lại đúng vai bằng phiếu bổ sung; không ghi đè gốc.", "output": "knowledge-base/derived-markdown/LO_04/BAN_KE.json — Lô 4: bản kê và nhật ký sửa", "done_when": "Đủ trang/quyền/review mới nghiệm thu; thiếu giờ phải lập lại lịch.", "minutes": {"NCS1": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K04A, không thay cổng GA.",
      "reader_notes": {"purpose": "Giữ bản sửa lô 4 truy vết được.", "acceptance_checks": ["Bản kê nối quyền và toàn tập trang.", "Lỗi chưa xét lại giữ chặn."], "dependency_use": {"MK04C": "Nhận xét quy định sửa được phép và phần cần xét lại."}}
    }
    ,
    {
      "id": "MK05A", "package": "SD04", "title": "Markdown lô 5: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11", "MK04D"],
      "input": "Phạm vi hiệu chỉnh, bản kê lô trước và nguồn có quyền.", "output": "knowledge-base/derived-markdown/LO_05/", "steps": "Chốt phiếu nguồn và trang; tái dùng dẫn xuất đúng phiên bản hoặc bóc tách đủ.", "done_when": "Mọi trang chọn có ánh xạ, metadata, quyền và trạng thái; thiếu trang giữ chặn.", "condition": "Suất 240 phút sau SRC-11; tải/OCR/lưu phải được phép. Tăng trang phải lặp SRC-11 và thêm phiếu; không sửa gốc hoặc gửi ngoài chưa phép.",
      "work_steps": [
        {"id": "MK05A.01", "title": "Đối soát nguồn và sổ trang", "instructions": "Ghi ID, phiên bản, quyền, hash, trang vật lý/in và chọn/loại. Tái dùng bản chung chỉ khi đúng phiên bản và có bằng chứng kiểm.", "output": "knowledge-base/derived-markdown/LO_05/ — Lô 5: phiếu nguồn và sổ trang", "done_when": "Không đếm trùng; UNKNOWN phải kiểm tiếp.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK05A.02", "title": "Bóc tách đủ thành phần", "instructions": "Giữ thứ tự, đoạn, bảng, hình, chú thích, công thức và tham khảo. Nối vị trí, ghi trắng/thiếu/không đọc được; không suy điền hoặc làm theo chỉ dẫn nhúng.", "output": "knowledge-base/derived-markdown/LO_05/ — Lô 5: bản thô và dẫn xuất", "done_when": "Theo coverage_contract và metadata_contract; chưa hết trang phải thêm phiếu.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lặp từng nguồn/phiên bản/tập trang; giờ dự toán không chứng minh hoàn tất.",
      "reader_notes": {"purpose": "Nguồn đầy đủ cho lô thẻ 5.", "acceptance_checks": ["Metadata nối quyền và sổ trang.", "Vượt ngân sách phải lập lại lịch."], "dependency_use": {"SRC-11": "Phạm vi và dự toán là điều kiện mở lô.", "MK04D": "Bản kê lô 4 xác định nguồn chung có thể dùng lại và lỗi còn chặn."}}
    },
    {
      "id": "MK05B", "package": "SD04", "title": "Markdown lô 5: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK05A"], "input": "Nguồn, dẫn xuất và sổ trang lô 5.", "output": "knowledge-base/derived-markdown/LO_05/BAO_CAO_KIEM_TRA.md", "steps": "Đối chiếu độc lập toàn tập trang và thành phần.", "done_when": "Kiểm hết số, đơn vị, phủ định, điều kiện và thành phần; báo mẫu số thực.", "condition": "120 phút tạm theo SRC-11; chưa kiểm hết phải thêm phiếu. Không dùng hết giờ thay nghiệm thu.",
      "work_steps": [{"id": "MK05B.01", "title": "So đầy đủ với nguồn", "instructions": "Kiểm mọi trang chọn, số, dấu, đơn vị, phủ định, bảng/hình, chú thích, công thức và tham chiếu. Ghi lỗi có vị trí và câu hỏi CVYK, không tự sửa nghĩa.", "output": "knowledge-base/derived-markdown/LO_05/BAO_CAO_KIEM_TRA.md — Lô 5: sổ kiểm và lỗi", "done_when": "Không chỉ lấy mẫu; báo trang đã kiểm/cần kiểm.", "minutes": {"NCS2": 120}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Người kiểm khác người bóc tách.",
      "reader_notes": {"purpose": "Ngăn sai lệch dẫn xuất lô 5.", "acceptance_checks": ["Mọi trang cần dùng được kiểm.", "Đoạn rủi ro và lỗi có vị trí."], "dependency_use": {"MK05A": "Bản gốc có quyền, dẫn xuất và sổ trang xác định tập kiểm."}}
    },
    {
      "id": "MK05C", "package": "SD04", "title": "Markdown lô 5: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK05B"], "input": "Câu hỏi có vị trí nguồn lô 5.", "output": "knowledge-base/derived-markdown/LO_05/NHAN_XET_CHUYEN_MON.md", "steps": "Xét mơ hồ và mâu thuẫn đúng phiên bản.", "done_when": "Có nhận xét thực hoặc giữ chờ; không thay review thẻ.", "condition": "60 phút tạm theo SRC-11; thiếu căn cứ/giờ phải giữ chặn và bổ sung việc. Không mơ hồ thì ghi đã rà, không tạo phê duyệt giả.",
      "work_steps": [{"id": "MK05C.01", "title": "Xét nghĩa theo nguồn", "instructions": "Đọc vị trí được phép, ghi kết luận có căn cứ hoặc câu hỏi bổ sung. Giữ giới hạn và lỗi mở; không gán APPROVED cho thẻ/FAQ.", "output": "knowledge-base/derived-markdown/LO_05/NHAN_XET_CHUYEN_MON.md — Lô 5: nhận xét chuyên môn", "done_when": "Gắn nguồn, phiên bản và câu hỏi; không cấp quyền phát hành.", "minutes": {"CVYK": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Thẩm định thẻ lô 5 vẫn riêng.",
      "reader_notes": {"purpose": "Chuyển mơ hồ tới CVYK.", "acceptance_checks": ["Có nhận xét thực theo vị trí.", "Chưa rõ thì giữ chặn."], "dependency_use": {"MK05B": "Lỗi kiểm chéo cung cấp câu hỏi chuyên môn."}}
    },
    {
      "id": "MK05D", "package": "SD04", "title": "Markdown lô 5: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK05C"], "input": "Nhận xét và dẫn xuất lô 5.", "output": "knowledge-base/derived-markdown/LO_05/BAN_KE.json", "steps": "Sửa có lịch sử, chạy kiểm và chuyển xét lại đúng vai.", "done_when": "Metadata, quyền, hash và sổ trang khớp; lỗi chỉ đóng có bằng chứng.", "condition": "Suất 60 phút sau SRC-11 không gồm reviewer. Thêm phiếu NCS2/CVYK khi cần xét lại; chưa xét vẫn chặn, không tự APPROVED.",
      "work_steps": [{"id": "MK05D.01", "title": "Sửa và khóa bản bàn giao", "instructions": "Ghi trước/sau, vị trí, lý do; chạy lại kiểm và hash. Gửi phần cần xét lại bằng phiếu bổ sung; không sửa nguồn gốc hoặc tự đóng lỗi nghĩa.", "output": "knowledge-base/derived-markdown/LO_05/BAN_KE.json — Lô 5: bản kê và nhật ký sửa", "done_when": "Đủ toàn tập trang/quyền/review mới nghiệm thu; thiếu giờ lập lại lịch.", "minutes": {"NCS1": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K05A; không thay review thẻ hoặc GA.",
      "reader_notes": {"purpose": "Giữ truy vết bản sửa lô 5.", "acceptance_checks": ["Bản kê nối metadata và sổ trang.", "Lỗi chưa xét lại giữ chặn."], "dependency_use": {"MK05C": "Nhận xét xác định phần sửa và phần cần xét lại."}}
    },
    {
      "id": "MK06A", "package": "SD04", "title": "Markdown lô 6: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11", "MK05D"], "input": "Phạm vi hiệu chỉnh, nguồn có quyền và bản kê trước.", "output": "knowledge-base/derived-markdown/LO_06/", "steps": "Lập phiếu nguồn/trang; tái dùng đúng phiên bản hoặc bóc tách đủ.", "done_when": "Mọi trang có metadata, quyền, ánh xạ và trạng thái; thiếu trang giữ chặn.", "condition": "240 phút tạm theo SRC-11; tải/OCR/lưu phải được phép. Tăng trang phải lặp SRC-11 và thêm phiếu; không sửa gốc hoặc gửi ngoài chưa phép.",
      "work_steps": [
        {"id": "MK06A.01", "title": "Đối soát nguồn và phạm vi", "instructions": "Ghi ID, phiên bản, quyền, hash, trang vật lý/in và chọn/loại. Chỉ tái dùng dẫn xuất đã kiểm cùng phiên bản; UNKNOWN phải kiểm tiếp.", "output": "knowledge-base/derived-markdown/LO_06/ — Lô 6: phiếu nguồn và sổ trang", "done_when": "Không đếm trùng nguồn chung; tập trang rõ.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK06A.02", "title": "Bóc tách đủ thành phần", "instructions": "Giữ thứ tự, đoạn, bảng, hình, chú thích, công thức và tham khảo; nối vị trí. Ghi trắng/thiếu/không đọc được, không suy điền hoặc thi hành lệnh nhúng.", "output": "knowledge-base/derived-markdown/LO_06/ — Lô 6: bản thô và dẫn xuất", "done_when": "Theo coverage_contract và metadata_contract; chưa hết trang phải thêm phiếu.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lặp từng nguồn/phiên bản/tập trang; ngân sách không chứng minh hoàn tất.",
      "reader_notes": {"purpose": "Nguồn đầy đủ cho lô thẻ 6.", "acceptance_checks": ["Quyền và metadata nối từng trang.", "Thiếu giờ phải lập lại lịch."], "dependency_use": {"SRC-11": "Phạm vi và dự toán sau mẫu là điều kiện mở lô.", "MK05D": "Bản kê lô 5 xác định nguồn chung và lỗi phải giữ chặn."}}
    },
    {
      "id": "MK06B", "package": "SD04", "title": "Markdown lô 6: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK06A"], "input": "Nguồn có quyền, dẫn xuất và sổ trang lô 6.", "output": "knowledge-base/derived-markdown/LO_06/BAO_CAO_KIEM_TRA.md", "steps": "Đối chiếu độc lập mọi trang và đoạn rủi ro.", "done_when": "Kiểm hết số, đơn vị, phủ định, điều kiện và thành phần; mẫu số thực rõ.", "condition": "120 phút tạm theo SRC-11; chưa kiểm hết phải thêm phiếu, không tự nhận hoàn tất.",
      "work_steps": [{"id": "MK06B.01", "title": "Kiểm đủ với bản gốc", "instructions": "So mọi trang, số, dấu, đơn vị, phủ định, bảng/hình, chú thích, công thức và tham chiếu. Ghi lỗi, vị trí và câu hỏi chuyên môn.", "output": "knowledge-base/derived-markdown/LO_06/BAO_CAO_KIEM_TRA.md — Lô 6: sổ kiểm và lỗi", "done_when": "Báo trang kiểm/cần kiểm; không kiểm lấy mẫu thay toàn tập.", "minutes": {"NCS2": 120}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Kiểm độc lập với người bóc tách.",
      "reader_notes": {"purpose": "Ngăn lỗi dẫn xuất lô 6.", "acceptance_checks": ["Đủ mọi trang cần dùng.", "Đoạn rủi ro và lỗi có vị trí."], "dependency_use": {"MK06A": "Bản gốc, dẫn xuất và sổ trang xác định tập kiểm."}}
    },
    {
      "id": "MK06C", "package": "SD04", "title": "Markdown lô 6: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK06B"], "input": "Câu hỏi có vị trí lô 6.", "output": "knowledge-base/derived-markdown/LO_06/NHAN_XET_CHUYEN_MON.md", "steps": "Xét mơ hồ và mâu thuẫn theo phiên bản nguồn.", "done_when": "Có nhận xét thực hoặc chờ; không thay thẩm định thẻ.", "condition": "60 phút tạm theo SRC-11; thiếu căn cứ/giờ giữ chặn và thêm việc. Không mơ hồ ghi đã rà, không tạo phê duyệt giả.",
      "work_steps": [{"id": "MK06C.01", "title": "Xét câu hỏi nguồn", "instructions": "Đọc vị trí được phép, ghi kết luận có căn cứ hoặc yêu cầu bổ sung. Giữ giới hạn; không gán APPROVED cho thẻ/FAQ.", "output": "knowledge-base/derived-markdown/LO_06/NHAN_XET_CHUYEN_MON.md — Lô 6: nhận xét và điểm chờ", "done_when": "Nhận xét đúng vị trí/phiên bản; không cấp quyền phát hành.", "minutes": {"CVYK": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Review nguồn không thay review thẻ lô 6.",
      "reader_notes": {"purpose": "Chuyển mơ hồ cho đúng vai.", "acceptance_checks": ["Có nhận xét thực.", "Chưa rõ thì chặn nội dung liên quan."], "dependency_use": {"MK06B": "Danh sách lỗi kiểm chéo cung cấp câu hỏi CVYK."}}
    },
    {
      "id": "MK06D", "package": "SD04", "title": "Markdown lô 6: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK06C"], "input": "Nhận xét và dẫn xuất lô 6.", "output": "knowledge-base/derived-markdown/LO_06/BAN_KE.json", "steps": "Sửa có lịch sử, kiểm lại và chuyển xét lại đúng vai.", "done_when": "Metadata, quyền, hash và sổ trang khớp; lỗi chỉ đóng bằng bằng chứng.", "condition": "60 phút tạm sau SRC-11 không gồm reviewer. Thêm phiếu NCS2/CVYK khi cần xét lại; chưa xét giữ chặn, không tự APPROVED.",
      "work_steps": [{"id": "MK06D.01", "title": "Sửa và khóa bản bàn giao", "instructions": "Ghi trước/sau, vị trí, lý do; chạy lại kiểm và hash. Gửi lỗi cần xét lại đúng vai bằng phiếu bổ sung; không sửa nguồn gốc.", "output": "knowledge-base/derived-markdown/LO_06/BAN_KE.json — Lô 6: bản kê và nhật ký sửa", "done_when": "Đủ trang/quyền/review mới nghiệm thu; thiếu giờ lập lại lịch.", "minutes": {"NCS1": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K06A, không thay review thẻ hoặc GA.",
      "reader_notes": {"purpose": "Bảo toàn truy vết lô 6 sau sửa.", "acceptance_checks": ["Bản kê nối toàn tập trang và quyền.", "Lỗi chưa xét lại vẫn chặn."], "dependency_use": {"MK06C": "Nhận xét quy định phần được sửa và phần phải xét lại."}}
    },
    {
      "id": "MK07A", "package": "SD04", "title": "Markdown lô 7: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11", "MK06D"], "input": "Phạm vi hiệu chỉnh, nguồn có quyền và bản kê trước.", "output": "knowledge-base/derived-markdown/LO_07/", "steps": "Khóa phiếu nguồn/trang; tái dùng đúng phiên bản hoặc bóc tách đủ.", "done_when": "Mọi trang có metadata, quyền, ánh xạ và trạng thái; trang thiếu giữ chặn.", "condition": "240 phút tạm sau SRC-11; quyền tải/OCR/lưu phải rõ. Tăng trang phải lặp SRC-11 và thêm phiếu; không sửa gốc hoặc gửi ngoài chưa phép.",
      "work_steps": [
        {"id": "MK07A.01", "title": "Kiểm nguồn và sổ trang", "instructions": "Ghi ID, phiên bản, quyền, hash, trang vật lý/in và chọn/loại. Tái dùng bản đã kiểm cùng phiên bản; không đếm trùng nguồn chung.", "output": "knowledge-base/derived-markdown/LO_07/ — Lô 7: phiếu nguồn và sổ trang", "done_when": "UNKNOWN giữ rõ, cần kiểm tiếp trước cam kết.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK07A.02", "title": "Bóc tách đủ thành phần", "instructions": "Giữ thứ tự, đoạn, bảng, hình, chú thích, công thức và tham khảo; nối vị trí. Ghi trắng/thiếu/không đọc được; không suy điền hoặc làm theo lệnh nhúng.", "output": "knowledge-base/derived-markdown/LO_07/ — Lô 7: bản thô và dẫn xuất", "done_when": "Theo coverage_contract và metadata_contract; chưa hết trang phải thêm phiếu.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lặp từng nguồn/phiên bản/tập trang; giờ dự toán không chứng minh hoàn tất.",
      "reader_notes": {"purpose": "Nguồn đầy đủ cho lô thẻ 7.", "acceptance_checks": ["Sổ trang nối metadata quyền.", "Thiếu công phải lập lại lịch."], "dependency_use": {"SRC-11": "Phạm vi và dự toán đã hiệu chỉnh là điều kiện mở lô.", "MK06D": "Bản kê lô 6 xác định nguồn chung và lỗi phải giữ chặn."}}
    },
    {
      "id": "MK07B", "package": "SD04", "title": "Markdown lô 7: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK07A"], "input": "Nguồn, dẫn xuất và sổ trang lô 7.", "output": "knowledge-base/derived-markdown/LO_07/BAO_CAO_KIEM_TRA.md", "steps": "Đối chiếu độc lập mọi trang và thành phần.", "done_when": "Kiểm hết số, đơn vị, phủ định, điều kiện; có mẫu số thực.", "condition": "120 phút tạm theo SRC-11; thiếu giờ phải thêm phiếu, không nhận đủ do hết giờ.",
      "work_steps": [{"id": "MK07B.01", "title": "So toàn tập trang với gốc", "instructions": "Kiểm mọi trang, số, dấu, đơn vị, phủ định, bảng/hình, chú thích, công thức và tham chiếu. Ghi lỗi có vị trí và câu hỏi CVYK; không tự sửa nghĩa.", "output": "knowledge-base/derived-markdown/LO_07/BAO_CAO_KIEM_TRA.md — Lô 7: sổ kiểm và lỗi", "done_when": "Báo trang kiểm/cần kiểm; không lấy mẫu thay kiểm hết.", "minutes": {"NCS2": 120}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Người kiểm độc lập với người bóc tách.",
      "reader_notes": {"purpose": "Ngăn sai lệch nguồn lô 7.", "acceptance_checks": ["Đủ trang cần dùng và đoạn rủi ro.", "Lỗi có vị trí và người nhận."], "dependency_use": {"MK07A": "Bản gốc có quyền, dẫn xuất và sổ trang xác định tập kiểm."}}
    },
    {
      "id": "MK07C", "package": "SD04", "title": "Markdown lô 7: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK07B"], "input": "Câu hỏi có vị trí lô 7.", "output": "knowledge-base/derived-markdown/LO_07/NHAN_XET_CHUYEN_MON.md", "steps": "Xét nghĩa mơ hồ và mâu thuẫn theo nguồn.", "done_when": "Có nhận xét thực đúng phiên bản hoặc chờ; không thay review thẻ.", "condition": "60 phút tạm theo SRC-11; thiếu căn cứ/giờ giữ chặn và thêm việc. Không mơ hồ ghi đã rà, không bịa phê duyệt.",
      "work_steps": [{"id": "MK07C.01", "title": "Xét câu hỏi và giới hạn", "instructions": "Đọc vị trí được phép, ghi kết luận có căn cứ hoặc yêu cầu bổ sung. Giữ giới hạn nguồn, không gán APPROVED cho thẻ/FAQ.", "output": "knowledge-base/derived-markdown/LO_07/NHAN_XET_CHUYEN_MON.md — Lô 7: nhận xét và điểm chờ", "done_when": "Nhận xét đúng vị trí và phiên bản; không cấp quyền phát hành.", "minutes": {"CVYK": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Review thẻ lô 7 vẫn riêng.",
      "reader_notes": {"purpose": "Không để NCS tự phân xử chuyên môn.", "acceptance_checks": ["Có nhận xét thực.", "Điểm chưa rõ giữ chặn."], "dependency_use": {"MK07B": "Lỗi kiểm chéo cung cấp câu hỏi CVYK phải xét."}}
    },
    {
      "id": "MK07D", "package": "SD04", "title": "Markdown lô 7: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK07C"], "input": "Nhận xét và dẫn xuất lô 7.", "output": "knowledge-base/derived-markdown/LO_07/BAN_KE.json", "steps": "Sửa có lịch sử, chạy kiểm và chuyển xét lại.", "done_when": "Metadata, quyền, hash và sổ trang khớp; lỗi chỉ đóng với bằng chứng.", "condition": "60 phút tạm theo SRC-11 không gồm reviewer. Thêm phiếu NCS2/CVYK khi cần xét lại; chưa xét vẫn chặn, không tự APPROVED.",
      "work_steps": [{"id": "MK07D.01", "title": "Sửa và khóa bản bàn giao", "instructions": "Ghi trước/sau, vị trí, lý do; chạy lại kiểm và hash. Chuyển phần cần xét lại bằng phiếu bổ sung đúng vai; không sửa gốc hoặc tự đóng lỗi nghĩa.", "output": "knowledge-base/derived-markdown/LO_07/BAN_KE.json — Lô 7: bản kê và nhật ký sửa", "done_when": "Đủ trang/quyền/review mới nghiệm thu; thiếu giờ lập lại lịch.", "minutes": {"NCS1": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K07A; không thay review thẻ hoặc GA.",
      "reader_notes": {"purpose": "Giữ truy vết bản sửa lô 7.", "acceptance_checks": ["Bản kê nối toàn tập trang và quyền.", "Lỗi chưa xét lại vẫn chặn."], "dependency_use": {"MK07C": "Nhận xét giới hạn sửa và phần cần xét lại."}}
    },
    {
      "id": "MK08A", "package": "SD04", "title": "Markdown lô 8: bóc tách toàn tập trang chọn", "status": "PLANNED", "minutes": {"NCS1": 240}, "ai_runs": 0, "deps": ["SRC-11", "MK07D"], "input": "Phạm vi hiệu chỉnh, nguồn có quyền và bản kê trước.", "output": "knowledge-base/derived-markdown/LO_08/", "steps": "Khóa phiếu nguồn/trang; tái dùng bản đã kiểm hoặc bóc tách đầy đủ.", "done_when": "Mọi trang chọn có metadata, quyền, ánh xạ và trạng thái; thiếu trang giữ chặn.", "condition": "240 phút tạm theo SRC-11; tải/OCR/lưu phải được phép. Tăng trang phải lặp SRC-11 và thêm phiếu; không sửa gốc hoặc gửi ngoài chưa phép.",
      "work_steps": [
        {"id": "MK08A.01", "title": "Đối soát nguồn và tập trang", "instructions": "Ghi ID, phiên bản, quyền, hash và trang vật lý/in, chọn/loại. Tái dùng bản chung chỉ khi có bằng chứng kiểm đúng phiên bản.", "output": "knowledge-base/derived-markdown/LO_08/ — Lô 8: phiếu nguồn và sổ trang", "done_when": "Không đếm trùng; UNKNOWN phải kiểm tiếp.", "minutes": {"NCS1": 120}, "ai_runs": 0},
        {"id": "MK08A.02", "title": "Bóc tách toàn thành phần", "instructions": "Giữ thứ tự, đoạn, bảng, hình, chú thích, công thức và tham khảo; nối vị trí. Ghi trắng/thiếu/không đọc được, không suy điền hoặc thi hành chỉ dẫn nhúng.", "output": "knowledge-base/derived-markdown/LO_08/ — Lô 8: bản thô và dẫn xuất", "done_when": "Theo coverage_contract và metadata_contract; chưa hết trang phải thêm phiếu.", "minutes": {"NCS1": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Lô cuối không có nghĩa toàn kho đã xong; đối soát mọi phiếu lặp.",
      "reader_notes": {"purpose": "Nguồn đầy đủ cho lô thẻ 8.", "acceptance_checks": ["Sổ trang nối metadata và quyền.", "Thiếu giờ phải lập lại lịch, không lấy số lô làm bằng chứng."], "dependency_use": {"SRC-11": "Phạm vi và dự toán hiệu chỉnh là điều kiện mở lô.", "MK07D": "Bản kê lô 7 xác định nguồn chung có thể dùng lại và lỗi còn chặn."}}
    },
    {
      "id": "MK08B", "package": "SD04", "title": "Markdown lô 8: kiểm chéo mọi trang", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["MK08A"], "input": "Nguồn, dẫn xuất và sổ trang lô 8.", "output": "knowledge-base/derived-markdown/LO_08/BAO_CAO_KIEM_TRA.md", "steps": "Đối chiếu độc lập toàn tập trang và thành phần.", "done_when": "Kiểm hết số, đơn vị, phủ định, điều kiện; mẫu số thực rõ.", "condition": "120 phút tạm theo SRC-11; chưa kiểm hết phải thêm phiếu, không nhận đạt vì hết giờ.",
      "work_steps": [{"id": "MK08B.01", "title": "So mọi trang với gốc", "instructions": "Kiểm từng trang, số, dấu, đơn vị, phủ định, bảng/hình, chú thích, công thức và tham chiếu. Ghi lỗi có vị trí và câu hỏi CVYK; không tự sửa nghĩa.", "output": "knowledge-base/derived-markdown/LO_08/BAO_CAO_KIEM_TRA.md — Lô 8: sổ kiểm và lỗi", "done_when": "Báo trang kiểm/cần kiểm; không lấy mẫu thay kiểm hết.", "minutes": {"NCS2": 120}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Người kiểm độc lập với người bóc tách.",
      "reader_notes": {"purpose": "Ngăn lỗi dẫn xuất lô 8.", "acceptance_checks": ["Đủ mọi trang cần dùng và đoạn rủi ro.", "Lỗi có vị trí và người nhận."], "dependency_use": {"MK08A": "Bản gốc có quyền, dẫn xuất và sổ trang xác định tập kiểm."}}
    },
    {
      "id": "MK08C", "package": "SD04", "title": "Markdown lô 8: xét mơ hồ chuyên môn", "status": "PLANNED", "minutes": {"CVYK": 60}, "ai_runs": 0, "deps": ["MK08B"], "input": "Câu hỏi có vị trí nguồn lô 8.", "output": "knowledge-base/derived-markdown/LO_08/NHAN_XET_CHUYEN_MON.md", "steps": "Xét mơ hồ và mâu thuẫn đúng phiên bản.", "done_when": "Có nhận xét thực hoặc giữ chờ; không thay thẩm định thẻ.", "condition": "60 phút tạm theo SRC-11; thiếu căn cứ/giờ giữ chặn và thêm việc. Không mơ hồ ghi đã rà, không bịa phê duyệt.",
      "work_steps": [{"id": "MK08C.01", "title": "Xét nghĩa theo nguồn", "instructions": "Đọc vị trí được phép, ghi kết luận có căn cứ hoặc yêu cầu thêm nguồn. Giữ giới hạn và lỗi mở; không gán APPROVED cho thẻ/FAQ.", "output": "knowledge-base/derived-markdown/LO_08/NHAN_XET_CHUYEN_MON.md — Lô 8: nhận xét và điểm chờ", "done_when": "Đúng vị trí/phiên bản; không cấp quyền phát hành.", "minutes": {"CVYK": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Review thẻ lô 8 vẫn riêng.",
      "reader_notes": {"purpose": "Chuyển mơ hồ cho đúng vai.", "acceptance_checks": ["Nhận xét thực theo câu hỏi.", "Chưa rõ vẫn chặn nội dung liên quan."], "dependency_use": {"MK08B": "Danh sách lỗi kiểm chéo cung cấp câu hỏi cần CVYK."}}
    },
    {
      "id": "MK08D", "package": "SD04", "title": "Markdown lô 8: sửa, chạy lại và chuyển xét lại", "status": "PLANNED", "minutes": {"NCS1": 60}, "ai_runs": 0, "deps": ["MK08C"], "input": "Nhận xét và dẫn xuất lô 8.", "output": "knowledge-base/derived-markdown/LO_08/BAN_KE.json", "steps": "Sửa có lịch sử; chạy kiểm và chuyển xét lại đúng vai.", "done_when": "Metadata, quyền, hash và sổ trang khớp; lỗi chỉ đóng có bằng chứng.", "condition": "60 phút tạm theo SRC-11 không gồm reviewer. Thêm phiếu NCS2/CVYK khi cần xét lại; chưa xét vẫn chặn, không tự APPROVED.",
      "work_steps": [{"id": "MK08D.01", "title": "Sửa và khóa bản bàn giao", "instructions": "Ghi trước/sau, vị trí và lý do; chạy lại kiểm và hash. Chuyển phần cần xét lại bằng phiếu bổ sung; không ghi đè gốc hoặc tự đóng lỗi nghĩa.", "output": "knowledge-base/derived-markdown/LO_08/BAN_KE.json — Lô 8: bản kê và nhật ký sửa", "done_when": "Đủ toàn tập trang/quyền/review mới nghiệm thu; thiếu giờ phải lập lại lịch.", "minutes": {"NCS1": 60}, "ai_runs": 0}], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md"], "resume_note": "Bàn giao K08A và SRC-12; không thay review thẻ hoặc GA.",
      "reader_notes": {"purpose": "Giữ truy vết lô 8 trước tổng hợp bản kê.", "acceptance_checks": ["Bản kê nối metadata, quyền và toàn tập trang.", "Lỗi chưa xét lại giữ chặn."], "dependency_use": {"MK08C": "Nhận xét quy định sửa được phép và phần cần xét lại."}}
    }
    ,
    {
      "id": "C-SRC01", "package": "SD08", "title": "Camera: lập khoảng trống nguồn theo CYK", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["C01"],
      "input": "Gói ứng viên camera và CYK-S/P/K/A/T.", "output": "knowledge-base/evidence-matrix/KHOANG_TRONG_NGUON_CAMERA.md", "steps": "Nối CYK-01–13 với câu hỏi, đối tượng, an toàn và nguồn cần tìm.", "done_when": "Có chọn/hoãn/ngoài phạm vi và lý do; không chọn phép đo từ khả năng kỹ thuật.", "condition": "Ngân sách 120 phút tạm; không mở camera hoặc nghiên cứu người. Camera chỉ thấy cử động bên ngoài.",
      "work_steps": [{"id": "C-SRC01.01", "title": "Đối soát khoảng trống camera", "instructions": "Nối hàng CYK với quy trình, đối tượng, điều kiện dừng, chuẩn đo và nguồn hiện có. Ghi câu hỏi cần tìm; tách nguồn kỹ thuật khỏi căn cứ chuyên môn.", "output": "knowledge-base/evidence-matrix/KHOANG_TRONG_NGUON_CAMERA.md — Ma trận khoảng trống camera", "done_when": "Mỗi khoảng trống có người nhận và ưu tiên; không suy quy trình từ bài vận động chung.", "minutes": {"NCS2": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"], "resume_note": "Bổ sung tìm nguồn có lịch riêng, không lấy giờ C01 bù.",
      "reader_notes": {"purpose": "Làm rõ nhu cầu nguồn camera còn thiếu.", "acceptance_checks": ["Nối hàng CYK và lý do chọn/hoãn.", "Không suy quy trình từ khuyến cáo chung."], "dependency_use": {"C01": "Gói đề xuất một chỉ số cung cấp căn cứ và khoảng trống cần làm rõ."}}
    },
    {
      "id": "C-SRC02", "package": "SD08", "title": "Camera: tìm và sàng lọc nguồn quy trình", "status": "PLANNED", "minutes": {"NCS2": 240}, "ai_runs": 0, "deps": ["C-SRC01"],
      "input": "Ma trận khoảng trống camera.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON_CAMERA.md", "steps": "Tìm theo câu hỏi trên kênh chính thức và nghiên cứu; khử trùng, sàng lọc, bàn giao C02.", "done_when": "Có nhật ký truy vấn thực, ứng viên, phiên bản và lý do; khoảng trống chưa tìm được ghi rõ.", "condition": "Chỉ metadata hoặc nội dung đã có quyền đọc; không tải/OCR nguồn bổ sung trước C02 cho phép. 240 phút không cam kết đủ mọi nguồn.",
      "work_steps": [
        {"id": "C-SRC02.01", "title": "Tìm nguồn quy trình cụ thể", "instructions": "Tìm cơ quan ban hành, hội chuyên môn và PubMed/Cochrane theo câu hỏi VN/EN. Ghi ngày, URL, truy vấn nguyên văn, bộ lọc và số xem thực.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON_CAMERA.md — Nhật ký tìm camera", "done_when": "Có nguồn hoặc ghi không tìm thấy; không bịa kết quả.", "minutes": {"NCS2": 120}, "ai_runs": 0},
        {"id": "C-SRC02.02", "title": "Sàng lọc và chuyển kiểm quyền", "instructions": "Khử trùng DOI/phiên bản; sàng lọc đối tượng, quy trình và chuẩn đo theo tiêu chí. Ghi lý do chọn/loại/chờ và thao tác cần C02 kiểm.", "output": "knowledge-base/evidence-matrix/NHAT_KY_TIM_NGUON_CAMERA.md — Danh mục ứng viên camera cho C02", "done_when": "Thiếu toàn văn ghi chờ quyền, không thay bằng suy luận; thiếu ngân sách mở thêm việc.", "minutes": {"NCS2": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"], "resume_note": "Nguồn bổ sung đi qua C02 trước xử lý thật.",
      "reader_notes": {"purpose": "Tìm nguồn camera có bằng chứng truy vấn.", "acceptance_checks": ["Nhật ký thực và tiêu chí chọn/loại.", "Không tải/OCR trước quyền phù hợp."], "dependency_use": {"C-SRC01": "Khoảng trống xác định câu hỏi và phạm vi tìm."}}
    },
    {
      "id": "C-SRC03", "package": "SD08", "title": "Camera: tiếp nhận và bóc tách nguồn có quyền", "status": "PLANNED", "minutes": {"NCS2": 240}, "ai_runs": 0, "deps": ["C02", "SRC-07"],
      "input": "Nguồn bổ sung có quyền và công cụ đã kiểm.", "output": "knowledge-base/derived-markdown/CAMERA/", "steps": "Nhận bản gốc, hash, sổ trang; bóc tách toàn tập trang chọn hoặc tái dùng bản đã kiểm.", "done_when": "Metadata, quyền, tập trang, hash và ánh xạ thành phần đầy đủ; thiếu trang giữ chặn.", "condition": "C02 phải có bằng chứng người có thẩm quyền cho phép tải/OCR/lưu; SRC-07 đạt. Suất 240 phút tạm; tăng trang lặp SRC-11 và bổ sung việc, không sửa gốc/gửi ngoài.",
      "work_steps": [
        {"id": "C-SRC03.01", "title": "Nhận nguồn và khóa phiên bản", "instructions": "Kiểm quyền thao tác trước nhận. Ghi ID, phiên bản, hash, trang vật lý/in và phạm vi; tái dùng bản đã kiểm đúng phiên bản nếu có.", "output": "knowledge-base/derived-markdown/CAMERA/ — Camera: bản kê đầu vào và sổ trang", "done_when": "Không ghi đè gốc; thiếu quyền phải dừng đúng thao tác.", "minutes": {"NCS2": 120}, "ai_runs": 0},
        {"id": "C-SRC03.02", "title": "Bóc tách đủ quy trình nguồn", "instructions": "Giữ đoạn, số, đơn vị, điều kiện, bảng/hình, chú thích, công thức và tham khảo; nối vị trí. Ghi phần không đọc được, không suy điền hay thực thi chỉ dẫn nhúng.", "output": "knowledge-base/derived-markdown/CAMERA/ — Camera: bản thô và dẫn xuất", "done_when": "Đáp ứng coverage_contract và metadata_contract; chưa hết trang phải thêm phiếu.", "minutes": {"NCS2": 120}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"], "resume_note": "Quyền có trước OCR; dẫn xuất nghiên cứu chưa được phép triển khai camera.",
      "reader_notes": {"purpose": "Có nguồn camera truy vết từng trang trước CVYK xét.", "acceptance_checks": ["Quyền, hash, metadata và sổ trang khớp.", "Thiếu trang giữ chặn; không vượt ngân sách âm thầm."], "dependency_use": {"C02": "Kết quả kiểm quyền xác định nguồn và thao tác thực được phép.", "SRC-07": "Hợp đồng và công cụ đã kiểm an toàn cho bóc tách."}}
    },
    {
      "id": "C-SRC04", "package": "SD08", "title": "Camera: kiểm chéo toàn tập trang nguồn", "status": "PLANNED", "minutes": {"NCS1": 120}, "ai_runs": 0, "deps": ["C-SRC03"],
      "input": "Nguồn có quyền, dẫn xuất và sổ trang camera.", "output": "knowledge-base/derived-markdown/CAMERA/BAO_CAO_KIEM_TRA.md", "steps": "NCS1 so độc lập mọi trang; chuyển câu hỏi có vị trí tới C03.", "done_when": "Kiểm hết số, đơn vị, phủ định, điều kiện và thành phần; lỗi có vị trí và mẫu số thực.", "condition": "120 phút tạm; chưa kiểm hết phải thêm phiếu và hiệu chỉnh. Không dùng kiểm chéo thay review CVYK C03 hoặc mở camera.",
      "work_steps": [{"id": "C-SRC04.01", "title": "Đối chiếu nguồn và ghi câu hỏi", "instructions": "So mọi trang, số, đơn vị, phủ định, bảng/hình, chú thích và tham chiếu. Nối bước đo, đối tượng, điều kiện dừng với vị trí nguồn; không tự kết luận chuyên môn.", "output": "knowledge-base/derived-markdown/CAMERA/BAO_CAO_KIEM_TRA.md — Camera: sổ trang kiểm và câu hỏi C03", "done_when": "Không trộn biến thể quy trình; mọi thiếu sót vẫn chặn phần liên quan.", "minutes": {"NCS1": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"], "resume_note": "C03 vẫn là phiên CVYK xét nguồn; không tạo phiên chuyên môn trùng.",
      "reader_notes": {"purpose": "Đối chiếu độc lập trước C03.", "acceptance_checks": ["Kiểm toàn tập trang cần dùng.", "Mơ hồ có vị trí để C03 xét."], "dependency_use": {"C-SRC03": "Nguồn, quyền và dẫn xuất xác định tập kiểm độc lập."}}
    },
    {
      "id": "C-SRC05", "package": "SD08", "title": "Camera: sửa nguồn và bàn giao mã kiểm tra", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["C03"],
      "input": "Nhận xét CVYK và lỗi kiểm chéo camera.", "output": "knowledge-base/derived-markdown/CAMERA/BAN_KE.json", "steps": "Sửa có truy vết, chạy kiểm lại, cập nhật hash và bàn giao C04.", "done_when": "Bản kê nối CYK, quyền, metadata, sổ trang và nhận xét thực; lỗi chưa xét lại vẫn chặn.", "condition": "120 phút tạm không gồm giờ reviewer ẩn. Cần xét lại phải thêm phiếu đúng vai; không tự APPROVED hoặc mở camera. Camera chỉ thấy cử động bên ngoài.",
      "work_steps": [{"id": "C-SRC05.01", "title": "Sửa và bàn giao đúng phiên bản", "instructions": "Ghi trước/sau, vị trí và lý do theo C03; chạy lại kiểm và hash. Nối CYK-S/P/K/A/T, quyền và lỗi mở; chuyển xét lại bằng phiếu bổ sung khi cần.", "output": "knowledge-base/derived-markdown/CAMERA/BAN_KE.json — Camera: bản kê, nhật ký sửa và điểm chờ", "done_when": "Không sửa gốc, không tự đóng lỗi chuyên môn. Chưa đủ trang/quyền/review thì C04 không dùng phần đó.", "minutes": {"NCS2": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/research/plans/MA_TRAN_Y_KHOA_CAMERA.md"], "resume_note": "Bàn giao cho thiết kế, không thay cổng cho phép thiết bị hoặc nghiên cứu người.",
      "reader_notes": {"purpose": "Giữ bản sửa nguồn camera có thể kiểm lại.", "acceptance_checks": ["Hash, quyền, metadata và sổ trang khớp.", "Phản hồi C03 được truy vết; lỗi chưa xét giữ chặn."], "dependency_use": {"C03": "Nhận xét CVYK xác định sửa được phép và giới hạn phải giữ."}}
    },
    {
      "id": "SRC-M01", "package": "SD22", "title": "Lập nhịp rà cập nhật, quyền và thu hồi nguồn", "status": "PLANNED", "minutes": {"NCS1": 120}, "ai_runs": 0, "deps": ["SRC-12"],
      "input": "Bản kê Markdown nghiên cứu toàn phạm vi chọn.", "output": "knowledge-base/evidence-matrix/LICH_RA_NGUON.md", "steps": "Định nghĩa người theo dõi, nhịp rà và tác nhân mở lại kiểm nguồn.", "done_when": "Có chủ trì, lịch rà định kỳ/trước phát hành, nơi kiểm đính chính và điều kiện chặn sử dụng.", "condition": "120 phút là công thiết kế bảo trì, không bao gồm mọi lần rà tương lai. Lần thực hiện phải được lập lịch riêng; không tự sửa nguồn gốc hoặc thẻ APPROVED.",
      "work_steps": [{"id": "SRC-M01.01", "title": "Lập quy tắc theo dõi", "instructions": "Ghi người nhận, nhịp rà trước phát hành và định kỳ do người có thẩm quyền xét. Theo dõi phiên bản, đính chính, thu hồi, quyền hết hạn và nơi nhận thông báo. Ghi điều kiện chuyển LEGAL xét quyền và CVYK xét nội dung khi nguồn thay đổi; các phiên xét phải lập lịch riêng.", "output": "knowledge-base/evidence-matrix/LICH_RA_NGUON.md — Lịch rà và quy tắc mở lại", "done_when": "Nguồn đổi phải chặn phiên bản liên quan và mở phiếu đánh giá; không tự thay bằng bản mới.", "minutes": {"NCS1": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"], "resume_note": "Tách công định nghĩa khỏi công bảo trì định kỳ chưa biết.",
      "reader_notes": {"purpose": "Nguồn nghiên cứu có người tiếp tục theo dõi.", "acceptance_checks": ["Có nhịp rà, người nhận và điều kiện mở lại.", "Giờ bảo trì tương lai không bị coi đã dự toán đủ."], "dependency_use": {"SRC-12": "Bản kê nguồn và quyền xác định đối tượng cần theo dõi."}}
    },
    {
      "id": "SRC-M02", "package": "SD22", "title": "Thử truy ngược và bóc tách lại phần thay đổi", "status": "PLANNED", "minutes": {"NCS2": 120}, "ai_runs": 0, "deps": ["SRC-M01"],
      "input": "Quy tắc cập nhật và bản kê phụ thuộc; mẫu tổng hợp.", "output": "knowledge-base/evidence-matrix/CA_THU_CAP_NHAT_NGUON.md", "steps": "Lập đồ thị ngược và ca thay phiên bản, đánh giá phần bị ảnh hưởng.", "done_when": "Truy nguồn→đoạn→thẻ/FAQ→quy trình→cấu hình→gói; có phần cần bóc tách và review lại.", "condition": "120 phút là suất thử tổng hợp; nguồn thật phải có quyền và lịch bổ sung. Không sửa hàng loạt hoặc thẻ APPROVED; thay schema cần quyết định và validator.",
      "work_steps": [{"id": "SRC-M02.01", "title": "Thử thay đổi có truy vết", "instructions": "Dùng mẫu tổng hợp đổi phiên bản hoặc quyền; truy ngược mọi phụ thuộc. Bóc tách lại phần thay đổi bằng công cụ đã kiểm, nối sổ trang và review cần mở lại. Nguồn thật cần LEGAL rà quyền và CVYK xét ảnh hưởng chuyên môn theo thay đổi. Chỉ dùng lại khi đủ quyết định đúng thẩm quyền.", "output": "knowledge-base/evidence-matrix/CA_THU_CAP_NHAT_NGUON.md — Đồ thị phụ thuộc và ca thay đổi", "done_when": "Không trộn phiên bản; nội dung chưa xét lại bị chặn. Phát sinh công phải thêm phiếu.", "minutes": {"NCS2": 120}, "ai_runs": 0}],
      "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "data-pipeline/README.md"], "resume_note": "Chỉ một ca mẫu, không nhận đã bảo trì toàn nguồn thật.",
      "reader_notes": {"purpose": "Biết thành phần nào phải dừng khi nguồn đổi.", "acceptance_checks": ["Đồ thị ngược không bỏ thẻ, FAQ, cấu hình hoặc gói.", "Phiên bản mới phải xét lại, không tự thay thế."], "dependency_use": {"SRC-M01": "Quy tắc theo dõi xác định sự kiện kích hoạt và người nhận thay đổi."}}
    },
    {
      "id": "SRC-M03", "package": "SD22", "title": "Kiểm chặn phục hồi dẫn xuất đã mất quyền", "status": "PLANNED", "minutes": {"REVIEW_TECH": 180}, "ai_runs": 0, "deps": ["SRC-M02", "R077", "R065"],
      "input": "Ca thay đổi nguồn, kết quả thu hồi đầu ra và quy tắc phục hồi.", "output": "testing/results/KIEM_THU_HOI_MARKDOWN.md", "steps": "Thử thu hồi nguồn tổng hợp, cache/chỉ mục/bản sao và chặn phục hồi phiên bản mất quyền.", "done_when": "Có log đúng phiên bản, mẫu số và kết quả chặn; lỗi còn mở được chuyển R078, không báo đạt giả.", "condition": "Chỉ vùng thử với nguồn tổng hợp; không xóa nguồn thật hoặc phá bản sao. 180 phút tạm; thiếu công phải thêm việc.",
      "work_steps": [
        {"id": "SRC-M03.01", "title": "Thử thu hồi xuyên phụ thuộc", "instructions": "Rút quyền mẫu tổng hợp; kiểm dẫn xuất, đoạn, cache, chỉ mục và đầu ra liên quan đều bị chặn. Ghi log phiên bản và phần lưu/xóa đúng chính sách. Với nguồn thật, LEGAL rà điều kiện lưu/xóa; CVYK xét ảnh hưởng nội dung khi cần. Không tự cấp quyền hoặc xóa nguồn thật.", "output": "testing/results/KIEM_THU_HOI_MARKDOWN.md — Log thử thu hồi nguồn Markdown", "done_when": "Nguồn rút không dùng lại; không coi xóa một file là thu hồi đầy đủ.", "minutes": {"REVIEW_TECH": 120}, "ai_runs": 0},
        {"id": "SRC-M03.02", "title": "Thử phục hồi bản sao cũ", "instructions": "Phục hồi mẫu sao lưu cũ trong vùng thử; xác minh trạng thái mất quyền vẫn chặn. Ghi kết quả, lỗi và bàn giao R078. Kiểm kỹ thuật không thay xét quyền hoặc chuyên môn; mở lại nguồn thật phải có quyết định và lịch xét riêng.", "output": "testing/results/KIEM_THU_HOI_MARKDOWN.md — Biên bản chặn phục hồi nguồn mất quyền", "done_when": "Không phục hồi quyền từ bản sao cũ; hash không thay quyền lưu nội dung.", "minutes": {"REVIEW_TECH": 60}, "ai_runs": 0}
      ], "source_paths": ["docs/research/plans/KE_HOACH_CON_LAI/KE_HOACH_NGUON_Y_KHOA_MARKDOWN.md", "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md", "docs/guides/QUY_TRINH_XUAT_BAN_HTML.md"], "resume_note": "Bổ sung bằng chứng nguồn dẫn xuất trước diễn tập vận hành R078.",
      "reader_notes": {"purpose": "Ngăn bản đã thu hồi quay lại qua cache hoặc sao lưu.", "acceptance_checks": ["Có ca thu hồi và phục hồi bản cũ.", "Kết quả xuyên phụ thuộc, không chỉ một file."], "dependency_use": {"SRC-M02": "Đồ thị ngược và ca thay đổi xác định toàn phần bị ảnh hưởng.", "R077": "Kiểm thu hồi đầu ra cung cấp cơ chế chặn cần thử với dẫn xuất.", "R065": "Quy tắc phục hồi/quay lui xác định cách thử bản sao cũ an toàn."}}
    }
  ],
  "milestones": [
    {
      "title": "Ứng viên chữ trên môi trường thử",
      "tasks": [
        "R061"
      ]
    },
    {
      "title": "Đủ hồ sơ trình thử giới hạn chữ (sau GB-R)",
      "tasks": [
        "GB-R"
      ]
    },
    {
      "title": "Phiên xét cho phép nghiên cứu chữ (GC)",
      "tasks": [
        "GC"
      ]
    },
    {
      "title": "Sản phẩm chữ đã cài và kiểm nhận trong kịch bản",
      "tasks": [
        "R105"
      ]
    },
    {
      "title": "Camera: phiên xét bằng chứng trước tích hợp (GCB)",
      "tasks": [
        "GCB"
      ]
    },
    {
      "title": "Sản phẩm kết hợp, hướng dẫn và bàn giao",
      "tasks": [
        "R114",
        "R115"
      ]
    },
    {
      "title": "Kết thúc theo dõi tháng đầu và chuyển duy trì",
      "tasks": [
        "R120"
      ]
    }
  ],
  "detailed_steps_required": true,
  "reader_notes_required": true,
  "presentation_version": "1.2",
  "week_notes_mode": "derived_from_allocations",
  "week_notes_legacy_notice": "Các diễn giải viết tay dưới đây thuộc lịch trước bổ sung nguồn. Chế độ hiện hành sinh trọng tâm tuần từ phân bổ đã tính lại; không sử dụng ngày và trọng tâm cũ.",
  "week_notes": {
    "R01": {
      "title": "Đối chiếu hiện trạng và xác định người nhận việc",
      "overview": "Hai NCS đối chiếu phần đã làm, yêu cầu và luồng tác vụ. GVHD xem nguồn lực; CVYK góp ý câu hỏi để nhóm tiếp tục đúng phạm vi.",
      "goals": [
        "Phân biệt hiện vật đã có với phần chữ và camera còn thiếu.",
        "Ghi luồng tác vụ, giới hạn và điểm bàn giao giữa hai NCS.",
        "Xác minh môi trường hiện tại, lịch khả dụng và những vai chưa được xác nhận."
      ]
    },
    "R02": {
      "title": "Hoàn thiện phạm vi, công cụ và cách dựng lại dự án",
      "overview": "NCS1 sửa hồ sơ và công cụ theo góp ý, với AI hỗ trợ phần kỹ thuật. Người kiểm kỹ thuật thử dựng độc lập để phát hiện hướng dẫn còn thiếu.",
      "goals": [
        "NCS1 tự hoàn thiện phần phạm vi và đề cương còn thiếu.",
        "Kiểm ma trận yêu cầu và sửa công cụ theo nhận xét.",
        "Đối chiếu kết quả dựng độc lập, sửa hướng dẫn và ghi giới hạn tái lập."
      ]
    },
    "R03": {
      "title": "Mở phần chuẩn bị hợp đồng dữ liệu và môi trường",
      "overview": "GVHD xem phạm vi sơ bộ để nhóm hoàn thiện hồ sơ. NCS1, NCS2 và người vận hành bắt đầu đối chiếu dữ liệu, nguồn camera và máy đích.",
      "goals": [
        "Ghi kết quả xem phạm vi sơ bộ; không coi đây là cổng G0 đầy đủ.",
        "Bắt đầu đề xuất cấu trúc dữ liệu và rà nguồn cho ứng viên camera.",
        "Bắt đầu kiểm kê máy đích, quyền và người chịu trách nhiệm."
      ]
    },
    "R04": {
      "title": "Nối nguồn, dữ liệu và phương pháp thử dự kiến",
      "overview": "Hai NCS tiếp tục hồ sơ nguồn, dữ liệu và phương pháp thử. CVYK cùng người giữ dữ liệu, kiểm quyền và vận hành làm rõ điều kiện trước triển khai.",
      "goals": [
        "Hoàn thiện đề xuất hợp đồng, dữ liệu camera tối thiểu và nhãn cần xét.",
        "Ghi vòng đời dữ liệu, phần nguồn đã đối chiếu và quyền còn phải xác minh.",
        "NCS1 tự hoàn thiện phương pháp thử giới hạn; chưa tuyển hoặc thu dữ liệu.",
        "Hoàn thiện kiểm kê máy đích; tiếp tục xác minh quyền nguồn và dịch vụ."
      ]
    },
    "R05": {
      "title": "Sửa hợp đồng và kiểm cách thu, giữ dữ liệu",
      "overview": "NCS1 kiểm thay đổi kỹ thuật do AI hỗ trợ; NCS2 đối chiếu hồ sơ camera. Các vai kiểm quyền, giữ dữ liệu và kiểm kỹ thuật tiếp tục xử lý điều kiện còn thiếu.",
      "goals": [
        "Đối chiếu phạm vi dữ liệu với nhà cung cấp trước sửa hợp đồng.",
        "Kiểm schema và bộ kiểm đã sửa; bắt đầu kiểm kỹ thuật độc lập.",
        "Hoàn thiện phần đối chiếu hồ sơ camera; tiếp tục kế hoạch thu, giữ và rút dữ liệu.",
        "Tiếp tục xác minh quyền nguồn và dịch vụ; chưa coi việc đọc hồ sơ là đã được phép."
      ]
    },
    "R06": {
      "title": "Làm rõ an toàn dữ liệu và kế hoạch kiểm thử",
      "overview": "NCS1 thiết kế bảo mật và kế hoạch kiểm thử từ hợp đồng đã đối chiếu. Các vai chuyên trách kiểm quyền, vòng đời dữ liệu và hoạt động chữ dự kiến với người.",
      "goals": [
        "Kết thúc phần kiểm kỹ thuật hợp đồng và ghi lỗi còn mở.",
        "Đối chiếu quyền nguồn, đồng ý và cách thu, giữ, rút dữ liệu.",
        "NCS1 hoàn thiện thiết kế luồng dữ liệu và kế hoạch kiểm thử tổng thể.",
        "CVYK bắt đầu xem hoạt động chữ dự kiến; chưa coi hồ sơ là quyền thử với người."
      ]
    },
    "R07": {
      "title": "Tách phương pháp đánh giá và xem quyền nguồn",
      "overview": "NCS2 tách phần kiểm camera khỏi dữ liệu đánh giá. CVYK xem hoạt động chữ; người kiểm quyền xem xét nguồn và dịch vụ để các bước sau biết điều kiện sử dụng.",
      "goals": [
        "Ghi cách tách dữ liệu và phép kiểm camera.",
        "Hoàn thiện phần xem xét chuyên môn cho hoạt động chữ dự kiến.",
        "Ghi kết luận quyền nguồn, dịch vụ hoặc phần còn chờ theo bằng chứng thực."
      ]
    },
    "R08": {
      "title": "Thiết kế quyền vận hành và đường truyền dữ liệu",
      "overview": "Người kiểm quyền rà phạm vi truyền dữ liệu và sự cố. Người vận hành dựa vào đó thiết kế tài khoản, cấu hình và giới hạn cho môi trường thử.",
      "goals": [
        "Đối chiếu từng đường truyền với phạm vi dịch vụ được phép.",
        "Ghi cấu hình mẫu, quyền tối thiểu, nhật ký và cách thu hồi khóa.",
        "Đánh dấu điều kiện còn thiếu để chuyển người kiểm kỹ thuật."
      ]
    },
    "R09": {
      "title": "Kiểm thiết kế bảo mật và chuẩn bị xuất bản có kiểm quyền",
      "overview": "Người kiểm kỹ thuật rà thiết kế bảo mật; người kiểm quyền xem đối tượng đọc và tài nguyên xuất bản. AI hỗ trợ bộ sinh và quy trình đóng gói theo phạm vi đó.",
      "goals": [
        "Ghi kết quả kiểm thiết kế bảo mật và yêu cầu cần sửa.",
        "Xem quyền xuất bản theo từng tài nguyên; không mặc định được công bố toàn kho.",
        "Chuẩn bị phần kỹ thuật của bộ sinh và quy trình đóng gói để con người kiểm tiếp."
      ]
    },
    "R10": {
      "title": "Xét điều kiện nền trước lô nội dung đầu tiên",
      "overview": "GVHD xem hồ sơ G0. Chỉ khi đủ điều kiện thực, người vận hành mở phần chuẩn bị môi trường và NCS1 bắt đầu lô tri thức đầu tiên.",
      "goals": [
        "Ghi quyết định G0 thật hoặc yêu cầu bổ sung hồ sơ.",
        "Bắt đầu chuẩn bị môi trường thử riêng đúng quyền.",
        "Bắt đầu đọc nguồn và hoàn thiện lô 1 gồm thẻ tri thức và FAQ nháp."
      ]
    },
    "R11": {
      "title": "Đối chiếu lô đầu và đặc tả API trên môi trường thử",
      "overview": "NCS1 hoàn thiện lô 1 và đặc tả API; CVYK xem nội dung lô đầu. Người vận hành, người kiểm kỹ thuật và AI tiếp tục phần môi trường và mã theo hợp đồng.",
      "goals": [
        "Hoàn thiện bản lô 1 để CVYK trả nhận xét chuyên môn; chưa tự coi là được duyệt.",
        "Hoàn thiện môi trường thử và kiểm phân tách quyền.",
        "Kiểm ứng dụng ngoại tuyến trên môi trường được giao.",
        "Hoàn thiện đặc tả API; bắt đầu phần mã bộ nạp có AI hỗ trợ."
      ]
    },
    "R12": {
      "title": "Dùng lô hiệu chỉnh để chuẩn bị an toàn và camera",
      "overview": "Hai NCS dùng lô đầu để chuẩn bị bộ lọc và gói nguồn camera. CVYK xét nội dung và tiêu chí; AI hỗ trợ mã, người vận hành bắt đầu cài môi trường IIS ngoại tuyến.",
      "goals": [
        "Sửa lô 1 theo góp ý và trình xem lại; đối chiếu nhu cầu camera từ lô này.",
        "Hoàn thiện phần mã bộ nạp được xếp và kiểm SQL nháp.",
        "Chuẩn bị quy tắc an toàn; bắt đầu review quy tắc và tiêu chí chuyên môn.",
        "Bắt đầu gói nguồn camera và cài thử IIS bằng bản ngoại tuyến."
      ]
    },
    "R13": {
      "title": "Hiệu chỉnh dự toán lô sau và diễn tập SQL",
      "overview": "NCS1 đo công sức lô đầu để GVHD xem phạm vi và lịch tiếp theo. NCS2 hoàn thiện gói nguồn camera; CVYK xem quy tắc, người vận hành diễn tập SQL.",
      "goals": [
        "Diễn tập SQL trên cơ sở dữ liệu thử và ghi kết quả, lỗi, khả năng khôi phục.",
        "Hoàn thiện đề xuất nguồn camera; chưa tự chọn chỉ số hoặc nhận phê duyệt.",
        "Ghi công sức lô đầu và kết quả xem lại phạm vi, lịch các lô sau.",
        "Hoàn thiện phần review quy tắc an toàn; bắt đầu lô 2 theo điều kiện đã xét."
      ]
    },
    "R14": {
      "title": "Kiểm mã an toàn và mở diễn tập phục hồi dữ liệu",
      "overview": "NCS1 tiếp tục lô 2, lô 3 và mã bộ lọc. Các vai chuyên trách kiểm SQL, quyền camera và phục hồi; CVYK tiếp tục tiêu chí đánh giá, AI hỗ trợ mã và sổ tay.",
      "goals": [
        "Hoàn thiện bản nháp lô 2 và bắt đầu lô 3; chưa coi các lô là được duyệt.",
        "Đọc hiểu, sửa và thử mã bộ lọc; tiếp tục xem tiêu chí chuyên môn.",
        "Kết thúc phần cài IIS ngoại tuyến và kiểm chuyển đổi SQL độc lập.",
        "Ghi mục tiêu phục hồi, kiểm quyền camera và bắt đầu sao lưu, phục hồi cơ sở dữ liệu thử."
      ]
    },
    "R15": {
      "title": "Tiếp tục các lô nội dung và kiểm phản hồi phát triển",
      "overview": "NCS1 hoàn thiện các phần lô 3, lô 4 và bắt đầu lô 5. CVYK xem phản hồi phát triển; người vận hành hoàn thiện diễn tập phục hồi cơ sở dữ liệu thử.",
      "goals": [
        "Hoàn thiện phần phục hồi cơ sở dữ liệu, kiểm nhất quán và hướng dẫn từ kết quả.",
        "Hoàn thiện bản nháp lô 3 và lô 4; bắt đầu lô 5.",
        "Tiếp tục ghi nhận xét chuyên môn trên bộ ca phát triển; không dùng làm đánh giá độc lập."
      ]
    },
    "R16": {
      "title": "Sửa phản hồi an toàn và kiểm đường bỏ qua bộ lọc",
      "overview": "NCS1 hoàn thiện lô 5, lô 6 và sửa phản hồi theo góp ý. CVYK tiếp tục tiêu chí chuyên môn; người kiểm kỹ thuật bắt đầu kiểm đường lỗi của bộ lọc.",
      "goals": [
        "Hoàn thiện bản nháp lô 5 và lô 6.",
        "Xử lý phản hồi phát triển theo ý kiến CVYK và khóa phiên bản quy tắc phù hợp.",
        "Tiếp tục tiêu chí đánh giá; bắt đầu kiểm mất nguồn, hết quyền và đường bỏ qua bộ lọc."
      ]
    },
    "R17": {
      "title": "Nối API với bộ lọc và xét căn cứ camera",
      "overview": "NCS1 bắt đầu hoàn thiện API và tiếp tục lô 7. Người kiểm kỹ thuật kết thúc kiểm đường lỗi; CVYK xem tiêu chí đánh giá và căn cứ cho một chỉ số camera.",
      "goals": [
        "Tiếp tục bản nháp lô 7 theo nguồn đã đối chiếu.",
        "Hoàn thiện bằng chứng kiểm đường lỗi của bộ lọc.",
        "Hoàn thiện phần xét tiêu chí đánh giá; bắt đầu xem căn cứ và phạm vi camera.",
        "Bắt đầu kiểm, sửa API và nối bộ lọc đúng phiên bản."
      ]
    },
    "R18": {
      "title": "Chuẩn bị giao diện, bộ đánh giá và thiết kế camera",
      "overview": "Hai NCS tiếp tục API, giao diện và quy trình camera. CVYK cùng các vai kiểm độc lập xem căn cứ, nội dung và bộ đánh giá; AI hỗ trợ phần giao diện.",
      "goals": [
        "Hoàn thiện phần API và kiểm hợp đồng camera bằng dữ liệu tổng hợp.",
        "Hoàn thiện bản nháp lô 7, lô 8; bắt đầu review chuyên môn lô 2.",
        "Bắt đầu review kỹ thuật API và chuẩn bị bộ đánh giá riêng.",
        "Hoàn thiện phần xét căn cứ camera; bắt đầu thiết kế quy trình đo và nhận giao diện nháp."
      ]
    },
    "R19": {
      "title": "Khoảng nghỉ đã chừa trong kịch bản",
      "overview": "Tuần này nằm trong khoảng nghỉ đã nhập; lịch không phân bổ nhiệm vụ hoặc giờ cho vai nào. Công việc dở giữ nguyên để tiếp tục theo lịch sau nghỉ.",
      "goals": [
        "Không có nhiệm vụ được xếp trong tuần.",
        "Không coi khoảng nghỉ là thời gian hoàn thành thêm các lô hoặc mã đang dở."
      ]
    },
    "R20": {
      "title": "Tiếp tục khoảng nghỉ, chưa mở nhiệm vụ mới",
      "overview": "Lịch tiếp tục chừa tuần nghỉ và không phân bổ công việc. Các nhánh chỉ trở lại ở lần phân bổ tiếp theo, sau khi kiểm điều kiện thực tế.",
      "goals": [
        "Giữ tuần này không có giờ nhiệm vụ.",
        "Không tự thêm họp, review hoặc công việc mới vào khoảng nghỉ."
      ]
    },
    "R21": {
      "title": "Trở lại với thiết kế camera và kết nối giao diện",
      "overview": "NCS2 hoàn thiện phần thiết kế camera; NCS1 bắt đầu nối Vue với API. Các vai kiểm độc lập, CVYK và GVHD tiếp tục bộ đánh giá, API và các lô nội dung.",
      "goals": [
        "Hoàn thiện phần thiết kế quy trình đo và review kỹ thuật API.",
        "Hoàn thiện bộ đánh giá riêng, xem thiết kế và quyền truy cập.",
        "Kết thúc phần review chuyên môn lô 2; bắt đầu lô 3.",
        "Bắt đầu tích hợp giao diện với API và xử lý trạng thái lỗi."
      ]
    },
    "R22": {
      "title": "Kiểm giao diện và nối hồ sơ chữ với camera",
      "overview": "NCS1 hoàn thiện tích hợp giao diện và công cụ ghi kết quả; NCS2 kiểm chéo thao tác. CVYK tiếp tục review lô 3, lô 4 để NCS1 sửa phần có phản hồi.",
      "goals": [
        "Hoàn thiện phần nối Vue/API; kiểm chéo bàn phím và trạng thái.",
        "Chuẩn hóa công cụ ghi kết quả và kiểm giao tiếp chữ-camera với ma trận CYK.",
        "Kết thúc phần review chuyên môn lô 3; tiếp tục lô 4.",
        "Bắt đầu sửa lô 2 theo phản hồi đã nhận."
      ]
    },
    "R23": {
      "title": "Sửa trợ năng, nội dung và quy trình đo",
      "overview": "NCS1 sửa lô 2, lô 3 và giao diện. Người kiểm kỹ thuật kiểm trợ năng; CVYK xem protocol, nhãn và tiêu chí đo để hồ sơ camera có căn cứ rõ hơn.",
      "goals": [
        "Hoàn thiện phần sửa lô 2 và lô 3 để chuyển xét lại.",
        "Kiểm trợ năng trên bản thật và sửa lỗi giao diện được ghi.",
        "Ghi nhận xét chuyên môn về quy trình, nhãn và tiêu chí đo camera."
      ]
    },
    "R24": {
      "title": "Kiểm hướng dẫn chữ và chuẩn đối chiếu camera",
      "overview": "NCS1 kiểm hướng dẫn do AI hỗ trợ; CVYK xét lại lô 2, lô 3 và bắt đầu xem câu an toàn. Người kiểm đo kiểm khả năng thực hiện chuẩn đối chiếu camera.",
      "goals": [
        "Đối chiếu hướng dẫn chữ với thao tác thật và ghi chỗ khó làm theo.",
        "Trình xét lại lô 2, lô 3 đúng phiên bản; không tự ghi kết quả duyệt.",
        "Kiểm tính thực hiện được của chuẩn đo camera.",
        "Bắt đầu xem giới hạn và câu an toàn trong hướng dẫn."
      ]
    },
    "R25": {
      "title": "Xem điều kiện mở thử kỹ thuật camera",
      "overview": "NCS1 sửa hướng dẫn chữ và chuẩn bị bài thực hành; CVYK xem nội dung và lô 4. GVHD xem GCA; AI chỉ bắt đầu mã camera sau điều kiện thực tương ứng.",
      "goals": [
        "Hoàn thiện phần review, sửa hướng dẫn chữ và chuẩn bị bài thực hành hỗ trợ.",
        "Kết thúc phần review chuyên môn lô 4.",
        "Ghi quyết định GCA thật hoặc yêu cầu bổ sung trước thử kỹ thuật camera.",
        "Bắt đầu phần mã camera được phép, chưa mở hoạt động có người."
      ]
    },
    "R26": {
      "title": "Bắt đầu thực hiện bản thử camera và sửa lô 4",
      "overview": "NCS2 bắt đầu thực hiện bản thử từ mã AI hỗ trợ. NCS1 sửa lô 4; CVYK xem lại lô này và bắt đầu lô 5 để các nhánh tiếp tục có nội dung phù hợp.",
      "goals": [
        "Hoàn thiện phần mã nháp camera và bắt đầu kiểm bằng dữ liệu được phép.",
        "Sửa lô 4 theo phản hồi và trình CVYK xét lại đúng bản.",
        "Bắt đầu review chuyên môn lô 5."
      ]
    },
    "R27": {
      "title": "Tiếp tục bản thử camera và chu trình review nội dung",
      "overview": "NCS2 tiếp tục bản thử camera. NCS1 và CVYK xử lý lô 5, đồng thời mở phần review lô 6 để chuẩn bị các lô cho bản kê tri thức.",
      "goals": [
        "Tiếp tục triển khai và kiểm bản thử camera; chưa nhận nhiệm vụ này hoàn tất.",
        "Review lô 5, sửa theo phản hồi và trình xét lại.",
        "Bắt đầu review chuyên môn lô 6."
      ]
    },
    "R28": {
      "title": "Kiểm riêng tư camera và xem lại lô 6",
      "overview": "NCS2 hoàn thiện phần bản thử; người kiểm kỹ thuật kiểm riêng tư và đường lỗi. NCS1 cùng CVYK xử lý review, sửa và xem lại lô 6.",
      "goals": [
        "Hoàn thiện phần bản thử camera được xếp và bàn giao kiểm riêng tư.",
        "Kiểm đường lỗi, dữ liệu truyền và lưu của camera.",
        "Review lô 6, sửa theo góp ý và trình xem lại đúng phiên bản."
      ]
    },
    "R29": {
      "title": "Khóa cấu hình thử và chuẩn bị hồ sơ camera",
      "overview": "NCS2 sửa bản thử, khóa cấu hình và hoàn thiện hồ sơ thử camera riêng. CVYK review lô 7 để nhánh nội dung tiếp tục được xử lý.",
      "goals": [
        "Sửa lỗi bản thử và ghi phiên bản mã, model, protocol dùng để trình hồ sơ.",
        "NCS2 tự hoàn thiện mục tiêu, phương pháp và dự toán hoạt động camera.",
        "Ghi nhận xét chuyên môn cho lô 7; chưa tự gọi lô là được phát hành."
      ]
    },
    "R30": {
      "title": "Xem phương pháp, dữ liệu và an toàn buổi đo",
      "overview": "NCS1 sửa lô 7; CVYK xét nội dung và an toàn camera. GVHD xem phương pháp; người giữ dữ liệu làm rõ phần đo, lưu và rút dữ liệu trước xin phép.",
      "goals": [
        "Sửa lô 7 và trình xem lại; bắt đầu review chuyên môn lô 8.",
        "Ghi điều kiện giữ, xóa, đồng ý và rút dữ liệu camera.",
        "Xem phương pháp camera đã chuẩn bị; ghi yêu cầu bổ sung nếu cần.",
        "Bắt đầu xem an toàn buổi đo, người hỗ trợ và điều kiện dừng."
      ]
    },
    "R31": {
      "title": "Tiếp tục review nội dung và tập hỗ trợ camera",
      "overview": "CVYK tiếp tục lô 8 và phần an toàn buổi đo. Người hỗ trợ bắt đầu tập quy trình camera bằng dữ liệu giả; lịch đã chừa các ngày nghỉ trong tuần.",
      "goals": [
        "Hoàn thiện phần review an toàn buổi đo; ghi điều kiện cần đáp ứng.",
        "Bắt đầu tập hỗ trợ, dừng và xử lý không đo được bằng dữ liệu giả.",
        "Tiếp tục review chuyên môn lô 8; chưa coi lô đã xong trong tuần này."
      ]
    },
    "R32": {
      "title": "Xem lại lô cuối và lập bản kê tri thức",
      "overview": "NCS1 sửa lô 8 và lập bản kê; CVYK xét lại nội dung. Người hỗ trợ hoàn thiện phần tập camera; người kiểm đo bắt đầu tập chuẩn đối chiếu trước hoạt động có người.",
      "goals": [
        "Hoàn thiện phần review, sửa và xem lại lô 8 đúng phiên bản.",
        "Lập bản kê từ trạng thái thực của từng lô; mục chưa đủ điều kiện phải giữ chặn.",
        "Hoàn thiện tập hỗ trợ camera trên dữ liệu giả.",
        "Bắt đầu tập ghi chuẩn đối chiếu; chưa coi đây là buổi đo với người."
      ]
    },
    "R33": {
      "title": "Xét gói tri thức trước khi nối dịch vụ thật",
      "overview": "GVHD xem hồ sơ GA; NCS1 chỉ bắt đầu nối gói và nhà cung cấp khi đủ điều kiện thực. Người kiểm đo hoàn thiện phần tập chuẩn đối chiếu camera.",
      "goals": [
        "Hoàn thiện phần tập ghi chuẩn bằng dữ liệu giả.",
        "Ghi quyết định GA thật hoặc yêu cầu bổ sung từng lô, quyền và bản kê.",
        "Bắt đầu nối đúng gói tri thức và dịch vụ được phép; dùng dữ liệu tổng hợp để kiểm."
      ]
    },
    "R34": {
      "title": "Đóng gói ứng viên chữ và chuẩn bị kiểm thu hồi",
      "overview": "NCS1 hoàn thiện nối gói tri thức, đóng ứng viên chữ và bắt đầu kiểm trước xuất. Người kiểm kỹ thuật xem thành phần để chuẩn bị cài ứng viên đúng bản.",
      "goals": [
        "Hoàn thiện phần tích hợp gói tri thức và nhà cung cấp trong phạm vi được phép.",
        "Dựng ứng viên chữ, ghi mã băm, cấu hình và thành phần.",
        "Bắt đầu review kỹ thuật gói và kiểm trước xuất, thu hồi nguồn."
      ]
    },
    "R35": {
      "title": "Cài ứng viên chữ và kiểm trên môi trường thử",
      "overview": "Người vận hành cài gói đã review; NCS1 kiểm ứng dụng sau cài. Người kiểm kỹ thuật cùng NCS1 hoàn thiện phần kiểm trước xuất và thu hồi để chuẩn bị kiểm hệ thống.",
      "goals": [
        "Hoàn thiện kiểm thành phần ứng viên và phần tích hợp kiểm trước xuất.",
        "Cài đúng backend, frontend và tri thức lên môi trường thử được giao.",
        "Kiểm xuất bản, thu hồi và các đầu ra trong phạm vi thử.",
        "NCS1 kiểm luồng UI/API và trạng thái sẵn sàng của gói thật sau cài."
      ]
    },
    "R36": {
      "title": "Diễn tập quay lui gói thật và kiểm dữ liệu sau phục hồi",
      "overview": "Người vận hành diễn tập quay lui ứng viên đã cài; NCS1 kiểm ứng dụng sau phục hồi. Người kiểm kỹ thuật đối chiếu cấu hình và bắt đầu xem bằng chứng phục hồi.",
      "goals": [
        "Kiểm tương thích app, cấu hình, DB và bản sao trước quay lui gói thật.",
        "Hoàn thiện kiểm cấu hình máy đích.",
        "NCS1 kiểm dữ liệu, quyền, tri thức và nguồn thu hồi sau phục hồi.",
        "Bắt đầu review bằng chứng phục hồi; phần review này còn tiếp tuần sau."
      ]
    },
    "R37": {
      "title": "Diễn tập sự cố và bắt đầu kiểm toàn luồng chữ",
      "overview": "Người kiểm kỹ thuật hoàn thiện review phục hồi; người vận hành diễn tập sự cố. NCS1 bắt đầu kiểm hệ thống và đối chiếu tài liệu cài đặt có AI hỗ trợ.",
      "goals": [
        "Hoàn thiện phần review phục hồi, tương thích và giới hạn quay lui.",
        "Diễn tập sự cố được phép và sửa sổ tay từ kết quả.",
        "Chuẩn bị, review hướng dẫn cài, nâng cấp, gỡ và xử lý lỗi.",
        "Bắt đầu kiểm hệ thống chữ; chưa coi vòng kiểm kết thúc trong tuần này."
      ]
    },
    "R38": {
      "title": "Kiểm hệ thống, tài liệu và cách hỗ trợ người dùng",
      "overview": "NCS1 hoàn thiện phần kiểm hệ thống; các vai kỹ thuật, vận hành, dữ liệu và CVYK kiểm sâu từng phần. Người hỗ trợ tập quy trình nội bộ để chuẩn bị hồ sơ thử với người.",
      "goals": [
        "Người vận hành làm theo hướng dẫn cài; bắt đầu diễn tập cập nhật, thu hồi và ngừng.",
        "Kết thúc phần kiểm hệ thống chữ; bắt đầu kiểm độc lập bảo mật, tải, trợ năng và tài liệu cài.",
        "Kiểm xử lý yêu cầu dữ liệu và đường chuyển lỗi nội dung.",
        "Tập quy trình hỗ trợ nội bộ; chưa dùng buổi tập này làm quyền nghiên cứu."
      ]
    },
    "R39": {
      "title": "Hoàn thiện kiểm độc lập và khả năng vận hành",
      "overview": "Người kiểm kỹ thuật hoàn thiện kiểm hệ thống và hướng dẫn cài. Người vận hành diễn tập cập nhật, ngừng dịch vụ và làm lại thao tác để chuẩn bị hồ sơ GB.",
      "goals": [
        "Hoàn thiện phần kiểm độc lập bảo mật, tải và trợ năng.",
        "Kiểm bằng chứng cài theo tài liệu và ghi lỗi chưa xử lý.",
        "Hoàn thiện diễn tập cập nhật, thu hồi, ngừng và đào tạo vận hành."
      ]
    },
    "R40": {
      "title": "Xem điều kiện trước đánh giá y khoa cuối",
      "overview": "GVHD xem hồ sơ GB theo phạm vi đã chuẩn bị. Kết quả xem xét xác định có đủ điều kiện mở bộ đánh giá cuối hay phải bổ sung bằng chứng.",
      "goals": [
        "Đối chiếu bản gói, kiểm kỹ thuật, phục hồi và bộ đánh giá đã khóa.",
        "Ghi quyết định thật hoặc việc cần bổ sung; ngày dự toán không tự cho phép mở tập cuối."
      ]
    },
    "R41": {
      "title": "Bắt đầu chấm phản hồi trên bộ đánh giá đã khóa",
      "overview": "Người đánh giá y khoa độc lập bắt đầu chấm phản hồi sau điều kiện GB thật. Phần chấm tuần này cung cấp bằng chứng để tiếp tục đánh giá, chưa phải kết luận toàn bộ sản phẩm.",
      "goals": [
        "Kiểm quyền truy cập, phiên bản gói và bộ ca đã khóa trước chấm.",
        "Chấm phần được xếp, giữ nguyên tiêu chí và ghi các bất đồng để tiếp tục tuần sau."
      ]
    },
    "R42": {
      "title": "Hoàn thiện lượt chấm và bắt đầu phân xử chuyên môn",
      "overview": "Người đánh giá y khoa độc lập hoàn thiện lượt chấm trên bộ khóa. CVYK bắt đầu xem các bất đồng để xác định nội dung phải sửa đúng quyền.",
      "goals": [
        "Đối chiếu số ca, lỗi, ca không trả lời và kết quả của toàn lượt chấm.",
        "Bắt đầu phân xử chuyên môn; giữ kết quả gốc và phần chưa đủ căn cứ."
      ]
    },
    "R43": {
      "title": "Phân xử lỗi và bắt đầu sửa bản tích hợp",
      "overview": "CVYK hoàn thiện phần phân xử lỗi chuyên môn. NCS1 bắt đầu sửa theo hồ sơ kỹ thuật và chuyên môn để chuẩn bị một bản có thể kiểm lại.",
      "goals": [
        "Ghi kết quả phân xử và nội dung phải khóa hoặc sửa đúng phạm vi.",
        "Bắt đầu sửa lỗi kỹ thuật, thêm ca tái hiện và ghi yêu cầu chuyên môn còn chờ.",
        "Giữ riêng kết quả đánh giá cũ; chưa nhận bản sửa đã qua kiểm."
      ]
    },
    "R44": {
      "title": "Kiểm bản sửa và khóa bộ đánh giá thay thế",
      "overview": "NCS1 hoàn thiện bản sửa để người kiểm kỹ thuật kiểm lại. Người đánh giá y khoa độc lập xử lý tập đã lộ và chuẩn bị tập thay thế, tránh chấm lại để làm đẹp kết quả.",
      "goals": [
        "Hoàn thiện phần sửa, dựng gói mới và ghi mã băm cùng lỗi còn mở.",
        "Kiểm lại lỗi kỹ thuật và thành phần bị ảnh hưởng.",
        "Ghi tập đã dùng để sửa thành tập phát triển; khóa tập thay thế theo tiêu chí giữ nguyên."
      ]
    },
    "R45": {
      "title": "Đánh giá lại bằng tập thay thế",
      "overview": "Người đánh giá y khoa độc lập chấm bản sửa bằng tập thay thế. CVYK bắt đầu xem kết quả mới để xác định điều kiện chuyên môn còn thiếu trước xét lại GB.",
      "goals": [
        "Chấm toàn bộ phần đánh giá lại được xếp, giữ đủ ca lỗi và mẫu số.",
        "Bắt đầu xét chuyên môn đúng bản sửa và kết quả mới.",
        "Nếu còn lỗi chặn, ghi cần vòng bổ sung; không tự biến dự toán thành đạt."
      ]
    },
    "R46": {
      "title": "Xem lại chuyên môn và điều kiện kỹ thuật sau sửa",
      "overview": "CVYK hoàn thiện phần xét chuyên môn trên bản mới. GVHD xem lại GB để xác định hồ sơ có đủ điều kiện chuyển sang xét nghiên cứu với người hay chưa.",
      "goals": [
        "Ghi kết quả chuyên môn đúng phiên bản hoặc yêu cầu sửa tiếp.",
        "Đối chiếu bằng chứng kỹ thuật, chuyên môn và lỗi mở tại phiên xét lại GB.",
        "Không dùng kết quả GB làm quyền tuyển hoặc thử với người."
      ]
    },
    "R47": {
      "title": "Khoảng chờ trước phiên xét hoạt động có người",
      "overview": "Tuần này không có phân bổ nhiệm vụ. Lịch giữ khoảng chờ trước bước xét hồ sơ nghiên cứu; chưa mở tuyển hoặc thu dữ liệu trong khoảng trống.",
      "goals": [
        "Không xếp thêm giờ làm hoặc phiên họp trong tuần chờ.",
        "Không coi việc tới tuần này là bằng chứng đã có quyền nghiên cứu."
      ]
    },
    "R48": {
      "title": "Bắt đầu xem hồ sơ nghiên cứu chữ",
      "overview": "Bên có thẩm quyền bắt đầu xem hồ sơ GC cho nhánh chữ. Phần xem xét còn tiếp tuần sau; lịch này chưa cho phép tuyển hoặc tổ chức lượt thử.",
      "goals": [
        "Đối chiếu phạm vi, dữ liệu, người hỗ trợ và điều kiện nghiên cứu chữ.",
        "Ghi nhận xét và phần cần bổ sung; chưa coi nhiệm vụ xét hồ sơ hoàn tất trong tuần này."
      ]
    },
    "R49": {
      "title": "Xét hồ sơ chữ và mở phần xem xét camera riêng",
      "overview": "Bên có thẩm quyền tiếp tục GC chữ và bắt đầu GC camera riêng. NCS1 chỉ thực hiện phần tuyển, giải thích đồng ý khi quyết định chữ thực tế cho phép.",
      "goals": [
        "Hoàn thiện phần xem xét GC chữ và ghi quyết định thực hoặc yêu cầu bổ sung.",
        "NCS1 tuyển, giải thích và ghi đồng ý trong đúng phạm vi đã được phép.",
        "Bắt đầu xem GC camera riêng; không suy quyền camera từ GC chữ."
      ]
    },
    "R50": {
      "title": "Điều phối lượt chữ và chuẩn bị hoạt động camera",
      "overview": "Người hỗ trợ điều phối lịch chữ; bên có thẩm quyền tiếp tục xét GC camera. NCS2 chỉ bắt đầu chuẩn bị, tuyển và giải thích sau điều kiện camera thật.",
      "goals": [
        "Hoàn thiện phần điều phối lượt chữ với thời gian và hỗ trợ được xác nhận.",
        "Ghi kết quả xét GC camera đúng thiết bị, protocol, dữ liệu và người hỗ trợ.",
        "Bắt đầu kiểm chuẩn đo, tuyển và biểu mẫu camera; phần chuẩn bị còn tiếp tuần sau."
      ]
    },
    "R51": {
      "title": "Hoàn thiện chuẩn bị camera và bắt đầu các lượt chữ",
      "overview": "NCS2 hoàn thiện phần chuẩn bị camera còn lại. NCS1, người hỗ trợ và nhóm lượt tham gia bắt đầu hai lượt chữ dự toán để ghi khó khăn sử dụng thực tế.",
      "goals": [
        "Hoàn thiện diễn tập biểu mẫu camera bằng dữ liệu giả và kiểm đầu vào trước đo thật.",
        "Tổ chức lượt chữ dự toán 1–2 chỉ sau đủ quyền, người nhận việc và đồng ý.",
        "Ghi thao tác, khó khăn, lỗi và yêu cầu dừng; tổng giờ tham gia thuộc nhóm lượt."
      ]
    },
    "R52": {
      "title": "Tiếp tục lượt chữ thứ ba và thứ tư",
      "overview": "NCS1 cùng người hỗ trợ tổ chức hai lượt chữ tiếp theo với người tham gia được bố trí. Kết quả bổ sung bằng chứng trải nghiệm; chưa tổng kết toàn nhóm.",
      "goals": [
        "Thực hiện lượt chữ dự toán 3–4 theo cùng phiên bản và phương pháp được xét.",
        "Giữ đủ phản hồi, lỗi, dữ liệu thiếu và yêu cầu dừng trong phạm vi được phép."
      ]
    },
    "R53": {
      "title": "Tiếp tục lượt chữ thứ năm và thứ sáu",
      "overview": "NCS1, người hỗ trợ và nhóm lượt tham gia tiếp tục thử chữ theo hồ sơ. Các lượt này giúp ghi nhận tác vụ khó và tình huống thất bại trước phân tích.",
      "goals": [
        "Thực hiện lượt chữ dự toán 5–6 khi điều kiện từng lượt còn phù hợp.",
        "Ghi kết quả riêng từng lượt; không thay câu hỏi hoặc phương pháp để làm đẹp phản hồi."
      ]
    },
    "R54": {
      "title": "Tiếp tục lượt chữ thứ bảy và thứ tám",
      "overview": "NCS1 và người hỗ trợ tiếp tục quan sát nhóm lượt tham gia dùng nhánh chữ. Bằng chứng được giữ theo phạm vi đồng ý để phục vụ phân tích sau toàn đợt.",
      "goals": [
        "Thực hiện lượt chữ dự toán 7–8; bảo đảm có thể nghỉ hoặc dừng theo hồ sơ.",
        "Giữ đủ lỗi và khó khăn quan sát; chưa nhận nhiệm vụ thử chữ hoàn tất."
      ]
    },
    "R55": {
      "title": "Các lượt chữ cuối trong dự toán",
      "overview": "NCS1, người hỗ trợ và nhóm lượt tham gia thực hiện phần cuối lịch chữ đã dự toán. Chỉ khi hoạt động thực đủ điều kiện mới chuyển dữ liệu sang tổng hợp và phân tích.",
      "goals": [
        "Thực hiện lượt chữ dự toán 9–10; số lượt thực tế phải ghi đúng, kể cả rút lui.",
        "Kiểm ghi chép từng lượt và phần còn thiếu trước bàn giao dữ liệu cho bước sau."
      ]
    },
    "R56": {
      "title": "Bắt đầu đo camera và tổng hợp kết quả chữ",
      "overview": "NCS1 tổng hợp phản hồi chữ, sửa hướng dẫn và bắt đầu tự phân tích; người giữ dữ liệu khóa tập đúng quyền. NCS2 cùng nhóm hỗ trợ, kiểm đo và người tham gia bắt đầu lượt camera.",
      "goals": [
        "Tổng hợp nhu cầu và sửa hướng dẫn chữ từ khó khăn đã quan sát.",
        "Khóa dữ liệu chữ đúng quyền; NCS1 bắt đầu phân tích và viết bản đầu.",
        "Thực hiện lượt camera dự toán 1–2 với chuẩn đối chiếu và hỗ trợ phù hợp.",
        "Ghi ca không đo được, lỗi và rút lui; không suy kết luận lâm sàng từ lượt đo."
      ]
    },
    "R57": {
      "title": "Review phân tích chữ và tiếp tục đo camera",
      "overview": "NCS1 hoàn thiện phần phân tích chữ để GVHD xem phương pháp và bản đầu. NCS2, người kiểm đo, người hỗ trợ và nhóm lượt tham gia tiếp tục camera.",
      "goals": [
        "NCS1 hoàn thiện phép tính, kết quả và giới hạn của nhánh chữ.",
        "GVHD ghi nhận xét phương pháp và nguồn gốc bản đầu để NCS1 sửa.",
        "Thực hiện lượt camera dự toán 3–4, giữ cùng protocol và ghi mọi thất bại."
      ]
    },
    "R58": {
      "title": "Sửa sản phẩm chữ và chuẩn bị hồ sơ bàn giao riêng",
      "overview": "NCS1 sửa bản chữ và tự hoàn thiện hồ sơ; CVYK xem lại nội dung, hướng dẫn sau thử. Nhóm camera tiếp tục các lượt đo để thu bằng chứng theo phương pháp đã xét.",
      "goals": [
        "Sửa lỗi chữ, dựng ứng viên bàn giao và ghi phần cần review lại.",
        "CVYK xem nội dung và hướng dẫn đúng bản mới; không dùng phê duyệt cũ cho nội dung đã đổi.",
        "NCS1 tự hoàn thiện hồ sơ chữ độc lập với kết quả camera.",
        "NCS2 cùng người kiểm đo, hỗ trợ và người tham gia thực hiện lượt camera dự toán 5–6."
      ]
    },
    "R59": {
      "title": "Kiểm và nhận gói chữ trước nghiệm thu",
      "overview": "Người kiểm kỹ thuật, người vận hành và GVHD xem bản chữ cùng hồ sơ bàn giao. Nhóm camera tiếp tục đo; việc nhận gói chữ vẫn theo nhánh độc lập.",
      "goals": [
        "Kiểm kỹ thuật bản chữ sau sửa và ghi giới hạn còn mở.",
        "Người vận hành kiểm gói, hướng dẫn và khả năng nhận trách nhiệm chữ.",
        "GVHD review hồ sơ chữ do NCS đã tự hoàn thiện.",
        "NCS2 cùng người kiểm đo, hỗ trợ và người tham gia thực hiện lượt camera dự toán 7–8."
      ]
    },
    "R60": {
      "title": "Xét bàn giao chữ và thực hiện các lượt camera cuối",
      "overview": "GVHD xem nghiệm thu chữ; người vận hành chỉ cài sau quyết định thật. Nhóm camera thực hiện phần lượt đo cuối trong dự toán để chuyển sang phân tích riêng.",
      "goals": [
        "Thực hiện lượt camera dự toán 9–10 với NCS2, người kiểm đo, hỗ trợ và người tham gia.",
        "Ghi quyết định nghiệm thu chữ hoặc yêu cầu bổ sung đúng phạm vi.",
        "Cài bản chữ được nhận, kiểm nhanh và bàn giao cho bước kiểm nhận sau cài."
      ]
    },
    "R61": {
      "title": "Kiểm nhận chữ và tự phân tích kết quả camera",
      "overview": "NCS1 kiểm bản chữ trên máy đích và kiểm chéo phép tính camera. NCS2 tự phân tích sai số, thất bại để chuẩn bị hồ sơ chuyên môn trước xét tích hợp.",
      "goals": [
        "NCS1 kiểm tác vụ, nguồn, đường lỗi và hỗ trợ của bản chữ đã cài.",
        "NCS2 tự phân tích dữ liệu camera, giữ mẫu số và ca không đo được.",
        "NCS1 tái tính và kiểm truy vết; không thay phương pháp để làm đẹp kết quả."
      ]
    },
    "R62": {
      "title": "Review giới hạn camera và theo dõi tuần đầu nhánh chữ",
      "overview": "CVYK xem ý nghĩa, sai số và giới hạn camera trước đề nghị tích hợp. Người vận hành kiểm tuần đầu nhánh chữ để xác định lỗi và trách nhiệm xử lý thực tế.",
      "goals": [
        "Ghi nhận xét chuyên môn về kết quả camera và phần chưa đủ căn cứ.",
        "Kiểm bản chữ đang chạy, lỗi, nhật ký tối thiểu và sao lưu trong phạm vi vận hành.",
        "Ghi người nhận vấn đề còn mở; không chờ camera để bỏ theo dõi nhánh chữ."
      ]
    },
    "R63": {
      "title": "Xem bằng chứng trước mở tích hợp camera",
      "overview": "GVHD xem GCB từ kết quả camera đã phân tích và review. AI chỉ hỗ trợ mã khi điều kiện thực cho phép, để chuyển sang bước đọc và hoàn thiện.",
      "goals": [
        "Đối chiếu sai số, thất bại, quyền và review chuyên môn khi xét GCB.",
        "Ghi quyết định thực; nếu chưa đạt thì giữ nhánh tích hợp chặn.",
        "Chuẩn bị mã tích hợp được phép để chuyển kiểm tiếp; không tự phát hành."
      ]
    },
    "R64": {
      "title": "NCS2 tích hợp nhánh camera theo phạm vi được xét",
      "overview": "NCS2 đọc mã hỗ trợ và nối camera vào giao diện, API. Công việc tạo bản kết hợp để nhóm kiểm tiếp, chưa phải bằng chứng bản đó đã được nghiệm thu.",
      "goals": [
        "Nối UI/API đúng hợp đồng, đồng ý và giới hạn camera.",
        "Kiểm dừng, thu hồi và riêng tư; không truyền dữ liệu bị cấm.",
        "Ghi phiên bản và lỗi để bàn giao kiểm tích hợp hai nhánh."
      ]
    },
    "R65": {
      "title": "Kiểm bản kết hợp và rà tháng đầu nhánh chữ",
      "overview": "NCS1 kiểm giao tiếp hai nhánh; người kiểm kỹ thuật kiểm bản kết hợp và riêng tư. Người vận hành rà tháng đầu nhánh chữ theo trách nhiệm đã nhận.",
      "goals": [
        "Kiểm tích hợp chữ-camera với đúng gói tri thức và trường hợp camera tắt.",
        "Kiểm kỹ thuật, riêng tư và giới hạn tài nguyên của bản kết hợp.",
        "Rà nguồn, quyền, tài khoản, bản sao và việc duy trì riêng của nhánh chữ."
      ]
    },
    "R66": {
      "title": "Viết hồ sơ nghiên cứu và hướng dẫn camera",
      "overview": "Hai NCS bắt đầu tự hoàn thiện báo cáo từng phần; NCS2 bổ sung hướng dẫn camera theo giao diện thật. CVYK xem hướng dẫn và bắt đầu review tác động tích hợp.",
      "goals": [
        "NCS2 hoàn thiện hướng dẫn camera và trình CVYK xem câu an toàn, giới hạn.",
        "Hai NCS tự bắt đầu hoàn thiện báo cáo và minh chứng đúng phần mình thực hiện.",
        "Bắt đầu xem tác động chuyên môn của bản kết hợp; chưa nhận toàn bộ review hoàn tất."
      ]
    },
    "R67": {
      "title": "Đóng gói kết hợp và chuyển hồ sơ học thuật sang review",
      "overview": "Hai NCS hoàn thiện phần báo cáo; CVYK tiếp tục xem tác động tích hợp. NCS2 đóng gói kết hợp, người hỗ trợ tập quy trình và GVHD bắt đầu review hồ sơ.",
      "goals": [
        "Hai NCS hoàn thiện bản tự viết và minh chứng để chuyển GVHD xem.",
        "Ghi kết quả review tác động tích hợp đúng phiên bản.",
        "NCS2 lập gói kết hợp riêng; người hỗ trợ tập bằng dữ liệu giả.",
        "Bắt đầu review hồ sơ học thuật và trình bày; phần này còn tiếp tuần sau."
      ]
    },
    "R68": {
      "title": "Sửa bản đầu và xem lại cổng sau tích hợp",
      "overview": "GVHD tiếp tục xem hồ sơ và tác động cổng; hai NCS sửa bản đầu, diễn tập phần trình bày được xếp. Kết quả giúp xác định gói nào đủ điều kiện chuyển nhận bàn giao.",
      "goals": [
        "Hoàn thiện phần review hồ sơ học thuật và ghi yêu cầu sửa.",
        "NCS1 sửa bản đầu, diễn tập; NCS2 bắt đầu phần sửa và diễn tập camera.",
        "Xem lại GCB, GB, GC theo tác động bản kết hợp; không tự nhận điều kiện cũ còn nguyên."
      ]
    },
    "R69": {
      "title": "Kiểm quyền và tiếp nhận gói kết hợp",
      "overview": "NCS2 tiếp tục sửa, diễn tập phần camera. Người kiểm quyền rà gói bàn giao; người vận hành kiểm gói, tài liệu và trách nhiệm để trình nghiệm thu.",
      "goals": [
        "Hoàn thiện phần sửa bản đầu và diễn tập camera còn lại.",
        "Kiểm tài nguyên được chia sẻ, đối tượng đọc và phần phải loại khỏi gói.",
        "Người vận hành nhận đúng phiên bản, hướng dẫn, quyền và trách nhiệm; chưa tự mở công khai."
      ]
    },
    "R70": {
      "title": "Xét nghiệm thu và cài bản kết hợp",
      "overview": "GVHD xem hồ sơ nghiệm thu gói kết hợp. Người vận hành chỉ cài đúng môi trường và phạm vi đã được nhận, rồi chuyển hai NCS kiểm nhận theo lịch sau đó.",
      "goals": [
        "Ghi quyết định nghiệm thu thực hoặc yêu cầu bổ sung bằng chứng.",
        "Kiểm gói, mã băm, quyền và bản quay lại trước cài.",
        "Cài bản kết hợp được phép và ghi biên bản; chưa coi cài xong là kiểm nhận xong."
      ]
    },
    "R71": {
      "title": "NCS1 kiểm nhận bản kết hợp trước khoảng nghỉ",
      "overview": "NCS1 kiểm luồng chữ và phần kết hợp trên máy đích trong buổi đã xếp. Những ngày nghỉ sau đó không làm hoàn tất phần kiểm nhận riêng của camera.",
      "goals": [
        "Kiểm chữ hoạt động khi camera tắt và luồng kết hợp trong phạm vi được phép.",
        "Đối chiếu hướng dẫn, cấu hình và hỗ trợ; ghi kết quả cho phần kiểm nhận tiếp theo."
      ]
    },
    "R72": {
      "title": "Khoảng nghỉ trước kiểm nhận camera trên máy đích",
      "overview": "Tuần này thuộc khoảng nghỉ đã nhập và không có phân bổ nhiệm vụ. Phần kiểm nhận riêng của camera chờ buổi được xếp sau nghỉ.",
      "goals": [
        "Không xếp giờ hoặc nhiệm vụ vào tuần nghỉ.",
        "Không nhận hoàn tất sản phẩm kết hợp chỉ vì phần kiểm trước đó đã được xếp."
      ]
    },
    "R73": {
      "title": "NCS2 kiểm nhận camera trên máy đích",
      "overview": "NCS2 kiểm thiết bị, quyền và trạng thái không đo được trên bản kết hợp đã cài. Kết quả hoàn thiện phần kiểm nhận camera trước theo dõi vận hành.",
      "goals": [
        "Kiểm mở, từ chối, đóng và giải phóng camera trên thiết bị thuộc phạm vi.",
        "Kiểm cảnh báo, giới hạn và trạng thái không đo được bằng dữ liệu được phép.",
        "Kiểm không gửi hoặc lưu video, khung hình, khung xương; ghi biên bản đúng bản đang chạy."
      ]
    },
    "R74": {
      "title": "Kiểm tuần đầu và tổng hợp hỗ trợ bản kết hợp",
      "overview": "Người vận hành kiểm tuần đầu bản kết hợp; người hỗ trợ tổng hợp phản hồi theo quyền. Các vấn đề còn mở được chuyển đúng người để duy trì sau bàn giao.",
      "goals": [
        "Kiểm phiên bản, nhật ký tối thiểu, sao lưu và tài nguyên sau tuần đầu.",
        "Tổng hợp lỗi, tác vụ khó và trạng thái xử lý từ phiếu hỗ trợ.",
        "Ghi người nhận từng vấn đề, không đưa dữ liệu cá nhân vào báo cáo chung."
      ]
    },
    "R75": {
      "title": "Khoảng chờ tới mốc rà tháng đầu",
      "overview": "Lịch không phân bổ nhiệm vụ trong tuần này vì đang chờ mốc rà tháng đầu. Khoảng trống không tạo thêm giờ theo dõi hoặc cam kết trực ngoài trách nhiệm đã nhận.",
      "goals": [
        "Không có nhiệm vụ hoặc giờ bổ sung được xếp.",
        "Không ghi mốc rà tháng đầu là đã thực hiện trong khoảng chờ."
      ]
    },
    "R76": {
      "title": "Tiếp tục khoảng chờ trước rà bảo trì",
      "overview": "Tuần này tiếp tục không có phân bổ nhiệm vụ. Việc rà bảo trì và quyền sẽ diễn ra ở mốc đã xếp; lịch không tự tạo hoạt động mới trong thời gian chờ.",
      "goals": [
        "Giữ đúng tuần không xếp việc.",
        "Không biến khoảng chờ thành giờ kiểm thử, hỗ trợ hoặc review đã hoàn thành."
      ]
    },
    "R77": {
      "title": "Rà bảo trì và quyền sau tháng đầu",
      "overview": "Người vận hành rà bản kết hợp, bản sao, tài khoản và quyền sau tháng đầu. Kết quả xác định vấn đề cần chuyển xử lý và điều kiện duy trì hoặc dừng.",
      "goals": [
        "Rà sao lưu, phục hồi mẫu, chứng chỉ, phụ thuộc và nguồn bị rút trong phạm vi được phép.",
        "Kiểm app, API, DB, tài khoản, khóa và nhà cung cấp liên quan.",
        "Ghi trách nhiệm duy trì và điều kiện dừng; không mặc định gia hạn quyền."
      ]
    },
    "R78": {
      "title": "Chốt dữ liệu tới hạn và trách nhiệm sau bàn giao",
      "overview": "Người giữ dữ liệu kiểm thời hạn giữ và hồ sơ ngừng; GVHD chốt trách nhiệm sau bàn giao. Kết quả giúp việc duy trì, review tri thức và xử lý ngừng có người nhận rõ ràng.",
      "goals": [
        "Đối chiếu dữ liệu, bản sao và thời hạn giữ với quyết định hiện có.",
        "Ghi đề xuất xử lý hoặc chuyển người có quyền; không xóa theo ngày dự toán một cách tự động.",
        "Xác nhận trách nhiệm vận hành, hỗ trợ, review tri thức và xử lý ngừng sau bàn giao."
      ]
    }
  },
  "presentation_sources": {
    "R104": [
      "deployment/iis/W1_D06_IIS_Config_Guide.md",
      "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
    ],
    "R113": [
      "deployment/iis/W1_D06_IIS_Config_Guide.md",
      "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md"
    ],
    "R105": [
      "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
      "docs/guides/TEST_REPORT_TEMPLATE.md",
      "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
    ],
    "R114": [
      "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
      "docs/guides/TEST_REPORT_TEMPLATE.md",
      "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md"
    ],
    "R115": [
      "testing/QUY_UOC_NHAN_VA_DANH_GIA.md",
      "docs/guides/TEST_REPORT_TEMPLATE.md",
      "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "docs/research/plans/DAC_TA_CAMERA.md"
    ],
    "R120": [
      "deployment/HUONG_DAN_VAN_HANH_VA_PHUC_HOI.md",
      "docs/legal/HO_SO_DU_LIEU_VA_NHA_CUNG_CAP.md",
      "docs/project/SO_QUYET_DINH_THAY_DOI.md"
    ]
  },
  "presentation_step_outputs": {
    "R001.01": "Bảng đối chiếu nhật ký và biên bản: phần đã làm, giới hạn phép kiểm, phần còn thiếu và nguồn dẫn.",
    "R001.02": "Bảng yêu cầu chữ: hiện vật, trạng thái, việc còn thiếu, nguồn TXT chưa tìm được và câu hỏi cần quyết định.",
    "R002.01": "Danh sách căn cứ camera: nguồn hiện có, quy trình đo còn thiếu và chức năng thuộc phần mở rộng.",
    "R002.02": "Bảng phối hợp hai NCS: nguồn, dữ liệu, giao diện, ca kiểm và đầu ra cần bàn giao giữa hai nhánh.",
    "R003.01": "Bảng nguồn lực: lịch khả dụng, lịch thi, hạn nộp, vai chưa nhận việc và các giả định chưa xác nhận.",
    "R003.02": "Danh sách quyết định còn mở: câu hỏi, người xử lý, bằng chứng cần có và điều kiện phải chờ.",
    "R004.01": "Ghi chú do NCS tự lập: câu hỏi nghiên cứu, phạm vi, quy định áp dụng và nguồn gốc bản đầu còn thiếu.",
    "R004.02": "Bản mục tiêu và cách đánh giá do NCS tự sửa, kèm giới hạn, căn cứ và lịch sử thay đổi.",
    "A01.01": "Ma trận yêu cầu kỹ thuật dự thảo: liên hệ T/D/CAM, đầu ra nghiệm thu, mục thiếu và mục trùng.",
    "R005.01": "Bảng kiểm yêu cầu: chức năng đã có, phần chưa có, người phụ trách và giả định chưa được quyết định.",
    "R005.02": "Ma trận yêu cầu đã sửa: đầu ra, phép kiểm, người kiểm, tiêu chí nhận và liên hệ CYK.",
    "PREP.01": "Biên bản phạm vi sơ bộ: người nhận việc, quy định, nguồn gốc NCS, quyết định thực và hồ sơ cần chuẩn bị.",
    "R006.01": "Bảng nhu cầu ban đầu: nội dung có bằng chứng, giả thuyết người dùng và nguồn tài liệu đối chiếu.",
    "R006.02": "Sơ đồ tác vụ theo vai: hỏi, xem nguồn, gặp lỗi, dừng, nhận hỗ trợ và giới hạn người chăm sóc.",
    "R007.01": "Bảng tác vụ camera: đặt máy, quyền thiết bị, dừng, không đo được và điều kiện còn chưa rõ.",
    "R007.02": "Phiếu phối hợp camera: thao tác từng vai, điểm dừng và người nhận chuyển hỗ trợ, không giao diễn giải y khoa.",
    "R008.01": "Phiếu nhận xét câu hỏi sức khỏe: câu cần bỏ hoặc sửa, cờ đỏ, giới hạn và lý do chuyên môn.",
    "R009.01": "Bảng xử lý phản hồi câu hỏi: nội dung sửa hoặc bỏ, lý do, phiên bản nguồn và phần còn chờ.",
    "R009.02": "Bộ câu hỏi trình xét: luồng hỏi, tên trường, hướng dẫn, phiên bản và điều kiện chưa được thu dữ liệu.",
    "R013.01": "Bảng sai khác ba schema: trường, kiểu dữ liệu, ID, trạng thái, vị trí sai khác và câu hỏi cần phân xử.",
    "R013.02": "Từ điển trường đề xuất: trường bắt buộc, giá trị cho phép, tham chiếu nguồn và mẫu đúng, sai, rỗng.",
    "R013.03": "Sơ đồ vòng đời dữ liệu: tạo, review, phát hành, thu hồi, xóa, người chịu trách nhiệm và phần chưa được xét.",
    "R014.01": "Danh mục trường camera: chỉ số, mục đích, nguồn, giới hạn và yêu cầu truyền video hoặc khung xương phải loại.",
    "R014.02": "Bảng xử lý dữ liệu camera: không đo được, hết quyền, thu hồi và câu hỏi về quyền lưu chỉ số.",
    "R015.01": "Bảng nhận xét nhãn: đồng nghĩa, khác nghĩa, chưa đủ căn cứ và nguồn dùng để đối chiếu.",
    "R015.02": "Phiếu giới hạn diễn giải: cách dùng từng trường, căn cứ, trường hợp bỏ trống và nội dung cần chặn.",
    "R015.03": "Biên bản phân xử chuyên môn thực: phần chấp thuận, cần sửa, chưa quyết định, người xét và phiên bản.",
    "R016.01": "Danh mục dữ liệu: mục đích từng trường, người giữ, quyền đọc ghi và phân biệt nghiên cứu với vận hành.",
    "R016.02": "Bảng lưu giữ và rút dữ liệu: thời hạn dự kiến, cách tiếp nhận yêu cầu, dữ liệu ngừng dùng và bản sao.",
    "R016.03": "Quy tắc phục hồi và thu hồi: dữ liệu mất quyền, cách giữ bằng chứng và điều kiện chặn dùng lại.",
    "R017.01": "Bảng đối chiếu quyền dịch vụ: thao tác đề nghị, đối tượng, dữ liệu liên quan và bằng chứng điều khoản.",
    "R017.02": "Phiếu điều kiện đổi hợp đồng: mục đủ bằng chứng, cần sửa, còn chặn và phiên bản được đưa sang triển khai.",
    "A03.01": "Bản sửa schema và validator kèm ca đúng, sai, rỗng, chuyển đổi và dữ liệu mẫu tổng hợp.",
    "R018.01": "Phiếu review thay đổi cấu trúc: ID, trạng thái, nguồn, dữ liệu rỗng và lý do sửa từng trường.",
    "R018.02": "Bộ schema, validator và từ điển trường cùng phiên bản, kèm kết quả ca đúng sai và lỗi còn mở.",
    "R019.01": "Biên bản kiểm trường thiếu, sai kiểu và tập rỗng: dữ liệu giả, kết quả mong đợi, kết quả thực và sai lệch.",
    "R019.02": "Biên bản kiểm ID trùng, thẻ nháp, nguồn hết quyền và trạng thái mâu thuẫn, kèm lỗi và bước tái hiện.",
    "R019.03": "Kết luận kiểm kỹ thuật: phiên bản, kết quả, phần chưa kiểm, lỗi trả lại và giới hạn giá trị kiểm tra.",
    "R021.01": "Danh mục CYK-S: nguồn đủ hoặc thiếu quy trình đo, vị trí tham chiếu và phần cần bàn giao bổ sung.",
    "Q03.01": "Quyết định quyền thực theo thao tác: cho phép, từ chối hoặc yêu cầu bổ sung, kèm thẩm quyền, phiên bản và bằng chứng.",
    "R032.01": "Bản kê tri thức: phiên bản nguồn, quyền, thẻ, quyết định thực, độ bao phủ và yêu cầu điều chỉnh phạm vi.",
    "GA.01": "Biên bản GA: quyền, quyết định CVYK, lỗi mở, kết luận thực, phạm vi và điều kiện cần bổ sung.",
    "R052.01": "Phiếu review thiết kế đánh giá: độc lập, nguồn, phiên bản, cỡ mẫu, giới hạn và người chấm thật được xác nhận.",
    "R070.01": "Phiếu review hướng dẫn: câu đi khám, giới hạn AI, dừng, phản hồi sức khỏe và nội dung cần sửa theo phiên bản.",
    "R071.01": "Hướng dẫn chữ trình GC: nội dung đã xử lý phản hồi, liên kết đã kiểm và phiên bản ứng dụng tương ứng.",
    "R087.01": "Bảng phân biệt thử chữ và camera: phạm vi, đồng ý, rút lui, người hỗ trợ và quyền cần xét riêng.",
    "R089.01": "Phiếu review đồng ý: chủ thể, phạm vi xử lý, quyền, hồ sơ nghiên cứu và mâu thuẫn cần phân xử trước tuyển.",
    "R090.01": "Phiếu review hoạt động chữ: rủi ro, câu hỏi, điểm dừng, chuyển khám và nội dung cần sửa hoặc xét lại.",
    "R092.01": "Biên bản tập hỗ trợ: kịch bản giả, kết quả làm lại, lỗi thao tác, người nhận, giờ hỗ trợ và cách chuyển lỗi.",
    "R095.01": "Lịch thử chữ đã xác nhận: thời gian, phương tiện, hỗ trợ, kênh hỏi và điều kiện đồng ý của người tham gia.",
    "R096.01": "Bảng dữ liệu nhu cầu được phép dùng: đồng ý, phản hồi theo vai, dữ liệu thiếu và trường hợp rút lui.",
    "R096.02": "Bảng đối chiếu giả thuyết với hành vi: tác vụ, bằng chứng quan sát và suy luận còn cần kiểm.",
    "R096.03": "Danh sách đề xuất sửa: khó khăn theo tác vụ, ảnh hưởng giao diện, hỗ trợ, phạm vi và nơi nhận bàn giao.",
    "R097.01": "Bản hướng dẫn sửa theo quan sát, kèm câu hoặc hình thay đổi, kết quả kiểm lại và yêu cầu mở lại review.",
    "R098.01": "Bản kê tập dữ liệu chữ: ID, đồng ý, dữ liệu thật, mục thiếu hoặc rút và nhật ký xử lý.",
    "R099.01": "Phiếu kiểm dữ liệu phân tích: bản kê, ID, đồng ý, phiên bản đã thử và lý do giữ hoặc loại từng trường hợp.",
    "R099.02": "Bảng kết quả tính kèm lệnh tái lập, mẫu số, lỗi, trợ giúp và lượt chưa hoàn thành theo phương pháp đã khóa.",
    "R099.03": "Bảng kết quả theo tác vụ hoặc nhóm đã định: sai số, dữ liệu thiếu và phản hồi không thuận lợi.",
    "R099.04": "Bản phân tích do NCS tự viết: kết quả trong phạm vi nghiên cứu, hạn chế mẫu và giới hạn kết luận sức khỏe.",
    "R099.05": "Gói gửi GVHD: dữ liệu, lệnh tính, bản đầu, bản sửa, nguồn hình, hồ sơ AI và câu hỏi cần review.",
    "R100.01": "Phiếu review báo cáo chữ: nhận xét tại từng bảng hoặc kết luận, đối chiếu phương pháp, dữ liệu thiếu và phép tính.",
    "R100.02": "Phiếu review nguồn gốc: bản đầu, hồ sơ AI, nguồn, giới hạn và nội dung chưa đủ bằng chứng.",
    "R103.01": "Bảng kiểm gói chữ: dấu kiểm tra, phiên bản, cấu hình, tài liệu, đường dẫn gói và nơi giữ thông tin truy cập.",
    "R103.02": "Biên bản xác nhận của người nhận: phạm vi vận hành chữ, bằng chứng cài phục hồi, quyền, hỗ trợ và yêu cầu bổ sung.",
    "GD-CORE.01": "Biên bản nghiệm thu chữ: quyết định chuyên môn, quyền, người nhận, kết luận thực và phạm vi phát hành được quyết định.",
    "C02.01": "Bảng quyền nguồn camera bổ sung: thao tác, bằng chứng, phạm vi được phép và phần chưa đủ quyền.",
    "C07.01": "Phiếu rà chuẩn đối chiếu: dụng cụ, sự kiện đầu cuối, cách bấm thời gian, cách ghi lỗi và năng lực người kiểm đo.",
    "GCA.01": "Biên bản GCA: nguồn, quy trình đo, thiết kế, quyền dữ liệu thử, quyết định thực và điều kiện chưa được thử người.",
    "C12.01": "Bảng dữ liệu camera: đồng ý, chỉ số, ID, thời hạn, xóa, rút lui và loại trừ video hoặc khung xương.",
    "C13.01": "Phiếu review buổi đo: giám sát, điểm dừng, hỗ trợ, giới hạn và nhân lực bổ sung cần đưa vào lịch.",
    "GC-C.01": "Quyết định GC-C thực: thiết bị, quy trình đo, người hỗ trợ, dữ liệu, phạm vi, điều kiện và yêu cầu bổ sung.",
    "GCB.01": "Biên bản GCB: sai số, thất bại, quyền, riêng tư, review chuyên môn và quyết định thực mở hoặc dừng tích hợp.",
    "C22.01": "Phiếu review hướng dẫn camera: đối tượng, dừng, giải thích chỉ số, câu an toàn, phiên bản và yêu cầu sửa.",
    "C23.01": "Biên bản tập hỗ trợ camera bằng dữ liệu giả: quyền, không đo được, dừng, chuyển lỗi và kết quả làm lại.",
    "R104.01": "Phiếu kiểm trước cài chữ: quyền, môi trường đích, dấu kiểm tra gói, tài khoản, bản quay lại và điều kiện phải dừng.",
    "R104.02": "Nhật ký cài bản chữ: lệnh, cấu hình, kết quả từng điểm kiểm, lỗi và phiên bản thực trên máy.",
    "R104.03": "Biên bản kiểm sau cài chữ: tiến trình, sẵn sàng, nhật ký, khả năng quay lui và phần bàn giao NCS1.",
    "R105.01": "Phiếu kiểm tác vụ chữ trên máy đích: hỏi, phản hồi, nguồn, phiên bản và đối chiếu với bản nghiệm thu.",
    "R105.02": "Biên bản kiểm lỗi chữ: dữ liệu sai, thiếu nguồn, mất kết nối, hướng dẫn, người hỗ trợ và lỗi còn mở.",
    "R106.01": "Danh mục hồ sơ gốc NCS1: bản đầu, phạm vi, công cụ nghiên cứu, dữ liệu hợp lệ và phần cần cập nhật.",
    "R106.02": "Phần thiết kế do NCS1 tự viết: quyết định kỹ thuật, đầu vào tri thức, phối hợp hai NCS và hiện vật đúng phiên bản.",
    "R106.03": "Phần phương pháp và kết quả do NCS1 hoàn thiện, kèm bảng, hình, mẫu số và kết quả chưa đạt.",
    "R106.04": "Phần giới hạn và đóng góp do NCS1 tự viết, phân biệt hệ thống, mẫu, quy trình và đóng góp từng vai.",
    "R106.05": "Danh mục phụ lục: trích dẫn, quyền hình, nhật ký, mã, gói phát hành, hướng dẫn, bằng chứng kiểm và phạm vi chia sẻ.",
    "R106.06": "Bản báo cáo gửi review, kèm kiểm định dạng nộp, số trang, liên kết, bản đầu, lịch sử sửa và câu hỏi GVHD.",
    "R107.01": "Phần căn cứ camera do NCS2 tự viết: CYK, nguồn, quyết định chọn chỉ số, giới hạn và phần chưa đủ bằng chứng.",
    "R107.02": "Phần phương pháp camera do NCS2 tự viết: quy trình đo, chuẩn đối chiếu, thiết bị, người kiểm đo và phiên bản triển khai.",
    "R107.03": "Phần kết quả camera do NCS2 tự viết: sai số, không đo được, rút lui, riêng tư và giới hạn diễn giải.",
    "R107.04": "Gói minh chứng NCS2: mã, hình, bảng, nguồn, quyền, bản đầu, lịch sử thực hiện, đóng góp và phần hỗ trợ AI.",
    "R108.01": "Phiếu review hai phần báo cáo: nhận xét theo vị trí, dữ liệu, phương pháp và khác biệt giữa chữ với camera.",
    "R108.02": "Phiếu review nguồn gốc và giới hạn: bản đầu, nhật ký, hồ sơ AI, quyền công bố và kết luận chưa đủ căn cứ.",
    "R108.03": "Danh mục phản hồi GVHD: phần NCS cần tự sửa, câu hỏi bảo vệ, giải trình đã nhận và hạn xử lý.",
    "R109.01": "Bản sửa do NCS1 tự thực hiện, kèm phản hồi từng nhận xét, lý do giữ hoặc sửa và lịch sử phiên bản.",
    "R109.02": "Ghi chép diễn tập NCS1: cách giải thích thiết kế, kết quả, nguồn, giới hạn, câu chưa trả lời được và kiểm quy định nộp.",
    "R110.01": "Phần camera do NCS2 tự sửa, kèm đối chiếu phản hồi, nguồn, dữ liệu, hình, bảng và số liệu không thuận lợi.",
    "R110.02": "Ghi chép diễn tập NCS2: quy trình đo, chuẩn đối chiếu, sai số, giới hạn và lý do camera không chẩn đoán.",
    "R111.01": "Danh mục tài nguyên bàn giao: mã, nguồn, dữ liệu, hình, tài liệu, đối tượng đọc và bằng chứng quyền từng loại.",
    "R111.02": "Bảng quyền chia sẻ theo phiên bản: mục được chia sẻ, cần loại, thay bằng dẫn nguồn hoặc tiếp tục chờ xét.",
    "R112.01": "Phiếu nhận gói kết hợp: bản kê, quyết định cổng, quyền, dấu kiểm tra, phiên bản, cấu hình, nơi giữ và tài liệu.",
    "R112.02": "Biên bản kiểm gói nhận: bằng chứng cài, phục hồi, kết quả làm lại và thao tác cần người soạn bổ sung.",
    "R112.03": "Biên bản nhận trách nhiệm: người quản, người hỗ trợ, giờ liên hệ, cách chuyển lỗi và kênh nhận thông tin truy cập.",
    "GD.01": "Biên bản nghiệm thu kết hợp: cổng chữ và camera, hồ sơ AI, quyền, người nhận, lỗi, quyết định thực và phạm vi phát hành.",
    "R113.01": "Phiếu trước cài kết hợp: quyết định GD, dấu kiểm tra, môi trường, bản quay lại, quyền bật camera và điều kiện dừng.",
    "R113.02": "Nhật ký cài gói kết hợp: lệnh, cấu hình đã nhận, kết quả từng điểm kiểm, lỗi và phiên bản thực.",
    "R113.03": "Biên bản sau cài kết hợp: dịch vụ, nhật ký, quay lui, phiên bản, môi trường và lỗi bàn giao hai NCS.",
    "R114.01": "Phiếu kiểm bản kết hợp khi camera tắt: luồng chữ, nguồn, đường lỗi và đối chiếu phạm vi bản được giao.",
    "R114.02": "Phiếu kiểm luồng kết hợp được phép: bật camera, nhận chỉ số, dừng, hướng dẫn, cấu hình và kênh hỗ trợ.",
    "R115.01": "Bảng kiểm camera trên máy đích: thiết bị, trình duyệt, quyền, mở, từ chối, đóng, giải phóng và phần chưa hỗ trợ.",
    "R115.02": "Biên bản kiểm giới hạn camera: trạng thái lỗi, không đo được, cảnh báo bắt buộc và dữ liệu truyền hoặc lưu.",
    "R120.01": "Biên bản trách nhiệm sau bàn giao: người vận hành, hỗ trợ, review tri thức và xử lý ngừng dịch vụ.",
    "R121.01": "Bảng hiệu chỉnh lô: giờ thực, lỗi, số mục sửa, chênh lệch dự toán và đề xuất phạm vi Q04.",
    "R122.01": "Biên bản xét lịch sau lô đầu: độ bao phủ, giờ CVYK, khả dụng, phạm vi và yêu cầu sửa dữ liệu lịch.",
    "C24.01": "Biên bản tập hỗ trợ trước thử camera: dữ liệu giả, dừng, không đo được, gọi hỗ trợ và kết quả làm lại.",
    "C25.01": "Phiếu tập ghi chuẩn trên dữ liệu giả: điểm bắt đầu, kết thúc, sai khác, lỗi thao tác và kết quả làm lại.",
    "CORE-DOC.01": "Danh mục hồ sơ chữ độc lập: bản đầu, dữ liệu, phương pháp, hiện vật và phạm vi không chờ kết quả camera.",
    "CORE-DOC.02": "Báo cáo chữ do NCS tự hoàn thiện: kết quả, giới hạn, đóng góp và đối chiếu số liệu với nhận xét đã có.",
    "CORE-DOC.03": "Bộ hồ sơ chữ gửi review: quyền, phiên bản, mã, hướng dẫn cài đặt, sử dụng, hỗ trợ và bằng chứng tương ứng.",
    "CORE-REV.01": "Phiếu review hồ sơ chữ: bản đầu, dữ liệu, quyền, giới hạn và yêu cầu NCS sửa, độc lập quyết định camera.",
    "G0.01": "Biên bản G0: hồ sơ D01–D04/D09, điều khoản, giờ, schema, T01–T06, kết luận thực và điều kiện còn thiếu.",
    "C26.01": "Phiếu review phương pháp camera: mục tiêu, mẫu, chuẩn đo, dữ liệu thiếu, cách phân tích và nhận xét trước trình GC-C.",
    "C27.01": "Phiếu review tích hợp: phiên bản, phản hồi, câu an toàn, nguồn, thay đổi phạm vi và điều kiện xét lại GC-C.",
    "GCB-R.01": "Biên bản xét lại cổng: gói kết hợp, thay đổi, điều kiện GCB/GB/GC, quyết định thực và cổng cần mở lại."
  }
}