{
  "scenario_only": true,
  "allocations": [
    {
      "date": "2026-09-28",
      "task": "R001",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-09-28",
      "task": "R002",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-09-29",
      "task": "R001",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-09-29",
      "task": "R002",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2026-09-30",
      "task": "R006",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-09-30",
      "task": "R007",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-10-01",
      "task": "R006",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-01",
      "task": "R007",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2026-10-02",
      "task": "R003",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2026-10-02",
      "task": "R010",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-03",
      "task": "R003",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2026-10-03",
      "task": "R008",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-10-03",
      "task": "R010",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-05",
      "task": "R004",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-05",
      "task": "A09",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2026-10-06",
      "task": "R004",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-06",
      "task": "R011",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2026-10-07",
      "task": "A01",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2026-10-07",
      "task": "R009",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-08",
      "task": "R005",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-08",
      "task": "R011",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2026-10-09",
      "task": "R012",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-16",
      "task": "PREP",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2026-10-17",
      "task": "R013",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2026-10-17",
      "task": "R021",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-10-17",
      "task": "R027",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2026-10-19",
      "task": "R013",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-19",
      "task": "R021",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2026-10-19",
      "task": "R027",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2026-10-20",
      "task": "R014",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-10-20",
      "task": "R015",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-10-20",
      "task": "R016",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2026-10-20",
      "task": "R020",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-21",
      "task": "R014",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2026-10-21",
      "task": "R020",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-22",
      "task": "R015",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-10-22",
      "task": "R016",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2026-10-22",
      "task": "R086",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-23",
      "task": "R086",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-24",
      "task": "R015",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-10-24",
      "task": "R016",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2026-10-24",
      "task": "R086",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-24",
      "task": "SRC-01",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-26",
      "task": "R087",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-10-26",
      "task": "SRC-01",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-27",
      "task": "R017",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-10-27",
      "task": "R087",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2026-10-27",
      "task": "SRC-02",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2026-10-28",
      "task": "A03",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2026-10-28",
      "task": "SRC-02",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-10-29",
      "task": "R018",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-29",
      "task": "R088",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2026-10-29",
      "task": "SRC-02",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2026-10-30",
      "task": "R018",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-10-31",
      "task": "R019",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2026-10-31",
      "task": "R088",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2026-10-31",
      "task": "SRC-03",
      "role": "NCS1",
      "units": 180
    },
    {
      "date": "2026-11-02",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-11-03",
      "task": "R019",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2026-11-03",
      "task": "R088",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2026-11-03",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-11-04",
      "task": "R023",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-11-05",
      "task": "R023",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-11-05",
      "task": "R089",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-11-06",
      "task": "R023",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-11-07",
      "task": "R048",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2026-11-07",
      "task": "R090",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-11-09",
      "task": "R049",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-11-09",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-11-10",
      "task": "R049",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-11-10",
      "task": "R090",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-11-10",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-11-12",
      "task": "SRC-05",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-11-12",
      "task": "SRC-06",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-11-14",
      "task": "SRC-06",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2026-11-17",
      "task": "SRC-05",
      "role": "LEGAL",
      "units": 60
    },
    {
      "date": "2026-11-19",
      "task": "R022",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-11-24",
      "task": "R022",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-11-26",
      "task": "R022",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-12-08",
      "task": "Q03",
      "role": "LEGAL",
      "units": 60
    },
    {
      "date": "2026-12-09",
      "task": "SRC-TOOLS1",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2026-12-10",
      "task": "R024",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-12-10",
      "task": "SRC-TOOLS2",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-11",
      "task": "SRC-TOOLS2",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-12",
      "task": "SRC-TOOLS2",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-15",
      "task": "R024",
      "role": "LEGAL",
      "units": 60
    },
    {
      "date": "2026-12-15",
      "task": "SRC-07",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2026-12-16",
      "task": "R025",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2026-12-17",
      "task": "R075",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2026-12-17",
      "task": "SRC-07",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2026-12-18",
      "task": "R025",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2026-12-18",
      "task": "A22",
      "role": "AI",
      "units": 2
    },
    {
      "date": "2026-12-18",
      "task": "SRC-08",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-19",
      "task": "R026",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2026-12-19",
      "task": "SRC-08",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-21",
      "task": "SRC-09",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-12-22",
      "task": "R026",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2026-12-22",
      "task": "SRC-09",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2026-12-23",
      "task": "A16",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2026-12-23",
      "task": "SRC-10",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-25",
      "task": "G0",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2026-12-26",
      "task": "R028",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2026-12-26",
      "task": "R039",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2026-12-26",
      "task": "SRC-11",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2026-12-28",
      "task": "R028",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2026-12-28",
      "task": "R039",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-29",
      "task": "A05",
      "role": "AI",
      "units": 2
    },
    {
      "date": "2026-12-29",
      "task": "MK01A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-30",
      "task": "R028",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2026-12-30",
      "task": "A05",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2026-12-30",
      "task": "MK01A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-31",
      "task": "R029",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2026-12-31",
      "task": "MK01B",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-02",
      "task": "R030",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-01-02",
      "task": "MK01B",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-01-04",
      "task": "A11",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2027-01-04",
      "task": "R059",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-05",
      "task": "R054",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-05",
      "task": "MK01C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-06",
      "task": "R054",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-06",
      "task": "R059",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-07",
      "task": "R054",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-08",
      "task": "R055",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-08",
      "task": "MK01D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-01-09",
      "task": "K01A",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-01-09",
      "task": "R055",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-11",
      "task": "K01A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-11",
      "task": "R055",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-12",
      "task": "K01B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-12",
      "task": "MK02A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-13",
      "task": "R055",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-13",
      "task": "MK02A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-14",
      "task": "K01B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-14",
      "task": "R056",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-01-14",
      "task": "R062",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2027-01-14",
      "task": "MK02B",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-15",
      "task": "R059",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-15",
      "task": "MK02B",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-01-16",
      "task": "K01B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-16",
      "task": "R056",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-01-16",
      "task": "R059",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-16",
      "task": "R062",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2027-01-18",
      "task": "K01C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-18",
      "task": "R059",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-19",
      "task": "K01D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-19",
      "task": "A18",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2027-01-20",
      "task": "R031",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-20",
      "task": "R033",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-20",
      "task": "R063",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-21",
      "task": "R031",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-21",
      "task": "R033",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-21",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-22",
      "task": "R031",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-01-22",
      "task": "R033",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-01-22",
      "task": "R063",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-23",
      "task": "R034",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-23",
      "task": "R063",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-23",
      "task": "C01",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-23",
      "task": "R121",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-01-25",
      "task": "R063",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-01-25",
      "task": "C01",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-26",
      "task": "R034",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-26",
      "task": "C01",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-27",
      "task": "C01",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-28",
      "task": "R034",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-28",
      "task": "C01",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-01-29",
      "task": "C01",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-01-29",
      "task": "R122",
      "role": "GVHD",
      "units": 30
    },
    {
      "date": "2027-01-30",
      "task": "R034",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-01-30",
      "task": "C-SRC01",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-02-15",
      "task": "A07",
      "role": "AI",
      "units": 2
    },
    {
      "date": "2027-02-15",
      "task": "C-SRC01",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-02-16",
      "task": "R035",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-02-16",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-02-16",
      "task": "C-SRC02",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-02-17",
      "task": "R035",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-02-17",
      "task": "C-SRC02",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-02-18",
      "task": "R035",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-02-18",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-02-18",
      "task": "C-SRC02",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-02-19",
      "task": "R035",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-02-20",
      "task": "R036",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-02-23",
      "task": "R036",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-02-23",
      "task": "C02",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2027-02-24",
      "task": "C-SRC03",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-02-25",
      "task": "R036",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-02-25",
      "task": "C-SRC03",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-02-26",
      "task": "C-SRC03",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-02-27",
      "task": "R036",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-02-27",
      "task": "C-SRC04",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-01",
      "task": "R037",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-02",
      "task": "R037",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-02",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-04",
      "task": "R038",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-03-04",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-06",
      "task": "R038",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-03-06",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-08",
      "task": "R040",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-09",
      "task": "R040",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-09",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-10",
      "task": "R040",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-11",
      "task": "R040",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-11",
      "task": "R050",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-12",
      "task": "R040",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-13",
      "task": "R040",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-03-13",
      "task": "C03",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-15",
      "task": "R040",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-16",
      "task": "R041",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-16",
      "task": "A06",
      "role": "AI",
      "units": 2
    },
    {
      "date": "2027-03-16",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-03-16",
      "task": "C03",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-17",
      "task": "R041",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-03-18",
      "task": "R042",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-03-18",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-03-18",
      "task": "C03",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-19",
      "task": "C-SRC05",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-20",
      "task": "R042",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-03-20",
      "task": "MK02C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-03-20",
      "task": "C-SRC05",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-03-22",
      "task": "C04",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-22",
      "task": "MK02D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-03-23",
      "task": "R042",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-03-23",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-03-23",
      "task": "C04",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-23",
      "task": "K02A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-24",
      "task": "R044",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-24",
      "task": "C04",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-25",
      "task": "R044",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-25",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-03-25",
      "task": "C04",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-26",
      "task": "R044",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-26",
      "task": "R052",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2027-03-26",
      "task": "C04",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-27",
      "task": "R044",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-03-27",
      "task": "R052",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2027-03-27",
      "task": "C04",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-03-29",
      "task": "R044",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-30",
      "task": "R045",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-30",
      "task": "R053",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-03-31",
      "task": "R045",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-03-31",
      "task": "R053",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-01",
      "task": "R045",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-04-01",
      "task": "C05",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-02",
      "task": "C05",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-04-02",
      "task": "K02A",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-04-03",
      "task": "R046",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-04-03",
      "task": "C06",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-03",
      "task": "K02A",
      "role": "NCS1",
      "units": 180
    },
    {
      "date": "2027-04-03",
      "task": "MK03A",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-04-05",
      "task": "MK03A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-06",
      "task": "R046",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-04-06",
      "task": "C06",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-06",
      "task": "MK03A",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-04-07",
      "task": "R047",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-07",
      "task": "MK03B",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-08",
      "task": "R047",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-08",
      "task": "C06",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-08",
      "task": "MK03B",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-04-09",
      "task": "A19",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2027-04-10",
      "task": "R069",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-04-10",
      "task": "C07",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2027-04-10",
      "task": "K02B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-12",
      "task": "R069",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-04-13",
      "task": "R070",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-14",
      "task": "C07",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2027-04-15",
      "task": "R070",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-16",
      "task": "R071",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-17",
      "task": "R091",
      "role": "NCS1",
      "units": 180
    },
    {
      "date": "2027-04-17",
      "task": "GCA",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2027-04-17",
      "task": "K02B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-19",
      "task": "A08",
      "role": "AI",
      "units": 2
    },
    {
      "date": "2027-04-20",
      "task": "A08",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2027-04-20",
      "task": "K02B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-21",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-21",
      "task": "K02C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-22",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-22",
      "task": "K02D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-23",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-24",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-24",
      "task": "MK03C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-04-26",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-26",
      "task": "MK03D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-04-27",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-27",
      "task": "K03A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-28",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-28",
      "task": "K03A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-04-29",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-04-29",
      "task": "K03A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-03",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-03",
      "task": "MK04A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-04",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-04",
      "task": "K03B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-04",
      "task": "MK04A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-05",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-06",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-06",
      "task": "K03B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-07",
      "task": "C08",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-08",
      "task": "C08",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-05-08",
      "task": "K03B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-08",
      "task": "MK04B",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-05-10",
      "task": "K03C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-10",
      "task": "MK04B",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-05-11",
      "task": "C09",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-05-11",
      "task": "K03D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-13",
      "task": "C09",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-05-13",
      "task": "MK04C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-14",
      "task": "C10",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-14",
      "task": "MK04D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-05-15",
      "task": "C10",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-15",
      "task": "K04A",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-05-17",
      "task": "C10",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-05-17",
      "task": "K04A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-18",
      "task": "C11",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-18",
      "task": "K04B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-18",
      "task": "MK05A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-19",
      "task": "C11",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-19",
      "task": "MK05A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-20",
      "task": "C11",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2027-05-20",
      "task": "K04B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-20",
      "task": "MK05B",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-05-21",
      "task": "C26",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2027-05-21",
      "task": "MK05B",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-05-22",
      "task": "C12",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2027-05-22",
      "task": "K04B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-22",
      "task": "C26",
      "role": "GVHD",
      "units": 30
    },
    {
      "date": "2027-05-24",
      "task": "K04C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-05-25",
      "task": "C12",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2027-05-25",
      "task": "K04D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-27",
      "task": "C13",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-05-29",
      "task": "C13",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-01",
      "task": "MK05C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-02",
      "task": "C24",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-06-02",
      "task": "MK05D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-06-03",
      "task": "K05A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-04",
      "task": "K05A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-05",
      "task": "K05A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-05",
      "task": "C24",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-06-05",
      "task": "MK06A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-07",
      "task": "MK06A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-08",
      "task": "K05B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-08",
      "task": "MK06B",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-06-09",
      "task": "C25",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2027-06-09",
      "task": "MK06B",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-06-10",
      "task": "K05B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-12",
      "task": "K05B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-12",
      "task": "C25",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2027-06-14",
      "task": "K05C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-15",
      "task": "K05D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-17",
      "task": "MK06C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-18",
      "task": "MK06D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-06-19",
      "task": "K06A",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-06-21",
      "task": "K06A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-22",
      "task": "K06B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-22",
      "task": "MK07A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-23",
      "task": "MK07A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-24",
      "task": "K06B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-24",
      "task": "MK07B",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-06-25",
      "task": "MK07B",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-06-26",
      "task": "K06B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-06-28",
      "task": "K06C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-06-29",
      "task": "K06D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-01",
      "task": "MK07C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-02",
      "task": "MK07D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-07-03",
      "task": "K07A",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-07-05",
      "task": "K07A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-06",
      "task": "K07B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-06",
      "task": "MK08A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-07",
      "task": "MK08A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-08",
      "task": "K07B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-08",
      "task": "MK08B",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-07-09",
      "task": "MK08B",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-07-10",
      "task": "K07B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-12",
      "task": "K07C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-13",
      "task": "K07D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-15",
      "task": "MK08C",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-16",
      "task": "MK08D",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-07-17",
      "task": "K08A",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-07-19",
      "task": "K08A",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-20",
      "task": "K08B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-20",
      "task": "SRC-12",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-21",
      "task": "SRC-12",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-07-22",
      "task": "K08B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-22",
      "task": "SRC-M01",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-23",
      "task": "SRC-M02",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-07-24",
      "task": "K08B",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-24",
      "task": "SRC-M02",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2027-07-26",
      "task": "K08C",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-27",
      "task": "K08D",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-07-28",
      "task": "R032",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-07-31",
      "task": "GA",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2027-08-02",
      "task": "R043",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-03",
      "task": "R043",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-04",
      "task": "R043",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-05",
      "task": "R043",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-06",
      "task": "R057",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-07",
      "task": "R057",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-08-09",
      "task": "R076",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-10",
      "task": "R058",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-08-10",
      "task": "R076",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-11",
      "task": "R076",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-12",
      "task": "R058",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-08-12",
      "task": "R076",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-13",
      "task": "R059B",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-08-14",
      "task": "R059B",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-08-14",
      "task": "R077",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-08-16",
      "task": "R060",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-17",
      "task": "R060",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-17",
      "task": "R077",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-08-18",
      "task": "R063B",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-08-19",
      "task": "R061",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-08-19",
      "task": "R064",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-20",
      "task": "R064",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-21",
      "task": "R061",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-08-21",
      "task": "R065",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-08-24",
      "task": "R065",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-08-26",
      "task": "R065",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-08-27",
      "task": "R066",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-08-27",
      "task": "A20",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2027-08-27",
      "task": "R079",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-28",
      "task": "R066",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-08-28",
      "task": "R072",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-08-28",
      "task": "SRC-M03",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-08-30",
      "task": "R066",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-08-30",
      "task": "R079",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-31",
      "task": "R067",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2027-08-31",
      "task": "R068",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-08-31",
      "task": "R079",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-08-31",
      "task": "SRC-M03",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-09-01",
      "task": "R073",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-09-01",
      "task": "R079",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-09-01",
      "task": "R092",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-09-03",
      "task": "R073",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-09-04",
      "task": "R067",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2027-09-04",
      "task": "R073",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-09-04",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-09-04",
      "task": "R092",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-09-06",
      "task": "R078",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-09-07",
      "task": "R074",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-09-08",
      "task": "R078",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-09-09",
      "task": "R074",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-09-09",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-09-10",
      "task": "R093",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2027-09-11",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-09-11",
      "task": "R093",
      "role": "OPS",
      "units": 60
    },
    {
      "date": "2027-09-14",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-09-16",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2027-09-24",
      "task": "GB",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2027-09-28",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-09-30",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-10-05",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-10-07",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-10-09",
      "task": "R082",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-10-12",
      "task": "R082",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-10-14",
      "task": "R082",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-10-15",
      "task": "R083",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-10-16",
      "task": "R083",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2027-10-18",
      "task": "R083",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-10-19",
      "task": "R084",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-10-19",
      "task": "R124",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-10-21",
      "task": "R084",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2027-10-21",
      "task": "R124",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-10-26",
      "task": "R125",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-10-28",
      "task": "R125",
      "role": "REVIEW_YK",
      "units": 120
    },
    {
      "date": "2027-10-30",
      "task": "R085",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-11-02",
      "task": "R085",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2027-11-05",
      "task": "GB-R",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2027-11-17",
      "task": "GC",
      "role": "AUTH",
      "units": 120
    },
    {
      "date": "2027-11-24",
      "task": "GC",
      "role": "AUTH",
      "units": 60
    },
    {
      "date": "2027-11-24",
      "task": "GC-C",
      "role": "AUTH",
      "units": 60
    },
    {
      "date": "2027-11-25",
      "task": "R094",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2027-11-26",
      "task": "R094",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-11-27",
      "task": "R095",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-01",
      "task": "R095",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-01",
      "task": "GC-C",
      "role": "AUTH",
      "units": 60
    },
    {
      "date": "2027-12-02",
      "task": "C14",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-12-03",
      "task": "C14",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-12-04",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-04",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-04",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2027-12-04",
      "task": "C14",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-12-06",
      "task": "C14",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2027-12-08",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-08",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-08",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2027-12-11",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-11",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-11",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2027-12-15",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-15",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-15",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2027-12-18",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-18",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-18",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2027-12-22",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-22",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-22",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2027-12-25",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-25",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-25",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2027-12-29",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2027-12-29",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2027-12-29",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2028-01-05",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2028-01-05",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-05",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2028-01-08",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2028-01-08",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-08",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60
    },
    {
      "date": "2028-01-10",
      "task": "R096",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-11",
      "task": "R096",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2028-01-11",
      "task": "R098",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2028-01-12",
      "task": "R097",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-01-13",
      "task": "R098",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2028-01-14",
      "task": "R099",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-15",
      "task": "R099",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-01-17",
      "task": "R099",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-18",
      "task": "R099",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-01-21",
      "task": "R100",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-01-22",
      "task": "R100",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-01-24",
      "task": "R101",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-25",
      "task": "R101",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-26",
      "task": "R101",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-01-27",
      "task": "R123",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-01-27",
      "task": "CORE-DOC",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-28",
      "task": "CORE-DOC",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-01-29",
      "task": "R123",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-01-29",
      "task": "CORE-DOC",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-02-15",
      "task": "R102",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-02-17",
      "task": "R102",
      "role": "REVIEW_TECH",
      "units": 60
    },
    {
      "date": "2028-02-18",
      "task": "R103",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-02-18",
      "task": "CORE-REV",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-02-25",
      "task": "GD-CORE",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60
    },
    {
      "date": "2028-02-26",
      "task": "R104",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-02-28",
      "task": "C15",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-02-28",
      "task": "R105",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-02-29",
      "task": "C15",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-01",
      "task": "C15",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-02",
      "task": "C15",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-03",
      "task": "C16",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-03-04",
      "task": "C16",
      "role": "NCS1",
      "units": 60
    },
    {
      "date": "2028-03-07",
      "task": "C17",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-03-08",
      "task": "CORE-W1",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-03-09",
      "task": "C17",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-03-11",
      "task": "C17",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-03-17",
      "task": "GCB",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-03-18",
      "task": "A08I",
      "role": "AI",
      "units": 1
    },
    {
      "date": "2028-03-20",
      "task": "C18",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-21",
      "task": "C18",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-22",
      "task": "C18",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-23",
      "task": "C18",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-24",
      "task": "C18",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-03-25",
      "task": "C18",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2028-03-27",
      "task": "C19",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-03-28",
      "task": "C19",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-03-30",
      "task": "C20",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2028-03-31",
      "task": "CORE-M1",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-04-01",
      "task": "C20",
      "role": "REVIEW_TECH",
      "units": 120
    },
    {
      "date": "2028-04-03",
      "task": "C21",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-03",
      "task": "R106",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-04-04",
      "task": "C21",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-04",
      "task": "R106",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-04-04",
      "task": "C27",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-04-05",
      "task": "R106",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-04-05",
      "task": "R107",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-06",
      "task": "C22",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-04-06",
      "task": "R106",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-04-06",
      "task": "R107",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-07",
      "task": "R106",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-04-07",
      "task": "R107",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-08",
      "task": "C23",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-04-08",
      "task": "R106",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-04-08",
      "task": "R107",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-08",
      "task": "C27",
      "role": "CVYK",
      "units": 60
    },
    {
      "date": "2028-04-10",
      "task": "R107",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-11",
      "task": "R107",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2028-04-11",
      "task": "C28",
      "role": "NCS2",
      "units": 60
    },
    {
      "date": "2028-04-12",
      "task": "C23",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-04-12",
      "task": "C28",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-13",
      "task": "C28",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-14",
      "task": "R108",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-04-15",
      "task": "R108",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-04-21",
      "task": "R108",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-04-22",
      "task": "R109",
      "role": "NCS1",
      "units": 240
    },
    {
      "date": "2028-04-22",
      "task": "R110",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-22",
      "task": "GCB-R",
      "role": "GVHD",
      "units": 30
    },
    {
      "date": "2028-04-24",
      "task": "R110",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-04-25",
      "task": "R111",
      "role": "LEGAL",
      "units": 120
    },
    {
      "date": "2028-04-26",
      "task": "R112",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-04-28",
      "task": "R112",
      "role": "OPS",
      "units": 60
    },
    {
      "date": "2028-05-05",
      "task": "GD",
      "role": "GVHD",
      "units": 60
    },
    {
      "date": "2028-05-06",
      "task": "R113",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-05-08",
      "task": "R114",
      "role": "NCS1",
      "units": 120
    },
    {
      "date": "2028-05-09",
      "task": "R115",
      "role": "NCS2",
      "units": 90
    },
    {
      "date": "2028-05-10",
      "task": "R115",
      "role": "NCS2",
      "units": 30
    },
    {
      "date": "2028-05-19",
      "task": "R116",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-05-20",
      "task": "R117",
      "role": "SUPPORT",
      "units": 60
    },
    {
      "date": "2028-06-10",
      "task": "R118",
      "role": "OPS",
      "units": 120
    },
    {
      "date": "2028-06-13",
      "task": "R119",
      "role": "DATA",
      "units": 60
    },
    {
      "date": "2028-06-16",
      "task": "R120",
      "role": "GVHD",
      "units": 60
    }
  ],
  "work_allocations": [
    {
      "date": "2026-09-28",
      "task": "R001",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R001.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-09-29"
    },
    {
      "date": "2026-09-28",
      "task": "R002",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R002.01",
          "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ố.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R002.02",
          "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ợ.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 60
        }
      ],
      "next_date": "2026-09-29"
    },
    {
      "date": "2026-09-29",
      "task": "R001",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R001.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-09-29",
      "task": "R002",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R002.02",
          "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ợ.",
          "units": 30,
          "step_before": 30,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-09-30",
      "task": "R006",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R006.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-01"
    },
    {
      "date": "2026-09-30",
      "task": "R007",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R007.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R007.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-01"
    },
    {
      "date": "2026-10-01",
      "task": "R006",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R006.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-01",
      "task": "R007",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R007.02",
          "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.",
          "units": 30,
          "step_before": 30,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-02",
      "task": "R003",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R003.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-03"
    },
    {
      "date": "2026-10-02",
      "task": "R010",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R010.01",
          "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ũ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-03"
    },
    {
      "date": "2026-10-03",
      "task": "R003",
      "role": "GVHD",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R003.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-03",
      "task": "R008",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "R008.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-03",
      "task": "R010",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R010.02",
          "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ợ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-05",
      "task": "R004",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R004.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-06"
    },
    {
      "date": "2026-10-05",
      "task": "A09",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A09.01",
          "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õ.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-06",
      "task": "R004",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R004.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-06",
      "task": "R011",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R011.01",
          "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ó.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R011.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2026-10-08"
    },
    {
      "date": "2026-10-07",
      "task": "A01",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A01.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-07",
      "task": "R009",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R009.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R009.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-08",
      "task": "R005",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R005.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R005.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-08",
      "task": "R011",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R011.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-09",
      "task": "R012",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R012.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-16",
      "task": "PREP",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "PREP.01",
          "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 đủ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-17",
      "task": "R013",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R013.01",
          "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ử.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R013.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-19"
    },
    {
      "date": "2026-10-17",
      "task": "R021",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R021.01",
          "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",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-19"
    },
    {
      "date": "2026-10-17",
      "task": "R027",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R027.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-19"
    },
    {
      "date": "2026-10-19",
      "task": "R013",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R013.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-19",
      "task": "R021",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R021.01",
          "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",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-19",
      "task": "R027",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R027.02",
          "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ý.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-20",
      "task": "R014",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R014.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R014.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-21"
    },
    {
      "date": "2026-10-20",
      "task": "R015",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R015.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-22"
    },
    {
      "date": "2026-10-20",
      "task": "R016",
      "role": "DATA",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R016.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-22"
    },
    {
      "date": "2026-10-20",
      "task": "R020",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R020.01",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-21"
    },
    {
      "date": "2026-10-21",
      "task": "R014",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R014.02",
          "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.",
          "units": 30,
          "step_before": 30,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-21",
      "task": "R020",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R020.02",
          "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ờ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-22",
      "task": "R015",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R015.02",
          "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ứ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-24"
    },
    {
      "date": "2026-10-22",
      "task": "R016",
      "role": "DATA",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R016.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-24"
    },
    {
      "date": "2026-10-22",
      "task": "R086",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R086.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-23"
    },
    {
      "date": "2026-10-23",
      "task": "R086",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R086.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-24"
    },
    {
      "date": "2026-10-24",
      "task": "R015",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R015.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-24",
      "task": "R016",
      "role": "DATA",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R016.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-24",
      "task": "R086",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R086.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-24",
      "task": "SRC-01",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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 đủ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-26"
    },
    {
      "date": "2026-10-26",
      "task": "R087",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R087.01",
          "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",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-27"
    },
    {
      "date": "2026-10-26",
      "task": "SRC-01",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-27",
      "task": "R017",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R017.01",
          "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ụ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R017.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-27",
      "task": "R087",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R087.01",
          "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",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-27",
      "task": "SRC-02",
      "role": "NCS2",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-28"
    },
    {
      "date": "2026-10-28",
      "task": "A03",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A03.01",
          "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ả.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-28",
      "task": "SRC-02",
      "role": "NCS2",
      "units": 90,
      "task_before": 60,
      "task_after": 150,
      "task_total": 180,
      "segments": [
        {
          "step_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õ.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_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ứ.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 60
        }
      ],
      "next_date": "2026-10-29"
    },
    {
      "date": "2026-10-29",
      "task": "R018",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R018.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-10-30"
    },
    {
      "date": "2026-10-29",
      "task": "R088",
      "role": "DATA",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R088.01",
          "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ể.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 90
        }
      ],
      "next_date": "2026-10-31"
    },
    {
      "date": "2026-10-29",
      "task": "SRC-02",
      "role": "NCS2",
      "units": 30,
      "task_before": 150,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_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ứ.",
          "units": 30,
          "step_before": 30,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-30",
      "task": "R018",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R018.02",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-10-31",
      "task": "R019",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R019.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R019.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2026-11-03"
    },
    {
      "date": "2026-10-31",
      "task": "R088",
      "role": "DATA",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R088.01",
          "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ể.",
          "units": 30,
          "step_before": 60,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R088.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2026-11-03"
    },
    {
      "date": "2026-10-31",
      "task": "SRC-03",
      "role": "NCS1",
      "units": 180,
      "task_before": 0,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-02",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_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ả.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-03"
    },
    {
      "date": "2026-11-03",
      "task": "R019",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R019.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-03",
      "task": "R088",
      "role": "DATA",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R088.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-03",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-09"
    },
    {
      "date": "2026-11-04",
      "task": "R023",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R023.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-05"
    },
    {
      "date": "2026-11-05",
      "task": "R023",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R023.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-06"
    },
    {
      "date": "2026-11-05",
      "task": "R089",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R089.01",
          "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",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-06",
      "task": "R023",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R023.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-07",
      "task": "R048",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R048.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R048.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-07",
      "task": "R090",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R090.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-10"
    },
    {
      "date": "2026-11-09",
      "task": "R049",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R049.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": "2026-11-10"
    },
    {
      "date": "2026-11-09",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_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ó.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-10"
    },
    {
      "date": "2026-11-10",
      "task": "R049",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R049.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-10",
      "task": "R090",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R090.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-10",
      "task": "SRC-04",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-12",
      "task": "SRC-05",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_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ứ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-17"
    },
    {
      "date": "2026-11-12",
      "task": "SRC-06",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-14"
    },
    {
      "date": "2026-11-14",
      "task": "SRC-06",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-17",
      "task": "SRC-05",
      "role": "LEGAL",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-11-19",
      "task": "R022",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R022.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-24"
    },
    {
      "date": "2026-11-24",
      "task": "R022",
      "role": "LEGAL",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R022.02",
          "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ở.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-11-26"
    },
    {
      "date": "2026-11-26",
      "task": "R022",
      "role": "LEGAL",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R022.03",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-08",
      "task": "Q03",
      "role": "LEGAL",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "Q03.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-09",
      "task": "SRC-TOOLS1",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-10",
      "task": "R024",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R024.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R024.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2026-12-15"
    },
    {
      "date": "2026-12-10",
      "task": "SRC-TOOLS2",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-11"
    },
    {
      "date": "2026-12-11",
      "task": "SRC-TOOLS2",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-12"
    },
    {
      "date": "2026-12-12",
      "task": "SRC-TOOLS2",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-15",
      "task": "R024",
      "role": "LEGAL",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R024.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-15",
      "task": "SRC-07",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-17"
    },
    {
      "date": "2026-12-16",
      "task": "R025",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R025.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-18"
    },
    {
      "date": "2026-12-17",
      "task": "R075",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R075.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-17",
      "task": "SRC-07",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-18",
      "task": "R025",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R025.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-18",
      "task": "A22",
      "role": "AI",
      "units": 2,
      "task_before": 0,
      "task_after": 2,
      "task_total": 2,
      "segments": [
        {
          "step_id": "A22.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        },
        {
          "step_id": "A22.02",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-18",
      "task": "SRC-08",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-19"
    },
    {
      "date": "2026-12-19",
      "task": "R026",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R026.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-22"
    },
    {
      "date": "2026-12-19",
      "task": "SRC-08",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-21",
      "task": "SRC-09",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 180,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-22"
    },
    {
      "date": "2026-12-22",
      "task": "R026",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R026.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-22",
      "task": "SRC-09",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-23",
      "task": "A16",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A16.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-23",
      "task": "SRC-10",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-25",
      "task": "G0",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "G0.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-26",
      "task": "R028",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R028.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-28"
    },
    {
      "date": "2026-12-26",
      "task": "R039",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R039.01",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R039.02",
          "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ể.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-28"
    },
    {
      "date": "2026-12-26",
      "task": "SRC-11",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-28",
      "task": "R028",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R028.02",
          "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ý.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-30"
    },
    {
      "date": "2026-12-28",
      "task": "R039",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R039.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-29",
      "task": "A05",
      "role": "AI",
      "units": 2,
      "task_before": 0,
      "task_after": 2,
      "task_total": 3,
      "segments": [
        {
          "step_id": "A05.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        },
        {
          "step_id": "A05.02",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": "2026-12-30"
    },
    {
      "date": "2026-12-29",
      "task": "MK01A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2026-12-30"
    },
    {
      "date": "2026-12-30",
      "task": "R028",
      "role": "OPS",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R028.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-30",
      "task": "A05",
      "role": "AI",
      "units": 1,
      "task_before": 2,
      "task_after": 3,
      "task_total": 3,
      "segments": [
        {
          "step_id": "A05.03",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-30",
      "task": "MK01A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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 đủ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-31",
      "task": "R029",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R029.01",
          "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 đủ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2026-12-31",
      "task": "MK01B",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-02"
    },
    {
      "date": "2027-01-02",
      "task": "R030",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R030.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-02",
      "task": "MK01B",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-04",
      "task": "A11",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A11.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-04",
      "task": "R059",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R059.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-06"
    },
    {
      "date": "2027-01-05",
      "task": "R054",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R054.01",
          "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ý.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-06"
    },
    {
      "date": "2027-01-05",
      "task": "MK01C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-06",
      "task": "R054",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R054.02",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-07"
    },
    {
      "date": "2027-01-06",
      "task": "R059",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R059.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-15"
    },
    {
      "date": "2027-01-07",
      "task": "R054",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R054.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-08",
      "task": "R055",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R055.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-09"
    },
    {
      "date": "2027-01-08",
      "task": "MK01D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-09",
      "task": "K01A",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K01A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K01A.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K01A.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K01A.04",
          "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ờ.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 75
        }
      ],
      "next_date": "2027-01-11"
    },
    {
      "date": "2027-01-09",
      "task": "R055",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R055.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-11"
    },
    {
      "date": "2027-01-11",
      "task": "K01A",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K01A.04",
          "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ờ.",
          "units": 30,
          "step_before": 45,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K01A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K01A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-11",
      "task": "R055",
      "role": "OPS",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R055.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-13"
    },
    {
      "date": "2027-01-12",
      "task": "K01B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K01B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-01-14"
    },
    {
      "date": "2027-01-12",
      "task": "MK02A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-13"
    },
    {
      "date": "2027-01-13",
      "task": "R055",
      "role": "OPS",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R055.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-13",
      "task": "MK02A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-14",
      "task": "K01B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K01B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-01-16"
    },
    {
      "date": "2027-01-14",
      "task": "R056",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R056.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R056.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-01-16"
    },
    {
      "date": "2027-01-14",
      "task": "R062",
      "role": "DATA",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R062.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-16"
    },
    {
      "date": "2027-01-14",
      "task": "MK02B",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-15"
    },
    {
      "date": "2027-01-15",
      "task": "R059",
      "role": "OPS",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R059.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-16"
    },
    {
      "date": "2027-01-15",
      "task": "MK02B",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-16",
      "task": "K01B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K01B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-16",
      "task": "R056",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R056.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-16",
      "task": "R059",
      "role": "OPS",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R059.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-18"
    },
    {
      "date": "2027-01-16",
      "task": "R062",
      "role": "DATA",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R062.01",
          "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ờ.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-18",
      "task": "K01C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K01C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K01C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-18",
      "task": "R059",
      "role": "OPS",
      "units": 120,
      "task_before": 480,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R059.05",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-19",
      "task": "K01D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K01D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-19",
      "task": "A18",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A18.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-20",
      "task": "R031",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R031.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-21"
    },
    {
      "date": "2027-01-20",
      "task": "R033",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R033.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-21"
    },
    {
      "date": "2027-01-20",
      "task": "R063",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R063.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-22"
    },
    {
      "date": "2027-01-21",
      "task": "R031",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R031.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R031.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-22"
    },
    {
      "date": "2027-01-21",
      "task": "R033",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R033.02",
          "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ứ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-22"
    },
    {
      "date": "2027-01-21",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-16"
    },
    {
      "date": "2027-01-22",
      "task": "R031",
      "role": "NCS2",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R031.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-22",
      "task": "R033",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R033.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-22",
      "task": "R063",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R063.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-23"
    },
    {
      "date": "2027-01-23",
      "task": "R034",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R034.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-26"
    },
    {
      "date": "2027-01-23",
      "task": "R063",
      "role": "OPS",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R063.03",
          "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ý.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-25"
    },
    {
      "date": "2027-01-23",
      "task": "C01",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C01.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-25"
    },
    {
      "date": "2027-01-23",
      "task": "R121",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "R121.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-25",
      "task": "R063",
      "role": "OPS",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R063.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-25",
      "task": "C01",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C01.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C01.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-26"
    },
    {
      "date": "2027-01-26",
      "task": "R034",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R034.01",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-28"
    },
    {
      "date": "2027-01-26",
      "task": "C01",
      "role": "NCS2",
      "units": 90,
      "task_before": 180,
      "task_after": 270,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C01.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C01.03",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-27"
    },
    {
      "date": "2027-01-27",
      "task": "C01",
      "role": "NCS2",
      "units": 90,
      "task_before": 270,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C01.03",
          "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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-28"
    },
    {
      "date": "2027-01-28",
      "task": "R034",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R034.02",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-30"
    },
    {
      "date": "2027-01-28",
      "task": "C01",
      "role": "NCS2",
      "units": 90,
      "task_before": 360,
      "task_after": 450,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C01.04",
          "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ả.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-01-29"
    },
    {
      "date": "2027-01-29",
      "task": "C01",
      "role": "NCS2",
      "units": 30,
      "task_before": 450,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C01.04",
          "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ả.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-29",
      "task": "R122",
      "role": "GVHD",
      "units": 30,
      "task_before": 0,
      "task_after": 30,
      "task_total": 30,
      "segments": [
        {
          "step_id": "R122.01",
          "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",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-30",
      "task": "R034",
      "role": "CVYK",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R034.02",
          "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ờ.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-01-30",
      "task": "C-SRC01",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-15"
    },
    {
      "date": "2027-02-15",
      "task": "A07",
      "role": "AI",
      "units": 2,
      "task_before": 0,
      "task_after": 2,
      "task_total": 2,
      "segments": [
        {
          "step_id": "A07.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        },
        {
          "step_id": "A07.02",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-02-15",
      "task": "C-SRC01",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-02-16",
      "task": "R035",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R035.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-17"
    },
    {
      "date": "2027-02-16",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.01",
          "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õ.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-18"
    },
    {
      "date": "2027-02-16",
      "task": "C-SRC02",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 240,
      "segments": [
        {
          "step_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ả.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-17"
    },
    {
      "date": "2027-02-17",
      "task": "R035",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R035.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-18"
    },
    {
      "date": "2027-02-17",
      "task": "C-SRC02",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_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ả.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-18"
    },
    {
      "date": "2027-02-18",
      "task": "R035",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R035.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-19"
    },
    {
      "date": "2027-02-18",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-02"
    },
    {
      "date": "2027-02-18",
      "task": "C-SRC02",
      "role": "NCS2",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-02-19",
      "task": "R035",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R035.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-02-20",
      "task": "R036",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R036.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-23"
    },
    {
      "date": "2027-02-23",
      "task": "R036",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R036.01",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-25"
    },
    {
      "date": "2027-02-23",
      "task": "C02",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C02.01",
          "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",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-02-24",
      "task": "C-SRC03",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-25"
    },
    {
      "date": "2027-02-25",
      "task": "R036",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R036.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-27"
    },
    {
      "date": "2027-02-25",
      "task": "C-SRC03",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-02-26"
    },
    {
      "date": "2027-02-26",
      "task": "C-SRC03",
      "role": "NCS2",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-02-27",
      "task": "R036",
      "role": "CVYK",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R036.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-02-27",
      "task": "C-SRC04",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-01",
      "task": "R037",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R037.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-02"
    },
    {
      "date": "2027-03-02",
      "task": "R037",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R037.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-02",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-04"
    },
    {
      "date": "2027-03-04",
      "task": "R038",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R038.01",
          "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ứ.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R038.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-03-06"
    },
    {
      "date": "2027-03-04",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.03",
          "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ả.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-06"
    },
    {
      "date": "2027-03-06",
      "task": "R038",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R038.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-06",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.03",
          "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ả.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-09"
    },
    {
      "date": "2027-03-08",
      "task": "R040",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 960,
      "segments": [
        {
          "step_id": "R040.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-09"
    },
    {
      "date": "2027-03-09",
      "task": "R040",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 960,
      "segments": [
        {
          "step_id": "R040.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-10"
    },
    {
      "date": "2027-03-09",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.04",
          "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ả.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-11"
    },
    {
      "date": "2027-03-10",
      "task": "R040",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 960,
      "segments": [
        {
          "step_id": "R040.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-11"
    },
    {
      "date": "2027-03-11",
      "task": "R040",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 960,
      "segments": [
        {
          "step_id": "R040.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-12"
    },
    {
      "date": "2027-03-11",
      "task": "R050",
      "role": "CVYK",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R050.04",
          "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ả.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-12",
      "task": "R040",
      "role": "NCS1",
      "units": 120,
      "task_before": 480,
      "task_after": 600,
      "task_total": 960,
      "segments": [
        {
          "step_id": "R040.05",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-13"
    },
    {
      "date": "2027-03-13",
      "task": "R040",
      "role": "NCS1",
      "units": 240,
      "task_before": 600,
      "task_after": 840,
      "task_total": 960,
      "segments": [
        {
          "step_id": "R040.06",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R040.07",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-15"
    },
    {
      "date": "2027-03-13",
      "task": "C03",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C03.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 90
        }
      ],
      "next_date": "2027-03-16"
    },
    {
      "date": "2027-03-15",
      "task": "R040",
      "role": "NCS1",
      "units": 120,
      "task_before": 840,
      "task_after": 960,
      "task_total": 960,
      "segments": [
        {
          "step_id": "R040.08",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-16",
      "task": "R041",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R041.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-17"
    },
    {
      "date": "2027-03-16",
      "task": "A06",
      "role": "AI",
      "units": 2,
      "task_before": 0,
      "task_after": 2,
      "task_total": 2,
      "segments": [
        {
          "step_id": "A06.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        },
        {
          "step_id": "A06.02",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-16",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R051.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-18"
    },
    {
      "date": "2027-03-16",
      "task": "C03",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C03.01",
          "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ờ.",
          "units": 30,
          "step_before": 60,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "C03.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-03-18"
    },
    {
      "date": "2027-03-17",
      "task": "R041",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R041.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-18",
      "task": "R042",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R042.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-20"
    },
    {
      "date": "2027-03-18",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R051.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-23"
    },
    {
      "date": "2027-03-18",
      "task": "C03",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C03.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-19",
      "task": "C-SRC05",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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 đó.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-20"
    },
    {
      "date": "2027-03-20",
      "task": "R042",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R042.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-23"
    },
    {
      "date": "2027-03-20",
      "task": "MK02C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-20",
      "task": "C-SRC05",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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 đó.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-22",
      "task": "C04",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C04.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-23"
    },
    {
      "date": "2027-03-22",
      "task": "MK02D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-23",
      "task": "R042",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R042.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-23",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R051.03",
          "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ứ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-25"
    },
    {
      "date": "2027-03-23",
      "task": "C04",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C04.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C04.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-24"
    },
    {
      "date": "2027-03-23",
      "task": "K02A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K02A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K02A.02",
          "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.",
          "units": 75,
          "step_before": 0,
          "step_after": 75,
          "step_total": 90
        }
      ],
      "next_date": "2027-04-02"
    },
    {
      "date": "2027-03-24",
      "task": "R044",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R044.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-25"
    },
    {
      "date": "2027-03-24",
      "task": "C04",
      "role": "NCS2",
      "units": 90,
      "task_before": 180,
      "task_after": 270,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C04.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C04.03",
          "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ủ.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-25"
    },
    {
      "date": "2027-03-25",
      "task": "R044",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R044.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-26"
    },
    {
      "date": "2027-03-25",
      "task": "R051",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R051.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-25",
      "task": "C04",
      "role": "NCS2",
      "units": 90,
      "task_before": 270,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C04.03",
          "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ủ.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-26"
    },
    {
      "date": "2027-03-26",
      "task": "R044",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R044.03",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-27"
    },
    {
      "date": "2027-03-26",
      "task": "R052",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R052.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-27"
    },
    {
      "date": "2027-03-26",
      "task": "C04",
      "role": "NCS2",
      "units": 90,
      "task_before": 360,
      "task_after": 450,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C04.04",
          "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ố.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-27"
    },
    {
      "date": "2027-03-27",
      "task": "R044",
      "role": "NCS1",
      "units": 240,
      "task_before": 360,
      "task_after": 600,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R044.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R044.05",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-29"
    },
    {
      "date": "2027-03-27",
      "task": "R052",
      "role": "GVHD",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R052.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-27",
      "task": "C04",
      "role": "NCS2",
      "units": 30,
      "task_before": 450,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C04.04",
          "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ố.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-29",
      "task": "R044",
      "role": "NCS1",
      "units": 120,
      "task_before": 600,
      "task_after": 720,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R044.06",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-03-30",
      "task": "R045",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R045.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-31"
    },
    {
      "date": "2027-03-30",
      "task": "R053",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R053.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-03-31"
    },
    {
      "date": "2027-03-31",
      "task": "R045",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R045.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R045.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-01"
    },
    {
      "date": "2027-03-31",
      "task": "R053",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R053.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-01",
      "task": "R045",
      "role": "NCS2",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R045.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-01",
      "task": "C05",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C05.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "C05.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-04-02"
    },
    {
      "date": "2027-04-02",
      "task": "C05",
      "role": "NCS1",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C05.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-02",
      "task": "K02A",
      "role": "NCS1",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K02A.02",
          "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.",
          "units": 15,
          "step_before": 75,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K02A.03",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 60
        }
      ],
      "next_date": "2027-04-03"
    },
    {
      "date": "2027-04-03",
      "task": "R046",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R046.01",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-06"
    },
    {
      "date": "2027-04-03",
      "task": "C06",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C06.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 90
        }
      ],
      "next_date": "2027-04-06"
    },
    {
      "date": "2027-04-03",
      "task": "K02A",
      "role": "NCS1",
      "units": 180,
      "task_before": 180,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K02A.03",
          "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.",
          "units": 15,
          "step_before": 45,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K02A.04",
          "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ờ.",
          "units": 75,
          "step_before": 0,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K02A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K02A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-03",
      "task": "MK03A",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-05"
    },
    {
      "date": "2027-04-05",
      "task": "MK03A",
      "role": "NCS1",
      "units": 120,
      "task_before": 60,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-06"
    },
    {
      "date": "2027-04-06",
      "task": "R046",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R046.02",
          "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ể.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-06",
      "task": "C06",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C06.01",
          "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.",
          "units": 30,
          "step_before": 60,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "C06.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-04-08"
    },
    {
      "date": "2027-04-06",
      "task": "MK03A",
      "role": "NCS1",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-07",
      "task": "R047",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R047.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-08"
    },
    {
      "date": "2027-04-07",
      "task": "MK03B",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-08"
    },
    {
      "date": "2027-04-08",
      "task": "R047",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R047.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-08",
      "task": "C06",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C06.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-08",
      "task": "MK03B",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-09",
      "task": "A19",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A19.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-10",
      "task": "R069",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 300,
      "segments": [
        {
          "step_id": "R069.01",
          "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ó.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R069.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R069.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-12"
    },
    {
      "date": "2027-04-10",
      "task": "C07",
      "role": "MEASURE",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C07.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-14"
    },
    {
      "date": "2027-04-10",
      "task": "K02B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K02B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-04-17"
    },
    {
      "date": "2027-04-12",
      "task": "R069",
      "role": "NCS1",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 300,
      "segments": [
        {
          "step_id": "R069.03",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-13",
      "task": "R070",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R070.01",
          "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ị",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-15"
    },
    {
      "date": "2027-04-14",
      "task": "C07",
      "role": "MEASURE",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C07.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-15",
      "task": "R070",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R070.01",
          "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ị",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-16",
      "task": "R071",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R071.01",
          "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",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-17",
      "task": "R091",
      "role": "NCS1",
      "units": 180,
      "task_before": 0,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R091.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R091.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-17",
      "task": "GCA",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "GCA.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-17",
      "task": "K02B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K02B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-04-20"
    },
    {
      "date": "2027-04-19",
      "task": "A08",
      "role": "AI",
      "units": 2,
      "task_before": 0,
      "task_after": 2,
      "task_total": 3,
      "segments": [
        {
          "step_id": "A08.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        },
        {
          "step_id": "A08.02",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": "2027-04-20"
    },
    {
      "date": "2027-04-20",
      "task": "A08",
      "role": "AI",
      "units": 1,
      "task_before": 2,
      "task_after": 3,
      "task_total": 3,
      "segments": [
        {
          "step_id": "A08.03",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-20",
      "task": "K02B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K02B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-21",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-22"
    },
    {
      "date": "2027-04-21",
      "task": "K02C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K02C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K02C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-22",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C08.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-23"
    },
    {
      "date": "2027-04-22",
      "task": "K02D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K02D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-23",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 180,
      "task_after": 270,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C08.03",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-24"
    },
    {
      "date": "2027-04-24",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 270,
      "task_after": 360,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.03",
          "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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-26"
    },
    {
      "date": "2027-04-24",
      "task": "MK03C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-26",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 360,
      "task_after": 450,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.04",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-27"
    },
    {
      "date": "2027-04-26",
      "task": "MK03D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-04-27",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 450,
      "task_after": 540,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.04",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C08.05",
          "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ệ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-28"
    },
    {
      "date": "2027-04-27",
      "task": "K03A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K03A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K03A.02",
          "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.",
          "units": 75,
          "step_before": 0,
          "step_after": 75,
          "step_total": 90
        }
      ],
      "next_date": "2027-04-28"
    },
    {
      "date": "2027-04-28",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 540,
      "task_after": 630,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.05",
          "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ệ.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C08.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2027-04-29"
    },
    {
      "date": "2027-04-28",
      "task": "K03A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K03A.02",
          "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.",
          "units": 15,
          "step_before": 75,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K03A.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K03A.04",
          "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ờ.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 75
        }
      ],
      "next_date": "2027-04-29"
    },
    {
      "date": "2027-04-29",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 630,
      "task_after": 720,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.06",
          "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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-03"
    },
    {
      "date": "2027-04-29",
      "task": "K03A",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K03A.04",
          "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ờ.",
          "units": 30,
          "step_before": 45,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K03A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K03A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-03",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 720,
      "task_after": 810,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.07",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-04"
    },
    {
      "date": "2027-05-03",
      "task": "MK04A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-04"
    },
    {
      "date": "2027-05-04",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 810,
      "task_after": 900,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.07",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C08.08",
          "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ố.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-05"
    },
    {
      "date": "2027-05-04",
      "task": "K03B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K03B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-05-06"
    },
    {
      "date": "2027-05-04",
      "task": "MK04A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-05",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 900,
      "task_after": 990,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.08",
          "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ố.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C08.09",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-06"
    },
    {
      "date": "2027-05-06",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 990,
      "task_after": 1080,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.09",
          "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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-07"
    },
    {
      "date": "2027-05-06",
      "task": "K03B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K03B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-05-08"
    },
    {
      "date": "2027-05-07",
      "task": "C08",
      "role": "NCS2",
      "units": 90,
      "task_before": 1080,
      "task_after": 1170,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.10",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-08"
    },
    {
      "date": "2027-05-08",
      "task": "C08",
      "role": "NCS2",
      "units": 30,
      "task_before": 1170,
      "task_after": 1200,
      "task_total": 1200,
      "segments": [
        {
          "step_id": "C08.10",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-08",
      "task": "K03B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K03B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-08",
      "task": "MK04B",
      "role": "NCS2",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-10"
    },
    {
      "date": "2027-05-10",
      "task": "K03C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K03C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K03C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-10",
      "task": "MK04B",
      "role": "NCS2",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-11",
      "task": "C09",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C09.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-13"
    },
    {
      "date": "2027-05-11",
      "task": "K03D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K03D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-13",
      "task": "C09",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C09.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-13",
      "task": "MK04C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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ả.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-14",
      "task": "C10",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C10.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-15"
    },
    {
      "date": "2027-05-14",
      "task": "MK04D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-15",
      "task": "C10",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C10.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C10.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-17"
    },
    {
      "date": "2027-05-15",
      "task": "K04A",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K04A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K04A.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K04A.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K04A.04",
          "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ờ.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 75
        }
      ],
      "next_date": "2027-05-17"
    },
    {
      "date": "2027-05-17",
      "task": "C10",
      "role": "NCS2",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C10.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-17",
      "task": "K04A",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K04A.04",
          "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ờ.",
          "units": 30,
          "step_before": 45,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K04A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K04A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-18",
      "task": "C11",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C11.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-19"
    },
    {
      "date": "2027-05-18",
      "task": "K04B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K04B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-05-20"
    },
    {
      "date": "2027-05-18",
      "task": "MK05A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-19"
    },
    {
      "date": "2027-05-19",
      "task": "C11",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C11.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C11.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-20"
    },
    {
      "date": "2027-05-19",
      "task": "MK05A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-20",
      "task": "C11",
      "role": "NCS2",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C11.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-20",
      "task": "K04B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K04B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-05-22"
    },
    {
      "date": "2027-05-20",
      "task": "MK05B",
      "role": "NCS2",
      "units": 30,
      "task_before": 0,
      "task_after": 30,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-21"
    },
    {
      "date": "2027-05-21",
      "task": "C26",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 90,
      "segments": [
        {
          "step_id": "C26.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 90
        }
      ],
      "next_date": "2027-05-22"
    },
    {
      "date": "2027-05-21",
      "task": "MK05B",
      "role": "NCS2",
      "units": 90,
      "task_before": 30,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-22",
      "task": "C12",
      "role": "DATA",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C12.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-25"
    },
    {
      "date": "2027-05-22",
      "task": "K04B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K04B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-22",
      "task": "C26",
      "role": "GVHD",
      "units": 30,
      "task_before": 60,
      "task_after": 90,
      "task_total": 90,
      "segments": [
        {
          "step_id": "C26.01",
          "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",
          "units": 30,
          "step_before": 60,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-24",
      "task": "K04C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K04C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K04C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-25",
      "task": "C12",
      "role": "DATA",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C12.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-25",
      "task": "K04D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K04D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-05-27",
      "task": "C13",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C13.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-05-29"
    },
    {
      "date": "2027-05-29",
      "task": "C13",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C13.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-01",
      "task": "MK05C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-02",
      "task": "C24",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C24.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-06-05"
    },
    {
      "date": "2027-06-02",
      "task": "MK05D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-03",
      "task": "K05A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K05A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K05A.02",
          "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.",
          "units": 75,
          "step_before": 0,
          "step_after": 75,
          "step_total": 90
        }
      ],
      "next_date": "2027-06-04"
    },
    {
      "date": "2027-06-04",
      "task": "K05A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K05A.02",
          "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.",
          "units": 15,
          "step_before": 75,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K05A.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K05A.04",
          "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ờ.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 75
        }
      ],
      "next_date": "2027-06-05"
    },
    {
      "date": "2027-06-05",
      "task": "K05A",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K05A.04",
          "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ờ.",
          "units": 30,
          "step_before": 45,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K05A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K05A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-05",
      "task": "C24",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C24.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-05",
      "task": "MK06A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-06-07"
    },
    {
      "date": "2027-06-07",
      "task": "MK06A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-08",
      "task": "K05B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K05B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-06-10"
    },
    {
      "date": "2027-06-08",
      "task": "MK06B",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-06-09"
    },
    {
      "date": "2027-06-09",
      "task": "C25",
      "role": "MEASURE",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C25.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-06-12"
    },
    {
      "date": "2027-06-09",
      "task": "MK06B",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-10",
      "task": "K05B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K05B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-06-12"
    },
    {
      "date": "2027-06-12",
      "task": "K05B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K05B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-12",
      "task": "C25",
      "role": "MEASURE",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C25.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-14",
      "task": "K05C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K05C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K05C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-15",
      "task": "K05D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K05D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-17",
      "task": "MK06C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-18",
      "task": "MK06D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-19",
      "task": "K06A",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K06A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K06A.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K06A.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K06A.04",
          "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ờ.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 75
        }
      ],
      "next_date": "2027-06-21"
    },
    {
      "date": "2027-06-21",
      "task": "K06A",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K06A.04",
          "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ờ.",
          "units": 30,
          "step_before": 45,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K06A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K06A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-22",
      "task": "K06B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K06B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-06-24"
    },
    {
      "date": "2027-06-22",
      "task": "MK07A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-06-23"
    },
    {
      "date": "2027-06-23",
      "task": "MK07A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-24",
      "task": "K06B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K06B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-06-26"
    },
    {
      "date": "2027-06-24",
      "task": "MK07B",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-06-25"
    },
    {
      "date": "2027-06-25",
      "task": "MK07B",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-26",
      "task": "K06B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K06B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-28",
      "task": "K06C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K06C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K06C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-06-29",
      "task": "K06D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K06D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-01",
      "task": "MK07C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-02",
      "task": "MK07D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-03",
      "task": "K07A",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K07A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K07A.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K07A.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K07A.04",
          "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ờ.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 75
        }
      ],
      "next_date": "2027-07-05"
    },
    {
      "date": "2027-07-05",
      "task": "K07A",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K07A.04",
          "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ờ.",
          "units": 30,
          "step_before": 45,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K07A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K07A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-06",
      "task": "K07B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K07B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-07-08"
    },
    {
      "date": "2027-07-06",
      "task": "MK08A",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-07-07"
    },
    {
      "date": "2027-07-07",
      "task": "MK08A",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-08",
      "task": "K07B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K07B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-07-10"
    },
    {
      "date": "2027-07-08",
      "task": "MK08B",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-07-09"
    },
    {
      "date": "2027-07-09",
      "task": "MK08B",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-10",
      "task": "K07B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K07B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-12",
      "task": "K07C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K07C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K07C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-13",
      "task": "K07D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K07D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-15",
      "task": "MK08C",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-16",
      "task": "MK08D",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-17",
      "task": "K08A",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K08A.01",
          "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.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 45
        },
        {
          "step_id": "K08A.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "K08A.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K08A.04",
          "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ờ.",
          "units": 45,
          "step_before": 0,
          "step_after": 45,
          "step_total": 75
        }
      ],
      "next_date": "2027-07-19"
    },
    {
      "date": "2027-07-19",
      "task": "K08A",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "K08A.04",
          "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ờ.",
          "units": 30,
          "step_before": 45,
          "step_after": 75,
          "step_total": 75
        },
        {
          "step_id": "K08A.05",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K08A.06",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-20",
      "task": "K08B",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K08B.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-07-22"
    },
    {
      "date": "2027-07-20",
      "task": "SRC-12",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-07-21"
    },
    {
      "date": "2027-07-21",
      "task": "SRC-12",
      "role": "NCS1",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-22",
      "task": "K08B",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K08B.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-07-24"
    },
    {
      "date": "2027-07-22",
      "task": "SRC-M01",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-23",
      "task": "SRC-M02",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-07-24"
    },
    {
      "date": "2027-07-24",
      "task": "K08B",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "K08B.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-24",
      "task": "SRC-M02",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-26",
      "task": "K08C",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "K08C.01",
          "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õ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "K08C.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-27",
      "task": "K08D",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "K08D.01",
          "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ờ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-28",
      "task": "R032",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R032.01",
          "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",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-07-31",
      "task": "GA",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "GA.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-02",
      "task": "R043",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R043.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-03"
    },
    {
      "date": "2027-08-03",
      "task": "R043",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R043.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-04"
    },
    {
      "date": "2027-08-04",
      "task": "R043",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R043.03",
          "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ệ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-05"
    },
    {
      "date": "2027-08-05",
      "task": "R043",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R043.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-06",
      "task": "R057",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R057.01",
          "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ể.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-07"
    },
    {
      "date": "2027-08-07",
      "task": "R057",
      "role": "NCS1",
      "units": 240,
      "task_before": 120,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R057.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R057.03",
          "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ê.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-09",
      "task": "R076",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R076.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-10"
    },
    {
      "date": "2027-08-10",
      "task": "R058",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R058.01",
          "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õ.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R058.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-08-12"
    },
    {
      "date": "2027-08-10",
      "task": "R076",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R076.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-11"
    },
    {
      "date": "2027-08-11",
      "task": "R076",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R076.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-12"
    },
    {
      "date": "2027-08-12",
      "task": "R058",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R058.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-12",
      "task": "R076",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R076.04",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-13",
      "task": "R059B",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-14"
    },
    {
      "date": "2027-08-14",
      "task": "R059B",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-14",
      "task": "R077",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R077.01",
          "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ử.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-17"
    },
    {
      "date": "2027-08-16",
      "task": "R060",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R060.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-17"
    },
    {
      "date": "2027-08-17",
      "task": "R060",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R060.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-17",
      "task": "R077",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R077.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-18",
      "task": "R063B",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R063B.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-19",
      "task": "R061",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R061.01",
          "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ế.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R061.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-08-21"
    },
    {
      "date": "2027-08-19",
      "task": "R064",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R064.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-20"
    },
    {
      "date": "2027-08-20",
      "task": "R064",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R064.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-21",
      "task": "R061",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R061.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-21",
      "task": "R065",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R065.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-24"
    },
    {
      "date": "2027-08-24",
      "task": "R065",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 60,
      "task_after": 180,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R065.01",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R065.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-26"
    },
    {
      "date": "2027-08-26",
      "task": "R065",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R065.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-27",
      "task": "R066",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R066.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-28"
    },
    {
      "date": "2027-08-27",
      "task": "A20",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A20.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-27",
      "task": "R079",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R079.01",
          "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ệ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-30"
    },
    {
      "date": "2027-08-28",
      "task": "R066",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R066.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-30"
    },
    {
      "date": "2027-08-28",
      "task": "R072",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R072.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R072.02",
          "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õ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-28",
      "task": "SRC-M03",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_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 đủ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-31"
    },
    {
      "date": "2027-08-30",
      "task": "R066",
      "role": "OPS",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R066.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-30",
      "task": "R079",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R079.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-08-31"
    },
    {
      "date": "2027-08-31",
      "task": "R067",
      "role": "DATA",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R067.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-04"
    },
    {
      "date": "2027-08-31",
      "task": "R068",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "R068.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-08-31",
      "task": "R079",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R079.03",
          "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 đủ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-01"
    },
    {
      "date": "2027-08-31",
      "task": "SRC-M03",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-01",
      "task": "R073",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R073.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-03"
    },
    {
      "date": "2027-09-01",
      "task": "R079",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R079.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-01",
      "task": "R092",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R092.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-04"
    },
    {
      "date": "2027-09-03",
      "task": "R073",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R073.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-04"
    },
    {
      "date": "2027-09-04",
      "task": "R067",
      "role": "DATA",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R067.01",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-04",
      "task": "R073",
      "role": "OPS",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R073.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-04",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R080.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-09"
    },
    {
      "date": "2027-09-04",
      "task": "R092",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R092.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-06",
      "task": "R078",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R078.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-08"
    },
    {
      "date": "2027-09-07",
      "task": "R074",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R074.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R074.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-09-09"
    },
    {
      "date": "2027-09-08",
      "task": "R078",
      "role": "OPS",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R078.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-09",
      "task": "R074",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R074.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-09",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R080.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-11"
    },
    {
      "date": "2027-09-10",
      "task": "R093",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R093.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R093.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-09-11"
    },
    {
      "date": "2027-09-11",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 180,
      "task_after": 300,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R080.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R080.03",
          "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ế.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-14"
    },
    {
      "date": "2027-09-11",
      "task": "R093",
      "role": "OPS",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R093.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-14",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 300,
      "task_after": 420,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R080.03",
          "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ế.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R080.04",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-16"
    },
    {
      "date": "2027-09-16",
      "task": "R080",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R080.04",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-24",
      "task": "GB",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "GB.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-09-28",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R081.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-09-30"
    },
    {
      "date": "2027-09-30",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R081.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-10-05"
    },
    {
      "date": "2027-10-05",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R081.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-10-07"
    },
    {
      "date": "2027-10-07",
      "task": "R081",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R081.04",
          "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ố.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-10-09",
      "task": "R082",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R082.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 90
        }
      ],
      "next_date": "2027-10-12"
    },
    {
      "date": "2027-10-12",
      "task": "R082",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R082.01",
          "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.",
          "units": 30,
          "step_before": 60,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R082.02",
          "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ờ.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-10-14"
    },
    {
      "date": "2027-10-14",
      "task": "R082",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R082.02",
          "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ờ.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-10-15",
      "task": "R083",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R083.01",
          "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á.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-10-16"
    },
    {
      "date": "2027-10-16",
      "task": "R083",
      "role": "NCS1",
      "units": 240,
      "task_before": 120,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R083.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R083.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-10-18"
    },
    {
      "date": "2027-10-18",
      "task": "R083",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R083.04",
          "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ế.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-10-19",
      "task": "R084",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R084.01",
          "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ở.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-10-21"
    },
    {
      "date": "2027-10-19",
      "task": "R124",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R124.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-10-21"
    },
    {
      "date": "2027-10-21",
      "task": "R084",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R084.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-10-21",
      "task": "R124",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R124.02",
          "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ờ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-10-26",
      "task": "R125",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R125.01",
          "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ả.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2027-10-28"
    },
    {
      "date": "2027-10-28",
      "task": "R125",
      "role": "REVIEW_YK",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R125.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-10-30",
      "task": "R085",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R085.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-11-02"
    },
    {
      "date": "2027-11-02",
      "task": "R085",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R085.01",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-11-05",
      "task": "GB-R",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "GB-R.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-11-17",
      "task": "GC",
      "role": "AUTH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "GC.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "GC.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-11-24"
    },
    {
      "date": "2027-11-24",
      "task": "GC",
      "role": "AUTH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "GC.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-11-24",
      "task": "GC-C",
      "role": "AUTH",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "GC-C.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-12-01"
    },
    {
      "date": "2027-11-25",
      "task": "R094",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R094.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R094.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2027-11-26"
    },
    {
      "date": "2027-11-26",
      "task": "R094",
      "role": "NCS1",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R094.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-11-27",
      "task": "R095",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R095.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-12-01"
    },
    {
      "date": "2027-12-01",
      "task": "R095",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R095.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-12-01",
      "task": "GC-C",
      "role": "AUTH",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "GC-C.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-12-02",
      "task": "C14",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C14.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2027-12-03"
    },
    {
      "date": "2027-12-03",
      "task": "C14",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C14.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C14.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2027-12-04"
    },
    {
      "date": "2027-12-04",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.01",
          "title": "Phiên dự toán 1/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-08"
    },
    {
      "date": "2027-12-04",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.01",
          "title": "Phiên dự toán 1/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-08"
    },
    {
      "date": "2027-12-04",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.01",
          "title": "Phiên dự toán 1/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-08"
    },
    {
      "date": "2027-12-04",
      "task": "C14",
      "role": "NCS2",
      "units": 90,
      "task_before": 180,
      "task_after": 270,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C14.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C14.03",
          "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á.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2027-12-06"
    },
    {
      "date": "2027-12-06",
      "task": "C14",
      "role": "NCS2",
      "units": 90,
      "task_before": 270,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C14.03",
          "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á.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2027-12-08",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.02",
          "title": "Phiên dự toán 2/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-11"
    },
    {
      "date": "2027-12-08",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.02",
          "title": "Phiên dự toán 2/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-11"
    },
    {
      "date": "2027-12-08",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.02",
          "title": "Phiên dự toán 2/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-11"
    },
    {
      "date": "2027-12-11",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.03",
          "title": "Phiên dự toán 3/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-15"
    },
    {
      "date": "2027-12-11",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.03",
          "title": "Phiên dự toán 3/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-15"
    },
    {
      "date": "2027-12-11",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.03",
          "title": "Phiên dự toán 3/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-15"
    },
    {
      "date": "2027-12-15",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.04",
          "title": "Phiên dự toán 4/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-18"
    },
    {
      "date": "2027-12-15",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.04",
          "title": "Phiên dự toán 4/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-18"
    },
    {
      "date": "2027-12-15",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.04",
          "title": "Phiên dự toán 4/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-18"
    },
    {
      "date": "2027-12-18",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.05",
          "title": "Phiên dự toán 5/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-22"
    },
    {
      "date": "2027-12-18",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.05",
          "title": "Phiên dự toán 5/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-22"
    },
    {
      "date": "2027-12-18",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.05",
          "title": "Phiên dự toán 5/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-22"
    },
    {
      "date": "2027-12-22",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.06",
          "title": "Phiên dự toán 6/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-25"
    },
    {
      "date": "2027-12-22",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.06",
          "title": "Phiên dự toán 6/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-25"
    },
    {
      "date": "2027-12-22",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.06",
          "title": "Phiên dự toán 6/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-25"
    },
    {
      "date": "2027-12-25",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.07",
          "title": "Phiên dự toán 7/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-29"
    },
    {
      "date": "2027-12-25",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.07",
          "title": "Phiên dự toán 7/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-29"
    },
    {
      "date": "2027-12-25",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.07",
          "title": "Phiên dự toán 7/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2027-12-29"
    },
    {
      "date": "2027-12-29",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.08",
          "title": "Phiên dự toán 8/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-05"
    },
    {
      "date": "2027-12-29",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.08",
          "title": "Phiên dự toán 8/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-05"
    },
    {
      "date": "2027-12-29",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.08",
          "title": "Phiên dự toán 8/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-05"
    },
    {
      "date": "2028-01-05",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 480,
      "task_after": 540,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.09",
          "title": "Phiên dự toán 9/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-08"
    },
    {
      "date": "2028-01-05",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 480,
      "task_after": 540,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.09",
          "title": "Phiên dự toán 9/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-08"
    },
    {
      "date": "2028-01-05",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 480,
      "task_after": 540,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.09",
          "title": "Phiên dự toán 9/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-08"
    },
    {
      "date": "2028-01-08",
      "task": "PILOT-CORE",
      "role": "NCS1",
      "units": 60,
      "task_before": 540,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.10",
          "title": "Phiên dự toán 10/10: thử tác vụ chữ",
          "instructions": "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ố.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-08",
      "task": "PILOT-CORE",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 540,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.10",
          "title": "Phiên dự toán 10/10: thử tác vụ chữ",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-08",
      "task": "PILOT-CORE",
      "role": "PART_CORE",
      "units": 60,
      "task_before": 540,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CORE.10",
          "title": "Phiên dự toán 10/10: thử tác vụ chữ",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-10",
      "task": "R096",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R096.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R096.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-11"
    },
    {
      "date": "2028-01-11",
      "task": "R096",
      "role": "NCS1",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R096.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-11",
      "task": "R098",
      "role": "DATA",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R098.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-13"
    },
    {
      "date": "2028-01-12",
      "task": "R097",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R097.01",
          "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",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.01",
          "title": "Phiên dự toán 1/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-15"
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.01",
          "title": "Phiên dự toán 1/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-15"
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.01",
          "title": "Phiên dự toán 1/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-15"
    },
    {
      "date": "2028-01-12",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.01",
          "title": "Phiên dự toán 1/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-15"
    },
    {
      "date": "2028-01-13",
      "task": "R098",
      "role": "DATA",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R098.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-14",
      "task": "R099",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R099.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-15"
    },
    {
      "date": "2028-01-15",
      "task": "R099",
      "role": "NCS1",
      "units": 240,
      "task_before": 120,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R099.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R099.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-17"
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.02",
          "title": "Phiên dự toán 2/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-19"
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.02",
          "title": "Phiên dự toán 2/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-19"
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.02",
          "title": "Phiên dự toán 2/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-19"
    },
    {
      "date": "2028-01-15",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.02",
          "title": "Phiên dự toán 2/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-19"
    },
    {
      "date": "2028-01-17",
      "task": "R099",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R099.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-18"
    },
    {
      "date": "2028-01-18",
      "task": "R099",
      "role": "NCS1",
      "units": 120,
      "task_before": 480,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "R099.05",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.03",
          "title": "Phiên dự toán 3/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-22"
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.03",
          "title": "Phiên dự toán 3/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-22"
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.03",
          "title": "Phiên dự toán 3/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-22"
    },
    {
      "date": "2028-01-19",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.03",
          "title": "Phiên dự toán 3/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-22"
    },
    {
      "date": "2028-01-21",
      "task": "R100",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R100.01",
          "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ý.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-22"
    },
    {
      "date": "2028-01-22",
      "task": "R100",
      "role": "GVHD",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R100.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.04",
          "title": "Phiên dự toán 4/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-26"
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.04",
          "title": "Phiên dự toán 4/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-26"
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.04",
          "title": "Phiên dự toán 4/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-26"
    },
    {
      "date": "2028-01-22",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 180,
      "task_after": 240,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.04",
          "title": "Phiên dự toán 4/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-26"
    },
    {
      "date": "2028-01-24",
      "task": "R101",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R101.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-25"
    },
    {
      "date": "2028-01-25",
      "task": "R101",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R101.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-26"
    },
    {
      "date": "2028-01-26",
      "task": "R101",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "R101.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.05",
          "title": "Phiên dự toán 5/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-29"
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.05",
          "title": "Phiên dự toán 5/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-29"
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.05",
          "title": "Phiên dự toán 5/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-29"
    },
    {
      "date": "2028-01-26",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 240,
      "task_after": 300,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.05",
          "title": "Phiên dự toán 5/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-01-29"
    },
    {
      "date": "2028-01-27",
      "task": "R123",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R123.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-29"
    },
    {
      "date": "2028-01-27",
      "task": "CORE-DOC",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 360,
      "segments": [
        {
          "step_id": "CORE-DOC.01",
          "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ữ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-28"
    },
    {
      "date": "2028-01-28",
      "task": "CORE-DOC",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 360,
      "segments": [
        {
          "step_id": "CORE-DOC.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-01-29"
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.06",
          "title": "Phiên dự toán 6/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-16"
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.06",
          "title": "Phiên dự toán 6/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-16"
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.06",
          "title": "Phiên dự toán 6/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-16"
    },
    {
      "date": "2028-01-29",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 300,
      "task_after": 360,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.06",
          "title": "Phiên dự toán 6/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-16"
    },
    {
      "date": "2028-01-29",
      "task": "R123",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R123.01",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-01-29",
      "task": "CORE-DOC",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "CORE-DOC.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-15",
      "task": "R102",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R102.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "R102.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2028-02-17"
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.07",
          "title": "Phiên dự toán 7/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-19"
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.07",
          "title": "Phiên dự toán 7/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-19"
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.07",
          "title": "Phiên dự toán 7/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-19"
    },
    {
      "date": "2028-02-16",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 360,
      "task_after": 420,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.07",
          "title": "Phiên dự toán 7/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-19"
    },
    {
      "date": "2028-02-17",
      "task": "R102",
      "role": "REVIEW_TECH",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R102.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-18",
      "task": "R103",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R103.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R103.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-18",
      "task": "CORE-REV",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "CORE-REV.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.08",
          "title": "Phiên dự toán 8/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-23"
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.08",
          "title": "Phiên dự toán 8/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-23"
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.08",
          "title": "Phiên dự toán 8/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-23"
    },
    {
      "date": "2028-02-19",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 420,
      "task_after": 480,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.08",
          "title": "Phiên dự toán 8/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-23"
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 480,
      "task_after": 540,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.09",
          "title": "Phiên dự toán 9/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-26"
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 480,
      "task_after": 540,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.09",
          "title": "Phiên dự toán 9/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-26"
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 480,
      "task_after": 540,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.09",
          "title": "Phiên dự toán 9/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-26"
    },
    {
      "date": "2028-02-23",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 480,
      "task_after": 540,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.09",
          "title": "Phiên dự toán 9/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-02-26"
    },
    {
      "date": "2028-02-25",
      "task": "GD-CORE",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "GD-CORE.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "NCS2",
      "units": 60,
      "task_before": 540,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.10",
          "title": "Phiên dự toán 10/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "MEASURE",
      "units": 60,
      "task_before": 540,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.10",
          "title": "Phiên dự toán 10/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 540,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.10",
          "title": "Phiên dự toán 10/10: đo camera và đối chiếu",
          "instructions": "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.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-26",
      "task": "PILOT-CAM",
      "role": "PART_CAM",
      "units": 60,
      "task_before": 540,
      "task_after": 600,
      "task_total": 600,
      "segments": [
        {
          "step_id": "PILOT-CAM.10",
          "title": "Phiên dự toán 10/10: đo camera và đối chiếu",
          "instructions": "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ơ.",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-26",
      "task": "R104",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R104.01",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        },
        {
          "step_id": "R104.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R104.03",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-28",
      "task": "C15",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C15.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2028-02-29"
    },
    {
      "date": "2028-02-28",
      "task": "R105",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R105.01",
          "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à đủ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R105.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-02-29",
      "task": "C15",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C15.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C15.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-01"
    },
    {
      "date": "2028-03-01",
      "task": "C15",
      "role": "NCS2",
      "units": 90,
      "task_before": 180,
      "task_after": 270,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C15.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C15.03",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-02"
    },
    {
      "date": "2028-03-02",
      "task": "C15",
      "role": "NCS2",
      "units": 90,
      "task_before": 270,
      "task_after": 360,
      "task_total": 360,
      "segments": [
        {
          "step_id": "C15.03",
          "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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-03",
      "task": "C16",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C16.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "C16.02",
          "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ả.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2028-03-04"
    },
    {
      "date": "2028-03-04",
      "task": "C16",
      "role": "NCS1",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C16.02",
          "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ả.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-07",
      "task": "C17",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C17.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 90
        }
      ],
      "next_date": "2028-03-09"
    },
    {
      "date": "2028-03-08",
      "task": "CORE-W1",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "CORE-W1.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-09",
      "task": "C17",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C17.01",
          "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.",
          "units": 30,
          "step_before": 60,
          "step_after": 90,
          "step_total": 90
        },
        {
          "step_id": "C17.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 90
        }
      ],
      "next_date": "2028-03-11"
    },
    {
      "date": "2028-03-11",
      "task": "C17",
      "role": "CVYK",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C17.02",
          "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.",
          "units": 60,
          "step_before": 30,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-17",
      "task": "GCB",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "GCB.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-18",
      "task": "A08I",
      "role": "AI",
      "units": 1,
      "task_before": 0,
      "task_after": 1,
      "task_total": 1,
      "segments": [
        {
          "step_id": "A08I.01",
          "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.",
          "units": 1,
          "step_before": 0,
          "step_after": 1,
          "step_total": 1
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-20",
      "task": "C18",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C18.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-21"
    },
    {
      "date": "2028-03-21",
      "task": "C18",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C18.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C18.02",
          "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ố.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-22"
    },
    {
      "date": "2028-03-22",
      "task": "C18",
      "role": "NCS2",
      "units": 90,
      "task_before": 180,
      "task_after": 270,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C18.02",
          "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ố.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C18.03",
          "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ố.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-23"
    },
    {
      "date": "2028-03-23",
      "task": "C18",
      "role": "NCS2",
      "units": 90,
      "task_before": 270,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C18.03",
          "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ố.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-24"
    },
    {
      "date": "2028-03-24",
      "task": "C18",
      "role": "NCS2",
      "units": 90,
      "task_before": 360,
      "task_after": 450,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C18.04",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-25"
    },
    {
      "date": "2028-03-25",
      "task": "C18",
      "role": "NCS2",
      "units": 30,
      "task_before": 450,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "C18.04",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-27",
      "task": "C19",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C19.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-03-28"
    },
    {
      "date": "2028-03-28",
      "task": "C19",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C19.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-03-30",
      "task": "C20",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C20.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-01"
    },
    {
      "date": "2028-03-31",
      "task": "CORE-M1",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "CORE-M1.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-01",
      "task": "C20",
      "role": "REVIEW_TECH",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C20.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-03",
      "task": "C21",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C21.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": "2028-04-04"
    },
    {
      "date": "2028-04-03",
      "task": "R106",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R106.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-04"
    },
    {
      "date": "2028-04-04",
      "task": "C21",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "C21.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-04",
      "task": "R106",
      "role": "NCS1",
      "units": 120,
      "task_before": 120,
      "task_after": 240,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R106.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-05"
    },
    {
      "date": "2028-04-04",
      "task": "C27",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C27.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-08"
    },
    {
      "date": "2028-04-05",
      "task": "R106",
      "role": "NCS1",
      "units": 120,
      "task_before": 240,
      "task_after": 360,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R106.03",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-06"
    },
    {
      "date": "2028-04-05",
      "task": "R107",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R107.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-06"
    },
    {
      "date": "2028-04-06",
      "task": "C22",
      "role": "CVYK",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "C22.01",
          "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ả",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-06",
      "task": "R106",
      "role": "NCS1",
      "units": 120,
      "task_before": 360,
      "task_after": 480,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R106.04",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-07"
    },
    {
      "date": "2028-04-06",
      "task": "R107",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R107.01",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R107.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-07"
    },
    {
      "date": "2028-04-07",
      "task": "R106",
      "role": "NCS1",
      "units": 120,
      "task_before": 480,
      "task_after": 600,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R106.05",
          "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ẻ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-08"
    },
    {
      "date": "2028-04-07",
      "task": "R107",
      "role": "NCS2",
      "units": 90,
      "task_before": 180,
      "task_after": 270,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R107.02",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R107.03",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-08"
    },
    {
      "date": "2028-04-08",
      "task": "C23",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C23.01",
          "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",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-12"
    },
    {
      "date": "2028-04-08",
      "task": "R106",
      "role": "NCS1",
      "units": 120,
      "task_before": 600,
      "task_after": 720,
      "task_total": 720,
      "segments": [
        {
          "step_id": "R106.06",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-08",
      "task": "R107",
      "role": "NCS2",
      "units": 90,
      "task_before": 270,
      "task_after": 360,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R107.03",
          "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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-10"
    },
    {
      "date": "2028-04-08",
      "task": "C27",
      "role": "CVYK",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C27.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-10",
      "task": "R107",
      "role": "NCS2",
      "units": 90,
      "task_before": 360,
      "task_after": 450,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R107.04",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-11"
    },
    {
      "date": "2028-04-11",
      "task": "R107",
      "role": "NCS2",
      "units": 30,
      "task_before": 450,
      "task_after": 480,
      "task_total": 480,
      "segments": [
        {
          "step_id": "R107.04",
          "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.",
          "units": 30,
          "step_before": 90,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-11",
      "task": "C28",
      "role": "NCS2",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C28.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-12"
    },
    {
      "date": "2028-04-12",
      "task": "C23",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "C23.01",
          "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",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-12",
      "task": "C28",
      "role": "NCS2",
      "units": 90,
      "task_before": 60,
      "task_after": 150,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C28.01",
          "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.",
          "units": 60,
          "step_before": 60,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "C28.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 120
        }
      ],
      "next_date": "2028-04-13"
    },
    {
      "date": "2028-04-13",
      "task": "C28",
      "role": "NCS2",
      "units": 90,
      "task_before": 150,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "C28.02",
          "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.",
          "units": 90,
          "step_before": 30,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-14",
      "task": "R108",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R108.01",
          "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í.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-04-15"
    },
    {
      "date": "2028-04-15",
      "task": "R108",
      "role": "GVHD",
      "units": 60,
      "task_before": 60,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R108.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-04-21"
    },
    {
      "date": "2028-04-21",
      "task": "R108",
      "role": "GVHD",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R108.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-22",
      "task": "R109",
      "role": "NCS1",
      "units": 240,
      "task_before": 0,
      "task_after": 240,
      "task_total": 240,
      "segments": [
        {
          "step_id": "R109.01",
          "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ờ.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        },
        {
          "step_id": "R109.02",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-22",
      "task": "R110",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R110.01",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": "2028-04-24"
    },
    {
      "date": "2028-04-22",
      "task": "GCB-R",
      "role": "GVHD",
      "units": 30,
      "task_before": 0,
      "task_after": 30,
      "task_total": 30,
      "segments": [
        {
          "step_id": "GCB-R.01",
          "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",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-24",
      "task": "R110",
      "role": "NCS2",
      "units": 90,
      "task_before": 90,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R110.02",
          "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.",
          "units": 90,
          "step_before": 0,
          "step_after": 90,
          "step_total": 90
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-25",
      "task": "R111",
      "role": "LEGAL",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R111.01",
          "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ố.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R111.02",
          "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ố.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-04-26",
      "task": "R112",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R112.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R112.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": "2028-04-28"
    },
    {
      "date": "2028-04-28",
      "task": "R112",
      "role": "OPS",
      "units": 60,
      "task_before": 120,
      "task_after": 180,
      "task_total": 180,
      "segments": [
        {
          "step_id": "R112.03",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-05-05",
      "task": "GD",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "GD.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-05-06",
      "task": "R113",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R113.01",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        },
        {
          "step_id": "R113.02",
          "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ợ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R113.03",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 30
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-05-08",
      "task": "R114",
      "role": "NCS1",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R114.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R114.02",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-05-09",
      "task": "R115",
      "role": "NCS2",
      "units": 90,
      "task_before": 0,
      "task_after": 90,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R115.01",
          "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ợ.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        },
        {
          "step_id": "R115.02",
          "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.",
          "units": 30,
          "step_before": 0,
          "step_after": 30,
          "step_total": 60
        }
      ],
      "next_date": "2028-05-10"
    },
    {
      "date": "2028-05-10",
      "task": "R115",
      "role": "NCS2",
      "units": 30,
      "task_before": 90,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R115.02",
          "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.",
          "units": 30,
          "step_before": 30,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-05-19",
      "task": "R116",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R116.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-05-20",
      "task": "R117",
      "role": "SUPPORT",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "R117.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-06-10",
      "task": "R118",
      "role": "OPS",
      "units": 120,
      "task_before": 0,
      "task_after": 120,
      "task_total": 120,
      "segments": [
        {
          "step_id": "R118.01",
          "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.",
          "units": 120,
          "step_before": 0,
          "step_after": 120,
          "step_total": 120
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-06-13",
      "task": "R119",
      "role": "DATA",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "R119.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    },
    {
      "date": "2028-06-16",
      "task": "R120",
      "role": "GVHD",
      "units": 60,
      "task_before": 0,
      "task_after": 60,
      "task_total": 60,
      "segments": [
        {
          "step_id": "R120.01",
          "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.",
          "units": 60,
          "step_before": 0,
          "step_after": 60,
          "step_total": 60
        }
      ],
      "next_date": null
    }
  ],
  "planned_finish": {
    "R001": "2026-09-29",
    "R002": "2026-09-29",
    "R006": "2026-10-01",
    "R007": "2026-10-01",
    "R003": "2026-10-03",
    "R008": "2026-10-03",
    "R010": "2026-10-03",
    "A09": "2026-10-05",
    "R004": "2026-10-06",
    "A01": "2026-10-07",
    "R009": "2026-10-07",
    "R005": "2026-10-08",
    "R011": "2026-10-08",
    "R012": "2026-10-09",
    "PREP": "2026-10-16",
    "R013": "2026-10-19",
    "R021": "2026-10-19",
    "R027": "2026-10-19",
    "R014": "2026-10-21",
    "R020": "2026-10-21",
    "R015": "2026-10-24",
    "R016": "2026-10-24",
    "R086": "2026-10-24",
    "SRC-01": "2026-10-26",
    "R017": "2026-10-27",
    "R087": "2026-10-27",
    "A03": "2026-10-28",
    "SRC-02": "2026-10-29",
    "R018": "2026-10-30",
    "SRC-03": "2026-10-31",
    "R019": "2026-11-03",
    "R088": "2026-11-03",
    "R089": "2026-11-05",
    "R023": "2026-11-06",
    "R048": "2026-11-07",
    "R049": "2026-11-10",
    "R090": "2026-11-10",
    "SRC-04": "2026-11-10",
    "SRC-06": "2026-11-14",
    "SRC-05": "2026-11-17",
    "R022": "2026-11-26",
    "Q03": "2026-12-08",
    "SRC-TOOLS1": "2026-12-09",
    "SRC-TOOLS2": "2026-12-12",
    "R024": "2026-12-15",
    "R075": "2026-12-17",
    "SRC-07": "2026-12-17",
    "R025": "2026-12-18",
    "A22": "2026-12-18",
    "SRC-08": "2026-12-19",
    "R026": "2026-12-22",
    "SRC-09": "2026-12-22",
    "A16": "2026-12-23",
    "SRC-10": "2026-12-23",
    "G0": "2026-12-25",
    "SRC-11": "2026-12-26",
    "R039": "2026-12-28",
    "R028": "2026-12-30",
    "A05": "2026-12-30",
    "MK01A": "2026-12-30",
    "R029": "2026-12-31",
    "R030": "2027-01-02",
    "MK01B": "2027-01-02",
    "A11": "2027-01-04",
    "MK01C": "2027-01-05",
    "R054": "2027-01-07",
    "MK01D": "2027-01-08",
    "K01A": "2027-01-11",
    "R055": "2027-01-13",
    "MK02A": "2027-01-13",
    "MK02B": "2027-01-15",
    "K01B": "2027-01-16",
    "R056": "2027-01-16",
    "R062": "2027-01-16",
    "K01C": "2027-01-18",
    "R059": "2027-01-18",
    "K01D": "2027-01-19",
    "A18": "2027-01-19",
    "R031": "2027-01-22",
    "R033": "2027-01-22",
    "R121": "2027-01-23",
    "R063": "2027-01-25",
    "C01": "2027-01-29",
    "R122": "2027-01-29",
    "R034": "2027-01-30",
    "A07": "2027-02-15",
    "C-SRC01": "2027-02-15",
    "C-SRC02": "2027-02-18",
    "R035": "2027-02-19",
    "C02": "2027-02-23",
    "C-SRC03": "2027-02-26",
    "R036": "2027-02-27",
    "C-SRC04": "2027-02-27",
    "R037": "2027-03-02",
    "R038": "2027-03-06",
    "R050": "2027-03-11",
    "R040": "2027-03-15",
    "A06": "2027-03-16",
    "R041": "2027-03-17",
    "C03": "2027-03-18",
    "MK02C": "2027-03-20",
    "C-SRC05": "2027-03-20",
    "MK02D": "2027-03-22",
    "R042": "2027-03-23",
    "R051": "2027-03-25",
    "R052": "2027-03-27",
    "C04": "2027-03-27",
    "R044": "2027-03-29",
    "R053": "2027-03-31",
    "R045": "2027-04-01",
    "C05": "2027-04-02",
    "K02A": "2027-04-03",
    "R046": "2027-04-06",
    "MK03A": "2027-04-06",
    "R047": "2027-04-08",
    "C06": "2027-04-08",
    "MK03B": "2027-04-08",
    "A19": "2027-04-09",
    "R069": "2027-04-12",
    "C07": "2027-04-14",
    "R070": "2027-04-15",
    "R071": "2027-04-16",
    "R091": "2027-04-17",
    "GCA": "2027-04-17",
    "A08": "2027-04-20",
    "K02B": "2027-04-20",
    "K02C": "2027-04-21",
    "K02D": "2027-04-22",
    "MK03C": "2027-04-24",
    "MK03D": "2027-04-26",
    "K03A": "2027-04-29",
    "MK04A": "2027-05-04",
    "C08": "2027-05-08",
    "K03B": "2027-05-08",
    "K03C": "2027-05-10",
    "MK04B": "2027-05-10",
    "K03D": "2027-05-11",
    "C09": "2027-05-13",
    "MK04C": "2027-05-13",
    "MK04D": "2027-05-14",
    "C10": "2027-05-17",
    "K04A": "2027-05-17",
    "MK05A": "2027-05-19",
    "C11": "2027-05-20",
    "MK05B": "2027-05-21",
    "K04B": "2027-05-22",
    "C26": "2027-05-22",
    "K04C": "2027-05-24",
    "C12": "2027-05-25",
    "K04D": "2027-05-25",
    "C13": "2027-05-29",
    "MK05C": "2027-06-01",
    "MK05D": "2027-06-02",
    "K05A": "2027-06-05",
    "C24": "2027-06-05",
    "MK06A": "2027-06-07",
    "MK06B": "2027-06-09",
    "K05B": "2027-06-12",
    "C25": "2027-06-12",
    "K05C": "2027-06-14",
    "K05D": "2027-06-15",
    "MK06C": "2027-06-17",
    "MK06D": "2027-06-18",
    "K06A": "2027-06-21",
    "MK07A": "2027-06-23",
    "MK07B": "2027-06-25",
    "K06B": "2027-06-26",
    "K06C": "2027-06-28",
    "K06D": "2027-06-29",
    "MK07C": "2027-07-01",
    "MK07D": "2027-07-02",
    "K07A": "2027-07-05",
    "MK08A": "2027-07-07",
    "MK08B": "2027-07-09",
    "K07B": "2027-07-10",
    "K07C": "2027-07-12",
    "K07D": "2027-07-13",
    "MK08C": "2027-07-15",
    "MK08D": "2027-07-16",
    "K08A": "2027-07-19",
    "SRC-12": "2027-07-21",
    "SRC-M01": "2027-07-22",
    "K08B": "2027-07-24",
    "SRC-M02": "2027-07-24",
    "K08C": "2027-07-26",
    "K08D": "2027-07-27",
    "R032": "2027-07-28",
    "GA": "2027-07-31",
    "R043": "2027-08-05",
    "R057": "2027-08-07",
    "R058": "2027-08-12",
    "R076": "2027-08-12",
    "R059B": "2027-08-14",
    "R060": "2027-08-17",
    "R077": "2027-08-17",
    "R063B": "2027-08-18",
    "R064": "2027-08-20",
    "R061": "2027-08-21",
    "R065": "2027-08-26",
    "A20": "2027-08-27",
    "R072": "2027-08-28",
    "R066": "2027-08-30",
    "R068": "2027-08-31",
    "SRC-M03": "2027-08-31",
    "R079": "2027-09-01",
    "R067": "2027-09-04",
    "R073": "2027-09-04",
    "R092": "2027-09-04",
    "R078": "2027-09-08",
    "R074": "2027-09-09",
    "R093": "2027-09-11",
    "R080": "2027-09-16",
    "GB": "2027-09-24",
    "R081": "2027-10-07",
    "R082": "2027-10-14",
    "R083": "2027-10-18",
    "R084": "2027-10-21",
    "R124": "2027-10-21",
    "R125": "2027-10-28",
    "R085": "2027-11-02",
    "GB-R": "2027-11-05",
    "GC": "2027-11-24",
    "R094": "2027-11-26",
    "R095": "2027-12-01",
    "GC-C": "2027-12-01",
    "C14": "2027-12-06",
    "PILOT-CORE": "2028-01-08",
    "R096": "2028-01-11",
    "R097": "2028-01-12",
    "R098": "2028-01-13",
    "R099": "2028-01-18",
    "R100": "2028-01-22",
    "R101": "2028-01-26",
    "R123": "2028-01-29",
    "CORE-DOC": "2028-01-29",
    "R102": "2028-02-17",
    "R103": "2028-02-18",
    "CORE-REV": "2028-02-18",
    "GD-CORE": "2028-02-25",
    "PILOT-CAM": "2028-02-26",
    "R104": "2028-02-26",
    "R105": "2028-02-28",
    "C15": "2028-03-02",
    "C16": "2028-03-04",
    "CORE-W1": "2028-03-08",
    "C17": "2028-03-11",
    "GCB": "2028-03-17",
    "A08I": "2028-03-18",
    "C18": "2028-03-25",
    "C19": "2028-03-28",
    "CORE-M1": "2028-03-31",
    "C20": "2028-04-01",
    "C21": "2028-04-04",
    "C22": "2028-04-06",
    "R106": "2028-04-08",
    "C27": "2028-04-08",
    "R107": "2028-04-11",
    "C23": "2028-04-12",
    "C28": "2028-04-13",
    "R108": "2028-04-21",
    "R109": "2028-04-22",
    "GCB-R": "2028-04-22",
    "R110": "2028-04-24",
    "R111": "2028-04-25",
    "R112": "2028-04-28",
    "GD": "2028-05-05",
    "R113": "2028-05-06",
    "R114": "2028-05-08",
    "R115": "2028-05-10",
    "R116": "2028-05-19",
    "R117": "2028-05-20",
    "R118": "2028-06-10",
    "R119": "2028-06-13",
    "R120": "2028-06-16"
  }
}
