{
  "metadata": {
    "version": "1.0.0-research",
    "as_of": "2026-10-08",
    "timezone": "Asia/Saigon",
    "canonical_destination": "D:\\sava-erp-simulator\\docs\\reporting-library\\phase-1",
    "scope": "Documentation/research library; no runtime integration",
    "reports": 48,
    "modules": {
      "FI": 16,
      "CO": 16,
      "MM": 16
    },
    "type_counts": {
      "NATIVE_REPORT": 35,
      "DERIVED_ANALYSIS": 3,
      "EXECUTION_OUTPUT": 7,
      "NATIVE_VIEW": 3
    },
    "original_exports_downloaded": 0,
    "synthetic_samples": 48,
    "source_entries": 46,
    "target_edition": null,
    "target_release": null,
    "operational_acceptance": "NOT_ACCEPTED",
    "runtime_report_count_changed": false,
    "native_input_contract": "../native-input/raw-input-register.json",
    "teaching_samples_are_native_input_schema": false,
    "native_layout_acceptance": "NOT_CERTIFIED",
    "all_reports_count": 160,
    "all_reports_as_of": "2026-10-13",
    "phase1_metadata_is_historical": true
  },
  "reports": [
    {
      "id": "FI01",
      "module": "FI",
      "title": "Chi tiết GL — entry view",
      "tcode": "FBL3N",
      "fiori_app": null,
      "source_ids": [
        "S02"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "date",
        "gl",
        "amount",
        "currency",
        "doc_amount",
        "doc_currency"
      ],
      "selection": "Company, GL, posting-date interval; chọn All items để kiểm tra phát sinh, hoặc key-date open items cho clearing.",
      "reading": "Một dòng FI entry có thể tách nhiều dòng ở ledger view. Dấu âm trong mẫu là Có; tổng riêng từng loại tiền.",
      "reconciliation": "Tổng phát sinh theo account ↔ FI03 sau thống nhất ledger-scope và bridge entry/ledger.",
      "control": "Không join trực tiếp line FI với line ACDOCA. GL không line-item-managed có thể cần nguồn bổ trợ.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "FI document entry view → signed GL movement → balance bridge.",
      "worked_example": "Nợ tồn kho 1.000 và Có GR/IR 1.000 có tổng 0; lọc chỉ tồn kho thì tổng 1.000 là đúng.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_amount",
          "label": "Document Amount",
          "meaning": "Số tiền theo đồng tiền chứng từ; không cộng với amount khác loại tiền.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_currency",
          "label": "Document Currency",
          "meaning": "Đồng tiền chứng từ, tách với currency của số tiền company-code.",
          "sample": "EUR",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FBL3N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company, GL, posting-date interval; chọn All items để kiểm tra phát sinh, hoặc key-date open items cho clearing.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng phát sinh theo account ↔ FI03 sau thống nhất ledger-scope và bridge entry/ledger. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI01-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "date",
          "gl",
          "amount",
          "currency",
          "doc_amount",
          "doc_currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "date": "2026-09-15",
            "gl": "150000",
            "amount": "1000",
            "currency": "USD",
            "doc_amount": "1000",
            "doc_currency": "USD"
          },
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "002",
            "date": "2026-09-15",
            "gl": "210000",
            "amount": "-1000",
            "currency": "USD",
            "doc_amount": "-1000",
            "doc_currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI01",
        "variants": [
          {
            "id": "FI01-01",
            "source_transaction": "FBL3N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.saptraininghq.com/analysis-of-sap-fbl3n-report-and-its-significance/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI01-01.xlsx",
            "raw_csv": "source-layout-downloads/FI01-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI01-01.flat.csv"
          },
          {
            "id": "FI01-02",
            "source_transaction": "FBL3N (ECC) — so sánh với FAGLL03 (S/4HANA)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/knowledgecentre/fbl3n-g-l-account-line-items-report-has-been-replaced-by-the-new-fagll03-g-l-account-line-items-report/",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI01-02.xlsx",
            "raw_csv": "source-layout-downloads/FI01-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI01-02.flat.csv"
          },
          {
            "id": "FI01-03",
            "source_transaction": "FBL3N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapsharks.com/fbl3n-gl-line-item-display/",
            "fields_read_from_source": 10,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI01-03.xlsx",
            "raw_csv": "source-layout-downloads/FI01-03.layout.csv",
            "flat_csv": "source-layout-downloads/FI01-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI02",
      "module": "FI",
      "title": "Chi tiết GL — ledger view",
      "tcode": "FAGLL03",
      "fiori_app": "F2217",
      "source_ids": [
        "S01",
        "S02"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "doc",
        "line",
        "date",
        "gl",
        "profit_center",
        "amount",
        "currency",
        "currency_type"
      ],
      "selection": "Ledger, company, fiscal year/period hoặc posting dates, GL, open/cleared/all; lưu selection và layout.",
      "reading": "Dòng journal theo ledger; document splitting có thể làm số dòng khác FI01. Giữ currency type và ledger.",
      "reconciliation": "Group GL/ledger/company/currency → movement FI03; truy ngược accounting references của MM/CO.",
      "control": "Reject duplicate journal key; không cộng nhiều ledger hoặc cộng cả doc_amount và amount.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "Universal Journal concept → selected ledger view → aggregation; table/CDS binding cần layout thật.",
      "worked_example": "Cùng chứng từ 1.000 ở 0L và 2L: chọn 0L được 1.000, cộng hai ledger 2.000 là sai.",
      "existing_contract": "D16",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S01",
          "url": "https://help.sap.com/docs/r/0fa84c9d9c634132b7c4abb9ffdd8f06/latest/en-US/bd874158706b9144e10000000a4450e5.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App F2217; ledger view; open/cleared/all and key-date filters."
        },
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "profit_center",
          "label": "Profit Center",
          "meaning": "Đơn vị trách nhiệm lợi nhuận; master có thời hạn hiệu lực.",
          "sample": "PC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency_type",
          "label": "Currency Type",
          "meaning": "Loại tiền trong SAP; 10 thường là company-code currency, cần xác nhận cấu hình.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FAGLL03 / F2217 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Ledger, company, fiscal year/period hoặc posting dates, GL, open/cleared/all; lưu selection và layout.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Group GL/ledger/company/currency → movement FI03; truy ngược accounting references của MM/CO. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI02-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "doc",
          "line",
          "date",
          "gl",
          "profit_center",
          "amount",
          "currency",
          "currency_type"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "date": "2026-09-15",
            "gl": "150000",
            "profit_center": "PC1100",
            "amount": "1000",
            "currency": "USD",
            "currency_type": "10"
          },
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "000002",
            "date": "2026-09-15",
            "gl": "210000",
            "profit_center": "PC1100",
            "amount": "-1000",
            "currency": "USD",
            "currency_type": "10"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI02",
        "variants": [
          {
            "id": "FI02-01",
            "source_transaction": "FAGLL03 (G/L View) — so sánh với FBL3N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/knowledgecentre/fbl3n-g-l-account-line-items-report-has-been-replaced-by-the-new-fagll03-g-l-account-line-items-report/",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI02-01.xlsx",
            "raw_csv": "source-layout-downloads/FI02-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI02-01.flat.csv"
          },
          {
            "id": "FI02-02",
            "source_transaction": "F2217 Display Line Items in General Ledger",
            "classification": "FIORI_F2217",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-display-financial-statement",
            "fields_read_from_source": 19,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI02-02.xlsx",
            "raw_csv": "source-layout-downloads/FI02-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI02-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI03",
      "module": "FI",
      "title": "Số dư tài khoản GL",
      "tcode": "FAGLB03",
      "fiori_app": "F0707A",
      "source_ids": [
        "S03"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Company, ledger, year, GL; kiểm tra carryforward và kỳ đặc biệt.",
      "reading": "Opening là stock, debit/credit là flow; closing không được cộng qua tháng.",
      "reconciliation": "Opening + debit - credit = closing; phát sinh khớp FI02; closing khớp FI04 đúng selection.",
      "control": "Tách carryforward, adjustment period và scope exclusions; không ép balance của partial extract về 0.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "GL ledger items/carryforward → balance period → trial balance.",
      "worked_example": "500 + 1.200 - 200 = 1.500. Chênh 500 thường cần kiểm tra opening trước tìm missing posting.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + gl + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/5559bf5b5d634e39adb4358956f7bf2a.html?locale=de-DE",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGLB03, F.08, F0996, F.01, F0708 and F0707/A compared; similar purpose is not export equivalence."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FAGLB03 / F0707A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company, ledger, year, GL; kiểm tra carryforward và kỳ đặc biệt.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Opening + debit - credit = closing; phát sinh khớp FI02; closing khớp FI04 đúng selection. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI03-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "gl",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "150000",
            "opening": "500",
            "debit": "1200",
            "credit": "200",
            "closing": "1500",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI03",
        "variants": [
          {
            "id": "FI03-01",
            "source_transaction": "FAGLB03 (S/4HANA) — so sánh FS10N (ECC)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/knowledgecentre/fs10n-g-l-account-balance-display-report-has-been-replaced-by-a-new-version-faglb03-g-l-account-balance-display-report/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI03-01.xlsx",
            "raw_csv": "source-layout-downloads/FI03-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI03-01.flat.csv"
          },
          {
            "id": "FI03-02",
            "source_transaction": "FAGLB03",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.learntosap.com/ficotutorialglaccountbalance.html",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI03-02.xlsx",
            "raw_csv": "source-layout-downloads/FI03-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI03-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI04",
      "module": "FI",
      "title": "Trial Balance / bảng cân đối phát sinh",
      "tcode": null,
      "fiori_app": "F0996",
      "source_ids": [
        "S03"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Ledger/company/year/period; chọn hierarchy và currency type; giữ đầy đủ accounts cho kiểm tra cân.",
      "reading": "Dòng account là lá; hierarchy subtotal không cộng lại. Trial balance không thay financial statements.",
      "reconciliation": "Sum closing = 0 cho full balanced scope; FI03 account balances ↔ FI05 qua mapping có version.",
      "control": "Kiểm tra unmapped GL, hierarchy leaf, cutoff và retained earnings/carryforward.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "Balance cube/query theo hệ → account balances → FSV mapping.",
      "worked_example": "Tài sản +1.500 và nợ/vốn -1.500 cân 0; một bảng cân vẫn có thể phân loại IFRS sai.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + gl + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/5559bf5b5d634e39adb4358956f7bf2a.html?locale=de-DE",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGLB03, F.08, F0996, F.01, F0708 and F0707/A compared; similar purpose is not export equivalence."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0996 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Ledger/company/year/period; chọn hierarchy và currency type; giữ đầy đủ accounts cho kiểm tra cân.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum closing = 0 cho full balanced scope; FI03 account balances ↔ FI05 qua mapping có version. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI04-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "gl",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "150000",
            "opening": "500",
            "debit": "1200",
            "credit": "200",
            "closing": "1500",
            "currency": "USD"
          },
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "210000",
            "opening": "-500",
            "debit": "200",
            "credit": "1200",
            "closing": "-1500",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI04",
        "variants": [
          {
            "id": "FI04-01",
            "source_transaction": "F0996 Trial Balance",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/key-reports-for-segment-reporting-in-sap-s4hana",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI04-01.xlsx",
            "raw_csv": "source-layout-downloads/FI04-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI04-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI05",
      "module": "FI",
      "title": "Bảng tình hình tài chính và kết quả kinh doanh",
      "tcode": "F.01",
      "fiori_app": "F0708",
      "source_ids": [
        "S03",
        "S45"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "fs_node",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "fs_node",
        "opening",
        "closing",
        "currency"
      ],
      "selection": "FSV, reporting/comparison period, company, ledger, currency; chốt FSV version và reporting basis.",
      "reading": "FSV node là mapping trình bày; subtotal không phải account. Fiori và classic có thể khác drill/export.",
      "reconciliation": "Mỗi GL FI04 có đúng mapping hiệu lực; tổng leaf khớp TB và bridge điều chỉnh IFRS.",
      "control": "Mọi account chưa map vào exception, không vào Other tự động. Lưu policy IAS1/IFRS18 theo kỳ.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "FI04 → approved GL-to-FSV map → reporting lines + adjustments.",
      "worked_example": "Tồn kho 1.500 trước provision, adjustment -100 ⇒ 1.400; mapping và bút toán là hai lớp khác nhau.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + fs_node + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/5559bf5b5d634e39adb4358956f7bf2a.html?locale=de-DE",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGLB03, F.08, F0996, F.01, F0708 and F0707/A compared; similar purpose is not export equivalence."
        },
        {
          "id": "S45",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2025/issued/part-a/ifrs-18-presentation-and-disclosure-in-financial-statements.pdf?bypass=on",
          "version": "Issued 2025 text, Appendix C",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Effective annual periods beginning 2027-01-01; early application permitted, retrospective transition."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "fs_node",
          "label": "FSV Node",
          "meaning": "Chỉ tiêu báo cáo tài chính theo phiên bản mapping; không cộng parent và leaf.",
          "sample": "INVENTORY",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F.01 / F0708 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "FSV, reporting/comparison period, company, ledger, currency; chốt FSV version và reporting basis.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Mỗi GL FI04 có đúng mapping hiệu lực; tổng leaf khớp TB và bridge điều chỉnh IFRS. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI05-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Một node sau adjustment minh họa -100; không là bộ financial statements đầy đủ.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "fs_node",
          "opening",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "fs_node": "INVENTORY",
            "opening": "500",
            "closing": "1400",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI05",
        "variants": [
          {
            "id": "FI05-01",
            "source_transaction": "F0708 Display Financial Statement",
            "classification": "FIORI_SOURCE_FOR_FINANCIAL_STATEMENT_PROFILE",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-display-financial-statement",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI05-01.xlsx",
            "raw_csv": "source-layout-downloads/FI05-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI05-01.flat.csv"
          },
          {
            "id": "FI05-02",
            "source_transaction": "Balance Sheet/Income Statement (giao diện trùng F0708 Display Financial Statement)",
            "classification": "FIORI_SOURCE_FOR_FINANCIAL_STATEMENT_PROFILE",
            "source_url": "https://blog.sap-press.com/key-reports-for-segment-reporting-in-sap-s4hana",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI05-02.xlsx",
            "raw_csv": "source-layout-downloads/FI05-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI05-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI06",
      "module": "FI",
      "title": "Chi tiết công nợ nhà cung cấp",
      "tcode": "FBL1N",
      "fiori_app": "F0712",
      "source_ids": [
        "S02",
        "S04"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "partner",
        "date",
        "due_date",
        "clearing_date",
        "amount",
        "currency"
      ],
      "selection": "Supplier/company; Open items tại key date; lưu special GL, noted items và clearing scope.",
      "reading": "Một vendor line có thể đại diện hóa đơn nhiều PO. Credit balance phải trả là âm theo mẫu FI.",
      "reconciliation": "Open AP ↔ reconciliation accounts GL qua special-GL/FX/manual-posting bridge; ↔ FI07 balances.",
      "control": "Invoice clearing sau key date vẫn open tại key date. Không suy PO detail từ vendor line.",
      "ifrs_ref": "FINANCIAL_INSTRUMENT",
      "lineage": "Supplier FI lines → key-date open set → AP reconciliation.",
      "worked_example": "Invoice -1.000 ngày 15/9, clear 5/10: tại 30/9 còn -1.000 dù hôm nay đã cleared.",
      "existing_contract": "D14",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        },
        {
          "id": "S04",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/031c345485b84c8c94265be9ef61d3a8/656fa2cdaaa9480b83d8bda9e9a57fe1.html?locale=en-US",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0712 identity; operational partner view; no assumed one-to-one PO detail on invoice partner line."
        }
      ],
      "ifrs_policy": {
        "title": "Phải trả và công cụ tài chính",
        "sources": [
          "S42",
          "S43"
        ],
        "text": "Công nợ được đọc cùng hợp đồng, quyền/nghĩa vụ và đơn vị tiền chức năng. Supplier balance khác tổng đơn mua còn mở. Đánh giá ngoại tệ, chiết khấu/financing và đối ứng được bridge riêng; không suy từ aging rằng một khoản hết nghĩa vụ hoặc được bù trừ. Đây là hướng dẫn điều tra, không phải phê duyệt chính sách của doanh nghiệp."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "due_date",
          "label": "Net Due Date",
          "meaning": "Hạn thanh toán theo payment terms; dùng tuổi quá hạn, không dùng ngày invoice thay thế.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "clearing_date",
          "label": "Clearing Date",
          "meaning": "Ngày clearing; null là chưa có clearing theo dữ liệu, không tự thay hôm nay.",
          "sample": "2026-10-05",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FBL1N / F0712 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Supplier/company; Open items tại key date; lưu special GL, noted items và clearing scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Open AP ↔ reconciliation accounts GL qua special-GL/FX/manual-posting bridge; ↔ FI07 balances. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI06-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "partner",
          "date",
          "due_date",
          "clearing_date",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "partner": "0000100001",
            "date": "2026-09-15",
            "due_date": "2026-10-15",
            "clearing_date": "2026-10-05",
            "amount": "-1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI06",
        "variants": [
          {
            "id": "FI06-01",
            "source_transaction": "FBL1N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapsharks.com/fbl1n-vendor-line-item-display/",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI06-01.xlsx",
            "raw_csv": "source-layout-downloads/FI06-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI06-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI07",
      "module": "FI",
      "title": "Số dư nhà cung cấp",
      "tcode": null,
      "fiori_app": "F0701A",
      "source_ids": [
        "S06"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "period",
        "partner",
        "currency"
      ],
      "columns": [
        "company",
        "year",
        "period",
        "partner",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Supplier/company/year; chọn kỳ và đồng tiền; kiểm tra special-GL display.",
      "reading": "Doanh số mua và balance là khác chỉ tiêu; credit memo/payment thay đổi số dư nhưng không phải purchase mới.",
      "reconciliation": "FI06 all-items movement + opening ↔ closing; closing ↔ GL AP cùng scope.",
      "control": "F0701 cũ đã có thông báo xóa ở S/4 2023; không thiết kế thư viện mới quanh app cũ.",
      "ifrs_ref": "FINANCIAL_INSTRUMENT",
      "lineage": "Supplier postings → period balance → AP control account.",
      "worked_example": "Opening -500, payments debit 300, invoices credit 800 ⇒ closing -1.000.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + period + partner + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S06",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f5d3e1005efd4e86acf9a65abf428082/93c4089e4b4d47aca870dc7d33ba8b78.html?version=2023.000",
          "version": "S/4HANA 2023",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0701 deleted; successor F0701A."
        }
      ],
      "ifrs_policy": {
        "title": "Phải trả và công cụ tài chính",
        "sources": [
          "S42",
          "S43"
        ],
        "text": "Công nợ được đọc cùng hợp đồng, quyền/nghĩa vụ và đơn vị tiền chức năng. Supplier balance khác tổng đơn mua còn mở. Đánh giá ngoại tệ, chiết khấu/financing và đối ứng được bridge riêng; không suy từ aging rằng một khoản hết nghĩa vụ hoặc được bù trừ. Đây là hướng dẫn điều tra, không phải phê duyệt chính sách của doanh nghiệp."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0701A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Supplier/company/year; chọn kỳ và đồng tiền; kiểm tra special-GL display.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "FI06 all-items movement + opening ↔ closing; closing ↔ GL AP cùng scope. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI07-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "period",
          "partner",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "period": "009",
            "partner": "0000100001",
            "opening": "-500",
            "debit": "300",
            "credit": "800",
            "closing": "-1000",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI07",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI07-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 4,
            "source_url": "https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/migrate-upload-vendor-opening-balances-in-rise-with-sap-cloud-2208/ba-p/13551555",
            "source_sha256": "591ab57b330046fd377f410f110633ee50bc02dea74a64336adbcec113dd741e",
            "xlsx": "finance-gaps-downloads/GAP-FI07-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI07-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI07-01.flat.csv"
          },
          {
            "id": "GAP-FI07-02",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 6,
            "source_url": "https://www.sapmuhasebe.com/2015/11/fi-modulunde-satc-bakiye-analizinin.html",
            "source_sha256": "8e0c410a45357e064f64fe0daa046e4e88f55de5f0afb099ac01cbe48407b458",
            "xlsx": "finance-gaps-downloads/GAP-FI07-02.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI07-02.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI07-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI08",
      "module": "FI",
      "title": "Chi tiết công nợ khách hàng",
      "tcode": "FBL5N",
      "fiori_app": "F0711",
      "source_ids": [
        "S02",
        "S05"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "partner",
        "date",
        "due_date",
        "clearing_date",
        "amount",
        "currency"
      ],
      "selection": "Customer/company/key date; normal và special GL tách; lấy cả credit memo/unallocated receipts cần đối soát.",
      "reading": "Amount dương là receivable trong mẫu; customer view không cung cấp toàn bộ ledger dimension.",
      "reconciliation": "Open set ↔ FI09/GL AR qua bridge; input cho FI10 sau chuẩn hóa hạn thanh toán.",
      "control": "Residual/partial payments phải lưu liên kết invoice; không xóa credit balances khỏi tổng reconciliation.",
      "ifrs_ref": "ECL",
      "lineage": "Customer FI lines → key-date open set → aging → ECL assessment.",
      "worked_example": "Invoice 1.000 và payment on-account -200 có net AR 800; chưa được tự gán -200 cho invoice bất kỳ.",
      "existing_contract": "D15",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        },
        {
          "id": "S05",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/37e57e54279c2457e10000000a44176d.html?locale=en-US&state=PRODUCTION&version=2023.latest",
          "version": "S/4HANA 2023 latest",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0711, export and variants; export volume limit; choose product/release in app reference library."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "due_date",
          "label": "Net Due Date",
          "meaning": "Hạn thanh toán theo payment terms; dùng tuổi quá hạn, không dùng ngày invoice thay thế.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "clearing_date",
          "label": "Clearing Date",
          "meaning": "Ngày clearing; null là chưa có clearing theo dữ liệu, không tự thay hôm nay.",
          "sample": "2026-10-05",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FBL5N / F0711 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Customer/company/key date; normal và special GL tách; lấy cả credit memo/unallocated receipts cần đối soát.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Open set ↔ FI09/GL AR qua bridge; input cho FI10 sau chuẩn hóa hạn thanh toán. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI08-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Payment -200 chưa phân bổ; không tự net invoice cho mục đích aging/ECL.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "partner",
          "date",
          "due_date",
          "clearing_date",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "partner": "0000100001",
            "date": "2026-09-15",
            "due_date": "2026-09-01",
            "clearing_date": "2026-10-05",
            "amount": "1000",
            "currency": "USD"
          },
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000002",
            "line": "001",
            "partner": "0000100001",
            "date": "2026-09-15",
            "due_date": null,
            "clearing_date": null,
            "amount": "-200",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI08",
        "variants": [
          {
            "id": "FI08-01",
            "source_transaction": "FBL5N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.bu.edu/cfo/files/2023/03/Reviewing-customer-Accounts-for-Open-Receivables.pdf",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI08-01.xlsx",
            "raw_csv": "source-layout-downloads/FI08-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI08-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI09",
      "module": "FI",
      "title": "Số dư khách hàng",
      "tcode": null,
      "fiori_app": "F0703A",
      "source_ids": [
        "S07"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "period",
        "partner",
        "currency"
      ],
      "columns": [
        "company",
        "year",
        "period",
        "partner",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Company/customer/year/period; giữ currency và opening.",
      "reading": "Phát sinh doanh số và balance không giống revenue IFRS; receipt và credit memo ảnh hưởng balance.",
      "reconciliation": "FI08 movements + opening ↔ closing; khớp GL reconciliation account theo scope.",
      "control": "Không dùng app F0703 cũ làm baseline mới; confirm F0703A catalog theo release mục tiêu.",
      "ifrs_ref": "ECL",
      "lineage": "AR partner postings → period balance → AR/GL bridge.",
      "worked_example": "Opening 500 + invoices 1.200 - receipts 200 = 1.500; ECL trình bày tách gross.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + period + partner + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S07",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/e296651f454c4284ade361292c633d69/f834212808214d88a8f4aec601d86e25.html?q=AMRP&version=2022.000",
          "version": "S/4HANA 2022",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0703A replaces F0703; source announces deletion in 2023, not evidence of installed target."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0703A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/customer/year/period; giữ currency và opening.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "FI08 movements + opening ↔ closing; khớp GL reconciliation account theo scope. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI09-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "period",
          "partner",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "period": "009",
            "partner": "0000100001",
            "opening": "500",
            "debit": "1200",
            "credit": "200",
            "closing": "1500",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI09",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI09-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 7,
            "source_url": "https://assets.dm.ux.sap.com/desapusergroupsknowledgetransfer/2017/pdfs/170503_fiori_%2020_in_S4HANA_1610.pdf",
            "source_sha256": "3d7f695a4040f6a4d4aa491fe04cb628d066818088452f931b77c942b92e8db7",
            "xlsx": "finance-gaps-downloads/GAP-FI09-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI09-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI09-01.flat.csv"
          },
          {
            "id": "GAP-FI09-02",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 5,
            "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/fiaccounting/3361881403.html",
            "source_sha256": "1a5946193bff472922e2a935ab147f3d9c34799506342bab91fb2dfaff4044ce",
            "xlsx": "finance-gaps-downloads/GAP-FI09-02.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI09-02.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI09-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI10",
      "module": "FI",
      "title": "Tuổi nợ AR theo ngày đến hạn",
      "tcode": null,
      "fiori_app": null,
      "source_ids": [
        "S05",
        "S42"
      ],
      "kind": "DERIVED_ANALYSIS",
      "keys": [
        "company",
        "year",
        "doc",
        "line",
        "key_date"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "partner",
        "key_date",
        "due_date",
        "exposure",
        "currency",
        "days_overdue",
        "bucket"
      ],
      "selection": "Xuất open AR FI08 tại key date; chọn policy cho credits, disputed và special GL trước bucket.",
      "reading": "days_overdue = key_date - due_date; cùng ngày đến hạn thuộc chưa quá hạn; bucket không chồng lấn.",
      "reconciliation": "Tổng bucket + credits tách riêng + excluded bridge = FI08 signed open balance.",
      "control": "Missing due date vào UNKNOWN không vào current; không dùng invoice age thay due age.",
      "ifrs_ref": "ECL",
      "lineage": "FI08 approved open set + due-date terms → derived aging; không là một T-code SAP riêng.",
      "worked_example": "30/9 trừ 1/9 = 29 ngày, bucket 1–30; item due 1/10 còn chưa đến hạn.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAVA_DERIVED_NOT_NATIVE",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S05",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/37e57e54279c2457e10000000a44176d.html?locale=en-US&state=PRODUCTION&version=2023.latest",
          "version": "S/4HANA 2023 latest",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0711, export and variants; export volume limit; choose product/release in app reference library."
        },
        {
          "id": "S42",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2024/issued/part-a/ifrs-9-financial-instruments.pdf?bypass=on",
          "version": "Issued 2024 text",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "5.5.15-17 and B5.5.35: simplified approach/provision matrix subject to credit-loss measurement requirements."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "due_date",
          "label": "Net Due Date",
          "meaning": "Hạn thanh toán theo payment terms; dùng tuổi quá hạn, không dùng ngày invoice thay thế.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "exposure",
          "label": "Credit Exposure",
          "meaning": "Khoản phải thu chịu rủi ro sau xử lý credits theo chính sách được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "days_overdue",
          "label": "Days Overdue",
          "meaning": "Derived: key_date - due_date theo ngày; âm là chưa đến hạn.",
          "sample": "29",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "bucket",
          "label": "Aging Bucket",
          "meaning": "Derived: chưa đến hạn, 1–30, 31–60, 61–90, trên 90; ranh giới phải thống nhất.",
          "sample": "1-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Lấy nguồn đầu vào được chỉ rõ trong lineage, giữ manifest và policy version.",
        "Xuất open AR FI08 tại key date; chọn policy cho credits, disputed và special GL trước bucket.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng bucket + credits tách riêng + excluded bridge = FI08 signed open balance. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI10-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "partner",
          "key_date",
          "due_date",
          "exposure",
          "currency",
          "days_overdue",
          "bucket"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "partner": "0000100001",
            "key_date": "2026-09-30",
            "due_date": "2026-09-01",
            "exposure": "1000",
            "currency": "USD",
            "days_overdue": "29",
            "bucket": "1-30"
          },
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000002",
            "line": "001",
            "partner": "0000100001",
            "key_date": "2026-09-30",
            "due_date": "2026-10-01",
            "exposure": "500",
            "currency": "USD",
            "days_overdue": "-1",
            "bucket": "NOT_DUE"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI10",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI10-01",
            "classification": "SAVA_DERIVED_ANALYSIS_NOT_SAP_SOURCE_LAYOUT",
            "columns": 19,
            "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26b08c9979fa435faafcf6033ca0cf93/eb46c833e4b1490899304a4a8d95afc0.html",
            "source_sha256": null,
            "xlsx": "finance-gaps-downloads/GAP-FI10-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI10-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI10-01.flat.csv"
          },
          {
            "id": "GAP-FI10-02",
            "classification": "SAVA_DERIVED_ANALYSIS_NOT_SAP_SOURCE_LAYOUT",
            "columns": 24,
            "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26b08c9979fa435faafcf6033ca0cf93/eb46c833e4b1490899304a4a8d95afc0.html",
            "source_sha256": null,
            "xlsx": "finance-gaps-downloads/GAP-FI10-02.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI10-02.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI10-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI11",
      "module": "FI",
      "title": "Ma trận ECL minh họa cho phải thu",
      "tcode": null,
      "fiori_app": null,
      "source_ids": [
        "S42"
      ],
      "kind": "DERIVED_ANALYSIS",
      "keys": [
        "company",
        "key_date",
        "partner",
        "bucket",
        "currency"
      ],
      "columns": [
        "company",
        "key_date",
        "partner",
        "bucket",
        "exposure",
        "loss_rate",
        "allowance",
        "currency"
      ],
      "selection": "FI10 + risk segments + approved forecast-adjusted loss rates; tách individually assessed items.",
      "reading": "loss_rate là giả định đào tạo. Bucket chỉ hỗ trợ measurement, không phải căn cứ đủ để duyệt ECL.",
      "reconciliation": "Gross exposure ↔ FI10; allowance movement ↔ impairment GL, write-offs/recoveries/FX tách.",
      "control": "Không hard-code tỷ lệ theo tuổi nợ cho sản xuất. Lưu model version, forecast, backtesting và reviewer.",
      "ifrs_ref": "ECL",
      "lineage": "AR aging + historical loss + forward-looking overlay → allowance → approved JE bridge.",
      "worked_example": "Exposure 1.000 × 2% = 20; thay rate 5% ra 50, cần chứng cứ cho 30 tăng thêm.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAVA_DERIVED_NOT_NATIVE",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + key_date + partner + bucket + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S42",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2024/issued/part-a/ifrs-9-financial-instruments.pdf?bypass=on",
          "version": "Issued 2024 text",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "5.5.15-17 and B5.5.35: simplified approach/provision matrix subject to credit-loss measurement requirements."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "bucket",
          "label": "Aging Bucket",
          "meaning": "Derived: chưa đến hạn, 1–30, 31–60, 61–90, trên 90; ranh giới phải thống nhất.",
          "sample": "1-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "exposure",
          "label": "Credit Exposure",
          "meaning": "Khoản phải thu chịu rủi ro sau xử lý credits theo chính sách được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "loss_rate",
          "label": "Loss Rate",
          "meaning": "Tỷ lệ ECL giả định ở dạng thập phân, 0.02 = 2%; cần dữ liệu lịch sử và dự báo.",
          "sample": "0.02",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "allowance",
          "label": "Loss Allowance",
          "meaning": "Derived: exposure × loss_rate cho bài tập đơn giản; chưa thay mô hình ECL thực.",
          "sample": "20",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Lấy nguồn đầu vào được chỉ rõ trong lineage, giữ manifest và policy version.",
        "FI10 + risk segments + approved forecast-adjusted loss rates; tách individually assessed items.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Gross exposure ↔ FI10; allowance movement ↔ impairment GL, write-offs/recoveries/FX tách. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI11-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Chỉ minh họa một bucket; không phải kết quả model được phê duyệt.",
        "columns": [
          "company",
          "key_date",
          "partner",
          "bucket",
          "exposure",
          "loss_rate",
          "allowance",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "key_date": "2026-09-30",
            "partner": "0000100001",
            "bucket": "1-30",
            "exposure": "1000",
            "loss_rate": "0.02",
            "allowance": "20",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI11",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI11-01",
            "classification": "SAVA_DERIVED_ANALYSIS_NOT_SAP_SOURCE_LAYOUT",
            "columns": 14,
            "source_url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2022/issued/part-a/ifrs-9-financial-instruments.pdf?bypass=on",
            "source_sha256": null,
            "xlsx": "finance-gaps-downloads/GAP-FI11-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI11-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI11-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI12",
      "module": "FI",
      "title": "Nhật ký kiểm toán — complete journal",
      "tcode": null,
      "fiori_app": "F0997",
      "source_ids": [
        "S08"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "doc",
        "line",
        "date",
        "entry_date",
        "user",
        "doc_type",
        "gl",
        "amount",
        "currency"
      ],
      "selection": "Chọn mode Complete Journal, company/year/ledger/date; mode changes hoặc gap list là grain khác.",
      "reading": "Posting date khác entry date là tín hiệu kiểm tra cutoff, chưa là gian lận. User không thay reviewer.",
      "reconciliation": "Distinct journal items và totals ↔ FI02 trong cùng scope; document count so export metadata.",
      "control": "Số chứng từ đứt quãng có thể do rollback/buffering; điều tra trước kết luận missing journals.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "Journal and audit metadata → selected complete-journal view → audit exceptions.",
      "worked_example": "Bút toán ngày sổ 30/9 nhập 2/10: hỏi close approval và evidence, không tự xóa hoặc đổi kỳ.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S08",
          "url": "https://help.sap.com/docs/r/0fa84c9d9c634132b7c4abb9ffdd8f06/2602.500/en-US/c60cfd55ed140033e10000000a44538d.html",
          "version": "Cloud path 2602.500",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0997 offers multiple modes; number gaps can have technical reasons."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "entry_date",
          "label": "Entry Date",
          "meaning": "Ngày nhập hệ thống; so với posting date để phát hiện backdating cần giải trình.",
          "sample": "2026-09-16",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "user",
          "label": "Created By",
          "meaning": "Người lập; cần bảo vệ dữ liệu cá nhân, không phải bằng chứng người duyệt.",
          "sample": "DEMO_USER",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_type",
          "label": "Document Type",
          "meaning": "Loại chứng từ theo cấu hình; không tự kết luận thủ công/tự động chỉ từ mã.",
          "sample": "SA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0997 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Chọn mode Complete Journal, company/year/ledger/date; mode changes hoặc gap list là grain khác.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Distinct journal items và totals ↔ FI02 trong cùng scope; document count so export metadata. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI12-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "doc",
          "line",
          "date",
          "entry_date",
          "user",
          "doc_type",
          "gl",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "date": "2026-09-30",
            "entry_date": "2026-10-02",
            "user": "DEMO_USER",
            "doc_type": "SA",
            "gl": "150000",
            "amount": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI12",
        "variants": [
          {
            "id": "FI12-01",
            "source_transaction": "F0997 Audit Journal (tab JOURNAL)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-audit-journal",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI12-01.xlsx",
            "raw_csv": "source-layout-downloads/FI12-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI12-01.flat.csv"
          },
          {
            "id": "FI12-02",
            "source_transaction": "F0997 Audit Journal (tab COMPACT JOURNAL)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-audit-journal",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI12-02.xlsx",
            "raw_csv": "source-layout-downloads/FI12-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI12-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI13",
      "module": "FI",
      "title": "Phân tích journal đa chiều",
      "tcode": null,
      "fiori_app": "F0956B",
      "source_ids": [
        "S09"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "profit_center",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "profit_center",
        "debit",
        "credit",
        "amount",
        "currency"
      ],
      "selection": "Ledger/company/fiscal year/period; cố định dimensions trước export; lưu hierarchy filters.",
      "reading": "Đây là aggregate theo dimensions chọn, không tự coi mỗi dòng là chứng từ. Drill tạo grain khác.",
      "reconciliation": "Aggregate FI02 cùng dimensions ↔ FI13; kiểm tra đối ứng Nợ/Có sau drill.",
      "control": "Nhiều fiscal-year variants có thể làm period không cùng ngày; giữ warning và scope bridge.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "I_JournalEntryAnalyzerCube → C_GLAccountLineItemQuery (S09) → chosen dimensions.",
      "worked_example": "Cùng account/PC có 3 journals tổng 1.000 thì aggregate một dòng 1.000, không mất hai journals.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + gl + profit_center + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S09",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a630d57fc5004c6383e7a81efee7a8bb/0abca34515924eb7b01ead137d066bf3.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0956B; C_GLAccountLineItemQuery and I_JournalEntryAnalyzerCube; aggregated output."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "profit_center",
          "label": "Profit Center",
          "meaning": "Đơn vị trách nhiệm lợi nhuận; master có thời hạn hiệu lực.",
          "sample": "PC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0956B nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Ledger/company/fiscal year/period; cố định dimensions trước export; lưu hierarchy filters.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Aggregate FI02 cùng dimensions ↔ FI13; kiểm tra đối ứng Nợ/Có sau drill. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI13-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "gl",
          "profit_center",
          "debit",
          "credit",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "150000",
            "profit_center": "PC1100",
            "debit": "1200",
            "credit": "200",
            "amount": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI13",
        "variants": [
          {
            "id": "FI13-01",
            "source_transaction": "Journal Entry Analyzer (phiên bản Design Studio/analytical — app ID không hiện trên ảnh; profile dùng F0956B)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/transfer-pricing-analysis-in-sap-s4hana",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI13-01.xlsx",
            "raw_csv": "source-layout-downloads/FI13-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI13-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI14",
      "module": "FI",
      "title": "Kết quả đánh giá ngoại tệ — log được cung cấp",
      "tcode": "FAGL_FCV",
      "fiori_app": null,
      "source_ids": [
        "S10",
        "S43"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "company",
        "year",
        "doc",
        "line",
        "valuation_area"
      ],
      "columns": [
        "run",
        "company",
        "year",
        "doc",
        "line",
        "valuation_area",
        "doc_amount",
        "doc_currency",
        "amount",
        "currency",
        "rate",
        "revalued",
        "difference",
        "test_run"
      ],
      "selection": "Chỉ đọc log/test-result đã cung cấp; lưu key date, valuation method/area và ledger group. Không hướng dẫn Execute trên production.",
      "reading": "Tách monetary items và non-monetary advances; quote tỷ giá và factor phải được chuẩn hóa.",
      "reconciliation": "Revalued - carrying = difference; delta theo run ↔ posted adjustment/reversal documents nếu có.",
      "control": "Test run không phải bút toán. Legacy FAGL_FCV không chứng minh phù hợp advanced valuation của hệ mục tiêu.",
      "ifrs_ref": "FX",
      "lineage": "Open-item carrying amount + approved rate/method → valuation result → posting bridge.",
      "worked_example": "EUR 900 đang ghi USD 1.000; tỷ giá 1.12 ⇒ 1.008, gain 8 cho khoản phải thu giả định.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + company + year + doc + line + valuation_area. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S10",
          "url": "https://help.sap.com/doc/d8c31c0d40f941a39b7ad283c6d4da9b/1709%20001/en-US/SIMPL_OP1709_FPS01.pdf",
          "version": "S/4HANA 1709 FPS01, p148",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGL_FCV transaction named; historical source only; advanced valuation applicability not established."
        },
        {
          "id": "S43",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2021/issued/part-a/ias-21-the-effects-of-changes-in-foreign-exchange-rates.pdf?bypass=on",
          "version": "Issued 2021 text; subsequent amendments must be checked",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Functional currency; monetary closing rate vs historical non-monetary basis."
        }
      ],
      "ifrs_policy": {
        "title": "Ngoại tệ",
        "sources": [
          "S43"
        ],
        "text": "Kiểm tra functional currency trước. Đối với ví dụ monetary receivable, closing rate dùng để remeasure carrying amount; phải xác nhận quotation/factors và valuation area. Advances/non-monetary items cần đánh giá bản chất riêng. Chênh lệch mô phỏng chưa là journal entry nếu không có posting reference. Văn bản nguồn là issued2021, phần thay đổi sau đó chưa được rà soát toàn bộ."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_amount",
          "label": "Document Amount",
          "meaning": "Số tiền theo đồng tiền chứng từ; không cộng với amount khác loại tiền.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_currency",
          "label": "Document Currency",
          "meaning": "Đồng tiền chứng từ, tách với currency của số tiền company-code.",
          "sample": "EUR",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "rate",
          "label": "Closing Exchange Rate",
          "meaning": "Tỷ giá minh họa quote theo currency cho 1 đơn vị doc_currency; kiểm tra quotation và factor.",
          "sample": "1.12",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "revalued",
          "label": "Revalued Amount",
          "meaning": "Derived minh họa: doc_amount × rate sau chuẩn hóa quote.",
          "sample": "1008",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Chênh lệch theo công thức trong hồ sơ; dấu dương không luôn là bất lợi.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Chỉ đọc log/test-result đã cung cấp; lưu key date, valuation method/area và ledger group. Không hướng dẫn Execute trên production.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Revalued - carrying = difference; delta theo run ↔ posted adjustment/reversal documents nếu có. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI14-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "run",
          "company",
          "year",
          "doc",
          "line",
          "valuation_area",
          "doc_amount",
          "doc_currency",
          "amount",
          "currency",
          "rate",
          "revalued",
          "difference",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "valuation_area": "1100",
            "doc_amount": "900",
            "doc_currency": "EUR",
            "amount": "1000",
            "currency": "USD",
            "rate": "1.12",
            "revalued": "1008",
            "difference": "8",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI14",
        "variants": [
          {
            "id": "FI14-01",
            "source_transaction": "FAGL_FCV (Display logs sau khi chạy)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapficoblog.com/tutorial-on-foreign-currency-valuation-in-sap/",
            "fields_read_from_source": 6,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI14-01.xlsx",
            "raw_csv": "source-layout-downloads/FI14-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI14-01.flat.csv"
          },
          {
            "id": "FI14-02",
            "source_transaction": "FAGL_FCV (danh sách kết quả Foreign Currency Valuation)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://techlorean.com/2020/06/10/sap-exchange-rate-and-foreign-currency-valuation-detailed-process-and-configuration/",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI14-02.xlsx",
            "raw_csv": "source-layout-downloads/FI14-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI14-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI15",
      "module": "FI",
      "title": "Theo dõi KPI đối chiếu GR/IR",
      "tcode": null,
      "fiori_app": "F3303",
      "source_ids": [
        "S11"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "key_date",
        "dimension",
        "currency"
      ],
      "columns": [
        "company",
        "key_date",
        "dimension",
        "count",
        "gr_value",
        "ir_value",
        "amount_abs",
        "currency"
      ],
      "selection": "Chọn rõ KPI card, dimensions, currency và filter; lưu timestamp vì trạng thái xử lý thay đổi.",
      "reading": "Card amount tuyệt đối và count PO item khác net GL; chart không thay full item extract.",
      "reconciliation": "Drill về FI16 và MM06; từng KPI tính lại theo định nghĩa, không đối absolute trực tiếp với GL net.",
      "control": "Không union card totals với drill rows; giữ giới hạn điểm hiển thị/complete export.",
      "ifrs_ref": "CUTOFF",
      "lineage": "Reconciliation analytics → KPI card → F3302 item investigation.",
      "worked_example": "GR 1.000 và IR 900 tạo delta 100; absolute components 1.900 không phải liability 1.900.",
      "existing_contract": "D18",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + key_date + dimension + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S11",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0fa84c9d9c634132b7c4abb9ffdd8f06/8700d78b2faf49f6aff17857bd674f27.html?locale=en-US",
          "version": "Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F3303 KPI cards and navigation; absolute open FI amounts must not be read as net GL balance."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "dimension",
          "label": "KPI Dimension",
          "meaning": "Chiều tổng hợp đang chọn; giữ drilldown và filter để tái lập số.",
          "sample": "COMPANY_1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "count",
          "label": "Item Count",
          "meaning": "Số đối tượng sau distinct đúng khóa; không phải số dòng join.",
          "sample": "2",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_value",
          "label": "GR Value",
          "meaning": "Giá trị nhập hàng trong cùng cơ sở tiền/định giá với IR.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_value",
          "label": "IR Value",
          "meaning": "Giá trị hóa đơn; VAT/charges/FX phải tách trước đối chiếu.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount_abs",
          "label": "Absolute Amount",
          "meaning": "Trị tuyệt đối theo định nghĩa KPI; không bằng trị tuyệt đối của tổng net khi nhiều nhóm.",
          "sample": "1900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F3303 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Chọn rõ KPI card, dimensions, currency và filter; lưu timestamp vì trạng thái xử lý thay đổi.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Drill về FI16 và MM06; từng KPI tính lại theo định nghĩa, không đối absolute trực tiếp với GL net. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI15-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "amount_abs=100 chỉ minh họa absolute PO-item net theo delta100; phải xác minh định nghĩa/card calculation trước map F3303. Không phải full KPI export.",
        "columns": [
          "company",
          "key_date",
          "dimension",
          "count",
          "gr_value",
          "ir_value",
          "amount_abs",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "key_date": "2026-09-30",
            "dimension": "COMPANY_1000",
            "count": "1",
            "gr_value": "1000",
            "ir_value": "900",
            "amount_abs": "100",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI15",
        "variants": [
          {
            "id": "FI15-01",
            "source_transaction": "F3303 Monitor GR/IR Account Reconciliation (tiêu đề hiển thị: 'Goods and Invoice Receipt Reconciliation Overview')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.michaelmanagement.com/blogs/sap/understanding-the-goods-and-invoice-receipt-process",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI15-01.xlsx",
            "raw_csv": "source-layout-downloads/FI15-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI15-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI16",
      "module": "FI",
      "title": "Hồ sơ xử lý chênh lệch GR/IR",
      "tcode": null,
      "fiori_app": "F3302",
      "source_ids": [
        "S12"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "po",
        "item",
        "currency",
        "key_date"
      ],
      "columns": [
        "company",
        "po",
        "item",
        "key_date",
        "gr_value",
        "ir_value",
        "difference",
        "currency",
        "status",
        "processor",
        "reason"
      ],
      "selection": "Company/PO item/currency và processing status; xác minh export có detail hay aggregate.",
      "reading": "Delta hỗ trợ tìm GR chưa invoice, invoice chưa GR, timing hoặc price; status là workflow, không điều chỉnh GL.",
      "reconciliation": "PO history MM08 + GL GR/IR FI02 + MM06 tạo bridge opening/movements/FX/manual clearing.",
      "control": "Nguồn 2025 FPS01 loại scheduling agreements. Không tự write-off hoặc chấp nhận đề xuất ML.",
      "ifrs_ref": "CUTOFF",
      "lineage": "PO-history quantities/values + FI open items → reconciliation case → reviewed resolution.",
      "worked_example": "GR 1.000 - IR 900 = 100 cần giải thích; chưa thể tự tạo accrual thêm 100 nếu GR/IR đã ghi nợ.",
      "existing_contract": "D18",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + po + item + currency + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S12",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/17f3a45189524e78b4a80bf51ff2b741.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F3302; scheduling agreements unsupported; current-data restriction; ML needs separate subscription."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_value",
          "label": "GR Value",
          "meaning": "Giá trị nhập hàng trong cùng cơ sở tiền/định giá với IR.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_value",
          "label": "IR Value",
          "meaning": "Giá trị hóa đơn; VAT/charges/FX phải tách trước đối chiếu.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Chênh lệch theo công thức trong hồ sơ; dấu dương không luôn là bất lợi.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "processor",
          "label": "Processor",
          "meaning": "Người/nhóm phụ trách exception, không phải chủ thể chịu trách nhiệm IFRS tự động.",
          "sample": "AP_MM_TEAM",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "reason",
          "label": "Reason",
          "meaning": "Mã/diễn giải lý do; nguyên nhân phải có bằng chứng, không suy chỉ từ delta.",
          "sample": "INVOICE_PENDING",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F3302 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/PO item/currency và processing status; xác minh export có detail hay aggregate.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "PO history MM08 + GL GR/IR FI02 + MM06 tạo bridge opening/movements/FX/manual clearing. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI16-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "po",
          "item",
          "key_date",
          "gr_value",
          "ir_value",
          "difference",
          "currency",
          "status",
          "processor",
          "reason"
        ],
        "rows": [
          {
            "company": "1000",
            "po": "4500000001",
            "item": "00010",
            "key_date": "2026-09-30",
            "gr_value": "1000",
            "ir_value": "900",
            "difference": "100",
            "currency": "USD",
            "status": "REQUIRES_REVIEW",
            "processor": "AP_MM_TEAM",
            "reason": "INVOICE_PENDING"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI16",
        "variants": [
          {
            "id": "FI16-01",
            "source_transaction": "F3302 Reconcile GR/IR Accounts (tiêu đề hiển thị: 'Intelligent Goods and Invoice Receipt Account Reconciliation')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.michaelmanagement.com/blogs/sap/understanding-the-goods-and-invoice-receipt-process",
            "fields_read_from_source": 8,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI16-01.xlsx",
            "raw_csv": "source-layout-downloads/FI16-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI16-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO01",
      "module": "CO",
      "title": "Chi tiết chi phí cost center thực tế",
      "tcode": "KSB1 / KSB1N",
      "fiori_app": null,
      "source_ids": [
        "S13"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "doc",
        "line",
        "cost_center",
        "cost_element",
        "amount",
        "currency",
        "activity",
        "qty",
        "uom"
      ],
      "selection": "Controlling area, cost center/group, year/period, cost element; chọn line items không summary.",
      "reading": "Dương là debit cost, âm là credit/allocation theo mẫu; không bỏ secondary costs.",
      "reconciliation": "Tổng theo center/element ↔ CO03 actual; bridge FI02 cho primary + secondary/reclass khác scope.",
      "control": "Không kỳ vọng mọi secondary allocation tăng expense toàn công ty. Chưa xác nhận S/4 layout từ ERP source.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "CO actual journal projection → center/element totals → overhead review.",
      "worked_example": "Center debit 1.200, allocation credit -1.000 ⇒ còn 200; total gross debit không là closing cost.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S13",
          "url": "https://help.sap.com/docs/SAP_ERP/b42281c1645049a4b07c0ab25ec8b899/393d0af19a65491db36b6465494dd068.html",
          "version": "ERP 6.0 EHP8",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KSB1/KSB1N behavior, hierarchy and layout; not S/4 target certification."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "activity",
          "label": "Activity Type",
          "meaning": "Loại hoạt động CO, ví dụ giờ máy; phải kèm activity UoM.",
          "sample": "MACHINE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KSB1 / KSB1N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Controlling area, cost center/group, year/period, cost element; chọn line items không summary.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng theo center/element ↔ CO03 actual; bridge FI02 cho primary + secondary/reclass khác scope. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO01-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "doc",
          "line",
          "cost_center",
          "cost_element",
          "amount",
          "currency",
          "activity",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "001",
            "cost_center": "CC1100",
            "cost_element": "510000",
            "amount": "1200",
            "currency": "USD",
            "activity": "MACHINE",
            "qty": "100",
            "uom": "H"
          },
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "002",
            "cost_center": "CC1100",
            "cost_element": "910000",
            "amount": "-1000",
            "currency": "USD",
            "activity": null,
            "qty": null,
            "uom": null
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO01",
        "variants": [
          {
            "id": "CO01-01",
            "source_transaction": "KSB1 (app 'Display Actual Cost Line Items for Cost Centers' trong Fiori launchpad)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-reporting/report-on-postings-line-items-ksb1.pdf",
            "fields_read_from_source": 14,
            "documented_fields": 16,
            "xlsx": "source-layout-downloads/CO01-01.xlsx",
            "raw_csv": "source-layout-downloads/CO01-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO01-01.flat.csv"
          },
          {
            "id": "CO01-02",
            "source_transaction": "KSB1",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://educationbusinesscenter.uky.edu/sites/default/files/2025-01/ksb1-for-cost-centers.pdf",
            "fields_read_from_source": 21,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO01-02.xlsx",
            "raw_csv": "source-layout-downloads/CO01-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO01-02.flat.csv"
          },
          {
            "id": "CO01-03",
            "source_transaction": "KSB1",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://finance.utoronto.ca/wp-content/uploads/2015/10/basiccoreporting.pdf",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO01-03.xlsx",
            "raw_csv": "source-layout-downloads/CO01-03.layout.csv",
            "flat_csv": "source-layout-downloads/CO01-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO02",
      "module": "CO",
      "title": "Chi tiết kế hoạch cost center",
      "tcode": "KSBP / KSBPN",
      "fiori_app": null,
      "source_ids": [
        "S14"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "version",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "version",
        "doc",
        "line",
        "cost_center",
        "cost_element",
        "plan",
        "currency",
        "qty",
        "uom"
      ],
      "selection": "CO area/year/period/version và center group; kiểm tra plan line items thực sự được lưu trong hệ.",
      "reading": "Plan không phải posted actual; một version không được cộng với version khác.",
      "reconciliation": "Group plan cùng scope ↔ CO03 plan; đối với approved budget input, giữ change log.",
      "control": "Không thấy line items không có nghĩa budget bằng 0; có thể plan lưu aggregate hoặc nguồn planning khác.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Approved planning dataset → plan line items → plan/actual comparison.",
      "worked_example": "Version 000 plan 1.000; version 001 forecast 1.100: so sánh, không cộng thành 2.100.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + version + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S14",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/5e23dc8fe9be4fd496f8ab556667ea05/449d1bc67902432eaa645501e3a251a0.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KSBP/KSBPN; summarization changes grain."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plan",
          "label": "Plan Cost",
          "meaning": "Chi phí kế hoạch của version chọn; không phải target theo actual output.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KSBP / KSBPN nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "CO area/year/period/version và center group; kiểm tra plan line items thực sự được lưu trong hệ.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Group plan cùng scope ↔ CO03 plan; đối với approved budget input, giữ change log. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO02-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "version",
          "doc",
          "line",
          "cost_center",
          "cost_element",
          "plan",
          "currency",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "version": "000",
            "doc": "1900000001",
            "line": "001",
            "cost_center": "CC1100",
            "cost_element": "510000",
            "plan": "1000",
            "currency": "USD",
            "qty": "100",
            "uom": "EA"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO02",
        "variants": [
          {
            "id": "CO02-01",
            "source_transaction": "KSBP (app 'Display Plan Cost Line Items for Cost Centers')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-financial-adjustments/creating-and-uploading-an-annual-budget-virement.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO02-01.xlsx",
            "raw_csv": "source-layout-downloads/CO02-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO02-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO03",
      "module": "CO",
      "title": "Cost center Actual / Plan / Variance",
      "tcode": "S_ALR_87013611",
      "fiori_app": null,
      "source_ids": [
        "S15"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "period",
        "version",
        "cost_center",
        "cost_element",
        "currency"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "version",
        "cost_center",
        "cost_element",
        "actual",
        "plan",
        "variance",
        "currency"
      ],
      "selection": "CO area/year/period/version/cost-center group; cùng hierarchy và currency cho so sánh.",
      "reading": "Trong hồ sơ này variance = actual - plan; chiều dấu/% hiển thị SAP phải được xác nhận bằng mẫu thật.",
      "reconciliation": "Actual ↔ CO01; plan ↔ CO02; variance tổng bằng tổng actual trừ tổng plan.",
      "control": "Plan = 0 thì variance% là null có lý do, không infinity. Không suy lãng phí chỉ từ vượt plan.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Actual + plan aggregates → management variance → driver investigation.",
      "worked_example": "Actual 1.200 - plan 1.000 = 200; chưa kết luận bất lợi nếu sản lượng tăng tương ứng.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + period + version + cost_center + cost_element + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S15",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/caf31ad0fb24449a8c6e820a738d3bc8/acbe435a7f30488d84269dbe6a65cd32.html",
          "version": "S/4HANA; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "S_ALR_87013611 totals; S_ALR_87012993 orders actual/plan/variance. Column fixture still needed."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plan",
          "label": "Plan Cost",
          "meaning": "Chi phí kế hoạch của version chọn; không phải target theo actual output.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "variance",
          "label": "Variance",
          "meaning": "Trong mẫu: actual - plan; xác nhận dấu SAP từ layout thực.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở S_ALR_87013611 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "CO area/year/period/version/cost-center group; cùng hierarchy và currency cho so sánh.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Actual ↔ CO01; plan ↔ CO02; variance tổng bằng tổng actual trừ tổng plan. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO03-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "version",
          "cost_center",
          "cost_element",
          "actual",
          "plan",
          "variance",
          "currency"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "version": "000",
            "cost_center": "CC1100",
            "cost_element": "510000",
            "actual": "1200",
            "plan": "1000",
            "variance": "200",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO03",
        "variants": [
          {
            "id": "CO03-01",
            "source_transaction": "S_ALR_87013611 (Cost Centers: Actual/Plan/Variance, Report Painter)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://erpcorp.com/sap-controlling-blog/sap-hana-production-variance-analysis",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO03-01.xlsx",
            "raw_csv": "source-layout-downloads/CO03-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO03-01.flat.csv"
          },
          {
            "id": "CO03-02",
            "source_transaction": "S_ALR_87013620 (Act/Plan/Commit — báo cáo cùng họ Report Painter, KHÔNG phải S_ALR_87013611)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-financial-adjustments/creating-and-uploading-an-annual-budget-virement.pdf",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO03-02.xlsx",
            "raw_csv": "source-layout-downloads/CO03-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO03-02.flat.csv"
          },
          {
            "id": "CO03-03",
            "source_transaction": "ZSO3 (Report Painter tùy biến U of T, thư viện 1VK — cùng thư viện với S_ALR_87013611)",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://finance.utoronto.ca/wp-content/uploads/2015/10/basiccoreporting.pdf",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO03-03.xlsx",
            "raw_csv": "source-layout-downloads/CO03-03.layout.csv",
            "flat_csv": "source-layout-downloads/CO03-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO04",
      "module": "CO",
      "title": "Chi tiết chi phí order thực tế",
      "tcode": "KOB1 / KOB1N",
      "fiori_app": null,
      "source_ids": [
        "S16",
        "S17"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "doc",
        "line",
        "order",
        "cost_element",
        "amount",
        "currency",
        "date"
      ],
      "selection": "CO area/order range/year/period; giữ debit, credit, settlement và reversal scope.",
      "reading": "Cost-object line item khác FI ledger line; phân loại order sản xuất/nội bộ trước đọc.",
      "reconciliation": "Net order costs ↔ variance/WIP/settlement theo CO11–CO13; dùng bridge document, không chỉ amount.",
      "control": "Không cộng settlement credit lần hai vào COGS. Namespace CO document phải riêng FI.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "CO order line items → order cost rollforward → WIP/variance/settlement.",
      "worked_example": "Input costs 1.200 và GR credit -1.100 tạo balance 100, chưa tự bằng variance nếu còn WIP.",
      "existing_contract": "D07",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S16",
          "url": "https://help.sap.com/saphelp_em700_ehp01/helpdata/en/40/f08473b9d74821bf2d187859afa75e/content.htm?no_cache=true",
          "version": "Legacy SAP documentation",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KOB1 actual order line items; historical reporting reference."
        },
        {
          "id": "S17",
          "url": "https://help.sap.com/doc/52d079c2db9c42078a4467ce524a19ef/6.16.13/en-US/EHP6_on_HANA_SP00%20to%20SP02.pdf",
          "version": "ERP EHP6 for HANA SP00-SP02, p16",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KOBP/KOBPN and KOB1/KOB1N named; does not establish S/4 replacement policy."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KOB1 / KOB1N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "CO area/order range/year/period; giữ debit, credit, settlement và reversal scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net order costs ↔ variance/WIP/settlement theo CO11–CO13; dùng bridge document, không chỉ amount. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO04-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "doc",
          "line",
          "order",
          "cost_element",
          "amount",
          "currency",
          "date"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "001",
            "order": "1000001",
            "cost_element": "510000",
            "amount": "1200",
            "currency": "USD",
            "date": "2026-09-15"
          },
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "002",
            "order": "1000001",
            "cost_element": "150000",
            "amount": "-1100",
            "currency": "USD",
            "date": "2026-09-15"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO04",
        "variants": [
          {
            "id": "CO04-01",
            "source_transaction": "KOB1 (app 'Display Actual Cost Line Items for Orders')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-reporting/report-on-sios-postings-line-items-kob1.pdf",
            "fields_read_from_source": 9,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO04-01.xlsx",
            "raw_csv": "source-layout-downloads/CO04-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO04-01.flat.csv"
          },
          {
            "id": "CO04-02",
            "source_transaction": "KOB1",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://www.cmich.edu/docs/default-source/finance-and-administrative-services-division/financial-services-and-reporting/accounting-services/resources/io-manual.pdf?sfvrsn=3123dc2e_4",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO04-02.xlsx",
            "raw_csv": "source-layout-downloads/CO04-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO04-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO05",
      "module": "CO",
      "title": "Chi tiết kế hoạch internal order",
      "tcode": "KOBP / KOBPN",
      "fiori_app": null,
      "source_ids": [
        "S17"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "version",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "version",
        "doc",
        "line",
        "order",
        "cost_element",
        "plan",
        "currency"
      ],
      "selection": "Order type internal order, CO area/year/period/version; không áp dụng tự động cho mọi manufacturing order.",
      "reading": "Plan theo cost element khác approved investment budget và actual commitment.",
      "reconciliation": "Plan totals ↔ approved order plan; actual từ CO04 cần cùng object và kỳ để so.",
      "control": "Nguồn hiện là ERP HANA lịch sử; S/4 target/status chưa được xác nhận, không hứa thay thế Fiori.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Order planning records → order/element plan → spend review.",
      "worked_example": "Order plan 1.000, actual 900: phần còn 100 không chứng minh còn cash budget nếu commitments 200.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + version + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S17",
          "url": "https://help.sap.com/doc/52d079c2db9c42078a4467ce524a19ef/6.16.13/en-US/EHP6_on_HANA_SP00%20to%20SP02.pdf",
          "version": "ERP EHP6 for HANA SP00-SP02, p16",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KOBP/KOBPN and KOB1/KOB1N named; does not establish S/4 replacement policy."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plan",
          "label": "Plan Cost",
          "meaning": "Chi phí kế hoạch của version chọn; không phải target theo actual output.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KOBP / KOBPN nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Order type internal order, CO area/year/period/version; không áp dụng tự động cho mọi manufacturing order.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Plan totals ↔ approved order plan; actual từ CO04 cần cùng object và kỳ để so. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO05-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "version",
          "doc",
          "line",
          "order",
          "cost_element",
          "plan",
          "currency"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "version": "000",
            "doc": "1900000001",
            "line": "001",
            "order": "1000001",
            "cost_element": "510000",
            "plan": "1000",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#CO05",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-CO05-01",
            "classification": "PROXY_FAMILY_LAYOUT_NOT_VERIFIED_KOBP_PLAN_OUTPUT",
            "columns": 8,
            "source_url": "https://s3-eu-west-1.amazonaws.com/gxmedia.galileo-press.de/leseproben/3625/Reading_Sample_1012_Controlling_with_SAP_Practical_Guide.pdf",
            "source_sha256": "3288eb7f5b12d4bc58962ae873803425ec889d93d1b0f86324263e6b4d3608c5",
            "xlsx": "finance-gaps-downloads/GAP-CO05-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-CO05-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-CO05-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO06",
      "module": "CO",
      "title": "Standard cost estimate — tổng quan",
      "tcode": "CK13N",
      "fiori_app": "CK13N",
      "source_ids": [
        "S18"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "estimate",
        "valuation_view",
        "currency"
      ],
      "columns": [
        "estimate",
        "material",
        "plant",
        "costing_variant",
        "version",
        "valid_from",
        "lot_size",
        "price",
        "price_unit",
        "currency",
        "valuation_view"
      ],
      "selection": "Material/plant/costing variant; chọn estimate cụ thể, ngày hiệu lực, costing version và valuation view.",
      "reading": "Unit price phải đọc cùng lot size/price unit. Saved estimate không chứng minh đã released standard price.",
      "reconciliation": "CO07 leaf total / lot size ↔ price theo price unit; đối material valuation/release evidence riêng.",
      "control": "Không lấy estimate mới nhất để hồi tố kỳ cũ; giữ estimate ID trong mọi join.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "BOM/routing/prices theo costing selection → estimate header → selected standard-cost basis.",
      "worked_example": "Tổng estimate 1.000 cho lot 100 ⇒ 10/EA; giá này chưa là giá kế toán nếu chưa release.",
      "existing_contract": "D09",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: estimate + valuation_view + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S18",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/6b39bd1d0e5e4099a5b65d835c29c696/c896d7531a4d414de10000000a174cb4.html",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID CK13N, material/plant/costing variant selection, component breakdown; not every Fiori app has F-number."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "estimate",
          "label": "Cost Estimate ID",
          "meaning": "Định danh riêng lần costing; không ghép chỉ material/plant.",
          "sample": "EST-2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "costing_variant",
          "label": "Costing Variant",
          "meaning": "Cấu hình loại/valuation của estimate; ví dụ minh họa chưa tồn tại trong SAP.",
          "sample": "DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valid_from",
          "label": "Valid From",
          "meaning": "Ngày bắt đầu hiệu lực; không dùng estimate tương lai cho kỳ quá khứ.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "lot_size",
          "label": "Costing Lot Size",
          "meaning": "Sản lượng làm cơ sở estimate; chuẩn hóa trước so actual unit cost.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price",
          "label": "Price",
          "meaning": "Giá cho price_unit đơn vị; không mặc định giá cho 1.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price_unit",
          "label": "Price Unit",
          "meaning": "Mẫu số định giá: value = qty × price / price_unit khi phù hợp.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CK13N / CK13N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Material/plant/costing variant; chọn estimate cụ thể, ngày hiệu lực, costing version và valuation view.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "CO07 leaf total / lot size ↔ price theo price unit; đối material valuation/release evidence riêng. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO06-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Estimate tổng 1.000, lot100 được minh họa chi tiết ở CO07/08. Chưa có release evidence.",
        "columns": [
          "estimate",
          "material",
          "plant",
          "costing_variant",
          "version",
          "valid_from",
          "lot_size",
          "price",
          "price_unit",
          "currency",
          "valuation_view"
        ],
        "rows": [
          {
            "estimate": "EST-2026-09-01",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "costing_variant": "DEMO",
            "version": "000",
            "valid_from": "2026-09-01",
            "lot_size": "100",
            "price": "10",
            "price_unit": "1",
            "currency": "USD",
            "valuation_view": "LEGAL"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO06",
        "variants": [
          {
            "id": "CO06-01",
            "source_transaction": "CK13N (Display Material Cost Estimate with Quantity Structure)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/basic-concepts-of-cost-components-in-sap-s4hana-finance",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO06-01.xlsx",
            "raw_csv": "source-layout-downloads/CO06-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO06-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO07",
      "module": "CO",
      "title": "Cost estimate — itemization",
      "tcode": "CK13N",
      "fiori_app": "CK13N",
      "source_ids": [
        "S18"
      ],
      "kind": "NATIVE_VIEW",
      "keys": [
        "estimate",
        "valuation_view",
        "currency",
        "node"
      ],
      "columns": [
        "estimate",
        "node",
        "is_leaf",
        "component",
        "qty",
        "uom",
        "amount",
        "currency",
        "valuation_view"
      ],
      "selection": "Mở estimate của CO06, chọn itemization; lưu level và subtotal flags, layout và costing lot.",
      "reading": "Vật tư, activity, overhead có dòng riêng; qty khác đơn vị không cộng thành tổng sản lượng.",
      "reconciliation": "Sum amount ở leaf cùng currency/view ↔ CO06 total; phân nhóm ↔ CO08.",
      "control": "Không cộng parent với child. Cùng component xuất hiện nhiều lần được giữ theo node/item identity.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Cost estimate identity → itemization nodes → leaf costing contributions.",
      "worked_example": "Material 600 + labor 250 + overhead 150 = 1.000; subtotal 1.000 chỉ để trình bày.",
      "existing_contract": "D10",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: estimate + valuation_view + currency + node. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S18",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/6b39bd1d0e5e4099a5b65d835c29c696/c896d7531a4d414de10000000a174cb4.html",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID CK13N, material/plant/costing variant selection, component breakdown; not every Fiori app has F-number."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "estimate",
          "label": "Cost Estimate ID",
          "meaning": "Định danh riêng lần costing; không ghép chỉ material/plant.",
          "sample": "EST-2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "node",
          "label": "Hierarchy Node",
          "meaning": "Mã node; bắt buộc nhận diện subtotal khi cộng cây.",
          "sample": "NODE-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "is_leaf",
          "label": "Is Leaf",
          "meaning": "Cờ phân biệt dòng lá và dòng tổng; chỉ cộng một cấp hợp lệ.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "component",
          "label": "Component / Resource",
          "meaning": "Vật liệu hoặc tài nguyên trong itemization; không luôn là material master.",
          "sample": "RM-COPPER",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CK13N / CK13N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Mở estimate của CO06, chọn itemization; lưu level và subtotal flags, layout và costing lot.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum amount ở leaf cùng currency/view ↔ CO06 total; phân nhóm ↔ CO08. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO07-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "estimate",
          "node",
          "is_leaf",
          "component",
          "qty",
          "uom",
          "amount",
          "currency",
          "valuation_view"
        ],
        "rows": [
          {
            "estimate": "EST-2026-09-01",
            "node": "ROOT",
            "is_leaf": "false",
            "component": "TOTAL",
            "qty": null,
            "uom": null,
            "amount": "1000",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "node": "10",
            "is_leaf": "true",
            "component": "RM-COPPER",
            "qty": "100",
            "uom": "KG",
            "amount": "600",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "node": "20",
            "is_leaf": "true",
            "component": "LABOR",
            "qty": "25",
            "uom": "H",
            "amount": "250",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "node": "30",
            "is_leaf": "true",
            "component": "OVERHEAD",
            "qty": null,
            "uom": null,
            "amount": "150",
            "currency": "USD",
            "valuation_view": "LEGAL"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO07",
        "variants": [
          {
            "id": "CO07-01",
            "source_transaction": "CK13N / CK11N — Itemization",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/basic-concepts-of-cost-components-in-sap-s4hana-finance",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO07-01.xlsx",
            "raw_csv": "source-layout-downloads/CO07-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO07-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO08",
      "module": "CO",
      "title": "Cost estimate — cost component split",
      "tcode": "CK13N",
      "fiori_app": "CK13N",
      "source_ids": [
        "S18"
      ],
      "kind": "NATIVE_VIEW",
      "keys": [
        "estimate",
        "valuation_view",
        "currency",
        "component_group"
      ],
      "columns": [
        "estimate",
        "component_group",
        "amount",
        "currency",
        "valuation_view"
      ],
      "selection": "Cùng estimate với CO06; chọn cost component view và structure được phê duyệt.",
      "reading": "Cost component là nhóm cấu hình, không tự ánh xạ thành IFRS expense nature hay element.",
      "reconciliation": "Tổng component ↔ CO07 leaf; reconcile additive view, loại duplicate full-cost/COGM/COGS views.",
      "control": "Structure thay đổi theo ngày/config; không ghép tên component qua hai hệ nếu chưa mapping.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Itemization + configured component assignment → component split.",
      "worked_example": "Materials 600, conversion 400 ⇒ total 1.000; conversion còn cần kiểm tra eligible overhead.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: estimate + valuation_view + currency + component_group. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S18",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/6b39bd1d0e5e4099a5b65d835c29c696/c896d7531a4d414de10000000a174cb4.html",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID CK13N, material/plant/costing variant selection, component breakdown; not every Fiori app has F-number."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "estimate",
          "label": "Cost Estimate ID",
          "meaning": "Định danh riêng lần costing; không ghép chỉ material/plant.",
          "sample": "EST-2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "component_group",
          "label": "Cost Component",
          "meaning": "Nhóm phân rã giá thành; giữ cấu trúc/version được duyệt.",
          "sample": "MATERIAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CK13N / CK13N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Cùng estimate với CO06; chọn cost component view và structure được phê duyệt.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng component ↔ CO07 leaf; reconcile additive view, loại duplicate full-cost/COGM/COGS views. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO08-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "estimate",
          "component_group",
          "amount",
          "currency",
          "valuation_view"
        ],
        "rows": [
          {
            "estimate": "EST-2026-09-01",
            "component_group": "MATERIAL",
            "amount": "600",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "component_group": "CONVERSION",
            "amount": "400",
            "currency": "USD",
            "valuation_view": "LEGAL"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO08",
        "variants": [
          {
            "id": "CO08-01",
            "source_transaction": "CK13N / CK11N — Cost Components",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/basic-concepts-of-cost-components-in-sap-s4hana-finance",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO08-01.xlsx",
            "raw_csv": "source-layout-downloads/CO08-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO08-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO09",
      "module": "CO",
      "title": "Material Price Analysis",
      "tcode": "CKM3N",
      "fiori_app": "CKM3N",
      "source_ids": [
        "S19",
        "S21"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "valuation_area",
        "valuation_type",
        "year",
        "period",
        "currency",
        "valuation_view",
        "node"
      ],
      "columns": [
        "material",
        "valuation_area",
        "valuation_type",
        "year",
        "period",
        "node",
        "is_leaf",
        "category",
        "qty",
        "uom",
        "amount",
        "currency",
        "valuation_view",
        "price",
        "price_unit"
      ],
      "selection": "Material/valuation area/period/currency/view; lưu price-determination status và UPA/ledger nếu dùng.",
      "reading": "Cây beginning/receipts/consumption/ending chứa subtotal; actual price cần trạng thái settlement, không chỉ nhìn số.",
      "reconciliation": "Beginning + receipts - consumption ± adjustments = ending ở đúng leaf flow; ↔ MM05 + FI02.",
      "control": "Not allocated/not distributed phải được giải thích. Không dùng status CKMLCP xanh như bằng chứng mọi price difference đã phân bổ.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Valued material flows → price-analysis hierarchy → cost/stock bridge; mapping bảng phụ thuộc UPA.",
      "worked_example": "100 EA tổng cost 1.050 ⇒ 10,5/EA nếu toàn bộ differences hợp lệ được phân bổ; xem exception trước dùng.",
      "existing_contract": "D11",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: material + valuation_area + valuation_type + year + period + currency + valuation_view + node. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S19",
          "url": "https://help.sap.com/docs/PRODUCT_ID/7f47a6d9441c46ac86c96fd27f6015f0/a787d353c6244308e10000000a174cb4.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "CKM3/CKM3N/CKM3_NAV; actual prices after settlement; non-distributed and non-allocated differences."
        },
        {
          "id": "S21",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8fbeed5f2046489696a50ac7fd76f9c6/b374805c0b0645e7a6969259e6af3031.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "UPA introduces ledger runs; previous period run displays differ; old-run reversal restrictions."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_type",
          "label": "Valuation Type",
          "meaning": "Split valuation; trống chỉ hợp lệ khi profile xác nhận không dùng.",
          "sample": "DOMESTIC",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "node",
          "label": "Hierarchy Node",
          "meaning": "Mã node; bắt buộc nhận diện subtotal khi cộng cây.",
          "sample": "NODE-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "is_leaf",
          "label": "Is Leaf",
          "meaning": "Cờ phân biệt dòng lá và dòng tổng; chỉ cộng một cấp hợp lệ.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "category",
          "label": "Category",
          "meaning": "Nhóm luồng/variance/giá; ý nghĩa phụ thuộc report.",
          "sample": "RECEIPTS",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price",
          "label": "Price",
          "meaning": "Giá cho price_unit đơn vị; không mặc định giá cho 1.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price_unit",
          "label": "Price Unit",
          "meaning": "Mẫu số định giá: value = qty × price / price_unit khi phù hợp.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CKM3N / CKM3N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Material/valuation area/period/currency/view; lưu price-determination status và UPA/ledger nếu dùng.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Beginning + receipts - consumption ± adjustments = ending ở đúng leaf flow; ↔ MM05 + FI02. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO09-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Một node ending minh họa; không đủ dữ liệu thực thi full rollforward.",
        "columns": [
          "material",
          "valuation_area",
          "valuation_type",
          "year",
          "period",
          "node",
          "is_leaf",
          "category",
          "qty",
          "uom",
          "amount",
          "currency",
          "valuation_view",
          "price",
          "price_unit"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "valuation_area": "1100",
            "valuation_type": "DOMESTIC",
            "year": "2026",
            "period": "009",
            "node": "ENDING",
            "is_leaf": "true",
            "category": "ENDING",
            "qty": "100",
            "uom": "EA",
            "amount": "1050",
            "currency": "USD",
            "valuation_view": "LEGAL",
            "price": "10.5",
            "price_unit": "1"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO09",
        "variants": [
          {
            "id": "CO09-01",
            "source_transaction": "CKM3N (Material Price Analysis — Price Determination Structure)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/ckm3n-analise-do-historico-do-material/",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO09-01.xlsx",
            "raw_csv": "source-layout-downloads/CO09-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO09-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO10",
      "module": "CO",
      "title": "Actual costing — nhật ký và trạng thái lần chạy",
      "tcode": "CKMLCP",
      "fiori_app": "CKMLCP",
      "source_ids": [
        "S20",
        "S21",
        "S39"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "material",
        "valuation_area",
        "step",
        "attempt"
      ],
      "columns": [
        "run",
        "material",
        "valuation_area",
        "year",
        "period",
        "step",
        "attempt",
        "status",
        "error_count",
        "test_run"
      ],
      "selection": "Đọc existing run và log do người vận hành cung cấp; lưu period, run type, ledger/UPA và từng attempt.",
      "reading": "Một dòng là trạng thái bước, không là amount. Selection/preparation/settlement/post-closing khác nhau.",
      "reconciliation": "Danh sách selected/processed/error ↔ object population; posted result ↔ CO09/FI02 qua refs.",
      "control": "Không thực hiện Create/Execute/Close trong tài liệu huấn luyện. Ghi rerun/reversal thay vì ghi đè kết quả cũ.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Costing run → material/step attempt → result/document pointers.",
      "worked_example": "99 success + 1 error trên 100 vật tư: coverage 99%, không chứng nhận toàn kỳ complete.",
      "existing_contract": "D12",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + material + valuation_area + step + attempt. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S20",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/7f47a6d9441c46ac86c96fd27f6015f0/c8f1d353ca9f4408e10000000a174cb4.html",
          "version": "Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "CKMLCP executes actual costing, not a simple display report."
        },
        {
          "id": "S21",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8fbeed5f2046489696a50ac7fd76f9c6/b374805c0b0645e7a6969259e6af3031.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "UPA introduces ledger runs; previous period run displays differ; old-run reversal restrictions."
        },
        {
          "id": "S39",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/7f47a6d9441c46ac86c96fd27f6015f0/af657fd431b949e5996581b0dfdf07b2.html?q=Display+Actual+Costing+Result",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Released CDS listed; related-search results mark F6073 deprecated. Replacement not established here."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "step",
          "label": "Run Step",
          "meaning": "Bước thực thi theo edition/UPA; giữ nhãn raw chính xác.",
          "sample": "SETTLEMENT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "attempt",
          "label": "Run Attempt",
          "meaning": "Lần thực hiện trong run/step; cần lưu để không cộng rerun.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "error_count",
          "label": "Error Count",
          "meaning": "Số lỗi của bước; 0 không tự chứng minh postings đầy đủ.",
          "sample": "0",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Đọc existing run và log do người vận hành cung cấp; lưu period, run type, ledger/UPA và từng attempt.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Danh sách selected/processed/error ↔ object population; posted result ↔ CO09/FI02 qua refs. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO10-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Hai vật tư để học đọc status; không phải dữ liệu cho worked example 100 vật tư.",
        "columns": [
          "run",
          "material",
          "valuation_area",
          "year",
          "period",
          "step",
          "attempt",
          "status",
          "error_count",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "material": "FG-CONNECTOR-01",
            "valuation_area": "1100",
            "year": "2026",
            "period": "009",
            "step": "SETTLEMENT",
            "attempt": "1",
            "status": "SUCCESS",
            "error_count": "0",
            "test_run": "true"
          },
          {
            "run": "DEMO-RUN-09",
            "material": "FG-CONNECTOR-02",
            "valuation_area": "1100",
            "year": "2026",
            "period": "009",
            "step": "SETTLEMENT",
            "attempt": "1",
            "status": "ERROR",
            "error_count": "1",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO10",
        "variants": [
          {
            "id": "CO10-01",
            "source_transaction": "CKMLCP (Costing Cockpit: Actual Costing, S/4HANA ≥1610)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapinsider.org/wp-content/uploads/2024/10/ReunionA_Oct15_130-230_Ovigele_WhatYouNeedToKnowMaterialLedger.pdf",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO10-01.xlsx",
            "raw_csv": "source-layout-downloads/CO10-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO10-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO11",
      "module": "CO",
      "title": "Kết quả phân tích variance sản xuất",
      "tcode": "KKS1 / KKS1H",
      "fiori_app": null,
      "source_ids": [
        "S22"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "order",
        "year",
        "period",
        "version",
        "category",
        "cost_element",
        "currency"
      ],
      "columns": [
        "order",
        "year",
        "period",
        "version",
        "category",
        "cost_element",
        "actual",
        "target",
        "variance",
        "currency",
        "test_run"
      ],
      "selection": "Chỉ đọc kết quả calculation đã lưu; chốt target-cost version, order status và period.",
      "reading": "Variance = actual control costs - target costs trong phép minh họa; category theo config không cố định 5 nhóm.",
      "reconciliation": "Tổng category ↔ calculation control total; CO04 input bridge, CO13 settlement-relevant amount bridge.",
      "control": "KKS result không phải FI posting; WIP/output credits và target version có thể làm delta khác actual-plan.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Order actuals + quantity/target basis → variance result → eligible settlement.",
      "worked_example": "Actual 1.200 - target 1.100 = 100; price 60 + usage 40 chỉ hợp lệ nếu nguồn phân loại hỗ trợ.",
      "existing_contract": "D08",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: order + year + period + version + category + cost_element + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S22",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878055.html?locale=pl-PL&state=PRODUCTION&version=1.0",
          "version": "Support content; not a release matrix",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KKS1/H, KKAO/H, CO88/H; differing supported functions; source is translated."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "category",
          "label": "Category",
          "meaning": "Nhóm luồng/variance/giá; ý nghĩa phụ thuộc report.",
          "sample": "RECEIPTS",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "target",
          "label": "Target Cost",
          "meaning": "Chi phí mục tiêu theo output và target version; không đồng nhất ngân sách.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "variance",
          "label": "Variance",
          "meaning": "Derived trong bài tập: actual - target hoặc actual - plan theo hồ sơ.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Chỉ đọc kết quả calculation đã lưu; chốt target-cost version, order status và period.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng category ↔ calculation control total; CO04 input bridge, CO13 settlement-relevant amount bridge. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO11-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Một dòng tổng; không tạo giả decomposition price/usage khi thiếu dữ liệu.",
        "columns": [
          "order",
          "year",
          "period",
          "version",
          "category",
          "cost_element",
          "actual",
          "target",
          "variance",
          "currency",
          "test_run"
        ],
        "rows": [
          {
            "order": "1000001",
            "year": "2026",
            "period": "009",
            "version": "000",
            "category": "TOTAL_VARIANCE",
            "cost_element": "510000",
            "actual": "1200",
            "target": "1100",
            "variance": "100",
            "currency": "USD",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO11",
        "variants": [
          {
            "id": "CO11-01",
            "source_transaction": "KKBC_ORD (Target/Actual – Comparison; xem kết quả sau KKS1, không phải màn hình chạy KKS1)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://skillstek.com/wip-in-sap-configuration-requirements/",
            "fields_read_from_source": 20,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO11-01.xlsx",
            "raw_csv": "source-layout-downloads/CO11-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO11-01.flat.csv"
          },
          {
            "id": "CO11-02",
            "source_transaction": "F1780 Production Cost Analysis (Fiori)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://erpcorp.com/sap-controlling-blog/sap-fiori-apps-for-variance-management-in-manufacturing",
            "fields_read_from_source": 18,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO11-02.xlsx",
            "raw_csv": "source-layout-downloads/CO11-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO11-02.flat.csv"
          },
          {
            "id": "CO11-03",
            "source_transaction": "Order Cost Detail (Fiori, mở từ F1780; tương đương KKBC_ORD)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://erpcorp.com/sap-controlling-blog/sap-fiori-apps-for-variance-management-in-manufacturing",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO11-03.xlsx",
            "raw_csv": "source-layout-downloads/CO11-03.layout.csv",
            "flat_csv": "source-layout-downloads/CO11-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO12",
      "module": "CO",
      "title": "Kết quả WIP theo order",
      "tcode": "KKAO / KKAOH",
      "fiori_app": null,
      "source_ids": [
        "S22",
        "S44"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "order",
        "year",
        "period",
        "version",
        "currency"
      ],
      "columns": [
        "order",
        "year",
        "period",
        "version",
        "actual",
        "amount",
        "currency",
        "status",
        "test_run"
      ],
      "selection": "Đọc log/result hiện có; lưu results-analysis key/version, status và cutoff, classic hay event-based.",
      "reading": "Amount ở đây là WIP tính toán, actual là cost base; WIP không luôn bằng toàn bộ order balance.",
      "reconciliation": "Opening WIP + change - relieved WIP ↔ closing WIP; posted WIP GL qua CO13/settlement refs.",
      "control": "TECO/DLV, scrap và loss provisions có thể đổi kết quả. Không gọi mọi MTO WIP là contract asset IFRS15.",
      "ifrs_ref": "WIP",
      "lineage": "Order costs + RA configuration/status → WIP calculation → posting evidence bridge.",
      "worked_example": "Costs 1.200, eligible completed transfer 900 ⇒ WIP minh họa 300; cần RA rules trước kết luận thực tế.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: order + year + period + version + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S22",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878055.html?locale=pl-PL&state=PRODUCTION&version=1.0",
          "version": "Support content; not a release matrix",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KKS1/H, KKAO/H, CO88/H; differing supported functions; source is translated."
        },
        {
          "id": "S44",
          "url": "https://www.ifrs.org/content/dam/ifrs/meetings/2024/march/iasb/ap6b-ifrs-15-pir-timing.pdf",
          "version": "IASB staff paper March 2024; not a new standard",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Summarizes IFRS15.31,35,38: control and over-time tests; MTO alone is insufficient."
        }
      ],
      "ifrs_policy": {
        "title": "WIP sản xuất và hợp đồng khách hàng",
        "sources": [
          "S40",
          "S44"
        ],
        "text": "Phân biệt inventory WIP và contract asset theo bản chất hợp đồng. MTO hoặc sales-order stock E không tự đáp ứng IFRS15.35. Xem quyền kiểm soát, alternative use và enforceable right to payment; cần accounting/legal assessment của hợp đồng. Calculation WIP trong CO khác bằng chứng ghi sổ WIP ở FI."
      },
      "column_definitions": [
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "WIP tính toán theo tiền trong mẫu; khác actual input cost và không chứng minh posting.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Đọc log/result hiện có; lưu results-analysis key/version, status và cutoff, classic hay event-based.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Opening WIP + change - relieved WIP ↔ closing WIP; posted WIP GL qua CO13/settlement refs. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO12-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Giá trị eligible completed transfer 900 là giả định bài tập ngoài sample columns.",
        "columns": [
          "order",
          "year",
          "period",
          "version",
          "actual",
          "amount",
          "currency",
          "status",
          "test_run"
        ],
        "rows": [
          {
            "order": "1000001",
            "year": "2026",
            "period": "009",
            "version": "000",
            "actual": "1200",
            "amount": "300",
            "currency": "USD",
            "status": "CALCULATED_NOT_POSTED",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO12",
        "variants": [
          {
            "id": "CO12-01",
            "source_transaction": "KKAO / KKAX (Calculate Work in Process: Object List)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://skillstek.com/wip-in-sap-configuration-requirements/",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO12-01.xlsx",
            "raw_csv": "source-layout-downloads/CO12-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO12-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO13",
      "module": "CO",
      "title": "Bằng chứng settlement order",
      "tcode": "CO88 / CO88H",
      "fiori_app": null,
      "source_ids": [
        "S22"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "sender",
        "receiver",
        "year",
        "period",
        "line",
        "currency"
      ],
      "columns": [
        "run",
        "sender",
        "receiver",
        "year",
        "period",
        "line",
        "amount",
        "currency",
        "accounting_ref",
        "status",
        "test_run"
      ],
      "selection": "Chỉ xem completed/test log và accounting references đã cung cấp; giữ settlement type/period và receiver rules.",
      "reading": "Sender credit/receiver debit là cặp chuyển chi phí; receiver có thể nhiều loại đối tượng.",
      "reconciliation": "Sum sender transfer ↔ sum receiver allocations cùng valuation; tie FI reference tới FI02 nếu relevant.",
      "control": "CO88 khác VA88 của simulator MTO; không thay mapping runtime. Rerun/test không tự thành posting mới.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Settlement rule + calculated result → allocation bridge → accounting documents.",
      "worked_example": "Sender 100 chuyển material 70 + expense 30; không ghi thêm expense 100 ngoài hai receiver.",
      "existing_contract": "SUP01",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + sender + receiver + year + period + line + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S22",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878055.html?locale=pl-PL&state=PRODUCTION&version=1.0",
          "version": "Support content; not a release matrix",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KKS1/H, KKAO/H, CO88/H; differing supported functions; source is translated."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sender",
          "label": "Settlement Sender",
          "meaning": "Đối tượng phát sinh chi phí cần kết chuyển.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "receiver",
          "label": "Settlement Receiver",
          "meaning": "Đối tượng nhận phân bổ/settlement; không tự đồng nghĩa GL account.",
          "sample": "MATERIAL_FG",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Chỉ xem completed/test log và accounting references đã cung cấp; giữ settlement type/period và receiver rules.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum sender transfer ↔ sum receiver allocations cùng valuation; tie FI reference tới FI02 nếu relevant. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO13-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Tất cả test-only nên accounting_ref=null; tuyệt đối không diễn giải đã posted.",
        "columns": [
          "run",
          "sender",
          "receiver",
          "year",
          "period",
          "line",
          "amount",
          "currency",
          "accounting_ref",
          "status",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "sender": "1000001",
            "receiver": "MATERIAL_FG",
            "year": "2026",
            "period": "009",
            "line": "001",
            "amount": "70",
            "currency": "USD",
            "accounting_ref": null,
            "status": "TEST_ONLY",
            "test_run": "true"
          },
          {
            "run": "DEMO-RUN-09",
            "sender": "1000001",
            "receiver": "EXPENSE",
            "year": "2026",
            "period": "009",
            "line": "002",
            "amount": "30",
            "currency": "USD",
            "accounting_ref": null,
            "status": "TEST_ONLY",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO13",
        "variants": [
          {
            "id": "CO13-01",
            "source_transaction": "KO88 (settlement từng order — cùng định dạng output 'Actual Settlement' với CO88)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://sapficoblog.com/internal-order-settlement-in-sap-auc-asset-ko88/",
            "fields_read_from_source": 10,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO13-01.xlsx",
            "raw_csv": "source-layout-downloads/CO13-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO13-01.flat.csv"
          },
          {
            "id": "CO13-02",
            "source_transaction": "KO88 — Basic list",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://sapficoblog.com/internal-order-settlement-in-sap-auc-asset-ko88/",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO13-02.xlsx",
            "raw_csv": "source-layout-downloads/CO13-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO13-02.flat.csv"
          }
        ]
      },
      "supplemental_source_examples": {
        "viewer": "supplemental.html#CO13",
        "target_release": "UNKNOWN",
        "native_export": false,
        "full_field_catalog_verified": false,
        "variants": [
          {
            "id": "SUP-CO13-01",
            "source_file": "SAP COPA.pdf",
            "source_page": 23,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 14,
            "xlsx": "supplemental-downloads/SUP-CO13-01.xlsx"
          }
        ]
      }
    },
    {
      "id": "CO14",
      "module": "CO",
      "title": "Kết quả đơn giá hoạt động thực tế",
      "tcode": "KSII",
      "fiori_app": "F9080",
      "source_ids": [
        "S23"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "cost_center",
        "activity",
        "year",
        "period",
        "currency"
      ],
      "columns": [
        "run",
        "cost_center",
        "activity",
        "year",
        "period",
        "actual",
        "qty",
        "uom",
        "cost_rate",
        "currency",
        "test_run"
      ],
      "selection": "Đọc kết quả run đã có; chốt ledger/CO area và periodic/cumulative method; không tạo run mới.",
      "reading": "Cost rate cần price unit, fixed/variable split và splitting rules ngoài mẫu giản lược.",
      "reconciliation": "Eligible cost ÷ activity qty ↔ rate theo method; revaluation delta ↔ CO04/CO09.",
      "control": "Zero activity giữ rate null và exception. Actual rate không thay IAS2 normal-capacity assessment.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Cost-center actuals + splitting/activity quantity → rate → activity revaluation.",
      "worked_example": "1.200 / 100 H = 12/H trong ví dụ một activity; nhiều activities cần splitting, không chia chung.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + cost_center + activity + year + period + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S23",
          "url": "https://help.sap.com/docs/s4hana-cloud-best-practices/actual-costing-33q-in/calculate-actual-cost-rates-cost-centers",
          "version": "Cloud best practice India; release not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F9080 and KSII alternatives; rate methods and ledger scope matter; sample production-run settings not recommended here."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "activity",
          "label": "Activity Type",
          "meaning": "Loại hoạt động CO, ví dụ giờ máy; phải kèm activity UoM.",
          "sample": "MACHINE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_rate",
          "label": "Cost Rate",
          "meaning": "Chi phí/đơn vị hoạt động; cần fixed/variable và price unit khi dùng thực tế.",
          "sample": "12",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Đọc kết quả run đã có; chốt ledger/CO area và periodic/cumulative method; không tạo run mới.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Eligible cost ÷ activity qty ↔ rate theo method; revaluation delta ↔ CO04/CO09. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO14-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "run",
          "cost_center",
          "activity",
          "year",
          "period",
          "actual",
          "qty",
          "uom",
          "cost_rate",
          "currency",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "cost_center": "CC1100",
            "activity": "MACHINE",
            "year": "2026",
            "period": "009",
            "actual": "1200",
            "qty": "100",
            "uom": "H",
            "cost_rate": "12",
            "currency": "USD",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO14",
        "variants": [
          {
            "id": "CO14-01",
            "source_transaction": "KSII (Price Calculation Results - Actual)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapficocorner.blogspot.com/2024/02/actual-activity-rate-calculation-with.html",
            "fields_read_from_source": 24,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO14-01.xlsx",
            "raw_csv": "source-layout-downloads/CO14-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO14-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO15",
      "module": "CO",
      "title": "Chi tiết profitability / CO-PA",
      "tcode": "KE24",
      "fiori_app": null,
      "source_ids": [
        "S24"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "doc",
        "line",
        "customer",
        "product",
        "profit_center",
        "cost_element",
        "amount",
        "currency"
      ],
      "selection": "Operating concern, PA type, actual record scope/year/period; lưu archive/source selection.",
      "reading": "Costing-based value fields và account-based margin analysis không chung schema. Sample chọn account-like view.",
      "reconciliation": "Account-based totals ↔ FI02 P&L theo market segment; costing-based cần value-field bridge riêng.",
      "control": "Không gán missing customer thành một khách mặc định; derivation changes có thể đổi segment lịch sử.",
      "ifrs_ref": "REVENUE",
      "lineage": "PA type-specific line items → segment classification → margin bridge.",
      "worked_example": "Revenue credit -1.800 và cost debit +1.200 cho margin management +600 sau đổi dấu revenue.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S24",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
          "version": "S/4HANA; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KE24, KE25, KE30; cost-based vs margin analysis data distinction and archive selection."
        }
      ],
      "ifrs_policy": {
        "title": "Doanh thu và margin",
        "sources": [
          "S44",
          "S45"
        ],
        "text": "IFRS15.31/35/38 yêu cầu xem việc chuyển control và tiêu chí over-time. Billing không tự xác định revenue recognition. Product/customer margin trong thư viện là chỉ tiêu quản trị cần bridge về GL và adjustments; chưa phải một subtotal IFRS18. Duy trì sign convention và kỳ phân bổ COGS để tránh margin giả do lệch cutoff."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "customer",
          "label": "Customer",
          "meaning": "Khách hàng hoặc segment theo derivation; thiếu segment phải giữ exception.",
          "sample": "CUST-DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "product",
          "label": "Product",
          "meaning": "Sản phẩm phân tích margin; join master theo hiệu lực.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "profit_center",
          "label": "Profit Center",
          "meaning": "Đơn vị trách nhiệm lợi nhuận; master có thời hạn hiệu lực.",
          "sample": "PC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KE24 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Operating concern, PA type, actual record scope/year/period; lưu archive/source selection.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Account-based totals ↔ FI02 P&L theo market segment; costing-based cần value-field bridge riêng. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO15-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "doc",
          "line",
          "customer",
          "product",
          "profit_center",
          "cost_element",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "001",
            "customer": "CUST-DEMO",
            "product": "FG-CONNECTOR-01",
            "profit_center": "PC1100",
            "cost_element": "400000",
            "amount": "-1800",
            "currency": "USD"
          },
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "002",
            "customer": "CUST-DEMO",
            "product": "FG-CONNECTOR-01",
            "profit_center": "PC1100",
            "cost_element": "500000",
            "amount": "1200",
            "currency": "USD"
          }
        ]
      },
      "co_pa_examples": {
        "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_EXPORT_LAYOUT",
        "viewer": "co-pa.html#CO15",
        "target_release": "UNKNOWN",
        "output_layout_verified": false,
        "variants": [
          {
            "id": "CO15-01",
            "columns": 37,
            "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_EXPORT_LAYOUT",
            "xlsx": "co-pa-downloads/CO15-01.xlsx",
            "raw_csv": "co-pa-downloads/CO15-01.layout.csv",
            "flat_csv": "co-pa-downloads/CO15-01.flat.csv"
          },
          {
            "id": "CO15-02",
            "columns": 39,
            "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_EXPORT_LAYOUT",
            "xlsx": "co-pa-downloads/CO15-02.xlsx",
            "raw_csv": "co-pa-downloads/CO15-02.layout.csv",
            "flat_csv": "co-pa-downloads/CO15-02.flat.csv"
          }
        ]
      },
      "supplemental_source_examples": {
        "viewer": "supplemental.html#CO15",
        "target_release": "UNKNOWN",
        "native_export": false,
        "full_field_catalog_verified": false,
        "variants": [
          {
            "id": "SUP-CO15-01",
            "source_file": "SAP COPA.pdf",
            "source_page": 37,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 27,
            "xlsx": "supplemental-downloads/SUP-CO15-01.xlsx"
          },
          {
            "id": "SUP-CO15-02",
            "source_file": "SAP COPA.pdf",
            "source_page": 8,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 23,
            "xlsx": "supplemental-downloads/SUP-CO15-02.xlsx"
          },
          {
            "id": "SUP-CO15-03",
            "source_file": "SAP COPA.pdf",
            "source_page": 32,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 27,
            "xlsx": "supplemental-downloads/SUP-CO15-03.xlsx"
          },
          {
            "id": "SUP-CO15-04",
            "source_file": "SAP COPA.pdf",
            "source_page": 33,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 33,
            "xlsx": "supplemental-downloads/SUP-CO15-04.xlsx"
          },
          {
            "id": "SUP-CO15-05",
            "source_file": "SAP COPA.pdf",
            "source_page": 8,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 18,
            "xlsx": "supplemental-downloads/SUP-CO15-05.xlsx"
          }
        ]
      }
    },
    {
      "id": "CO16",
      "module": "CO",
      "title": "Biên lợi nhuận sản phẩm/khách hàng",
      "tcode": null,
      "fiori_app": null,
      "source_ids": [
        "S24",
        "S44",
        "S45"
      ],
      "kind": "DERIVED_ANALYSIS",
      "keys": [
        "company",
        "year",
        "period",
        "customer",
        "product",
        "currency"
      ],
      "columns": [
        "company",
        "year",
        "period",
        "customer",
        "product",
        "revenue",
        "cogs",
        "margin",
        "currency"
      ],
      "selection": "Chọn account-based PA hoặc approved GL mapping; cùng revenue recognition/cost period và product grain.",
      "reading": "Revenue trình bày dương, COGS dương, margin = revenue - COGS; không tự là IFRS18 operating profit.",
      "reconciliation": "Total revenue/COGS ↔ mapped FI02; missing segment và IFRS adjustments nằm trong bridge riêng.",
      "control": "Không trộn billing amount với recognized revenue; MTO không tự đủ điều kiện over-time.",
      "ifrs_ref": "REVENUE",
      "lineage": "Approved GL/PA sign mapping → product/customer aggregate → margin analysis.",
      "worked_example": "Revenue 1.800 - COGS 1.200 = margin 600 (33,33%); còn expenses khác ngoài phạm vi.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAVA_DERIVED_NOT_NATIVE",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + period + customer + product + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S24",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
          "version": "S/4HANA; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KE24, KE25, KE30; cost-based vs margin analysis data distinction and archive selection."
        },
        {
          "id": "S44",
          "url": "https://www.ifrs.org/content/dam/ifrs/meetings/2024/march/iasb/ap6b-ifrs-15-pir-timing.pdf",
          "version": "IASB staff paper March 2024; not a new standard",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Summarizes IFRS15.31,35,38: control and over-time tests; MTO alone is insufficient."
        },
        {
          "id": "S45",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2025/issued/part-a/ifrs-18-presentation-and-disclosure-in-financial-statements.pdf?bypass=on",
          "version": "Issued 2025 text, Appendix C",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Effective annual periods beginning 2027-01-01; early application permitted, retrospective transition."
        }
      ],
      "ifrs_policy": {
        "title": "Doanh thu và margin",
        "sources": [
          "S44",
          "S45"
        ],
        "text": "IFRS15.31/35/38 yêu cầu xem việc chuyển control và tiêu chí over-time. Billing không tự xác định revenue recognition. Product/customer margin trong thư viện là chỉ tiêu quản trị cần bridge về GL và adjustments; chưa phải một subtotal IFRS18. Duy trì sign convention và kỳ phân bổ COGS để tránh margin giả do lệch cutoff."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "customer",
          "label": "Customer",
          "meaning": "Khách hàng hoặc segment theo derivation; thiếu segment phải giữ exception.",
          "sample": "CUST-DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "product",
          "label": "Product",
          "meaning": "Sản phẩm phân tích margin; join master theo hiệu lực.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "revenue",
          "label": "Revenue",
          "meaning": "Doanh thu thuần theo chính sách; mẫu dương để phân tích margin, khác dấu FI credit.",
          "sample": "1800",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cogs",
          "label": "Cost of Sales",
          "meaning": "Chi phí hàng bán trong cùng kỳ và phạm vi với revenue.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "margin",
          "label": "Margin",
          "meaning": "Derived: revenue - cogs; không tự là IFRS18 operating profit.",
          "sample": "600",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Lấy nguồn đầu vào được chỉ rõ trong lineage, giữ manifest và policy version.",
        "Chọn account-based PA hoặc approved GL mapping; cùng revenue recognition/cost period và product grain.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Total revenue/COGS ↔ mapped FI02; missing segment và IFRS adjustments nằm trong bridge riêng. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO16-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "period",
          "customer",
          "product",
          "revenue",
          "cogs",
          "margin",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "period": "009",
            "customer": "CUST-DEMO",
            "product": "FG-CONNECTOR-01",
            "revenue": "1800",
            "cogs": "1200",
            "margin": "600",
            "currency": "USD"
          }
        ]
      },
      "co_pa_examples": {
        "classification": "SAVA_DERIVED_NOT_NATIVE",
        "viewer": "co-pa.html#CO16",
        "target_release": "UNKNOWN",
        "output_layout_verified": false,
        "variants": [
          {
            "id": "CO16-01",
            "columns": 23,
            "classification": "SAVA_DERIVED_NOT_NATIVE",
            "xlsx": "co-pa-downloads/CO16-01.xlsx",
            "raw_csv": "co-pa-downloads/CO16-01.layout.csv",
            "flat_csv": "co-pa-downloads/CO16-01.flat.csv"
          },
          {
            "id": "CO16-02",
            "columns": 23,
            "classification": "SAVA_DERIVED_NOT_NATIVE",
            "xlsx": "co-pa-downloads/CO16-02.xlsx",
            "raw_csv": "co-pa-downloads/CO16-02.layout.csv",
            "flat_csv": "co-pa-downloads/CO16-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM01",
      "module": "MM",
      "title": "Danh sách chứng từ vật tư",
      "tcode": "MB51",
      "fiori_app": "F1077",
      "source_ids": [
        "S25",
        "S38"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "year",
        "material_doc",
        "item"
      ],
      "columns": [
        "year",
        "material_doc",
        "item",
        "date",
        "material",
        "plant",
        "movement",
        "special_stock",
        "qty",
        "uom",
        "amount",
        "currency",
        "po",
        "order",
        "accounting_ref"
      ],
      "selection": "Plant/material/posting-date range; include relevant reversals và special stock; bảo toàn complete population.",
      "reading": "Movement item khác FI line. Non-valuated movement có quantity nhưng có thể không có amount/account assignment.",
      "reconciliation": "Net receipts/issues ↔ MM04 rollforward; accounting refs ↔ FI02 chỉ cho valuated postings.",
      "control": "Không double-negate reversal; dùng source sign policy được duyệt; MB51→F1077 là related functionality, không schema equivalence.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Material movement records → signed movements → stock and accounting-reference bridge.",
      "worked_example": "101 receipt +100 EA và 102 reversal -10 EA ⇒ net 90 EA; amount không suy từ qty đơn thuần.",
      "existing_contract": "D01",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + material_doc + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S25",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/32da8359c8ee4e8b8e8c5e15cacba5aa/7cc07e548af58e4ce10000000a4450e5.html?locale=en-US",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F1077 material item display; no account assignments for non-valuated postings."
        },
        {
          "id": "S38",
          "url": "https://help.sap.com/doc/ce01d82756b947a1a043a5d5a3204226/2602.10/en-US/WN_CE2602.3_EN.pdf",
          "version": "Public Cloud 2602.3 HFC10 p46",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Stock overview navigation changes from MB51 to F1077; not evidence MB51 removed everywhere."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material_doc",
          "label": "Material Document",
          "meaning": "Số chứng từ vật tư; khóa kèm năm và item, không bằng FI doc.",
          "sample": "5000000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "movement",
          "label": "Movement Type",
          "meaning": "Mã movement; reversal và special stock phải xét riêng, không suy dấu chỉ từ mã.",
          "sample": "101",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB51 / F1077 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/material/posting-date range; include relevant reversals và special stock; bảo toàn complete population.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net receipts/issues ↔ MM04 rollforward; accounting refs ↔ FI02 chỉ cho valuated postings. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM01-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "year",
          "material_doc",
          "item",
          "date",
          "material",
          "plant",
          "movement",
          "special_stock",
          "qty",
          "uom",
          "amount",
          "currency",
          "po",
          "order",
          "accounting_ref"
        ],
        "rows": [
          {
            "year": "2026",
            "material_doc": "5000000001",
            "item": "00010",
            "date": "2026-09-15",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "movement": "101",
            "special_stock": "NONE",
            "qty": "100",
            "uom": "EA",
            "amount": "1000",
            "currency": "USD",
            "po": "4500000001",
            "order": "1000001",
            "accounting_ref": "1000/2026/4900000001/001"
          },
          {
            "year": "2026",
            "material_doc": "5000000002",
            "item": "00010",
            "date": "2026-09-15",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "movement": "102",
            "special_stock": "NONE",
            "qty": "-10",
            "uom": "EA",
            "amount": "-100",
            "currency": "USD",
            "po": "4500000001",
            "order": "1000001",
            "accounting_ref": "1000/2026/4900000002/001"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM01",
        "variants": [
          {
            "id": "MM01-01",
            "source_transaction": "MB51 (Material Document List — danh sách phân cấp)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM01-01.xlsx",
            "raw_csv": "source-layout-downloads/MM01-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM01-01.flat.csv"
          },
          {
            "id": "MM01-02",
            "source_transaction": "MB51 (Material Document List — ALV detail list)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/mb51-consulta-de-movimento-de-estoque/",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM01-02.xlsx",
            "raw_csv": "source-layout-downloads/MM01-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM01-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM02",
      "module": "MM",
      "title": "Danh sách tồn kho nhiều vật tư",
      "tcode": "MB52",
      "fiori_app": "F1595",
      "source_ids": [
        "S26",
        "S27"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "plant",
        "sloc",
        "batch",
        "stock_type",
        "special_stock"
      ],
      "columns": [
        "material",
        "plant",
        "sloc",
        "batch",
        "stock_type",
        "special_stock",
        "qty",
        "uom",
        "stock_value",
        "currency"
      ],
      "selection": "Plant/storage/material/batch và stock-type scope; lưu as-of timestamp và valuation method cho value.",
      "reading": "Snapshot quantity không cộng qua ngày; giá Fiori tùy calculation method không tự khớp historical GL.",
      "reconciliation": "Same-cutoff quantities ↔ MM03 leaf; values ↔ MM05 sau valuation/ownership bridge.",
      "control": "Không cộng QI/blocked như available-to-promise. Zero value có thể do phân quyền, không phải free stock.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Stock snapshot → quantity/value display → inventory control bridge.",
      "worked_example": "100 unrestricted + 20 QI = physical 120 nhưng production-available không tự là 120.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + plant + sloc + batch + stock_type + special_stock. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S26",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/5307b753128eb44ce10000000a174cb4.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB52, MB5T, MB5B and related stock reports."
        },
        {
          "id": "S27",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/aff0b3f5f46c42a2b2c0fabfc233bab2/f27e02758591469fa489705a1d212df4.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F1595 stock/value; valuation method options need separate configuration evidence."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "batch",
          "label": "Batch",
          "meaning": "Lô tồn kho; trống hợp lệ với non-batch-managed material.",
          "sample": "LOT-DEMO-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_type",
          "label": "Stock Type",
          "meaning": "Unrestricted/QI/blocked; trạng thái vật lý khác quyền sở hữu.",
          "sample": "UNRESTRICTED",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_value",
          "label": "Stock Value",
          "meaning": "Giá trị tồn theo cơ sở giá đã khai báo; không tự bằng số dư GL.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB52 / F1595 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/storage/material/batch và stock-type scope; lưu as-of timestamp và valuation method cho value.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Same-cutoff quantities ↔ MM03 leaf; values ↔ MM05 sau valuation/ownership bridge. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM02-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "plant",
          "sloc",
          "batch",
          "stock_type",
          "special_stock",
          "qty",
          "uom",
          "stock_value",
          "currency"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "batch": "LOT-DEMO-01",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "100",
            "uom": "EA",
            "stock_value": "1000",
            "currency": "USD"
          },
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "batch": "LOT-DEMO-01",
            "stock_type": "QI",
            "special_stock": "NONE",
            "qty": "20",
            "uom": "EA",
            "stock_value": "200",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM02",
        "variants": [
          {
            "id": "MM02-01",
            "source_transaction": "MB52 (Display Warehouse Stocks of Material)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.tutorialscampus.com/sap-pp/how-to-display-stock-of-multiple-materials.htm",
            "fields_read_from_source": 18,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM02-01.xlsx",
            "raw_csv": "source-layout-downloads/MM02-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM02-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM03",
      "module": "MM",
      "title": "Stock overview theo cây tổ chức",
      "tcode": "MMBE",
      "fiori_app": null,
      "source_ids": [
        "S28",
        "S37"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "node",
        "stock_type",
        "special_stock"
      ],
      "columns": [
        "material",
        "plant",
        "sloc",
        "batch",
        "node",
        "is_leaf",
        "stock_type",
        "special_stock",
        "qty",
        "uom"
      ],
      "selection": "Một material, chọn company/plant/sloc/batch levels; segmentation chỉ khi hệ bật chức năng liên quan.",
      "reading": "Parent chứa tổng children. Dòng warehouse/plant không phải một stock độc lập để cộng cùng batch.",
      "reconciliation": "Sum selected leaf quantities ↔ MM02 cùng stock type, cutoff, owner và special stock.",
      "control": "Không flatten cây rồi sum mọi dòng. Nguồn Retail về segmentation không áp thành prerequisite manufacturing.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Material stock hierarchy → selected display levels → leaf stock comparison.",
      "worked_example": "Plant 100, kho A 60, kho B 40: total 100, không phải 200 khi cộng cả parent.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + node + stock_type + special_stock. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S28",
          "url": "https://help.sap.com/docs/PRODUCT_ID/9905622a5c1f49ba84e9076fc83a9c2c/b8fbc492055a4801b92456ff68a6d971.html?locale=en-US&state=PRODUCTION&version=2023.latest",
          "version": "S/4HANA Retail 2023",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MMBE hierarchy example; segmentation requires business function, not general manufacturing prerequisite."
        },
        {
          "id": "S37",
          "url": "https://help.sap.com/http.svc/rc/2d1f4f3d24da48d7b3d0d842e7c0ab2d/2025.1/en-US/MD4_EN.pdf",
          "version": "PDF2026-02-12, URL2025.1; 40pages",
          "method": "WEB_OPEN_FULL_PDF_TEXT",
          "claim": "PDF là SCM Consulting Solution Advanced MD04. Search preview nhắc MMBE nhưng tìm trong text mở không xác nhận; original sample candidate chưa xác minh. Trang40 cấm tái phân phối nếu chưa có express permission."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "batch",
          "label": "Batch",
          "meaning": "Lô tồn kho; trống hợp lệ với non-batch-managed material.",
          "sample": "LOT-DEMO-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "node",
          "label": "Hierarchy Node",
          "meaning": "Mã node; bắt buộc nhận diện subtotal khi cộng cây.",
          "sample": "NODE-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "is_leaf",
          "label": "Is Leaf",
          "meaning": "Cờ phân biệt dòng lá và dòng tổng; chỉ cộng một cấp hợp lệ.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_type",
          "label": "Stock Type",
          "meaning": "Unrestricted/QI/blocked; trạng thái vật lý khác quyền sở hữu.",
          "sample": "UNRESTRICTED",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MMBE nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Một material, chọn company/plant/sloc/batch levels; segmentation chỉ khi hệ bật chức năng liên quan.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum selected leaf quantities ↔ MM02 cùng stock type, cutoff, owner và special stock. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM03-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "plant",
          "sloc",
          "batch",
          "node",
          "is_leaf",
          "stock_type",
          "special_stock",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": null,
            "batch": null,
            "node": "PLANT",
            "is_leaf": "false",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "100",
            "uom": "EA"
          },
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "A",
            "batch": null,
            "node": "SLOC-A",
            "is_leaf": "true",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "60",
            "uom": "EA"
          },
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "B",
            "batch": null,
            "node": "SLOC-B",
            "is_leaf": "true",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "40",
            "uom": "EA"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM03",
        "variants": [
          {
            "id": "MM03-01",
            "source_transaction": "MMBE (Stock Overview: Basic List)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.docsie.io/tutorials/sap/check-the-stock-overview-with-mmbe/",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM03-01.xlsx",
            "raw_csv": "source-layout-downloads/MM03-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM03-01.flat.csv"
          },
          {
            "id": "MM03-02",
            "source_transaction": "MMBE (Stock Overview: Basic List — cuộn sang phải)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.docsie.io/tutorials/sap/check-the-stock-overview-with-mmbe/",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM03-02.xlsx",
            "raw_csv": "source-layout-downloads/MM03-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM03-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM04",
      "module": "MM",
      "title": "Tồn kho tại ngày hạch toán",
      "tcode": "MB5B",
      "fiori_app": null,
      "source_ids": [
        "S26"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "plant",
        "sloc",
        "stock_type",
        "special_stock",
        "key_date"
      ],
      "columns": [
        "material",
        "plant",
        "sloc",
        "stock_type",
        "special_stock",
        "key_date",
        "opening",
        "gr_qty",
        "ir_qty",
        "closing",
        "uom"
      ],
      "selection": "Material/plant/date from-to; profile lượng: gr_qty là receipts, ir_qty dùng làm issues trong mẫu này, không phải invoice.",
      "reading": "Hồ sơ mẫu là quantity rollforward, opening/closing theo UoM; tiêu đề canonical được đổi theo report.",
      "reconciliation": "Opening quantity + receipts - issues = closing; movement scope từ MM01; kết thúc khớp snapshot cùng thời điểm.",
      "control": "Backdated postings sau ngày xuất có thể đổi số kỳ cũ; freeze file và extraction timestamp.",
      "ifrs_ref": "CUTOFF",
      "lineage": "Historical stock calculation + movements → dated quantity balance.",
      "worked_example": "Opening 50 EA + receipts 100 - issues 30 = 120 EA; đây không phải giá trị tiền.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + plant + sloc + stock_type + special_stock + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S26",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/5307b753128eb44ce10000000a174cb4.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB52, MB5T, MB5B and related stock reports."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_type",
          "label": "Stock Type",
          "meaning": "Unrestricted/QI/blocked; trạng thái vật lý khác quyền sở hữu.",
          "sample": "UNRESTRICTED",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Lượng đầu khoảng ngày theo UoM; không là tiền.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "Receipts Quantity",
          "meaning": "Lượng nhập thuần theo phạm vi movement; không là số invoice.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_qty",
          "label": "Issues Quantity",
          "meaning": "Lượng xuất thuần theo phạm vi movement; không là lượng hóa đơn.",
          "sample": "90",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Lượng cuối khoảng ngày theo UoM; không là tiền.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5B nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Material/plant/date from-to; profile lượng: gr_qty là receipts, ir_qty dùng làm issues trong mẫu này, không phải invoice.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Opening quantity + receipts - issues = closing; movement scope từ MM01; kết thúc khớp snapshot cùng thời điểm. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM04-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "gr_qty/ir_qty được đổi nhãn RECEIPTS/ISSUES chỉ trong mẫu quantity rollforward này.",
        "columns": [
          "material",
          "plant",
          "sloc",
          "stock_type",
          "special_stock",
          "key_date",
          "opening",
          "gr_qty",
          "ir_qty",
          "closing",
          "uom"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "key_date": "2026-09-30",
            "opening": "50",
            "gr_qty": "100",
            "ir_qty": "30",
            "closing": "120",
            "uom": "EA"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#MM04",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-MM04-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 10,
            "source_url": "https://community.sap.com/t5/enterprise-resource-planning-q-a/duplicated-entries-of-amount-in-lc-in-transaction-mb5b/qaq-p/505669",
            "source_sha256": "7352ebde4970874be772044fb19e1d0c6c0b6edfc16772ba197789ea4d3f3d89",
            "xlsx": "finance-gaps-downloads/GAP-MM04-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-MM04-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-MM04-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM05",
      "module": "MM",
      "title": "Đối chiếu giá trị tồn kho và GL",
      "tcode": "MB5L",
      "fiori_app": null,
      "source_ids": [
        "S29"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "valuation_area",
        "valuation_type",
        "gl",
        "currency"
      ],
      "columns": [
        "material",
        "valuation_area",
        "valuation_type",
        "gl",
        "qty",
        "uom",
        "stock_value",
        "currency",
        "price",
        "price_unit"
      ],
      "selection": "Company/valuation area/material/period theo khả năng report; lấy valuation class và GL mapping bổ trợ nếu thiếu.",
      "reading": "Valuated stock khác physical stock; special stock, price changes và ML closing có thể tạo bridge.",
      "reconciliation": "Sum stock_value theo valuation GL ↔ FI02/FI03 inventory balance; preserve differences, không plug.",
      "control": "MB5L source hiện legacy support; key/columns là canonical candidate. Không coi mọi stock qty × current price là historical balance.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Material valuation → inventory valuation account → GL reconciliation bridge.",
      "worked_example": "Stock subledger 1.000, GL 1.020 ⇒ điều tra manual/ML/timing 20, không sửa subledger cho bằng.",
      "existing_contract": "D19",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + valuation_area + valuation_type + gl + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S29",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/sewm/3900061781.html",
          "version": "Support content EWM/ERP; version not shown",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB5L and MB54 transaction names; legacy context, not target release validation."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_type",
          "label": "Valuation Type",
          "meaning": "Split valuation; trống chỉ hợp lệ khi profile xác nhận không dùng.",
          "sample": "DOMESTIC",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_value",
          "label": "Stock Value",
          "meaning": "Giá trị tồn theo cơ sở giá đã khai báo; không tự bằng số dư GL.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price",
          "label": "Price",
          "meaning": "Giá cho price_unit đơn vị; không mặc định giá cho 1.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price_unit",
          "label": "Price Unit",
          "meaning": "Mẫu số định giá: value = qty × price / price_unit khi phù hợp.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5L nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/valuation area/material/period theo khả năng report; lấy valuation class và GL mapping bổ trợ nếu thiếu.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum stock_value theo valuation GL ↔ FI02/FI03 inventory balance; preserve differences, không plug. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM05-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "valuation_area",
          "valuation_type",
          "gl",
          "qty",
          "uom",
          "stock_value",
          "currency",
          "price",
          "price_unit"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "valuation_area": "1100",
            "valuation_type": "DOMESTIC",
            "gl": "150000",
            "qty": "100",
            "uom": "EA",
            "stock_value": "1000",
            "currency": "USD",
            "price": "10",
            "price_unit": "1"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#MM05",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-MM05-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 9,
            "source_url": "https://community.sap.com/t5/enterprise-resource-planning-q-a/getting-multiple-lines-for-a-same-material-plant-combination-in-mb5l-report/qaq-p/11933926",
            "source_sha256": "063658b932a5121a102735122d0c3e1b2496604b7629ac5a5518f80470074fd4",
            "xlsx": "finance-gaps-downloads/GAP-MM05-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-MM05-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-MM05-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM06",
      "module": "MM",
      "title": "GR/IR list of balances",
      "tcode": "MB5S",
      "fiori_app": null,
      "source_ids": [
        "S30"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "po",
        "item",
        "currency"
      ],
      "columns": [
        "po",
        "item",
        "gr_qty",
        "ir_qty",
        "uom",
        "gr_value",
        "ir_value",
        "difference",
        "currency"
      ],
      "selection": "PO/vendor/plant theo selection có trong hệ; lưu dates và final-invoice/final-delivery scope.",
      "reading": "Quantity difference và value difference giải thích các vấn đề khác nhau; currency/UoM cần đồng nhất.",
      "reconciliation": "GR/IR values ↔ MM08 history; tie FI16 qua timing, costs, FX, clearing và opening bridge.",
      "control": "Qty khớp không có nghĩa value khớp. Chưa chứng minh MB5S và F3302 cùng population.",
      "ifrs_ref": "CUTOFF",
      "lineage": "PO history GR/IR aggregates → imbalance list → AP/MM investigation.",
      "worked_example": "GR 100 EA/1.000; IR 100 EA/1.050: qty difference 0, price/value difference -50.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S30",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/6cfdc7caaef746cd9c7543e32e7e87c0/2f07b753128eb44ce10000000a174cb4.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB5S compares PO GR/IR quantities and values."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "GR Quantity",
          "meaning": "Lượng nhận thuần sau reversal, theo UoM của phép đối chiếu.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_qty",
          "label": "IR Quantity",
          "meaning": "Lượng đã invoice thuần; tách quy đổi order unit/base unit.",
          "sample": "90",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_value",
          "label": "GR Value",
          "meaning": "Giá trị nhập hàng trong cùng cơ sở tiền/định giá với IR.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_value",
          "label": "IR Value",
          "meaning": "Giá trị hóa đơn; VAT/charges/FX phải tách trước đối chiếu.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Chênh lệch theo công thức trong hồ sơ; dấu dương không luôn là bất lợi.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5S nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "PO/vendor/plant theo selection có trong hệ; lưu dates và final-invoice/final-delivery scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "GR/IR values ↔ MM08 history; tie FI16 qua timing, costs, FX, clearing và opening bridge. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM06-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "po",
          "item",
          "gr_qty",
          "ir_qty",
          "uom",
          "gr_value",
          "ir_value",
          "difference",
          "currency"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "gr_qty": "100",
            "ir_qty": "100",
            "uom": "EA",
            "gr_value": "1000",
            "ir_value": "1050",
            "difference": "-50",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM06",
        "variants": [
          {
            "id": "MM06-01",
            "source_transaction": "MB5S (List of GR/IR Balances)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/gr-ir-analysis-in-sap-s4hana-finance",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM06-01.xlsx",
            "raw_csv": "source-layout-downloads/MM06-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM06-01.flat.csv"
          },
          {
            "id": "MM06-02",
            "source_transaction": "MB5S (List of GR/IR Balances)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/how-to-create-an-invoice-receipt-in-sap-s4hana",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM06-02.xlsx",
            "raw_csv": "source-layout-downloads/MM06-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM06-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM07",
      "module": "MM",
      "title": "Danh sách đơn mua theo số chứng từ",
      "tcode": "ME2N",
      "fiori_app": null,
      "source_ids": [
        "S31"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "po",
        "item"
      ],
      "columns": [
        "po",
        "item",
        "partner",
        "material",
        "plant",
        "ordered_qty",
        "gr_qty",
        "open_qty",
        "uom",
        "net_value",
        "currency",
        "status"
      ],
      "selection": "Purchasing org/group/plant/vendor; selection parameter và scope-of-list; item view, không schedule view.",
      "reading": "ME2L/ME2M là lối chọn khác của họ PO, không đếm thêm để đủ số lượng. Open_qty phụ thuộc closing flags.",
      "reconciliation": "PO ordered versus net receipts MM08; open value là commitment indicator, chưa là AP liability.",
      "control": "Một PO item nhiều schedules/account assignments cần child datasets; không nhân net_value qua join 1:N.",
      "ifrs_ref": "CUTOFF",
      "lineage": "Purchasing item snapshot → PO history aggregation → open commitment view.",
      "worked_example": "Order 120, net GR 100 ⇒ residual 20 nếu chưa final-delivery; flag đóng có thể làm open khác.",
      "existing_contract": "D13",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S31",
          "url": "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME2N and ME2L/ME2M alternatives, ME5A, ME3N; do not count selection variants as new reports."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ordered_qty",
          "label": "Ordered Quantity",
          "meaning": "Lượng đặt trong đơn vị đơn hàng; xử lý deletion/final-delivery riêng.",
          "sample": "120",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "GR Quantity",
          "meaning": "Lượng nhận thuần sau reversal, theo UoM của phép đối chiếu.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "open_qty",
          "label": "Open Quantity",
          "meaning": "Lượng còn mở theo quy tắc report; có thể khác ordered - GR do closing/returns.",
          "sample": "20",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME2N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Purchasing org/group/plant/vendor; selection parameter và scope-of-list; item view, không schedule view.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "PO ordered versus net receipts MM08; open value là commitment indicator, chưa là AP liability. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM07-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "po",
          "item",
          "partner",
          "material",
          "plant",
          "ordered_qty",
          "gr_qty",
          "open_qty",
          "uom",
          "net_value",
          "currency",
          "status"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "partner": "0000100001",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "ordered_qty": "120",
            "gr_qty": "100",
            "open_qty": "20",
            "uom": "EA",
            "net_value": "1200",
            "currency": "USD",
            "status": "OPEN"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM07",
        "variants": [
          {
            "id": "MM07-01",
            "source_transaction": "ME2N (Purchasing Documents per Document Number, ALV)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/wp-content/uploads/2015/11/Display-List-of-Purchasing-Documents-Converted.pdf",
            "fields_read_from_source": 16,
            "documented_fields": 6,
            "xlsx": "source-layout-downloads/MM07-01.xlsx",
            "raw_csv": "source-layout-downloads/MM07-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM07-01.flat.csv"
          },
          {
            "id": "MM07-02",
            "source_transaction": "ME2N (Purchasing Documents by Document Number, danh sách cổ điển)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.docsie.io/tutorials/sap/check-the-stock-overview-with-mmbe/",
            "fields_read_from_source": 29,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM07-02.xlsx",
            "raw_csv": "source-layout-downloads/MM07-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM07-02.flat.csv"
          },
          {
            "id": "MM07-03",
            "source_transaction": "ME80FN (Purchasing Documents — Header/item data, danh mục F = PO)",
            "classification": "PROXY_ME80FN",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM07-03.xlsx",
            "raw_csv": "source-layout-downloads/MM07-03.layout.csv",
            "flat_csv": "source-layout-downloads/MM07-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM08",
      "module": "MM",
      "title": "Lịch sử PO — GR, IR, reversal",
      "tcode": "ME80FN",
      "fiori_app": null,
      "source_ids": [
        "S32"
      ],
      "kind": "NATIVE_VIEW",
      "keys": [
        "po",
        "item",
        "event",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "po",
        "item",
        "event",
        "year",
        "doc",
        "line",
        "date",
        "qty",
        "uom",
        "amount",
        "currency",
        "accounting_ref"
      ],
      "selection": "Chọn Change View → Purchase Order History; cùng PO population MM07; lấy năm/doc/item và event.",
      "reading": "Header/item, schedule và history có grain khác; không áp extractor field list như ALV thực.",
      "reconciliation": "Group signed GR/IR events theo PO/item/currency ↔ MM06; link material/FI bằng ref xác nhận.",
      "control": "Giữ delivery costs, returns và subsequent debit/credit riêng; không dedup chỉ PO/item.",
      "ifrs_ref": "CUTOFF",
      "lineage": "PO history entries → event/sign normalization → GR/IR bridge.",
      "worked_example": "Một PO có 2 receipts 600+400 và invoice 900 ⇒ GR 1.000, IR 900, chưa invoice 100.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item + event + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S32",
          "url": "https://help.sap.com/docs/BI_CONTENT_757/45e4eda3753c458ead20c81f77c55921/eb487053bbe77c1ee10000000a174cb4.html?version=7.57.20",
          "version": "BI Content 7.57 SP20 / legacy ERP source",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME80FN has header/item, schedule and PO-history views; no claim BW extractor schema equals ALV."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "event",
          "label": "History Event",
          "meaning": "Loại GR/IR/reversal/delivery cost trong PO history; có thể nhiều event cùng doc.",
          "sample": "GR",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME80FN nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Chọn Change View → Purchase Order History; cùng PO population MM07; lấy năm/doc/item và event.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Group signed GR/IR events theo PO/item/currency ↔ MM06; link material/FI bằng ref xác nhận. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM08-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "po",
          "item",
          "event",
          "year",
          "doc",
          "line",
          "date",
          "qty",
          "uom",
          "amount",
          "currency",
          "accounting_ref"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "event": "GR",
            "year": "2026",
            "doc": "5000000001",
            "line": "001",
            "date": "2026-09-15",
            "qty": "60",
            "uom": "EA",
            "amount": "600",
            "currency": "USD",
            "accounting_ref": "1000/2026/4900000001/001"
          },
          {
            "po": "4500000001",
            "item": "00010",
            "event": "GR",
            "year": "2026",
            "doc": "5000000002",
            "line": "001",
            "date": "2026-09-15",
            "qty": "40",
            "uom": "EA",
            "amount": "400",
            "currency": "USD",
            "accounting_ref": "1000/2026/4900000001/001"
          },
          {
            "po": "4500000001",
            "item": "00010",
            "event": "IR",
            "year": "2026",
            "doc": "5100000001",
            "line": "001",
            "date": "2026-09-15",
            "qty": "90",
            "uom": "EA",
            "amount": "900",
            "currency": "USD",
            "accounting_ref": "1000/2026/4900000001/001"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM08",
        "variants": [
          {
            "id": "MM08-01",
            "source_transaction": "ME23N — PO History (màn hình 'PO History for Purchase Order … Item …'; gần với ME80FN view lịch sử)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://blog.sap-press.com/how-to-create-an-invoice-receipt-in-sap-s4hana",
            "fields_read_from_source": 19,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM08-01.xlsx",
            "raw_csv": "source-layout-downloads/MM08-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM08-01.flat.csv"
          },
          {
            "id": "MM08-02",
            "source_transaction": "ME23N — tab Purchase Order History (mở từ ME80FN)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 19,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM08-02.xlsx",
            "raw_csv": "source-layout-downloads/MM08-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM08-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM09",
      "module": "MM",
      "title": "Danh sách đề nghị mua",
      "tcode": "ME5A",
      "fiori_app": null,
      "source_ids": [
        "S31"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "request",
        "item"
      ],
      "columns": [
        "request",
        "item",
        "material",
        "plant",
        "qty",
        "uom",
        "net_value",
        "currency",
        "status",
        "po"
      ],
      "selection": "Plant/requester/purchasing group/date; chọn release/deletion/assigned-to-PO scope.",
      "reading": "PR là yêu cầu, chưa phải PO hoặc khoản nợ. Expected value phụ thuộc valuation input.",
      "reconciliation": "PR referenced quantity ↔ PO item bridge; chỉ commitments được duyệt vào forecast.",
      "control": "Không cộng cả PR đã chuyển PO và PO thành hai commitments; kiểm tra partial conversion.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Purchase requisition → approval/conversion reference → procurement forecast.",
      "worked_example": "PR 100 đã chuyển PO 60 thì residual 40; forecast không cộng PR100 + PO60.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: request + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S31",
          "url": "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME2N and ME2L/ME2M alternatives, ME5A, ME3N; do not count selection variants as new reports."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "request",
          "label": "Purchase Requisition",
          "meaning": "Đề nghị mua; chưa phải công nợ hoặc PO.",
          "sample": "10000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME5A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/requester/purchasing group/date; chọn release/deletion/assigned-to-PO scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "PR referenced quantity ↔ PO item bridge; chỉ commitments được duyệt vào forecast. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM09-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "PO conversion60 là giả định trong bài tập, không suy ra từ mã PO có mặt.",
        "columns": [
          "request",
          "item",
          "material",
          "plant",
          "qty",
          "uom",
          "net_value",
          "currency",
          "status",
          "po"
        ],
        "rows": [
          {
            "request": "10000001",
            "item": "00010",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "qty": "100",
            "uom": "EA",
            "net_value": "1000",
            "currency": "USD",
            "status": "PARTIALLY_CONVERTED",
            "po": "4500000001"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM09",
        "variants": [
          {
            "id": "MM09-01",
            "source_transaction": "ME5A (List Display of Purchase Requisitions — ALV, đã thêm cột PO)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/tutorial-sap-transacao-me5a-lista-de-requisicao-de-compras/",
            "fields_read_from_source": 26,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM09-01.xlsx",
            "raw_csv": "source-layout-downloads/MM09-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM09-01.flat.csv"
          },
          {
            "id": "MM09-02",
            "source_transaction": "ME5A (List Display of Purchase Requisitions — ALV mặc định)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/tutorial-sap-transacao-me5a-lista-de-requisicao-de-compras/",
            "fields_read_from_source": 26,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM09-02.xlsx",
            "raw_csv": "source-layout-downloads/MM09-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM09-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM10",
      "module": "MM",
      "title": "Danh sách hợp đồng khung mua hàng",
      "tcode": "ME3N",
      "fiori_app": null,
      "source_ids": [
        "S31"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "agreement",
        "item"
      ],
      "columns": [
        "agreement",
        "item",
        "partner",
        "material",
        "valid_from",
        "valid_to",
        "qty",
        "uom",
        "net_value",
        "currency"
      ],
      "selection": "Agreement/vendor/purchasing org; scope contracts versus scheduling agreements ghi rõ.",
      "reading": "Target value/quantity không bằng liability. Release orders và validity quyết định remaining capacity.",
      "reconciliation": "Approved release PO values ↔ agreement utilization; agreements không cộng trực tiếp vào FI AP.",
      "control": "Không suy purchase obligation chỉ từ target value; kiểm tra minimum commitments và điều khoản hợp đồng.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Outline agreement → release-order references → utilization/expiry analysis.",
      "worked_example": "Contract ceiling 1.000, releases 600 ⇒ unused ceiling 400, chưa có nghĩa phải trả 400.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: agreement + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S31",
          "url": "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME2N and ME2L/ME2M alternatives, ME5A, ME3N; do not count selection variants as new reports."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "agreement",
          "label": "Outline Agreement",
          "meaning": "Hợp đồng khung; không đồng nhất cam kết và nợ phải trả.",
          "sample": "4600000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valid_from",
          "label": "Valid From",
          "meaning": "Ngày bắt đầu hiệu lực; không dùng estimate tương lai cho kỳ quá khứ.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valid_to",
          "label": "Valid To",
          "meaning": "Hạn hợp đồng; cần xem phụ lục/điều khoản gia hạn.",
          "sample": "2026-12-31",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME3N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Agreement/vendor/purchasing org; scope contracts versus scheduling agreements ghi rõ.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Approved release PO values ↔ agreement utilization; agreements không cộng trực tiếp vào FI AP. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM10-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Release600 là giả định bài tập, cần dataset child thực trước tính utilization.",
        "columns": [
          "agreement",
          "item",
          "partner",
          "material",
          "valid_from",
          "valid_to",
          "qty",
          "uom",
          "net_value",
          "currency"
        ],
        "rows": [
          {
            "agreement": "4600000001",
            "item": "00010",
            "partner": "0000100001",
            "material": "FG-CONNECTOR-01",
            "valid_from": "2026-09-01",
            "valid_to": "2026-12-31",
            "qty": "100",
            "uom": "EA",
            "net_value": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM10",
        "variants": [
          {
            "id": "MM10-01",
            "source_transaction": "ME80FN (Purchasing Documents — danh mục K = Contract)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM10-01.xlsx",
            "raw_csv": "source-layout-downloads/MM10-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM10-01.flat.csv"
          },
          {
            "id": "MM10-02",
            "source_transaction": "ME80FN (Purchasing Documents — danh mục L = Scheduling Agreement)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM10-02.xlsx",
            "raw_csv": "source-layout-downloads/MM10-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM10-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM11",
      "module": "MM",
      "title": "Danh sách logistics invoice",
      "tcode": "MIR5",
      "fiori_app": null,
      "source_ids": [
        "S33"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "year",
        "invoice"
      ],
      "columns": [
        "year",
        "invoice",
        "company",
        "partner",
        "date",
        "net_value",
        "tax",
        "currency",
        "status",
        "accounting_ref"
      ],
      "selection": "Company/vendor/invoice/posting-date/status; xác minh header-level export trước lấy item allocation.",
      "reading": "Logistics invoice number khác FI doc; gross, net và tax phải phân biệt.",
      "reconciliation": "Net + tax ↔ gross AP invoice theo fixture; mapping FI ref ↔ FI06 và PO history MM08.",
      "control": "Parked/canceled/reversed không xử lý như posted invoices; MIR5 source legacy chỉ xác nhận tên.",
      "ifrs_ref": "CUTOFF",
      "lineage": "LIV invoice header → accounting-document reference → AP and PO-history reconciliation.",
      "worked_example": "Net 1.000 + recoverable tax 100 = AP gross 1.100; không cộng tax vào inventory mặc định.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + invoice. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S33",
          "url": "https://help.sap.com/doc/7a272e0fb75e4a5e85920122184629b3/1.0/en-us/ariba_se_admiin_guide.pdf",
          "version": "ERP connectivity Ariba SP13",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MIR5/MIR6 invoice lists mentioned; insufficient for S/4 release certification."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "invoice",
          "label": "Invoice Document",
          "meaning": "Chứng từ logistics invoice; cần năm; khác FI accounting document.",
          "sample": "5100000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "tax",
          "label": "Tax Amount",
          "meaning": "Thuế theo chứng từ; khả năng thu hồi thuế cần đánh giá riêng, không tự vốn hóa.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MIR5 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/vendor/invoice/posting-date/status; xác minh header-level export trước lấy item allocation.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net + tax ↔ gross AP invoice theo fixture; mapping FI ref ↔ FI06 và PO history MM08. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM11-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "year",
          "invoice",
          "company",
          "partner",
          "date",
          "net_value",
          "tax",
          "currency",
          "status",
          "accounting_ref"
        ],
        "rows": [
          {
            "year": "2026",
            "invoice": "5100000001",
            "company": "1000",
            "partner": "0000100001",
            "date": "2026-09-15",
            "net_value": "1000",
            "tax": "100",
            "currency": "USD",
            "status": "POSTED",
            "accounting_ref": "1000/2026/4900000001/001"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#MM11",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-MM11-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 17,
            "source_url": "https://www.learntosap.com/ficotutoriallineitemandinvlist.html",
            "source_sha256": "e0771a5d42d3c5652ad7078a35cf35b0ae26755efa2d8029c6698d301342586f",
            "xlsx": "finance-gaps-downloads/GAP-MM11-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-MM11-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-MM11-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM12",
      "module": "MM",
      "title": "Hóa đơn bị khóa — danh sách được cung cấp",
      "tcode": "MRBR",
      "fiori_app": "MRBR",
      "source_ids": [
        "S34"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "year",
        "invoice",
        "item",
        "block"
      ],
      "columns": [
        "year",
        "invoice",
        "item",
        "company",
        "partner",
        "block",
        "amount",
        "currency",
        "status"
      ],
      "selection": "Dùng danh sách blocked invoices do AP cung cấp; giữ block reason/selection; không gọi automatic release.",
      "reading": "Invoice blocked payment vẫn có thể đã posted liability. Một invoice có nhiều block reasons.",
      "reconciliation": "Distinct invoice amount ↔ MM11/FI06 payment blocks; reason counts có thể lớn hơn invoice count.",
      "control": "Không sum invoice gross lặp trên nhiều reason/item. Quyền release tách khỏi người rà soát reporting.",
      "ifrs_ref": "CUTOFF",
      "lineage": "LIV tolerance/block evaluation → blocked list → controlled AP resolution.",
      "worked_example": "Invoice 1.100 có price và qty block vẫn là nợ 1.100, không thành 2.200.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + invoice + item + block. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S34",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/74497657a11a0522e10000000a44147b.html?locale=en-US",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID MRBR; can release invoices, use supplied display evidence for library training."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "invoice",
          "label": "Invoice Document",
          "meaning": "Chứng từ logistics invoice; cần năm; khác FI accounting document.",
          "sample": "5100000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "block",
          "label": "Block Reason",
          "meaning": "Lý do khóa invoice/thanh toán; khác trạng thái đã ghi nhận nợ.",
          "sample": "PRICE_VARIANCE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Dùng danh sách blocked invoices do AP cung cấp; giữ block reason/selection; không gọi automatic release.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Distinct invoice amount ↔ MM11/FI06 payment blocks; reason counts có thể lớn hơn invoice count. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM12-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Hai block reasons lặp cùng invoice amount; tổng liability dùng distinct invoice, không sum hai rows.",
        "columns": [
          "year",
          "invoice",
          "item",
          "company",
          "partner",
          "block",
          "amount",
          "currency",
          "status"
        ],
        "rows": [
          {
            "year": "2026",
            "invoice": "5100000001",
            "item": "00010",
            "company": "1000",
            "partner": "0000100001",
            "block": "PRICE_VARIANCE",
            "amount": "1100",
            "currency": "USD",
            "status": "BLOCKED"
          },
          {
            "year": "2026",
            "invoice": "5100000001",
            "item": "00010",
            "company": "1000",
            "partner": "0000100001",
            "block": "QTY_VARIANCE",
            "amount": "1100",
            "currency": "USD",
            "status": "BLOCKED"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM12",
        "variants": [
          {
            "id": "MM12-01",
            "source_transaction": "ZMRBR (bản sao SCEIS của MRBR — màn hình 'Release Blocked Invoices')",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "http://sceis.sc.gov/documents/AP330_Accounts_Payable_and_Agency_Blocked_Invoice_Reconciler_Course_Guide--clickable.pdf",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM12-01.xlsx",
            "raw_csv": "source-layout-downloads/MM12-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM12-01.flat.csv"
          },
          {
            "id": "MM12-02",
            "source_transaction": "MRBR (Release Blocked Invoices)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.guru99.com/how-to-release-an-invoice.html",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM12-02.xlsx",
            "raw_csv": "source-layout-downloads/MM12-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM12-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM13",
      "module": "MM",
      "title": "Tồn kho ký gửi nhà cung cấp",
      "tcode": "MB54",
      "fiori_app": null,
      "source_ids": [
        "S29"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "partner",
        "material",
        "plant",
        "sloc",
        "batch"
      ],
      "columns": [
        "partner",
        "material",
        "plant",
        "sloc",
        "batch",
        "special_stock",
        "qty",
        "uom",
        "owner"
      ],
      "selection": "Vendor/material/plant/storage; stock special K khi profile xác nhận; snapshot thời điểm thống nhất.",
      "reading": "Hàng nằm trong nhà máy không tự thuộc sở hữu doanh nghiệp. Xem hợp đồng và withdrawal event.",
      "reconciliation": "Qty ↔ physical third-party stock; withdrawals ↔ liability/settlement theo hợp đồng và source evidence.",
      "control": "Không cộng vendor-owned consignment vào own-inventory valuation; quyền sở hữu không suy từ location.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Supplier consignment stock → ownership classification → withdrawal/settlement bridge.",
      "worked_example": "Kho chứa 100 EA ký gửi của vendor: physical 100, own stock có thể 0 trước khi nhận quyền theo hợp đồng.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: partner + material + plant + sloc + batch. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S29",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/sewm/3900061781.html",
          "version": "Support content EWM/ERP; version not shown",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB5L and MB54 transaction names; legacy context, not target release validation."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "batch",
          "label": "Batch",
          "meaning": "Lô tồn kho; trống hợp lệ với non-batch-managed material.",
          "sample": "LOT-DEMO-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "owner",
          "label": "Owner",
          "meaning": "Chủ sở hữu/đối tác theo hợp đồng; trường bổ trợ có thể không có trong export.",
          "sample": "SAVA_DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB54 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Vendor/material/plant/storage; stock special K khi profile xác nhận; snapshot thời điểm thống nhất.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Qty ↔ physical third-party stock; withdrawals ↔ liability/settlement theo hợp đồng và source evidence. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM13-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "partner",
          "material",
          "plant",
          "sloc",
          "batch",
          "special_stock",
          "qty",
          "uom",
          "owner"
        ],
        "rows": [
          {
            "partner": "0000100001",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "batch": "LOT-DEMO-01",
            "special_stock": "K",
            "qty": "100",
            "uom": "EA",
            "owner": "SUPPLIER_DEMO"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM13",
        "variants": [
          {
            "id": "MM13-01",
            "source_transaction": "MMBE (Stock Overview — dòng Vendor Consignment)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://www.guru99.com/special-stock-and-special-procurement.html",
            "fields_read_from_source": 9,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM13-01.xlsx",
            "raw_csv": "source-layout-downloads/MM13-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM13-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM14",
      "module": "MM",
      "title": "Hàng đang chuyển giữa nhà máy",
      "tcode": "MB5T",
      "fiori_app": null,
      "source_ids": [
        "S26"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "po",
        "item",
        "from_plant",
        "to_plant"
      ],
      "columns": [
        "po",
        "item",
        "material",
        "from_plant",
        "to_plant",
        "gr_qty",
        "ir_qty",
        "qty",
        "uom"
      ],
      "selection": "Supplying/receiving plant và STO; snapshot cutoff; phân biệt valuated/non-valuated transit.",
      "reading": "Mẫu gr_qty = đã xuất, ir_qty = đã nhận; qty = transit residual. Không dùng invoice meaning tại đây.",
      "reconciliation": "Net GI sending - net GR receiving = transit; tie GL chỉ theo ownership/valuation scenario.",
      "control": "Không tính cùng hàng vào cả sending stock và transit sau GI. Intercompany cần bridge riêng.",
      "ifrs_ref": "CUTOFF",
      "lineage": "STO → outbound GI and inbound GR → stock-in-transit balance.",
      "worked_example": "Xuất 100 EA, nhận 90 EA ⇒ 10 EA transit; không tự định giá nếu thiếu valuation/control evidence.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item + from_plant + to_plant. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S26",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/5307b753128eb44ce10000000a174cb4.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB52, MB5T, MB5B and related stock reports."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "from_plant",
          "label": "Supplying Plant",
          "meaning": "Plant xuất chuyển kho; để đối chiếu GI với GR plant nhận.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "to_plant",
          "label": "Receiving Plant",
          "meaning": "Plant nhận chuyển kho; cần phân biệt cùng/khác company.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "Issued Quantity",
          "meaning": "Lượng GI thuần của sending plant.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_qty",
          "label": "Received Quantity",
          "meaning": "Lượng GR thuần của receiving plant.",
          "sample": "90",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5T nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Supplying/receiving plant và STO; snapshot cutoff; phân biệt valuated/non-valuated transit.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net GI sending - net GR receiving = transit; tie GL chỉ theo ownership/valuation scenario. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM14-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "gr_qty/ir_qty là nhãn canonical nội bộ cho GI/GR trong mẫu, không phải technical alias SAP.",
        "columns": [
          "po",
          "item",
          "material",
          "from_plant",
          "to_plant",
          "gr_qty",
          "ir_qty",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "material": "FG-CONNECTOR-01",
            "from_plant": "1100",
            "to_plant": "1200",
            "gr_qty": "100",
            "ir_qty": "90",
            "qty": "10",
            "uom": "EA"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM14",
        "variants": [
          {
            "id": "MM14-01",
            "source_transaction": "MB5T (Display Stock in Transit)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://connect.saplinked.in/read-blog/7_intracompany-sto.html",
            "fields_read_from_source": 18,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM14-01.xlsx",
            "raw_csv": "source-layout-downloads/MM14-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM14-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM15",
      "module": "MM",
      "title": "Vật tư chậm luân chuyển/không tiêu thụ",
      "tcode": null,
      "fiori_app": "F2137",
      "source_ids": [
        "S35",
        "S40"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "plant",
        "key_date"
      ],
      "columns": [
        "material",
        "plant",
        "key_date",
        "last_consumption",
        "qty",
        "consumption",
        "uom",
        "stock_value",
        "currency"
      ],
      "selection": "Plant/material/reporting date/lookback và consumption group; lưu price basis và permissions.",
      "reading": "No consumption khác no goods movement. Theo nguồn này value dùng current price dù reporting date khác.",
      "reconciliation": "Qty ↔ MM02/04 đúng cutoff; impairment assessment cần NRV evidence bổ sung, không bằng slow-stock value.",
      "control": "Không tự provision 100% cho stock >180 ngày; zero financial value có thể do quyền.",
      "ifrs_ref": "NRV",
      "lineage": "Stock + consumption group/time window → slow-moving signal → separate NRV review.",
      "worked_example": "100 EA không dùng 180 ngày là cờ rà soát; nếu còn firm order có lợi nhuận, chưa kết luận write-down.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + plant + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S35",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/91b21005dded4984bcccf4a69ae1300c/276b1b645ec64e808e430b363d6efd6b.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F2137 uses consumption group and current price per this page; zero value may reflect authorization."
        },
        {
          "id": "S40",
          "url": "https://www.ifrs.org/issued-standards/list-of-standards/ias-2-inventories/",
          "version": "Current overview consulted 2026-10-08",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Inventory cost and lower-of-cost/NRV principles."
        }
      ],
      "ifrs_policy": {
        "title": "Chậm luân chuyển và NRV",
        "sources": [
          "S40"
        ],
        "text": "Định giá tồn kho cần xem mức thấp hơn giữa cost và NRV. NRV dùng giá bán ước tính trừ chi phí hoàn thành và bán hàng cần thiết. Tồn không tiêu thụ là tín hiệu thu thập thêm demand/quality/selling-price evidence; không phải công thức dự phòng tự động theo tuổi. Dữ liệu kế toán và dữ liệu vật lý có thể có phạm vi sở hữu khác nhau."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "last_consumption",
          "label": "Last Consumption Date",
          "meaning": "Ngày consumption theo movement group; không nhất thiết ngày receipt cuối.",
          "sample": "2026-03-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "consumption",
          "label": "Consumption Quantity",
          "meaning": "Lượng tiêu thụ trong khoảng phân tích với định nghĩa movement được lưu.",
          "sample": "0",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_value",
          "label": "Stock Value",
          "meaning": "Giá trị tồn theo cơ sở giá đã khai báo; không tự bằng số dư GL.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F2137 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/material/reporting date/lookback và consumption group; lưu price basis và permissions.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Qty ↔ MM02/04 đúng cutoff; impairment assessment cần NRV evidence bổ sung, không bằng slow-stock value. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM15-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "plant",
          "key_date",
          "last_consumption",
          "qty",
          "consumption",
          "uom",
          "stock_value",
          "currency"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "key_date": "2026-09-30",
            "last_consumption": "2026-03-01",
            "qty": "100",
            "consumption": "0",
            "uom": "EA",
            "stock_value": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM15",
        "variants": [
          {
            "id": "MM15-01",
            "source_transaction": "MC46 (Key Figure: Slow-Moving Items — chế độ Double-line)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM15-01.xlsx",
            "raw_csv": "source-layout-downloads/MM15-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM15-01.flat.csv"
          },
          {
            "id": "MM15-02",
            "source_transaction": "MC50 (Key Figure: Dead Stock)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM15-02.xlsx",
            "raw_csv": "source-layout-downloads/MM15-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM15-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM16",
      "module": "MM",
      "title": "Danh sách chênh lệch kiểm kê",
      "tcode": "MI20",
      "fiori_app": null,
      "source_ids": [
        "S36"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "year",
        "count_doc",
        "item"
      ],
      "columns": [
        "year",
        "count_doc",
        "item",
        "material",
        "plant",
        "sloc",
        "book_qty",
        "counted_qty",
        "difference",
        "uom",
        "status",
        "accounting_ref"
      ],
      "selection": "Plant/count-document/year/date; giữ book-stock timestamp và trạng thái posted/unposted/recount.",
      "reading": "Difference = counted - book trong mẫu; zero-count phải có xác nhận, blank chưa phải 0.",
      "reconciliation": "Approved differences ↔ MM01 inventory-adjustment movements và FI02 valuation postings sau khi đã post.",
      "control": "Tách người đếm/người duyệt; giữ recount lịch sử. MI20 list không chứng minh adjustment đã được ghi sổ.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Physical inventory book snapshot + count → difference list → approved adjustment refs.",
      "worked_example": "Sổ 100, đếm 98 ⇒ -2 EA; chỉ sau approval/posting mới đối với GL theo giá trị phù hợp.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + count_doc + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S36",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/4407b753128eb44ce10000000a174cb4.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MI20 prints differences; separate posting processes."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "count_doc",
          "label": "Physical Inventory Document",
          "meaning": "Chứng từ kiểm kê; khóa kèm fiscal year và item.",
          "sample": "100000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "book_qty",
          "label": "Book Quantity",
          "meaning": "Lượng sổ tại mốc kiểm kê, xét freeze/backpost đúng quy trình.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "counted_qty",
          "label": "Counted Quantity",
          "meaning": "Lượng kiểm đếm đã phê duyệt; zero-count cần flag, không thay blank bằng 0.",
          "sample": "98",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Derived: counted_qty - book_qty, cùng UoM; chưa là giá trị posting.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MI20 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/count-document/year/date; giữ book-stock timestamp và trạng thái posted/unposted/recount.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Approved differences ↔ MM01 inventory-adjustment movements và FI02 valuation postings sau khi đã post. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM16-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "year",
          "count_doc",
          "item",
          "material",
          "plant",
          "sloc",
          "book_qty",
          "counted_qty",
          "difference",
          "uom",
          "status",
          "accounting_ref"
        ],
        "rows": [
          {
            "year": "2026",
            "count_doc": "100000001",
            "item": "00010",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "book_qty": "100",
            "counted_qty": "98",
            "difference": "-2",
            "uom": "EA",
            "status": "COUNTED_NOT_POSTED",
            "accounting_ref": null
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM16",
        "variants": [
          {
            "id": "MM16-01",
            "source_transaction": "MI20 (List of Inventory Differences)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM16-01.xlsx",
            "raw_csv": "source-layout-downloads/MM16-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM16-01.flat.csv"
          }
        ]
      }
    }
  ],
  "supplemental_reports": [
    {
      "id": "FI17",
      "tcode": "F.15",
      "kind": "NEW_BUSINESS_REPORT",
      "name_vi": "Danh sách chứng từ định kỳ",
      "viewer": "supplemental.html#FI17",
      "source_file": "SAP FICO CO.pdf",
      "source_page": 47,
      "target_release": "UNKNOWN",
      "native_export": false,
      "grain": "Recurring template document / accounting item",
      "data_lineage": "Recurring-entry template list; not actual posted GL items",
      "controls": [
        "Group header/document scope",
        "Debit/credit sign preserved",
        "Do not treat F.15 template amount as F.14 actual postings",
        "Source numeric precision unresolved; preserve raw text"
      ],
      "ifrs_interpretation": "Template schedule does not itself prove recognition or actual expense. Compare actual posted documents separately.",
      "variants": [
        "SUP-FI17-01"
      ]
    }
  ],
  "supplemental_table_extracts": [
    {
      "id": "EX01",
      "tcode": "SE16N · SKA1",
      "kind": "TABLE_EXTRACT_NOT_REPORT"
    },
    {
      "id": "EX02",
      "tcode": "SE16N · SKAT",
      "kind": "TABLE_EXTRACT_NOT_REPORT"
    },
    {
      "id": "EX03",
      "tcode": "SE16N · ACDOCA",
      "kind": "TABLE_EXTRACT_NOT_REPORT"
    }
  ],
  "operations_reports": [
    {
      "id": "PP01",
      "module": "PP",
      "tcode": "COOIS",
      "title": "Lệnh sản xuất và các view chi tiết",
      "grain": "Order/item; operation/component là grain riêng",
      "controls": [
        "Delivered quantity khác confirmed yield và scrap.",
        "Maximum orders/layout selection có thể làm thiếu dữ liệu.",
        "Không join header với operations/components rồi sum lại header quantity."
      ],
      "lineage": "Production order → operations/components/confirmations → goods movement / CO order costs",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/2bba750d1e124e1ea2a039bb1cd9b6c5/e804b753128eb44ce10000000a174cb4.html",
      "source_edition": "Source screenshot SAP R/3 2005 / official Cloud2608 feature documentation",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PP01",
      "variants": [
        {
          "id": "OPS-PP01-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP01-01.flat.csv"
        },
        {
          "id": "OPS-PP01-02",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 34,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PP01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP01-02.flat.csv"
        },
        {
          "id": "OPS-PP01-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 14,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP01-03.xlsx",
          "raw_csv": "operations-downloads/OPS-PP01-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP01-03.flat.csv"
        }
      ]
    },
    {
      "id": "PP02",
      "module": "PP",
      "tcode": "MD04",
      "title": "Tồn kho và nhu cầu động",
      "grain": "Material/plant/MRParea + MRP element row + snapshot timestamp",
      "controls": [
        "Available quantity là running balance, không cộng.",
        "Không coi rescheduling date là actual posting date.",
        "Snapshot khác thời điểm không ghép như cùng stock."
      ],
      "lineage": "MRP elements → receipts/requirements → current available balance",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/2bba750d1e124e1ea2a039bb1cd9b6c5/daf35d93b67542c0b1f6a18807e9f6e9.html",
      "source_edition": "Official Cloud2608; R/3 thesis indexed text2012, screenshot inaccessible",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PP02",
      "variants": [
        {
          "id": "OPS-PP02-01",
          "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 18,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP02-01.flat.csv"
        },
        {
          "id": "OPS-PP02-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 11,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PP02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP02-02.flat.csv"
        }
      ]
    },
    {
      "id": "SD01",
      "module": "SD",
      "tcode": "VA05",
      "title": "Danh sách sales order và schedule lines",
      "grain": "Sales document/item/schedule line theo listtype",
      "controls": [
        "Không dedup theo Sales Document làm mấtitems/schedule lines.",
        "Không sum amount item lặp theo schedule line.",
        "Order value và confirmed quantity không là revenue/AR."
      ],
      "lineage": "Sales order items → schedule lines → delivery/billing chain",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/25a41481f62e469ba0e61015a0d39d20/32756754e90d8c4ce10000000a4450e5.html?locale=en-US",
      "source_edition": "Official S4 on-premise Reporting in Sales; exact source release/body screenshot unresolved",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#SD01",
      "variants": [
        {
          "id": "OPS-SD01-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 32,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-SD01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD01-01.flat.csv"
        },
        {
          "id": "OPS-SD01-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 11,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-SD01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD01-02.flat.csv"
        }
      ]
    },
    {
      "id": "SD02",
      "module": "SD",
      "tcode": "VF05",
      "title": "Danh sách billing document",
      "grain": "Billing document/item; cancellation links riêng",
      "controls": [
        "Loại invoice/credit/cancellation phải có sign policy.",
        "Không đảo dấu amount âm lầnhai.",
        "Tách FItransferstatus/actual posting khỏi billingdate."
      ],
      "lineage": "Billing items → documentflow → accounting document/AR",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/25a41481f62e469ba0e61015a0d39d20/32756754e90d8c4ce10000000a4450e5.html?locale=en-US",
      "source_edition": "Official S4 Reporting in Sales; exact VF05 layout not read",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#SD02",
      "variants": [
        {
          "id": "OPS-SD02-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 32,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-SD02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD02-01.flat.csv"
        },
        {
          "id": "OPS-SD02-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 7,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-SD02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD02-02.flat.csv"
        },
        {
          "id": "OPS-SD02-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 7,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD02-03.xlsx",
          "raw_csv": "operations-downloads/OPS-SD02-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD02-03.flat.csv"
        }
      ]
    },
    {
      "id": "QM01",
      "module": "QM",
      "tcode": "QA33",
      "title": "Danh sách inspection lot",
      "grain": "Inspection lot/plant; characteristics/inspectionpoints khácgrain",
      "controls": [
        "Lot quantity khácsample size vàpostedstock.",
        "Monitor trafficlight không tự làqualitypass/fail.",
        "Joinlot/material/plant/batch; không chỉbatch."
      ],
      "lineage": "Inspection lot → results/usage decision → stock posting/material documents",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/1346ba53422bb54ce10000000a174cb4.html",
      "source_edition": "Official S4Cloud documentation; target release/layout unknown",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#QM01",
      "variants": [
        {
          "id": "OPS-QM01-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 28,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-QM01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM01-01.flat.csv"
        },
        {
          "id": "OPS-QM01-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-QM01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM01-02.flat.csv"
        }
      ]
    },
    {
      "id": "QM02",
      "module": "QM",
      "tcode": "QM11",
      "title": "Danh sách quality notification",
      "grain": "Notification header; defect/item/task/activity khácgrain",
      "controls": [
        "Mộtcasecónhiềudefect/taskkhông cộngcasecountlặp.",
        "Monitor có thể theo priority hoặc date, không tự suy chất lượng theo severity.",
        "Case không tự bằng provision/claim liability."
      ],
      "lineage": "Quality notification → items/tasks/activities → inspection/material/customer evidence",
      "source_url": "https://help.sap.com/docs/s4hana-cloud-best-practices/quality-management-for-complaints-from-customers-2fa-de/display-list-of-quality-notifications-optional",
      "source_edition": "Official Best Practice2FA / Cloud2608 linked source; target unknown",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#QM02",
      "variants": [
        {
          "id": "OPS-QM02-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 28,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-QM02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM02-01.flat.csv"
        },
        {
          "id": "OPS-QM02-02",
          "classification": "SOURCE_LAYOUT_CONFIGURATION_PREVIEW_NOT_VERIFIED_OUTPUT",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-QM02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM02-02.flat.csv"
        },
        {
          "id": "OPS-QM02-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 7,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM02-03.xlsx",
          "raw_csv": "operations-downloads/OPS-QM02-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM02-03.flat.csv"
        }
      ]
    },
    {
      "id": "PM01",
      "module": "PM",
      "tcode": "IW38",
      "title": "Lệnh bảo trì outstanding/in process",
      "grain": "Maintenance order header",
      "controls": [
        "Ảnh/hướngdẫnIW38 change không đổi thànhIW39 display.",
        "TECO khác settlement hoặc financial closure.",
        "Actual cost khác CAPEX được ghi nhận."
      ],
      "lineage": "Maintenance order → operations/confirmations/materials → CO costs/settlement",
      "source_url": "https://itre.ncsu.edu/bsip/training-procedures-resources/",
      "source_edition": "NCDPI instructions2020; ECC-style GUI, release not stated",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PM01",
      "variants": [
        {
          "id": "OPS-PM01-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 28,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PM01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM01-01.flat.csv"
        },
        {
          "id": "OPS-PM01-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 5,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PM01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM01-02.flat.csv"
        }
      ]
    },
    {
      "id": "PM02",
      "module": "PM",
      "tcode": "IW49N",
      "title": "Lệnh và operation bảo trì",
      "grain": "Order/activity; actualwork operation / totalactualcost order",
      "controls": [
        "Total actual costs theo order lặp theo activity, không cộnghaihoạtđộng.",
        "Actual work giữ unit và cancelled confirmations.",
        "Nguồn cho phép đổi thứ tự layout; không chứng minh một danh mục cột cố định."
      ],
      "lineage": "Order/operation → confirmations actualwork → CO order-level cost bridge",
      "source_url": "https://itre.ncsu.edu/bsip/training-procedures-resources/",
      "source_edition": "NCDPI guide31/12/2019; six layout columns documented, no screenshot output",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PM02",
      "variants": [
        {
          "id": "OPS-PM02-01",
          "classification": "DOCUMENTED_COLUMN_SELECTION_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 6,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PM02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM02-01.flat.csv"
        },
        {
          "id": "OPS-PM02-02",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 22,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PM02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM02-02.flat.csv"
        }
      ]
    },
    {
      "id": "QM03",
      "module": "QM",
      "tcode": "QA32",
      "title": "Worklist inspection lots và operations",
      "grain": "Inspection lot hoặc lot/operation, tùy biến thể",
      "controls": [
        "QA32 có chức năng change; QA33 display không được coi cùng layout đã chứng minh.",
        "Monitor đánh giá theo reference field, không tự là lỗi chất lượng.",
        "Không join lot với operations rồi cộng lặp Lot Qty.",
        "Không diễn giải BUn bị cắt thành đơn vị đã xác minh."
      ],
      "lineage": "Inspection lot → operation/characteristic → result → usage decision → stock postings",
      "source_url": "https://saplibrary.eslsteel360.com/eBook/PP%20Module/ESL%20%20User%20Training%20Manual%20-%20PP.pdf",
      "source_edition": "ESL user training draft 10 April 2020; IIT Roorkee 30 July 2016; installed release unknown",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#QM03",
      "variants": [
        {
          "id": "OPS-QM03-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 13,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-QM03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM03-01.flat.csv"
        },
        {
          "id": "OPS-QM03-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM03-02.xlsx",
          "raw_csv": "operations-downloads/OPS-QM03-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM03-02.flat.csv"
        },
        {
          "id": "OPS-QM03-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 6,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM03-03.xlsx",
          "raw_csv": "operations-downloads/OPS-QM03-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM03-03.flat.csv"
        }
      ]
    },
    {
      "id": "PM03",
      "module": "PM",
      "tcode": "IP24",
      "title": "Danh sách lịch gọi bảo trì",
      "grain": "Maintenance plan/item/call; call object có thể chưa sinh",
      "controls": [
        "Một maintenance item có nhiều call; không bỏ trùng theo item.",
        "Order trống không tự là missing error hoặc chi phí zero.",
        "Start date không tự đồng nghĩa ngày hoàn thành.",
        "Trạng thái S là biểu tượng chưa có legend đầy đủ."
      ],
      "lineage": "Maintenance plan/item → scheduling call → order/notification → operation/cost settlement",
      "source_url": "https://www.iitr.ac.in/Main/uploads/File/erp/Maintenance%20Processing.pdf",
      "source_edition": "IIT Roorkee training 30 July 2016; SAP on-premise 2025 FPS01 functionality only",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#PM03",
      "variants": [
        {
          "id": "OPS-PM03-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 8,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PM03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM03-01.flat.csv"
        }
      ]
    },
    {
      "id": "SD03",
      "module": "SD",
      "tcode": "VL06O",
      "title": "Outbound delivery monitor — view STO",
      "grain": "Delivery/item theo view; snapshot/filter context bắt buộc",
      "controls": [
        "Header view và item view có thể khác grain/cột.",
        "View được mô tả thiếu item number; không tự gán số item hoặc coi là unique key.",
        "Dlv.qty trong hướng dẫn có mô tả sai là material code; giữ unresolved.",
        "GI/Pick date cần phân biệt planned/actual và status, không tự là posting hoặc GR.",
        "STO transfer không tự là doanh thu bán hàng."
      ],
      "lineage": "STO → outbound delivery/item → picking/WM → goods issue → receiving goods receipt",
      "source_url": "https://umoja.un.org/sites/umoja.un.org/files/umoja_job_aid_-_outbound_delivery_processing_for_stos_v1.1.pdf",
      "source_edition": "Umoja ECC/STO guide version 1.0 indexed description; source file 403; SAP Cloud 2608 functionality only",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#SD03",
      "variants": [
        {
          "id": "OPS-SD03-01",
          "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 13,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-SD03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD03-01.flat.csv"
        }
      ]
    },
    {
      "id": "MM17",
      "module": "MM",
      "tcode": "LX02",
      "title": "WM stock theo material/bin",
      "grain": "Warehouse/material/plant/storage location/batch/special stock/bin",
      "controls": [
        "Hai cột S có cùng nhãn nhưng khác vị trí; chưa có định nghĩa đủ.",
        "Không gộp khác batch/bin/special stock hoặc đơn vị.",
        "Available stock âm phải giữ dấu và điều tra, không clamp zero.",
        "WM available stock không tự là valuated stock hoặc GL inventory.",
        "LX02 là classic WM source; không tự mapping sang EWM/S4 app."
      ],
      "lineage": "Warehouse stock/bin → material/batch/special stock → IM stock/goods movements → valuation/GL bridge",
      "source_url": "https://umoja.un.org/sites/umoja.un.org/files/umoja_job_aid_-_outbound_delivery_processing_for_stos_v1.1.pdf",
      "source_edition": "Umoja classic WM/ECC; indexed description only, output image not inspected",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#MM17",
      "variants": [
        {
          "id": "OPS-MM17-01",
          "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 13,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-MM17-01.xlsx",
          "raw_csv": "operations-downloads/OPS-MM17-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-MM17-01.flat.csv"
        }
      ]
    },
    {
      "id": "PP03",
      "module": "PP",
      "tcode": "CS12",
      "title": "BOM nhiều cấp — đường dẫn component",
      "grain": "Một occurrence của component theo đường dẫn cây, material/plant/usage/alternative/key date/explosion scope",
      "controls": [
        "CS12 level-by-level khác CS13 summarized; tên tutorial không chứng minh summarized semantics.",
        "Component lặp ở hai nhánh không tự dedup.",
        "Ảnh không có quantity component; không tự chèn Comp. Qty vào bảng nguồn.",
        "Required/base quantity của header khác định mức từng component."
      ],
      "lineage": "Material BOM + usage/alternative/validity/application → explosion occurrence → component allocation/costing",
      "source_url": "https://www.tutorialscampus.com/sap-pp/how-to-display-summarized-multi-level-bom.htm",
      "source_edition": "Public tutorial or SAP 2016 harmonization example; target release unknown",
      "target_release": "UNKNOWN",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "BOM/routing/order header là bằng chứng vận hành; chưa là chi phí actual, giá trị tồn kho, WIP hoặc bút toán IFRS.",
      "viewer": "operations.html#PP03",
      "variants": [
        {
          "id": "OPS-PP03-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 6,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP03-01.flat.csv"
        }
      ]
    },
    {
      "id": "PP04",
      "module": "PP",
      "tcode": "CA03",
      "title": "Routing — tổng quan operation",
      "grain": "Material/plant/task-list group/counter/sequence/operation/validity; source thiếu group ID và key date",
      "controls": [
        "Hai operation dùng cùng work center vẫn khác dòng.",
        "Setup/machine có đơn vị riêng; không cộng minute với hour.",
        "Standard activity khác actual confirmation hoặc cost.",
        "Routing master khác snapshot operation của production order sau khi copy/change."
      ],
      "lineage": "Material/plant/validity → routing group/counter/sequence/operation → work center/standard value → costing; order operation snapshot tách",
      "source_url": "https://www.guru99.com/how-to-create-change-routing.html",
      "source_edition": "Public tutorial or SAP 2016 harmonization example; target release unknown",
      "target_release": "UNKNOWN",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "BOM/routing/order header là bằng chứng vận hành; chưa là chi phí actual, giá trị tồn kho, WIP hoặc bút toán IFRS.",
      "viewer": "operations.html#PP04",
      "variants": [
        {
          "id": "OPS-PP04-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 16,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP04-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP04-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP04-01.flat.csv"
        }
      ]
    },
    {
      "id": "PP05",
      "module": "PP",
      "tcode": "CO03",
      "title": "Lệnh sản xuất — form header, quantity và dates",
      "grain": "Một order snapshot + các field theo section; không là order operation/component rows",
      "controls": [
        "Form được chuyển bảng phẳng bởi SAVA; chưa chứng minh CO03 có export CSV/XLSX theo cấu trúc này.",
        "Basic/scheduled/confirmed date/time không gộp một date.",
        "Status text là chuỗi mã, không tự là complete/cost settled.",
        "Total Qty, Delivered, Scrap Portion và Short/Exc. Rcpt khác measure và grain.",
        "Không suy WIP/variance/expense từ trạng thái order."
      ],
      "lineage": "Order header → order operations/components → confirmations/MM movement → CO line items → approved WIP/settlement bridge",
      "source_url": "https://assets.dm.ux.sap.com/desapusergroupsknowledgetransfer/2017/pdfs/170503_fiori_%2020_in_S4HANA_1610.pdf",
      "source_edition": "Public tutorial or SAP 2016 harmonization example; target release unknown",
      "target_release": "UNKNOWN",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "BOM/routing/order header là bằng chứng vận hành; chưa là chi phí actual, giá trị tồn kho, WIP hoặc bút toán IFRS.",
      "viewer": "operations.html#PP05",
      "variants": [
        {
          "id": "OPS-PP05-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 31,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP05-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP05-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP05-01.flat.csv"
        },
        {
          "id": "OPS-PP05-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 21,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP05-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PP05-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP05-02.flat.csv"
        }
      ]
    }
  ],
  "fi_aa_reports": [
    {
      "id": "AA01",
      "tcode": "AW01N",
      "title": "Asset Explorer — giá trị và giao dịch",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA01",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA01-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=31",
            "source_page": 31,
            "columns": 9,
            "xlsx": "fi-aa-downloads/AA01-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA01-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA01-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA02",
      "tcode": "S_ALR_87011963",
      "title": "Số dư tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA02",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA02-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=4",
            "source_page": 4,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA02-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA02-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA02-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA03",
      "tcode": "S_ALR_87011990",
      "title": "Lịch sử biến động tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA03",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA03-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=33",
            "source_page": 33,
            "columns": 19,
            "xlsx": "fi-aa-downloads/AA03-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA03-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA03-01.flat.csv"
          },
          {
            "id": "AA03-02",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=33",
            "source_page": 33,
            "columns": 10,
            "xlsx": "fi-aa-downloads/AA03-02.xlsx",
            "raw_csv": "fi-aa-downloads/AA03-02.layout.csv",
            "flat_csv": "fi-aa-downloads/AA03-02.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA04",
      "tcode": "S_ALR_87012006",
      "title": "Khấu hao thông thường",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA04",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA04-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=34",
            "source_page": 34,
            "columns": 15,
            "xlsx": "fi-aa-downloads/AA04-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA04-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA04-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA05",
      "tcode": "S_ALR_87012050",
      "title": "Tăng tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA05",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA05-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=36",
            "source_page": 36,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA05-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA05-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA05-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA06",
      "tcode": "S_ALR_87012052",
      "title": "Giảm tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA06",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA06-01",
            "classification": "PROXY_FAMILY_LAYOUT_PROVISIONAL",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=36",
            "source_page": 36,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA06-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA06-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA06-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA07",
      "tcode": "S_ALR_87012054",
      "title": "Điều chuyển nội bộ",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA07",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA07-01",
            "classification": "PROXY_FAMILY_LAYOUT_PROVISIONAL",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=36",
            "source_page": 36,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA07-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA07-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA07-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    }
  ],
  "all_reports": [
    {
      "id": "FI01",
      "module": "FI",
      "title": "Chi tiết GL — entry view",
      "tcode": "FBL3N",
      "fiori_app": null,
      "source_ids": [
        "S02"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "date",
        "gl",
        "amount",
        "currency",
        "doc_amount",
        "doc_currency"
      ],
      "selection": "Company, GL, posting-date interval; chọn All items để kiểm tra phát sinh, hoặc key-date open items cho clearing.",
      "reading": "Một dòng FI entry có thể tách nhiều dòng ở ledger view. Dấu âm trong mẫu là Có; tổng riêng từng loại tiền.",
      "reconciliation": "Tổng phát sinh theo account ↔ FI03 sau thống nhất ledger-scope và bridge entry/ledger.",
      "control": "Không join trực tiếp line FI với line ACDOCA. GL không line-item-managed có thể cần nguồn bổ trợ.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "FI document entry view → signed GL movement → balance bridge.",
      "worked_example": "Nợ tồn kho 1.000 và Có GR/IR 1.000 có tổng 0; lọc chỉ tồn kho thì tổng 1.000 là đúng.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_amount",
          "label": "Document Amount",
          "meaning": "Số tiền theo đồng tiền chứng từ; không cộng với amount khác loại tiền.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_currency",
          "label": "Document Currency",
          "meaning": "Đồng tiền chứng từ, tách với currency của số tiền company-code.",
          "sample": "EUR",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FBL3N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company, GL, posting-date interval; chọn All items để kiểm tra phát sinh, hoặc key-date open items cho clearing.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng phát sinh theo account ↔ FI03 sau thống nhất ledger-scope và bridge entry/ledger. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI01-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "date",
          "gl",
          "amount",
          "currency",
          "doc_amount",
          "doc_currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "date": "2026-09-15",
            "gl": "150000",
            "amount": "1000",
            "currency": "USD",
            "doc_amount": "1000",
            "doc_currency": "USD"
          },
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "002",
            "date": "2026-09-15",
            "gl": "210000",
            "amount": "-1000",
            "currency": "USD",
            "doc_amount": "-1000",
            "doc_currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI01",
        "variants": [
          {
            "id": "FI01-01",
            "source_transaction": "FBL3N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.saptraininghq.com/analysis-of-sap-fbl3n-report-and-its-significance/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI01-01.xlsx",
            "raw_csv": "source-layout-downloads/FI01-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI01-01.flat.csv"
          },
          {
            "id": "FI01-02",
            "source_transaction": "FBL3N (ECC) — so sánh với FAGLL03 (S/4HANA)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/knowledgecentre/fbl3n-g-l-account-line-items-report-has-been-replaced-by-the-new-fagll03-g-l-account-line-items-report/",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI01-02.xlsx",
            "raw_csv": "source-layout-downloads/FI01-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI01-02.flat.csv"
          },
          {
            "id": "FI01-03",
            "source_transaction": "FBL3N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapsharks.com/fbl3n-gl-line-item-display/",
            "fields_read_from_source": 10,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI01-03.xlsx",
            "raw_csv": "source-layout-downloads/FI01-03.layout.csv",
            "flat_csv": "source-layout-downloads/FI01-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI02",
      "module": "FI",
      "title": "Chi tiết GL — ledger view",
      "tcode": "FAGLL03",
      "fiori_app": "F2217",
      "source_ids": [
        "S01",
        "S02"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "doc",
        "line",
        "date",
        "gl",
        "profit_center",
        "amount",
        "currency",
        "currency_type"
      ],
      "selection": "Ledger, company, fiscal year/period hoặc posting dates, GL, open/cleared/all; lưu selection và layout.",
      "reading": "Dòng journal theo ledger; document splitting có thể làm số dòng khác FI01. Giữ currency type và ledger.",
      "reconciliation": "Group GL/ledger/company/currency → movement FI03; truy ngược accounting references của MM/CO.",
      "control": "Reject duplicate journal key; không cộng nhiều ledger hoặc cộng cả doc_amount và amount.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "Universal Journal concept → selected ledger view → aggregation; table/CDS binding cần layout thật.",
      "worked_example": "Cùng chứng từ 1.000 ở 0L và 2L: chọn 0L được 1.000, cộng hai ledger 2.000 là sai.",
      "existing_contract": "D16",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S01",
          "url": "https://help.sap.com/docs/r/0fa84c9d9c634132b7c4abb9ffdd8f06/latest/en-US/bd874158706b9144e10000000a4450e5.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App F2217; ledger view; open/cleared/all and key-date filters."
        },
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "profit_center",
          "label": "Profit Center",
          "meaning": "Đơn vị trách nhiệm lợi nhuận; master có thời hạn hiệu lực.",
          "sample": "PC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency_type",
          "label": "Currency Type",
          "meaning": "Loại tiền trong SAP; 10 thường là company-code currency, cần xác nhận cấu hình.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FAGLL03 / F2217 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Ledger, company, fiscal year/period hoặc posting dates, GL, open/cleared/all; lưu selection và layout.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Group GL/ledger/company/currency → movement FI03; truy ngược accounting references của MM/CO. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI02-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "doc",
          "line",
          "date",
          "gl",
          "profit_center",
          "amount",
          "currency",
          "currency_type"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "date": "2026-09-15",
            "gl": "150000",
            "profit_center": "PC1100",
            "amount": "1000",
            "currency": "USD",
            "currency_type": "10"
          },
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "000002",
            "date": "2026-09-15",
            "gl": "210000",
            "profit_center": "PC1100",
            "amount": "-1000",
            "currency": "USD",
            "currency_type": "10"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI02",
        "variants": [
          {
            "id": "FI02-01",
            "source_transaction": "FAGLL03 (G/L View) — so sánh với FBL3N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/knowledgecentre/fbl3n-g-l-account-line-items-report-has-been-replaced-by-the-new-fagll03-g-l-account-line-items-report/",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI02-01.xlsx",
            "raw_csv": "source-layout-downloads/FI02-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI02-01.flat.csv"
          },
          {
            "id": "FI02-02",
            "source_transaction": "F2217 Display Line Items in General Ledger",
            "classification": "FIORI_F2217",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-display-financial-statement",
            "fields_read_from_source": 19,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI02-02.xlsx",
            "raw_csv": "source-layout-downloads/FI02-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI02-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI03",
      "module": "FI",
      "title": "Số dư tài khoản GL",
      "tcode": "FAGLB03",
      "fiori_app": "F0707A",
      "source_ids": [
        "S03"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Company, ledger, year, GL; kiểm tra carryforward và kỳ đặc biệt.",
      "reading": "Opening là stock, debit/credit là flow; closing không được cộng qua tháng.",
      "reconciliation": "Opening + debit - credit = closing; phát sinh khớp FI02; closing khớp FI04 đúng selection.",
      "control": "Tách carryforward, adjustment period và scope exclusions; không ép balance của partial extract về 0.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "GL ledger items/carryforward → balance period → trial balance.",
      "worked_example": "500 + 1.200 - 200 = 1.500. Chênh 500 thường cần kiểm tra opening trước tìm missing posting.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + gl + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/5559bf5b5d634e39adb4358956f7bf2a.html?locale=de-DE",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGLB03, F.08, F0996, F.01, F0708 and F0707/A compared; similar purpose is not export equivalence."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FAGLB03 / F0707A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company, ledger, year, GL; kiểm tra carryforward và kỳ đặc biệt.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Opening + debit - credit = closing; phát sinh khớp FI02; closing khớp FI04 đúng selection. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI03-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "gl",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "150000",
            "opening": "500",
            "debit": "1200",
            "credit": "200",
            "closing": "1500",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI03",
        "variants": [
          {
            "id": "FI03-01",
            "source_transaction": "FAGLB03 (S/4HANA) — so sánh FS10N (ECC)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/knowledgecentre/fs10n-g-l-account-balance-display-report-has-been-replaced-by-a-new-version-faglb03-g-l-account-balance-display-report/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI03-01.xlsx",
            "raw_csv": "source-layout-downloads/FI03-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI03-01.flat.csv"
          },
          {
            "id": "FI03-02",
            "source_transaction": "FAGLB03",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.learntosap.com/ficotutorialglaccountbalance.html",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI03-02.xlsx",
            "raw_csv": "source-layout-downloads/FI03-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI03-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI04",
      "module": "FI",
      "title": "Trial Balance / bảng cân đối phát sinh",
      "tcode": null,
      "fiori_app": "F0996",
      "source_ids": [
        "S03"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Ledger/company/year/period; chọn hierarchy và currency type; giữ đầy đủ accounts cho kiểm tra cân.",
      "reading": "Dòng account là lá; hierarchy subtotal không cộng lại. Trial balance không thay financial statements.",
      "reconciliation": "Sum closing = 0 cho full balanced scope; FI03 account balances ↔ FI05 qua mapping có version.",
      "control": "Kiểm tra unmapped GL, hierarchy leaf, cutoff và retained earnings/carryforward.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "Balance cube/query theo hệ → account balances → FSV mapping.",
      "worked_example": "Tài sản +1.500 và nợ/vốn -1.500 cân 0; một bảng cân vẫn có thể phân loại IFRS sai.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + gl + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/5559bf5b5d634e39adb4358956f7bf2a.html?locale=de-DE",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGLB03, F.08, F0996, F.01, F0708 and F0707/A compared; similar purpose is not export equivalence."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0996 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Ledger/company/year/period; chọn hierarchy và currency type; giữ đầy đủ accounts cho kiểm tra cân.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum closing = 0 cho full balanced scope; FI03 account balances ↔ FI05 qua mapping có version. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI04-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "gl",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "150000",
            "opening": "500",
            "debit": "1200",
            "credit": "200",
            "closing": "1500",
            "currency": "USD"
          },
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "210000",
            "opening": "-500",
            "debit": "200",
            "credit": "1200",
            "closing": "-1500",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI04",
        "variants": [
          {
            "id": "FI04-01",
            "source_transaction": "F0996 Trial Balance",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/key-reports-for-segment-reporting-in-sap-s4hana",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI04-01.xlsx",
            "raw_csv": "source-layout-downloads/FI04-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI04-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI05",
      "module": "FI",
      "title": "Bảng tình hình tài chính và kết quả kinh doanh",
      "tcode": "F.01",
      "fiori_app": "F0708",
      "source_ids": [
        "S03",
        "S45"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "fs_node",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "fs_node",
        "opening",
        "closing",
        "currency"
      ],
      "selection": "FSV, reporting/comparison period, company, ledger, currency; chốt FSV version và reporting basis.",
      "reading": "FSV node là mapping trình bày; subtotal không phải account. Fiori và classic có thể khác drill/export.",
      "reconciliation": "Mỗi GL FI04 có đúng mapping hiệu lực; tổng leaf khớp TB và bridge điều chỉnh IFRS.",
      "control": "Mọi account chưa map vào exception, không vào Other tự động. Lưu policy IAS1/IFRS18 theo kỳ.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "FI04 → approved GL-to-FSV map → reporting lines + adjustments.",
      "worked_example": "Tồn kho 1.500 trước provision, adjustment -100 ⇒ 1.400; mapping và bút toán là hai lớp khác nhau.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + fs_node + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/5559bf5b5d634e39adb4358956f7bf2a.html?locale=de-DE",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGLB03, F.08, F0996, F.01, F0708 and F0707/A compared; similar purpose is not export equivalence."
        },
        {
          "id": "S45",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2025/issued/part-a/ifrs-18-presentation-and-disclosure-in-financial-statements.pdf?bypass=on",
          "version": "Issued 2025 text, Appendix C",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Effective annual periods beginning 2027-01-01; early application permitted, retrospective transition."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "fs_node",
          "label": "FSV Node",
          "meaning": "Chỉ tiêu báo cáo tài chính theo phiên bản mapping; không cộng parent và leaf.",
          "sample": "INVENTORY",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F.01 / F0708 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "FSV, reporting/comparison period, company, ledger, currency; chốt FSV version và reporting basis.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Mỗi GL FI04 có đúng mapping hiệu lực; tổng leaf khớp TB và bridge điều chỉnh IFRS. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI05-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Một node sau adjustment minh họa -100; không là bộ financial statements đầy đủ.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "fs_node",
          "opening",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "fs_node": "INVENTORY",
            "opening": "500",
            "closing": "1400",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI05",
        "variants": [
          {
            "id": "FI05-01",
            "source_transaction": "F0708 Display Financial Statement",
            "classification": "FIORI_SOURCE_FOR_FINANCIAL_STATEMENT_PROFILE",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-display-financial-statement",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI05-01.xlsx",
            "raw_csv": "source-layout-downloads/FI05-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI05-01.flat.csv"
          },
          {
            "id": "FI05-02",
            "source_transaction": "Balance Sheet/Income Statement (giao diện trùng F0708 Display Financial Statement)",
            "classification": "FIORI_SOURCE_FOR_FINANCIAL_STATEMENT_PROFILE",
            "source_url": "https://blog.sap-press.com/key-reports-for-segment-reporting-in-sap-s4hana",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI05-02.xlsx",
            "raw_csv": "source-layout-downloads/FI05-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI05-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI06",
      "module": "FI",
      "title": "Chi tiết công nợ nhà cung cấp",
      "tcode": "FBL1N",
      "fiori_app": "F0712",
      "source_ids": [
        "S02",
        "S04"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "partner",
        "date",
        "due_date",
        "clearing_date",
        "amount",
        "currency"
      ],
      "selection": "Supplier/company; Open items tại key date; lưu special GL, noted items và clearing scope.",
      "reading": "Một vendor line có thể đại diện hóa đơn nhiều PO. Credit balance phải trả là âm theo mẫu FI.",
      "reconciliation": "Open AP ↔ reconciliation accounts GL qua special-GL/FX/manual-posting bridge; ↔ FI07 balances.",
      "control": "Invoice clearing sau key date vẫn open tại key date. Không suy PO detail từ vendor line.",
      "ifrs_ref": "FINANCIAL_INSTRUMENT",
      "lineage": "Supplier FI lines → key-date open set → AP reconciliation.",
      "worked_example": "Invoice -1.000 ngày 15/9, clear 5/10: tại 30/9 còn -1.000 dù hôm nay đã cleared.",
      "existing_contract": "D14",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        },
        {
          "id": "S04",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/031c345485b84c8c94265be9ef61d3a8/656fa2cdaaa9480b83d8bda9e9a57fe1.html?locale=en-US",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0712 identity; operational partner view; no assumed one-to-one PO detail on invoice partner line."
        }
      ],
      "ifrs_policy": {
        "title": "Phải trả và công cụ tài chính",
        "sources": [
          "S42",
          "S43"
        ],
        "text": "Công nợ được đọc cùng hợp đồng, quyền/nghĩa vụ và đơn vị tiền chức năng. Supplier balance khác tổng đơn mua còn mở. Đánh giá ngoại tệ, chiết khấu/financing và đối ứng được bridge riêng; không suy từ aging rằng một khoản hết nghĩa vụ hoặc được bù trừ. Đây là hướng dẫn điều tra, không phải phê duyệt chính sách của doanh nghiệp."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "due_date",
          "label": "Net Due Date",
          "meaning": "Hạn thanh toán theo payment terms; dùng tuổi quá hạn, không dùng ngày invoice thay thế.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "clearing_date",
          "label": "Clearing Date",
          "meaning": "Ngày clearing; null là chưa có clearing theo dữ liệu, không tự thay hôm nay.",
          "sample": "2026-10-05",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FBL1N / F0712 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Supplier/company; Open items tại key date; lưu special GL, noted items và clearing scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Open AP ↔ reconciliation accounts GL qua special-GL/FX/manual-posting bridge; ↔ FI07 balances. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI06-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "partner",
          "date",
          "due_date",
          "clearing_date",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "partner": "0000100001",
            "date": "2026-09-15",
            "due_date": "2026-10-15",
            "clearing_date": "2026-10-05",
            "amount": "-1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI06",
        "variants": [
          {
            "id": "FI06-01",
            "source_transaction": "FBL1N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapsharks.com/fbl1n-vendor-line-item-display/",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI06-01.xlsx",
            "raw_csv": "source-layout-downloads/FI06-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI06-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI07",
      "module": "FI",
      "title": "Số dư nhà cung cấp",
      "tcode": null,
      "fiori_app": "F0701A",
      "source_ids": [
        "S06"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "period",
        "partner",
        "currency"
      ],
      "columns": [
        "company",
        "year",
        "period",
        "partner",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Supplier/company/year; chọn kỳ và đồng tiền; kiểm tra special-GL display.",
      "reading": "Doanh số mua và balance là khác chỉ tiêu; credit memo/payment thay đổi số dư nhưng không phải purchase mới.",
      "reconciliation": "FI06 all-items movement + opening ↔ closing; closing ↔ GL AP cùng scope.",
      "control": "F0701 cũ đã có thông báo xóa ở S/4 2023; không thiết kế thư viện mới quanh app cũ.",
      "ifrs_ref": "FINANCIAL_INSTRUMENT",
      "lineage": "Supplier postings → period balance → AP control account.",
      "worked_example": "Opening -500, payments debit 300, invoices credit 800 ⇒ closing -1.000.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + period + partner + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S06",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f5d3e1005efd4e86acf9a65abf428082/93c4089e4b4d47aca870dc7d33ba8b78.html?version=2023.000",
          "version": "S/4HANA 2023",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0701 deleted; successor F0701A."
        }
      ],
      "ifrs_policy": {
        "title": "Phải trả và công cụ tài chính",
        "sources": [
          "S42",
          "S43"
        ],
        "text": "Công nợ được đọc cùng hợp đồng, quyền/nghĩa vụ và đơn vị tiền chức năng. Supplier balance khác tổng đơn mua còn mở. Đánh giá ngoại tệ, chiết khấu/financing và đối ứng được bridge riêng; không suy từ aging rằng một khoản hết nghĩa vụ hoặc được bù trừ. Đây là hướng dẫn điều tra, không phải phê duyệt chính sách của doanh nghiệp."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0701A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Supplier/company/year; chọn kỳ và đồng tiền; kiểm tra special-GL display.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "FI06 all-items movement + opening ↔ closing; closing ↔ GL AP cùng scope. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI07-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "period",
          "partner",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "period": "009",
            "partner": "0000100001",
            "opening": "-500",
            "debit": "300",
            "credit": "800",
            "closing": "-1000",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI07",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI07-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 4,
            "source_url": "https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/migrate-upload-vendor-opening-balances-in-rise-with-sap-cloud-2208/ba-p/13551555",
            "source_sha256": "591ab57b330046fd377f410f110633ee50bc02dea74a64336adbcec113dd741e",
            "xlsx": "finance-gaps-downloads/GAP-FI07-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI07-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI07-01.flat.csv"
          },
          {
            "id": "GAP-FI07-02",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 6,
            "source_url": "https://www.sapmuhasebe.com/2015/11/fi-modulunde-satc-bakiye-analizinin.html",
            "source_sha256": "8e0c410a45357e064f64fe0daa046e4e88f55de5f0afb099ac01cbe48407b458",
            "xlsx": "finance-gaps-downloads/GAP-FI07-02.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI07-02.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI07-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI08",
      "module": "FI",
      "title": "Chi tiết công nợ khách hàng",
      "tcode": "FBL5N",
      "fiori_app": "F0711",
      "source_ids": [
        "S02",
        "S05"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "partner",
        "date",
        "due_date",
        "clearing_date",
        "amount",
        "currency"
      ],
      "selection": "Customer/company/key date; normal và special GL tách; lấy cả credit memo/unallocated receipts cần đối soát.",
      "reading": "Amount dương là receivable trong mẫu; customer view không cung cấp toàn bộ ledger dimension.",
      "reconciliation": "Open set ↔ FI09/GL AR qua bridge; input cho FI10 sau chuẩn hóa hạn thanh toán.",
      "control": "Residual/partial payments phải lưu liên kết invoice; không xóa credit balances khỏi tổng reconciliation.",
      "ifrs_ref": "ECL",
      "lineage": "Customer FI lines → key-date open set → aging → ECL assessment.",
      "worked_example": "Invoice 1.000 và payment on-account -200 có net AR 800; chưa được tự gán -200 cho invoice bất kỳ.",
      "existing_contract": "D15",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S02",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/d8adce520fb00026e10000000a4450e5.html?locale=de-DE",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FBL1N, FBL5N, FBL3N, FAGLL03 and H variants listed. Does not prove target installation."
        },
        {
          "id": "S05",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/37e57e54279c2457e10000000a44176d.html?locale=en-US&state=PRODUCTION&version=2023.latest",
          "version": "S/4HANA 2023 latest",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0711, export and variants; export volume limit; choose product/release in app reference library."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "due_date",
          "label": "Net Due Date",
          "meaning": "Hạn thanh toán theo payment terms; dùng tuổi quá hạn, không dùng ngày invoice thay thế.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "clearing_date",
          "label": "Clearing Date",
          "meaning": "Ngày clearing; null là chưa có clearing theo dữ liệu, không tự thay hôm nay.",
          "sample": "2026-10-05",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở FBL5N / F0711 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Customer/company/key date; normal và special GL tách; lấy cả credit memo/unallocated receipts cần đối soát.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Open set ↔ FI09/GL AR qua bridge; input cho FI10 sau chuẩn hóa hạn thanh toán. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI08-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Payment -200 chưa phân bổ; không tự net invoice cho mục đích aging/ECL.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "partner",
          "date",
          "due_date",
          "clearing_date",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "partner": "0000100001",
            "date": "2026-09-15",
            "due_date": "2026-09-01",
            "clearing_date": "2026-10-05",
            "amount": "1000",
            "currency": "USD"
          },
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000002",
            "line": "001",
            "partner": "0000100001",
            "date": "2026-09-15",
            "due_date": null,
            "clearing_date": null,
            "amount": "-200",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI08",
        "variants": [
          {
            "id": "FI08-01",
            "source_transaction": "FBL5N",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.bu.edu/cfo/files/2023/03/Reviewing-customer-Accounts-for-Open-Receivables.pdf",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI08-01.xlsx",
            "raw_csv": "source-layout-downloads/FI08-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI08-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI09",
      "module": "FI",
      "title": "Số dư khách hàng",
      "tcode": null,
      "fiori_app": "F0703A",
      "source_ids": [
        "S07"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "year",
        "period",
        "partner",
        "currency"
      ],
      "columns": [
        "company",
        "year",
        "period",
        "partner",
        "opening",
        "debit",
        "credit",
        "closing",
        "currency"
      ],
      "selection": "Company/customer/year/period; giữ currency và opening.",
      "reading": "Phát sinh doanh số và balance không giống revenue IFRS; receipt và credit memo ảnh hưởng balance.",
      "reconciliation": "FI08 movements + opening ↔ closing; khớp GL reconciliation account theo scope.",
      "control": "Không dùng app F0703 cũ làm baseline mới; confirm F0703A catalog theo release mục tiêu.",
      "ifrs_ref": "ECL",
      "lineage": "AR partner postings → period balance → AR/GL bridge.",
      "worked_example": "Opening 500 + invoices 1.200 - receipts 200 = 1.500; ECL trình bày tách gross.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + period + partner + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S07",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/e296651f454c4284ade361292c633d69/f834212808214d88a8f4aec601d86e25.html?q=AMRP&version=2022.000",
          "version": "S/4HANA 2022",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0703A replaces F0703; source announces deletion in 2023, not evidence of installed target."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Số đầu kỳ có dấu, gồm carryforward phù hợp; không cộng opening qua nhiều kỳ.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Số cuối kỳ có dấu; không cộng các snapshot thời gian.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0703A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/customer/year/period; giữ currency và opening.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "FI08 movements + opening ↔ closing; khớp GL reconciliation account theo scope. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI09-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "period",
          "partner",
          "opening",
          "debit",
          "credit",
          "closing",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "period": "009",
            "partner": "0000100001",
            "opening": "500",
            "debit": "1200",
            "credit": "200",
            "closing": "1500",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI09",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI09-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 7,
            "source_url": "https://assets.dm.ux.sap.com/desapusergroupsknowledgetransfer/2017/pdfs/170503_fiori_%2020_in_S4HANA_1610.pdf",
            "source_sha256": "3d7f695a4040f6a4d4aa491fe04cb628d066818088452f931b77c942b92e8db7",
            "xlsx": "finance-gaps-downloads/GAP-FI09-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI09-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI09-01.flat.csv"
          },
          {
            "id": "GAP-FI09-02",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 5,
            "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/fiaccounting/3361881403.html",
            "source_sha256": "1a5946193bff472922e2a935ab147f3d9c34799506342bab91fb2dfaff4044ce",
            "xlsx": "finance-gaps-downloads/GAP-FI09-02.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI09-02.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI09-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI10",
      "module": "FI",
      "title": "Tuổi nợ AR theo ngày đến hạn",
      "tcode": null,
      "fiori_app": null,
      "source_ids": [
        "S05",
        "S42"
      ],
      "kind": "DERIVED_ANALYSIS",
      "keys": [
        "company",
        "year",
        "doc",
        "line",
        "key_date"
      ],
      "columns": [
        "company",
        "year",
        "doc",
        "line",
        "partner",
        "key_date",
        "due_date",
        "exposure",
        "currency",
        "days_overdue",
        "bucket"
      ],
      "selection": "Xuất open AR FI08 tại key date; chọn policy cho credits, disputed và special GL trước bucket.",
      "reading": "days_overdue = key_date - due_date; cùng ngày đến hạn thuộc chưa quá hạn; bucket không chồng lấn.",
      "reconciliation": "Tổng bucket + credits tách riêng + excluded bridge = FI08 signed open balance.",
      "control": "Missing due date vào UNKNOWN không vào current; không dùng invoice age thay due age.",
      "ifrs_ref": "ECL",
      "lineage": "FI08 approved open set + due-date terms → derived aging; không là một T-code SAP riêng.",
      "worked_example": "30/9 trừ 1/9 = 29 ngày, bucket 1–30; item due 1/10 còn chưa đến hạn.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAVA_DERIVED_NOT_NATIVE",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + doc + line + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S05",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/37e57e54279c2457e10000000a44176d.html?locale=en-US&state=PRODUCTION&version=2023.latest",
          "version": "S/4HANA 2023 latest",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0711, export and variants; export volume limit; choose product/release in app reference library."
        },
        {
          "id": "S42",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2024/issued/part-a/ifrs-9-financial-instruments.pdf?bypass=on",
          "version": "Issued 2024 text",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "5.5.15-17 and B5.5.35: simplified approach/provision matrix subject to credit-loss measurement requirements."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "due_date",
          "label": "Net Due Date",
          "meaning": "Hạn thanh toán theo payment terms; dùng tuổi quá hạn, không dùng ngày invoice thay thế.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "exposure",
          "label": "Credit Exposure",
          "meaning": "Khoản phải thu chịu rủi ro sau xử lý credits theo chính sách được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "days_overdue",
          "label": "Days Overdue",
          "meaning": "Derived: key_date - due_date theo ngày; âm là chưa đến hạn.",
          "sample": "29",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "bucket",
          "label": "Aging Bucket",
          "meaning": "Derived: chưa đến hạn, 1–30, 31–60, 61–90, trên 90; ranh giới phải thống nhất.",
          "sample": "1-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Lấy nguồn đầu vào được chỉ rõ trong lineage, giữ manifest và policy version.",
        "Xuất open AR FI08 tại key date; chọn policy cho credits, disputed và special GL trước bucket.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng bucket + credits tách riêng + excluded bridge = FI08 signed open balance. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI10-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "doc",
          "line",
          "partner",
          "key_date",
          "due_date",
          "exposure",
          "currency",
          "days_overdue",
          "bucket"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "partner": "0000100001",
            "key_date": "2026-09-30",
            "due_date": "2026-09-01",
            "exposure": "1000",
            "currency": "USD",
            "days_overdue": "29",
            "bucket": "1-30"
          },
          {
            "company": "1000",
            "year": "2026",
            "doc": "1900000002",
            "line": "001",
            "partner": "0000100001",
            "key_date": "2026-09-30",
            "due_date": "2026-10-01",
            "exposure": "500",
            "currency": "USD",
            "days_overdue": "-1",
            "bucket": "NOT_DUE"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI10",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI10-01",
            "classification": "SAVA_DERIVED_ANALYSIS_NOT_SAP_SOURCE_LAYOUT",
            "columns": 19,
            "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26b08c9979fa435faafcf6033ca0cf93/eb46c833e4b1490899304a4a8d95afc0.html",
            "source_sha256": null,
            "xlsx": "finance-gaps-downloads/GAP-FI10-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI10-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI10-01.flat.csv"
          },
          {
            "id": "GAP-FI10-02",
            "classification": "SAVA_DERIVED_ANALYSIS_NOT_SAP_SOURCE_LAYOUT",
            "columns": 24,
            "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26b08c9979fa435faafcf6033ca0cf93/eb46c833e4b1490899304a4a8d95afc0.html",
            "source_sha256": null,
            "xlsx": "finance-gaps-downloads/GAP-FI10-02.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI10-02.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI10-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI11",
      "module": "FI",
      "title": "Ma trận ECL minh họa cho phải thu",
      "tcode": null,
      "fiori_app": null,
      "source_ids": [
        "S42"
      ],
      "kind": "DERIVED_ANALYSIS",
      "keys": [
        "company",
        "key_date",
        "partner",
        "bucket",
        "currency"
      ],
      "columns": [
        "company",
        "key_date",
        "partner",
        "bucket",
        "exposure",
        "loss_rate",
        "allowance",
        "currency"
      ],
      "selection": "FI10 + risk segments + approved forecast-adjusted loss rates; tách individually assessed items.",
      "reading": "loss_rate là giả định đào tạo. Bucket chỉ hỗ trợ measurement, không phải căn cứ đủ để duyệt ECL.",
      "reconciliation": "Gross exposure ↔ FI10; allowance movement ↔ impairment GL, write-offs/recoveries/FX tách.",
      "control": "Không hard-code tỷ lệ theo tuổi nợ cho sản xuất. Lưu model version, forecast, backtesting và reviewer.",
      "ifrs_ref": "ECL",
      "lineage": "AR aging + historical loss + forward-looking overlay → allowance → approved JE bridge.",
      "worked_example": "Exposure 1.000 × 2% = 20; thay rate 5% ra 50, cần chứng cứ cho 30 tăng thêm.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAVA_DERIVED_NOT_NATIVE",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + key_date + partner + bucket + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S42",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2024/issued/part-a/ifrs-9-financial-instruments.pdf?bypass=on",
          "version": "Issued 2024 text",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "5.5.15-17 and B5.5.35: simplified approach/provision matrix subject to credit-loss measurement requirements."
        }
      ],
      "ifrs_policy": {
        "title": "Phải thu, tuổi nợ và tổn thất tín dụng dự kiến",
        "sources": [
          "S42"
        ],
        "text": "IFRS9.5.5.15–17 và B5.5.35 là điểm đọc cho simplified approach và provision matrix. Aging là đầu vào; còn cần nhóm rủi ro, loss experience, thông tin dự báo và khoản đánh giá riêng. Không thay credit memo bằng write-off; không dùng một tỷ lệ cho mọi khách chỉ vì cùng bucket. Rate trong mẫu chỉ để học phép tính, chưa là ước lượng kế toán."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "bucket",
          "label": "Aging Bucket",
          "meaning": "Derived: chưa đến hạn, 1–30, 31–60, 61–90, trên 90; ranh giới phải thống nhất.",
          "sample": "1-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "exposure",
          "label": "Credit Exposure",
          "meaning": "Khoản phải thu chịu rủi ro sau xử lý credits theo chính sách được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "loss_rate",
          "label": "Loss Rate",
          "meaning": "Tỷ lệ ECL giả định ở dạng thập phân, 0.02 = 2%; cần dữ liệu lịch sử và dự báo.",
          "sample": "0.02",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "allowance",
          "label": "Loss Allowance",
          "meaning": "Derived: exposure × loss_rate cho bài tập đơn giản; chưa thay mô hình ECL thực.",
          "sample": "20",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Lấy nguồn đầu vào được chỉ rõ trong lineage, giữ manifest và policy version.",
        "FI10 + risk segments + approved forecast-adjusted loss rates; tách individually assessed items.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Gross exposure ↔ FI10; allowance movement ↔ impairment GL, write-offs/recoveries/FX tách. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI11-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Chỉ minh họa một bucket; không phải kết quả model được phê duyệt.",
        "columns": [
          "company",
          "key_date",
          "partner",
          "bucket",
          "exposure",
          "loss_rate",
          "allowance",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "key_date": "2026-09-30",
            "partner": "0000100001",
            "bucket": "1-30",
            "exposure": "1000",
            "loss_rate": "0.02",
            "allowance": "20",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#FI11",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-FI11-01",
            "classification": "SAVA_DERIVED_ANALYSIS_NOT_SAP_SOURCE_LAYOUT",
            "columns": 14,
            "source_url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2022/issued/part-a/ifrs-9-financial-instruments.pdf?bypass=on",
            "source_sha256": null,
            "xlsx": "finance-gaps-downloads/GAP-FI11-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-FI11-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-FI11-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI12",
      "module": "FI",
      "title": "Nhật ký kiểm toán — complete journal",
      "tcode": null,
      "fiori_app": "F0997",
      "source_ids": [
        "S08"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "doc",
        "line",
        "date",
        "entry_date",
        "user",
        "doc_type",
        "gl",
        "amount",
        "currency"
      ],
      "selection": "Chọn mode Complete Journal, company/year/ledger/date; mode changes hoặc gap list là grain khác.",
      "reading": "Posting date khác entry date là tín hiệu kiểm tra cutoff, chưa là gian lận. User không thay reviewer.",
      "reconciliation": "Distinct journal items và totals ↔ FI02 trong cùng scope; document count so export metadata.",
      "control": "Số chứng từ đứt quãng có thể do rollback/buffering; điều tra trước kết luận missing journals.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "Journal and audit metadata → selected complete-journal view → audit exceptions.",
      "worked_example": "Bút toán ngày sổ 30/9 nhập 2/10: hỏi close approval và evidence, không tự xóa hoặc đổi kỳ.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S08",
          "url": "https://help.sap.com/docs/r/0fa84c9d9c634132b7c4abb9ffdd8f06/2602.500/en-US/c60cfd55ed140033e10000000a44538d.html",
          "version": "Cloud path 2602.500",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0997 offers multiple modes; number gaps can have technical reasons."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "entry_date",
          "label": "Entry Date",
          "meaning": "Ngày nhập hệ thống; so với posting date để phát hiện backdating cần giải trình.",
          "sample": "2026-09-16",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "user",
          "label": "Created By",
          "meaning": "Người lập; cần bảo vệ dữ liệu cá nhân, không phải bằng chứng người duyệt.",
          "sample": "DEMO_USER",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_type",
          "label": "Document Type",
          "meaning": "Loại chứng từ theo cấu hình; không tự kết luận thủ công/tự động chỉ từ mã.",
          "sample": "SA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0997 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Chọn mode Complete Journal, company/year/ledger/date; mode changes hoặc gap list là grain khác.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Distinct journal items và totals ↔ FI02 trong cùng scope; document count so export metadata. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI12-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "doc",
          "line",
          "date",
          "entry_date",
          "user",
          "doc_type",
          "gl",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "date": "2026-09-30",
            "entry_date": "2026-10-02",
            "user": "DEMO_USER",
            "doc_type": "SA",
            "gl": "150000",
            "amount": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI12",
        "variants": [
          {
            "id": "FI12-01",
            "source_transaction": "F0997 Audit Journal (tab JOURNAL)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-audit-journal",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI12-01.xlsx",
            "raw_csv": "source-layout-downloads/FI12-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI12-01.flat.csv"
          },
          {
            "id": "FI12-02",
            "source_transaction": "F0997 Audit Journal (tab COMPACT JOURNAL)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.newsaperp.com/en/blog-sapfiori-audit-journal",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI12-02.xlsx",
            "raw_csv": "source-layout-downloads/FI12-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI12-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI13",
      "module": "FI",
      "title": "Phân tích journal đa chiều",
      "tcode": null,
      "fiori_app": "F0956B",
      "source_ids": [
        "S09"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "profit_center",
        "currency"
      ],
      "columns": [
        "ledger",
        "company",
        "year",
        "period",
        "gl",
        "profit_center",
        "debit",
        "credit",
        "amount",
        "currency"
      ],
      "selection": "Ledger/company/fiscal year/period; cố định dimensions trước export; lưu hierarchy filters.",
      "reading": "Đây là aggregate theo dimensions chọn, không tự coi mỗi dòng là chứng từ. Drill tạo grain khác.",
      "reconciliation": "Aggregate FI02 cùng dimensions ↔ FI13; kiểm tra đối ứng Nợ/Có sau drill.",
      "control": "Nhiều fiscal-year variants có thể làm period không cùng ngày; giữ warning và scope bridge.",
      "ifrs_ref": "PRESENTATION",
      "lineage": "I_JournalEntryAnalyzerCube → C_GLAccountLineItemQuery (S09) → chosen dimensions.",
      "worked_example": "Cùng account/PC có 3 journals tổng 1.000 thì aggregate một dòng 1.000, không mất hai journals.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: ledger + company + year + period + gl + profit_center + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S09",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a630d57fc5004c6383e7a81efee7a8bb/0abca34515924eb7b01ead137d066bf3.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F0956B; C_GLAccountLineItemQuery and I_JournalEntryAnalyzerCube; aggregated output."
        }
      ],
      "ifrs_policy": {
        "title": "Trình bày và mapping IFRS",
        "sources": [
          "S45"
        ],
        "text": "Ledger 0L, tài khoản SAP và Financial Statement Version không tự xác nhận sổ IFRS. Cần policy theo pháp nhân, reporting period, bridge local-to-group và reviewer. IFRS 18 áp dụng cho kỳ năm bắt đầu từ 01/01/2027, được áp dụng sớm; giữ riêng phiên bản trình bày trước/sau chuyển đổi. Trial balance cân chỉ chứng minh một điều kiện số học, không chứng minh classification, completeness hoặc recognition."
      },
      "column_definitions": [
        {
          "id": "ledger",
          "label": "Ledger",
          "meaning": "Sổ kế toán; 0L chỉ là mã minh họa, không tự suy là IFRS.",
          "sample": "0L",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "profit_center",
          "label": "Profit Center",
          "meaning": "Đơn vị trách nhiệm lợi nhuận; master có thời hạn hiệu lực.",
          "sample": "PC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "debit",
          "label": "Debit",
          "meaning": "Phát sinh Nợ không âm; không phải số dư cuối kỳ.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "credit",
          "label": "Credit",
          "meaning": "Phát sinh Có không âm; closing = opening + debit - credit.",
          "sample": "200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F0956B nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Ledger/company/fiscal year/period; cố định dimensions trước export; lưu hierarchy filters.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Aggregate FI02 cùng dimensions ↔ FI13; kiểm tra đối ứng Nợ/Có sau drill. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI13-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "ledger",
          "company",
          "year",
          "period",
          "gl",
          "profit_center",
          "debit",
          "credit",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "ledger": "0L",
            "company": "1000",
            "year": "2026",
            "period": "009",
            "gl": "150000",
            "profit_center": "PC1100",
            "debit": "1200",
            "credit": "200",
            "amount": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI13",
        "variants": [
          {
            "id": "FI13-01",
            "source_transaction": "Journal Entry Analyzer (phiên bản Design Studio/analytical — app ID không hiện trên ảnh; profile dùng F0956B)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/transfer-pricing-analysis-in-sap-s4hana",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI13-01.xlsx",
            "raw_csv": "source-layout-downloads/FI13-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI13-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI14",
      "module": "FI",
      "title": "Kết quả đánh giá ngoại tệ — log được cung cấp",
      "tcode": "FAGL_FCV",
      "fiori_app": null,
      "source_ids": [
        "S10",
        "S43"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "company",
        "year",
        "doc",
        "line",
        "valuation_area"
      ],
      "columns": [
        "run",
        "company",
        "year",
        "doc",
        "line",
        "valuation_area",
        "doc_amount",
        "doc_currency",
        "amount",
        "currency",
        "rate",
        "revalued",
        "difference",
        "test_run"
      ],
      "selection": "Chỉ đọc log/test-result đã cung cấp; lưu key date, valuation method/area và ledger group. Không hướng dẫn Execute trên production.",
      "reading": "Tách monetary items và non-monetary advances; quote tỷ giá và factor phải được chuẩn hóa.",
      "reconciliation": "Revalued - carrying = difference; delta theo run ↔ posted adjustment/reversal documents nếu có.",
      "control": "Test run không phải bút toán. Legacy FAGL_FCV không chứng minh phù hợp advanced valuation của hệ mục tiêu.",
      "ifrs_ref": "FX",
      "lineage": "Open-item carrying amount + approved rate/method → valuation result → posting bridge.",
      "worked_example": "EUR 900 đang ghi USD 1.000; tỷ giá 1.12 ⇒ 1.008, gain 8 cho khoản phải thu giả định.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + company + year + doc + line + valuation_area. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S10",
          "url": "https://help.sap.com/doc/d8c31c0d40f941a39b7ad283c6d4da9b/1709%20001/en-US/SIMPL_OP1709_FPS01.pdf",
          "version": "S/4HANA 1709 FPS01, p148",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "FAGL_FCV transaction named; historical source only; advanced valuation applicability not established."
        },
        {
          "id": "S43",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2021/issued/part-a/ias-21-the-effects-of-changes-in-foreign-exchange-rates.pdf?bypass=on",
          "version": "Issued 2021 text; subsequent amendments must be checked",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Functional currency; monetary closing rate vs historical non-monetary basis."
        }
      ],
      "ifrs_policy": {
        "title": "Ngoại tệ",
        "sources": [
          "S43"
        ],
        "text": "Kiểm tra functional currency trước. Đối với ví dụ monetary receivable, closing rate dùng để remeasure carrying amount; phải xác nhận quotation/factors và valuation area. Advances/non-monetary items cần đánh giá bản chất riêng. Chênh lệch mô phỏng chưa là journal entry nếu không có posting reference. Văn bản nguồn là issued2021, phần thay đổi sau đó chưa được rà soát toàn bộ."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_amount",
          "label": "Document Amount",
          "meaning": "Số tiền theo đồng tiền chứng từ; không cộng với amount khác loại tiền.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc_currency",
          "label": "Document Currency",
          "meaning": "Đồng tiền chứng từ, tách với currency của số tiền company-code.",
          "sample": "EUR",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "rate",
          "label": "Closing Exchange Rate",
          "meaning": "Tỷ giá minh họa quote theo currency cho 1 đơn vị doc_currency; kiểm tra quotation và factor.",
          "sample": "1.12",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "revalued",
          "label": "Revalued Amount",
          "meaning": "Derived minh họa: doc_amount × rate sau chuẩn hóa quote.",
          "sample": "1008",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Chênh lệch theo công thức trong hồ sơ; dấu dương không luôn là bất lợi.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Chỉ đọc log/test-result đã cung cấp; lưu key date, valuation method/area và ledger group. Không hướng dẫn Execute trên production.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Revalued - carrying = difference; delta theo run ↔ posted adjustment/reversal documents nếu có. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI14-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "run",
          "company",
          "year",
          "doc",
          "line",
          "valuation_area",
          "doc_amount",
          "doc_currency",
          "amount",
          "currency",
          "rate",
          "revalued",
          "difference",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "company": "1000",
            "year": "2026",
            "doc": "1900000001",
            "line": "001",
            "valuation_area": "1100",
            "doc_amount": "900",
            "doc_currency": "EUR",
            "amount": "1000",
            "currency": "USD",
            "rate": "1.12",
            "revalued": "1008",
            "difference": "8",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI14",
        "variants": [
          {
            "id": "FI14-01",
            "source_transaction": "FAGL_FCV (Display logs sau khi chạy)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapficoblog.com/tutorial-on-foreign-currency-valuation-in-sap/",
            "fields_read_from_source": 6,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI14-01.xlsx",
            "raw_csv": "source-layout-downloads/FI14-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI14-01.flat.csv"
          },
          {
            "id": "FI14-02",
            "source_transaction": "FAGL_FCV (danh sách kết quả Foreign Currency Valuation)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://techlorean.com/2020/06/10/sap-exchange-rate-and-foreign-currency-valuation-detailed-process-and-configuration/",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI14-02.xlsx",
            "raw_csv": "source-layout-downloads/FI14-02.layout.csv",
            "flat_csv": "source-layout-downloads/FI14-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI15",
      "module": "FI",
      "title": "Theo dõi KPI đối chiếu GR/IR",
      "tcode": null,
      "fiori_app": "F3303",
      "source_ids": [
        "S11"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "key_date",
        "dimension",
        "currency"
      ],
      "columns": [
        "company",
        "key_date",
        "dimension",
        "count",
        "gr_value",
        "ir_value",
        "amount_abs",
        "currency"
      ],
      "selection": "Chọn rõ KPI card, dimensions, currency và filter; lưu timestamp vì trạng thái xử lý thay đổi.",
      "reading": "Card amount tuyệt đối và count PO item khác net GL; chart không thay full item extract.",
      "reconciliation": "Drill về FI16 và MM06; từng KPI tính lại theo định nghĩa, không đối absolute trực tiếp với GL net.",
      "control": "Không union card totals với drill rows; giữ giới hạn điểm hiển thị/complete export.",
      "ifrs_ref": "CUTOFF",
      "lineage": "Reconciliation analytics → KPI card → F3302 item investigation.",
      "worked_example": "GR 1.000 và IR 900 tạo delta 100; absolute components 1.900 không phải liability 1.900.",
      "existing_contract": "D18",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + key_date + dimension + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S11",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0fa84c9d9c634132b7c4abb9ffdd8f06/8700d78b2faf49f6aff17857bd674f27.html?locale=en-US",
          "version": "Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F3303 KPI cards and navigation; absolute open FI amounts must not be read as net GL balance."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "dimension",
          "label": "KPI Dimension",
          "meaning": "Chiều tổng hợp đang chọn; giữ drilldown và filter để tái lập số.",
          "sample": "COMPANY_1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "count",
          "label": "Item Count",
          "meaning": "Số đối tượng sau distinct đúng khóa; không phải số dòng join.",
          "sample": "2",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_value",
          "label": "GR Value",
          "meaning": "Giá trị nhập hàng trong cùng cơ sở tiền/định giá với IR.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_value",
          "label": "IR Value",
          "meaning": "Giá trị hóa đơn; VAT/charges/FX phải tách trước đối chiếu.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount_abs",
          "label": "Absolute Amount",
          "meaning": "Trị tuyệt đối theo định nghĩa KPI; không bằng trị tuyệt đối của tổng net khi nhiều nhóm.",
          "sample": "1900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F3303 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Chọn rõ KPI card, dimensions, currency và filter; lưu timestamp vì trạng thái xử lý thay đổi.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Drill về FI16 và MM06; từng KPI tính lại theo định nghĩa, không đối absolute trực tiếp với GL net. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI15-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "amount_abs=100 chỉ minh họa absolute PO-item net theo delta100; phải xác minh định nghĩa/card calculation trước map F3303. Không phải full KPI export.",
        "columns": [
          "company",
          "key_date",
          "dimension",
          "count",
          "gr_value",
          "ir_value",
          "amount_abs",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "key_date": "2026-09-30",
            "dimension": "COMPANY_1000",
            "count": "1",
            "gr_value": "1000",
            "ir_value": "900",
            "amount_abs": "100",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI15",
        "variants": [
          {
            "id": "FI15-01",
            "source_transaction": "F3303 Monitor GR/IR Account Reconciliation (tiêu đề hiển thị: 'Goods and Invoice Receipt Reconciliation Overview')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.michaelmanagement.com/blogs/sap/understanding-the-goods-and-invoice-receipt-process",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI15-01.xlsx",
            "raw_csv": "source-layout-downloads/FI15-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI15-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "FI16",
      "module": "FI",
      "title": "Hồ sơ xử lý chênh lệch GR/IR",
      "tcode": null,
      "fiori_app": "F3302",
      "source_ids": [
        "S12"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "company",
        "po",
        "item",
        "currency",
        "key_date"
      ],
      "columns": [
        "company",
        "po",
        "item",
        "key_date",
        "gr_value",
        "ir_value",
        "difference",
        "currency",
        "status",
        "processor",
        "reason"
      ],
      "selection": "Company/PO item/currency và processing status; xác minh export có detail hay aggregate.",
      "reading": "Delta hỗ trợ tìm GR chưa invoice, invoice chưa GR, timing hoặc price; status là workflow, không điều chỉnh GL.",
      "reconciliation": "PO history MM08 + GL GR/IR FI02 + MM06 tạo bridge opening/movements/FX/manual clearing.",
      "control": "Nguồn 2025 FPS01 loại scheduling agreements. Không tự write-off hoặc chấp nhận đề xuất ML.",
      "ifrs_ref": "CUTOFF",
      "lineage": "PO-history quantities/values + FI open items → reconciliation case → reviewed resolution.",
      "worked_example": "GR 1.000 - IR 900 = 100 cần giải thích; chưa thể tự tạo accrual thêm 100 nếu GR/IR đã ghi nợ.",
      "existing_contract": "D18",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Controller / GL, AP hoặc AR key user",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + po + item + currency + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S12",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/17f3a45189524e78b4a80bf51ff2b741.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F3302; scheduling agreements unsupported; current-data restriction; ML needs separate subscription."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_value",
          "label": "GR Value",
          "meaning": "Giá trị nhập hàng trong cùng cơ sở tiền/định giá với IR.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_value",
          "label": "IR Value",
          "meaning": "Giá trị hóa đơn; VAT/charges/FX phải tách trước đối chiếu.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Chênh lệch theo công thức trong hồ sơ; dấu dương không luôn là bất lợi.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "processor",
          "label": "Processor",
          "meaning": "Người/nhóm phụ trách exception, không phải chủ thể chịu trách nhiệm IFRS tự động.",
          "sample": "AP_MM_TEAM",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "reason",
          "label": "Reason",
          "meaning": "Mã/diễn giải lý do; nguyên nhân phải có bằng chứng, không suy chỉ từ delta.",
          "sample": "INVOICE_PENDING",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F3302 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/PO item/currency và processing status; xác minh export có detail hay aggregate.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "PO history MM08 + GL GR/IR FI02 + MM06 tạo bridge opening/movements/FX/manual clearing. Ghi exception và chuyển Controller / GL, AP hoặc AR key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "FI16-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "po",
          "item",
          "key_date",
          "gr_value",
          "ir_value",
          "difference",
          "currency",
          "status",
          "processor",
          "reason"
        ],
        "rows": [
          {
            "company": "1000",
            "po": "4500000001",
            "item": "00010",
            "key_date": "2026-09-30",
            "gr_value": "1000",
            "ir_value": "900",
            "difference": "100",
            "currency": "USD",
            "status": "REQUIRES_REVIEW",
            "processor": "AP_MM_TEAM",
            "reason": "INVOICE_PENDING"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#FI16",
        "variants": [
          {
            "id": "FI16-01",
            "source_transaction": "F3302 Reconcile GR/IR Accounts (tiêu đề hiển thị: 'Intelligent Goods and Invoice Receipt Account Reconciliation')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.michaelmanagement.com/blogs/sap/understanding-the-goods-and-invoice-receipt-process",
            "fields_read_from_source": 8,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/FI16-01.xlsx",
            "raw_csv": "source-layout-downloads/FI16-01.layout.csv",
            "flat_csv": "source-layout-downloads/FI16-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO01",
      "module": "CO",
      "title": "Chi tiết chi phí cost center thực tế",
      "tcode": "KSB1 / KSB1N",
      "fiori_app": null,
      "source_ids": [
        "S13"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "doc",
        "line",
        "cost_center",
        "cost_element",
        "amount",
        "currency",
        "activity",
        "qty",
        "uom"
      ],
      "selection": "Controlling area, cost center/group, year/period, cost element; chọn line items không summary.",
      "reading": "Dương là debit cost, âm là credit/allocation theo mẫu; không bỏ secondary costs.",
      "reconciliation": "Tổng theo center/element ↔ CO03 actual; bridge FI02 cho primary + secondary/reclass khác scope.",
      "control": "Không kỳ vọng mọi secondary allocation tăng expense toàn công ty. Chưa xác nhận S/4 layout từ ERP source.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "CO actual journal projection → center/element totals → overhead review.",
      "worked_example": "Center debit 1.200, allocation credit -1.000 ⇒ còn 200; total gross debit không là closing cost.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S13",
          "url": "https://help.sap.com/docs/SAP_ERP/b42281c1645049a4b07c0ab25ec8b899/393d0af19a65491db36b6465494dd068.html",
          "version": "ERP 6.0 EHP8",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KSB1/KSB1N behavior, hierarchy and layout; not S/4 target certification."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "activity",
          "label": "Activity Type",
          "meaning": "Loại hoạt động CO, ví dụ giờ máy; phải kèm activity UoM.",
          "sample": "MACHINE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KSB1 / KSB1N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Controlling area, cost center/group, year/period, cost element; chọn line items không summary.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng theo center/element ↔ CO03 actual; bridge FI02 cho primary + secondary/reclass khác scope. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO01-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "doc",
          "line",
          "cost_center",
          "cost_element",
          "amount",
          "currency",
          "activity",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "001",
            "cost_center": "CC1100",
            "cost_element": "510000",
            "amount": "1200",
            "currency": "USD",
            "activity": "MACHINE",
            "qty": "100",
            "uom": "H"
          },
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "002",
            "cost_center": "CC1100",
            "cost_element": "910000",
            "amount": "-1000",
            "currency": "USD",
            "activity": null,
            "qty": null,
            "uom": null
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO01",
        "variants": [
          {
            "id": "CO01-01",
            "source_transaction": "KSB1 (app 'Display Actual Cost Line Items for Cost Centers' trong Fiori launchpad)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-reporting/report-on-postings-line-items-ksb1.pdf",
            "fields_read_from_source": 14,
            "documented_fields": 16,
            "xlsx": "source-layout-downloads/CO01-01.xlsx",
            "raw_csv": "source-layout-downloads/CO01-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO01-01.flat.csv"
          },
          {
            "id": "CO01-02",
            "source_transaction": "KSB1",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://educationbusinesscenter.uky.edu/sites/default/files/2025-01/ksb1-for-cost-centers.pdf",
            "fields_read_from_source": 21,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO01-02.xlsx",
            "raw_csv": "source-layout-downloads/CO01-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO01-02.flat.csv"
          },
          {
            "id": "CO01-03",
            "source_transaction": "KSB1",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://finance.utoronto.ca/wp-content/uploads/2015/10/basiccoreporting.pdf",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO01-03.xlsx",
            "raw_csv": "source-layout-downloads/CO01-03.layout.csv",
            "flat_csv": "source-layout-downloads/CO01-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO02",
      "module": "CO",
      "title": "Chi tiết kế hoạch cost center",
      "tcode": "KSBP / KSBPN",
      "fiori_app": null,
      "source_ids": [
        "S14"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "version",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "version",
        "doc",
        "line",
        "cost_center",
        "cost_element",
        "plan",
        "currency",
        "qty",
        "uom"
      ],
      "selection": "CO area/year/period/version và center group; kiểm tra plan line items thực sự được lưu trong hệ.",
      "reading": "Plan không phải posted actual; một version không được cộng với version khác.",
      "reconciliation": "Group plan cùng scope ↔ CO03 plan; đối với approved budget input, giữ change log.",
      "control": "Không thấy line items không có nghĩa budget bằng 0; có thể plan lưu aggregate hoặc nguồn planning khác.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Approved planning dataset → plan line items → plan/actual comparison.",
      "worked_example": "Version 000 plan 1.000; version 001 forecast 1.100: so sánh, không cộng thành 2.100.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + version + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S14",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/5e23dc8fe9be4fd496f8ab556667ea05/449d1bc67902432eaa645501e3a251a0.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KSBP/KSBPN; summarization changes grain."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plan",
          "label": "Plan Cost",
          "meaning": "Chi phí kế hoạch của version chọn; không phải target theo actual output.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KSBP / KSBPN nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "CO area/year/period/version và center group; kiểm tra plan line items thực sự được lưu trong hệ.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Group plan cùng scope ↔ CO03 plan; đối với approved budget input, giữ change log. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO02-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "version",
          "doc",
          "line",
          "cost_center",
          "cost_element",
          "plan",
          "currency",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "version": "000",
            "doc": "1900000001",
            "line": "001",
            "cost_center": "CC1100",
            "cost_element": "510000",
            "plan": "1000",
            "currency": "USD",
            "qty": "100",
            "uom": "EA"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO02",
        "variants": [
          {
            "id": "CO02-01",
            "source_transaction": "KSBP (app 'Display Plan Cost Line Items for Cost Centers')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-financial-adjustments/creating-and-uploading-an-annual-budget-virement.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO02-01.xlsx",
            "raw_csv": "source-layout-downloads/CO02-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO02-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO03",
      "module": "CO",
      "title": "Cost center Actual / Plan / Variance",
      "tcode": "S_ALR_87013611",
      "fiori_app": null,
      "source_ids": [
        "S15"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "period",
        "version",
        "cost_center",
        "cost_element",
        "currency"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "version",
        "cost_center",
        "cost_element",
        "actual",
        "plan",
        "variance",
        "currency"
      ],
      "selection": "CO area/year/period/version/cost-center group; cùng hierarchy và currency cho so sánh.",
      "reading": "Trong hồ sơ này variance = actual - plan; chiều dấu/% hiển thị SAP phải được xác nhận bằng mẫu thật.",
      "reconciliation": "Actual ↔ CO01; plan ↔ CO02; variance tổng bằng tổng actual trừ tổng plan.",
      "control": "Plan = 0 thì variance% là null có lý do, không infinity. Không suy lãng phí chỉ từ vượt plan.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Actual + plan aggregates → management variance → driver investigation.",
      "worked_example": "Actual 1.200 - plan 1.000 = 200; chưa kết luận bất lợi nếu sản lượng tăng tương ứng.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + period + version + cost_center + cost_element + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S15",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/caf31ad0fb24449a8c6e820a738d3bc8/acbe435a7f30488d84269dbe6a65cd32.html",
          "version": "S/4HANA; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "S_ALR_87013611 totals; S_ALR_87012993 orders actual/plan/variance. Column fixture still needed."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plan",
          "label": "Plan Cost",
          "meaning": "Chi phí kế hoạch của version chọn; không phải target theo actual output.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "variance",
          "label": "Variance",
          "meaning": "Trong mẫu: actual - plan; xác nhận dấu SAP từ layout thực.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở S_ALR_87013611 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "CO area/year/period/version/cost-center group; cùng hierarchy và currency cho so sánh.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Actual ↔ CO01; plan ↔ CO02; variance tổng bằng tổng actual trừ tổng plan. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO03-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "version",
          "cost_center",
          "cost_element",
          "actual",
          "plan",
          "variance",
          "currency"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "version": "000",
            "cost_center": "CC1100",
            "cost_element": "510000",
            "actual": "1200",
            "plan": "1000",
            "variance": "200",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO03",
        "variants": [
          {
            "id": "CO03-01",
            "source_transaction": "S_ALR_87013611 (Cost Centers: Actual/Plan/Variance, Report Painter)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://erpcorp.com/sap-controlling-blog/sap-hana-production-variance-analysis",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO03-01.xlsx",
            "raw_csv": "source-layout-downloads/CO03-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO03-01.flat.csv"
          },
          {
            "id": "CO03-02",
            "source_transaction": "S_ALR_87013620 (Act/Plan/Commit — báo cáo cùng họ Report Painter, KHÔNG phải S_ALR_87013611)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-financial-adjustments/creating-and-uploading-an-annual-budget-virement.pdf",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO03-02.xlsx",
            "raw_csv": "source-layout-downloads/CO03-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO03-02.flat.csv"
          },
          {
            "id": "CO03-03",
            "source_transaction": "ZSO3 (Report Painter tùy biến U of T, thư viện 1VK — cùng thư viện với S_ALR_87013611)",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://finance.utoronto.ca/wp-content/uploads/2015/10/basiccoreporting.pdf",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO03-03.xlsx",
            "raw_csv": "source-layout-downloads/CO03-03.layout.csv",
            "flat_csv": "source-layout-downloads/CO03-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO04",
      "module": "CO",
      "title": "Chi tiết chi phí order thực tế",
      "tcode": "KOB1 / KOB1N",
      "fiori_app": null,
      "source_ids": [
        "S16",
        "S17"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "doc",
        "line",
        "order",
        "cost_element",
        "amount",
        "currency",
        "date"
      ],
      "selection": "CO area/order range/year/period; giữ debit, credit, settlement và reversal scope.",
      "reading": "Cost-object line item khác FI ledger line; phân loại order sản xuất/nội bộ trước đọc.",
      "reconciliation": "Net order costs ↔ variance/WIP/settlement theo CO11–CO13; dùng bridge document, không chỉ amount.",
      "control": "Không cộng settlement credit lần hai vào COGS. Namespace CO document phải riêng FI.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "CO order line items → order cost rollforward → WIP/variance/settlement.",
      "worked_example": "Input costs 1.200 và GR credit -1.100 tạo balance 100, chưa tự bằng variance nếu còn WIP.",
      "existing_contract": "D07",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S16",
          "url": "https://help.sap.com/saphelp_em700_ehp01/helpdata/en/40/f08473b9d74821bf2d187859afa75e/content.htm?no_cache=true",
          "version": "Legacy SAP documentation",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KOB1 actual order line items; historical reporting reference."
        },
        {
          "id": "S17",
          "url": "https://help.sap.com/doc/52d079c2db9c42078a4467ce524a19ef/6.16.13/en-US/EHP6_on_HANA_SP00%20to%20SP02.pdf",
          "version": "ERP EHP6 for HANA SP00-SP02, p16",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KOBP/KOBPN and KOB1/KOB1N named; does not establish S/4 replacement policy."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KOB1 / KOB1N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "CO area/order range/year/period; giữ debit, credit, settlement và reversal scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net order costs ↔ variance/WIP/settlement theo CO11–CO13; dùng bridge document, không chỉ amount. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO04-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "doc",
          "line",
          "order",
          "cost_element",
          "amount",
          "currency",
          "date"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "001",
            "order": "1000001",
            "cost_element": "510000",
            "amount": "1200",
            "currency": "USD",
            "date": "2026-09-15"
          },
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "002",
            "order": "1000001",
            "cost_element": "150000",
            "amount": "-1100",
            "currency": "USD",
            "date": "2026-09-15"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO04",
        "variants": [
          {
            "id": "CO04-01",
            "source_transaction": "KOB1 (app 'Display Actual Cost Line Items for Orders')",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.schoolsnet.derbyshire.gov.uk/site-elements/documents/administration/sap-for-schools/sap-reporting/report-on-sios-postings-line-items-kob1.pdf",
            "fields_read_from_source": 9,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO04-01.xlsx",
            "raw_csv": "source-layout-downloads/CO04-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO04-01.flat.csv"
          },
          {
            "id": "CO04-02",
            "source_transaction": "KOB1",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "https://www.cmich.edu/docs/default-source/finance-and-administrative-services-division/financial-services-and-reporting/accounting-services/resources/io-manual.pdf?sfvrsn=3123dc2e_4",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO04-02.xlsx",
            "raw_csv": "source-layout-downloads/CO04-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO04-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO05",
      "module": "CO",
      "title": "Chi tiết kế hoạch internal order",
      "tcode": "KOBP / KOBPN",
      "fiori_app": null,
      "source_ids": [
        "S17"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "version",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "version",
        "doc",
        "line",
        "order",
        "cost_element",
        "plan",
        "currency"
      ],
      "selection": "Order type internal order, CO area/year/period/version; không áp dụng tự động cho mọi manufacturing order.",
      "reading": "Plan theo cost element khác approved investment budget và actual commitment.",
      "reconciliation": "Plan totals ↔ approved order plan; actual từ CO04 cần cùng object và kỳ để so.",
      "control": "Nguồn hiện là ERP HANA lịch sử; S/4 target/status chưa được xác nhận, không hứa thay thế Fiori.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Order planning records → order/element plan → spend review.",
      "worked_example": "Order plan 1.000, actual 900: phần còn 100 không chứng minh còn cash budget nếu commitments 200.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + version + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S17",
          "url": "https://help.sap.com/doc/52d079c2db9c42078a4467ce524a19ef/6.16.13/en-US/EHP6_on_HANA_SP00%20to%20SP02.pdf",
          "version": "ERP EHP6 for HANA SP00-SP02, p16",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KOBP/KOBPN and KOB1/KOB1N named; does not establish S/4 replacement policy."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plan",
          "label": "Plan Cost",
          "meaning": "Chi phí kế hoạch của version chọn; không phải target theo actual output.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KOBP / KOBPN nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Order type internal order, CO area/year/period/version; không áp dụng tự động cho mọi manufacturing order.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Plan totals ↔ approved order plan; actual từ CO04 cần cùng object và kỳ để so. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO05-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "version",
          "doc",
          "line",
          "order",
          "cost_element",
          "plan",
          "currency"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "version": "000",
            "doc": "1900000001",
            "line": "001",
            "order": "1000001",
            "cost_element": "510000",
            "plan": "1000",
            "currency": "USD"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#CO05",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-CO05-01",
            "classification": "PROXY_FAMILY_LAYOUT_NOT_VERIFIED_KOBP_PLAN_OUTPUT",
            "columns": 8,
            "source_url": "https://s3-eu-west-1.amazonaws.com/gxmedia.galileo-press.de/leseproben/3625/Reading_Sample_1012_Controlling_with_SAP_Practical_Guide.pdf",
            "source_sha256": "3288eb7f5b12d4bc58962ae873803425ec889d93d1b0f86324263e6b4d3608c5",
            "xlsx": "finance-gaps-downloads/GAP-CO05-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-CO05-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-CO05-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO06",
      "module": "CO",
      "title": "Standard cost estimate — tổng quan",
      "tcode": "CK13N",
      "fiori_app": "CK13N",
      "source_ids": [
        "S18"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "estimate",
        "valuation_view",
        "currency"
      ],
      "columns": [
        "estimate",
        "material",
        "plant",
        "costing_variant",
        "version",
        "valid_from",
        "lot_size",
        "price",
        "price_unit",
        "currency",
        "valuation_view"
      ],
      "selection": "Material/plant/costing variant; chọn estimate cụ thể, ngày hiệu lực, costing version và valuation view.",
      "reading": "Unit price phải đọc cùng lot size/price unit. Saved estimate không chứng minh đã released standard price.",
      "reconciliation": "CO07 leaf total / lot size ↔ price theo price unit; đối material valuation/release evidence riêng.",
      "control": "Không lấy estimate mới nhất để hồi tố kỳ cũ; giữ estimate ID trong mọi join.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "BOM/routing/prices theo costing selection → estimate header → selected standard-cost basis.",
      "worked_example": "Tổng estimate 1.000 cho lot 100 ⇒ 10/EA; giá này chưa là giá kế toán nếu chưa release.",
      "existing_contract": "D09",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: estimate + valuation_view + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S18",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/6b39bd1d0e5e4099a5b65d835c29c696/c896d7531a4d414de10000000a174cb4.html",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID CK13N, material/plant/costing variant selection, component breakdown; not every Fiori app has F-number."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "estimate",
          "label": "Cost Estimate ID",
          "meaning": "Định danh riêng lần costing; không ghép chỉ material/plant.",
          "sample": "EST-2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "costing_variant",
          "label": "Costing Variant",
          "meaning": "Cấu hình loại/valuation của estimate; ví dụ minh họa chưa tồn tại trong SAP.",
          "sample": "DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valid_from",
          "label": "Valid From",
          "meaning": "Ngày bắt đầu hiệu lực; không dùng estimate tương lai cho kỳ quá khứ.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "lot_size",
          "label": "Costing Lot Size",
          "meaning": "Sản lượng làm cơ sở estimate; chuẩn hóa trước so actual unit cost.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price",
          "label": "Price",
          "meaning": "Giá cho price_unit đơn vị; không mặc định giá cho 1.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price_unit",
          "label": "Price Unit",
          "meaning": "Mẫu số định giá: value = qty × price / price_unit khi phù hợp.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CK13N / CK13N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Material/plant/costing variant; chọn estimate cụ thể, ngày hiệu lực, costing version và valuation view.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "CO07 leaf total / lot size ↔ price theo price unit; đối material valuation/release evidence riêng. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO06-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Estimate tổng 1.000, lot100 được minh họa chi tiết ở CO07/08. Chưa có release evidence.",
        "columns": [
          "estimate",
          "material",
          "plant",
          "costing_variant",
          "version",
          "valid_from",
          "lot_size",
          "price",
          "price_unit",
          "currency",
          "valuation_view"
        ],
        "rows": [
          {
            "estimate": "EST-2026-09-01",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "costing_variant": "DEMO",
            "version": "000",
            "valid_from": "2026-09-01",
            "lot_size": "100",
            "price": "10",
            "price_unit": "1",
            "currency": "USD",
            "valuation_view": "LEGAL"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO06",
        "variants": [
          {
            "id": "CO06-01",
            "source_transaction": "CK13N (Display Material Cost Estimate with Quantity Structure)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/basic-concepts-of-cost-components-in-sap-s4hana-finance",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO06-01.xlsx",
            "raw_csv": "source-layout-downloads/CO06-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO06-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO07",
      "module": "CO",
      "title": "Cost estimate — itemization",
      "tcode": "CK13N",
      "fiori_app": "CK13N",
      "source_ids": [
        "S18"
      ],
      "kind": "NATIVE_VIEW",
      "keys": [
        "estimate",
        "valuation_view",
        "currency",
        "node"
      ],
      "columns": [
        "estimate",
        "node",
        "is_leaf",
        "component",
        "qty",
        "uom",
        "amount",
        "currency",
        "valuation_view"
      ],
      "selection": "Mở estimate của CO06, chọn itemization; lưu level và subtotal flags, layout và costing lot.",
      "reading": "Vật tư, activity, overhead có dòng riêng; qty khác đơn vị không cộng thành tổng sản lượng.",
      "reconciliation": "Sum amount ở leaf cùng currency/view ↔ CO06 total; phân nhóm ↔ CO08.",
      "control": "Không cộng parent với child. Cùng component xuất hiện nhiều lần được giữ theo node/item identity.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Cost estimate identity → itemization nodes → leaf costing contributions.",
      "worked_example": "Material 600 + labor 250 + overhead 150 = 1.000; subtotal 1.000 chỉ để trình bày.",
      "existing_contract": "D10",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: estimate + valuation_view + currency + node. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S18",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/6b39bd1d0e5e4099a5b65d835c29c696/c896d7531a4d414de10000000a174cb4.html",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID CK13N, material/plant/costing variant selection, component breakdown; not every Fiori app has F-number."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "estimate",
          "label": "Cost Estimate ID",
          "meaning": "Định danh riêng lần costing; không ghép chỉ material/plant.",
          "sample": "EST-2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "node",
          "label": "Hierarchy Node",
          "meaning": "Mã node; bắt buộc nhận diện subtotal khi cộng cây.",
          "sample": "NODE-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "is_leaf",
          "label": "Is Leaf",
          "meaning": "Cờ phân biệt dòng lá và dòng tổng; chỉ cộng một cấp hợp lệ.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "component",
          "label": "Component / Resource",
          "meaning": "Vật liệu hoặc tài nguyên trong itemization; không luôn là material master.",
          "sample": "RM-COPPER",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CK13N / CK13N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Mở estimate của CO06, chọn itemization; lưu level và subtotal flags, layout và costing lot.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum amount ở leaf cùng currency/view ↔ CO06 total; phân nhóm ↔ CO08. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO07-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "estimate",
          "node",
          "is_leaf",
          "component",
          "qty",
          "uom",
          "amount",
          "currency",
          "valuation_view"
        ],
        "rows": [
          {
            "estimate": "EST-2026-09-01",
            "node": "ROOT",
            "is_leaf": "false",
            "component": "TOTAL",
            "qty": null,
            "uom": null,
            "amount": "1000",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "node": "10",
            "is_leaf": "true",
            "component": "RM-COPPER",
            "qty": "100",
            "uom": "KG",
            "amount": "600",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "node": "20",
            "is_leaf": "true",
            "component": "LABOR",
            "qty": "25",
            "uom": "H",
            "amount": "250",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "node": "30",
            "is_leaf": "true",
            "component": "OVERHEAD",
            "qty": null,
            "uom": null,
            "amount": "150",
            "currency": "USD",
            "valuation_view": "LEGAL"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO07",
        "variants": [
          {
            "id": "CO07-01",
            "source_transaction": "CK13N / CK11N — Itemization",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/basic-concepts-of-cost-components-in-sap-s4hana-finance",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO07-01.xlsx",
            "raw_csv": "source-layout-downloads/CO07-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO07-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO08",
      "module": "CO",
      "title": "Cost estimate — cost component split",
      "tcode": "CK13N",
      "fiori_app": "CK13N",
      "source_ids": [
        "S18"
      ],
      "kind": "NATIVE_VIEW",
      "keys": [
        "estimate",
        "valuation_view",
        "currency",
        "component_group"
      ],
      "columns": [
        "estimate",
        "component_group",
        "amount",
        "currency",
        "valuation_view"
      ],
      "selection": "Cùng estimate với CO06; chọn cost component view và structure được phê duyệt.",
      "reading": "Cost component là nhóm cấu hình, không tự ánh xạ thành IFRS expense nature hay element.",
      "reconciliation": "Tổng component ↔ CO07 leaf; reconcile additive view, loại duplicate full-cost/COGM/COGS views.",
      "control": "Structure thay đổi theo ngày/config; không ghép tên component qua hai hệ nếu chưa mapping.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Itemization + configured component assignment → component split.",
      "worked_example": "Materials 600, conversion 400 ⇒ total 1.000; conversion còn cần kiểm tra eligible overhead.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: estimate + valuation_view + currency + component_group. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S18",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/6b39bd1d0e5e4099a5b65d835c29c696/c896d7531a4d414de10000000a174cb4.html",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID CK13N, material/plant/costing variant selection, component breakdown; not every Fiori app has F-number."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "estimate",
          "label": "Cost Estimate ID",
          "meaning": "Định danh riêng lần costing; không ghép chỉ material/plant.",
          "sample": "EST-2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "component_group",
          "label": "Cost Component",
          "meaning": "Nhóm phân rã giá thành; giữ cấu trúc/version được duyệt.",
          "sample": "MATERIAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CK13N / CK13N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Cùng estimate với CO06; chọn cost component view và structure được phê duyệt.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng component ↔ CO07 leaf; reconcile additive view, loại duplicate full-cost/COGM/COGS views. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO08-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "estimate",
          "component_group",
          "amount",
          "currency",
          "valuation_view"
        ],
        "rows": [
          {
            "estimate": "EST-2026-09-01",
            "component_group": "MATERIAL",
            "amount": "600",
            "currency": "USD",
            "valuation_view": "LEGAL"
          },
          {
            "estimate": "EST-2026-09-01",
            "component_group": "CONVERSION",
            "amount": "400",
            "currency": "USD",
            "valuation_view": "LEGAL"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO08",
        "variants": [
          {
            "id": "CO08-01",
            "source_transaction": "CK13N / CK11N — Cost Components",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/basic-concepts-of-cost-components-in-sap-s4hana-finance",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO08-01.xlsx",
            "raw_csv": "source-layout-downloads/CO08-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO08-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO09",
      "module": "CO",
      "title": "Material Price Analysis",
      "tcode": "CKM3N",
      "fiori_app": "CKM3N",
      "source_ids": [
        "S19",
        "S21"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "valuation_area",
        "valuation_type",
        "year",
        "period",
        "currency",
        "valuation_view",
        "node"
      ],
      "columns": [
        "material",
        "valuation_area",
        "valuation_type",
        "year",
        "period",
        "node",
        "is_leaf",
        "category",
        "qty",
        "uom",
        "amount",
        "currency",
        "valuation_view",
        "price",
        "price_unit"
      ],
      "selection": "Material/valuation area/period/currency/view; lưu price-determination status và UPA/ledger nếu dùng.",
      "reading": "Cây beginning/receipts/consumption/ending chứa subtotal; actual price cần trạng thái settlement, không chỉ nhìn số.",
      "reconciliation": "Beginning + receipts - consumption ± adjustments = ending ở đúng leaf flow; ↔ MM05 + FI02.",
      "control": "Not allocated/not distributed phải được giải thích. Không dùng status CKMLCP xanh như bằng chứng mọi price difference đã phân bổ.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Valued material flows → price-analysis hierarchy → cost/stock bridge; mapping bảng phụ thuộc UPA.",
      "worked_example": "100 EA tổng cost 1.050 ⇒ 10,5/EA nếu toàn bộ differences hợp lệ được phân bổ; xem exception trước dùng.",
      "existing_contract": "D11",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: material + valuation_area + valuation_type + year + period + currency + valuation_view + node. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S19",
          "url": "https://help.sap.com/docs/PRODUCT_ID/7f47a6d9441c46ac86c96fd27f6015f0/a787d353c6244308e10000000a174cb4.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "CKM3/CKM3N/CKM3_NAV; actual prices after settlement; non-distributed and non-allocated differences."
        },
        {
          "id": "S21",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8fbeed5f2046489696a50ac7fd76f9c6/b374805c0b0645e7a6969259e6af3031.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "UPA introduces ledger runs; previous period run displays differ; old-run reversal restrictions."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_type",
          "label": "Valuation Type",
          "meaning": "Split valuation; trống chỉ hợp lệ khi profile xác nhận không dùng.",
          "sample": "DOMESTIC",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "node",
          "label": "Hierarchy Node",
          "meaning": "Mã node; bắt buộc nhận diện subtotal khi cộng cây.",
          "sample": "NODE-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "is_leaf",
          "label": "Is Leaf",
          "meaning": "Cờ phân biệt dòng lá và dòng tổng; chỉ cộng một cấp hợp lệ.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "category",
          "label": "Category",
          "meaning": "Nhóm luồng/variance/giá; ý nghĩa phụ thuộc report.",
          "sample": "RECEIPTS",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_view",
          "label": "Valuation View",
          "meaning": "Legal/group/profit-center view; không trộn các view.",
          "sample": "LEGAL",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price",
          "label": "Price",
          "meaning": "Giá cho price_unit đơn vị; không mặc định giá cho 1.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price_unit",
          "label": "Price Unit",
          "meaning": "Mẫu số định giá: value = qty × price / price_unit khi phù hợp.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở CKM3N / CKM3N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Material/valuation area/period/currency/view; lưu price-determination status và UPA/ledger nếu dùng.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Beginning + receipts - consumption ± adjustments = ending ở đúng leaf flow; ↔ MM05 + FI02. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO09-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Một node ending minh họa; không đủ dữ liệu thực thi full rollforward.",
        "columns": [
          "material",
          "valuation_area",
          "valuation_type",
          "year",
          "period",
          "node",
          "is_leaf",
          "category",
          "qty",
          "uom",
          "amount",
          "currency",
          "valuation_view",
          "price",
          "price_unit"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "valuation_area": "1100",
            "valuation_type": "DOMESTIC",
            "year": "2026",
            "period": "009",
            "node": "ENDING",
            "is_leaf": "true",
            "category": "ENDING",
            "qty": "100",
            "uom": "EA",
            "amount": "1050",
            "currency": "USD",
            "valuation_view": "LEGAL",
            "price": "10.5",
            "price_unit": "1"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO09",
        "variants": [
          {
            "id": "CO09-01",
            "source_transaction": "CKM3N (Material Price Analysis — Price Determination Structure)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/ckm3n-analise-do-historico-do-material/",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO09-01.xlsx",
            "raw_csv": "source-layout-downloads/CO09-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO09-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO10",
      "module": "CO",
      "title": "Actual costing — nhật ký và trạng thái lần chạy",
      "tcode": "CKMLCP",
      "fiori_app": "CKMLCP",
      "source_ids": [
        "S20",
        "S21",
        "S39"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "material",
        "valuation_area",
        "step",
        "attempt"
      ],
      "columns": [
        "run",
        "material",
        "valuation_area",
        "year",
        "period",
        "step",
        "attempt",
        "status",
        "error_count",
        "test_run"
      ],
      "selection": "Đọc existing run và log do người vận hành cung cấp; lưu period, run type, ledger/UPA và từng attempt.",
      "reading": "Một dòng là trạng thái bước, không là amount. Selection/preparation/settlement/post-closing khác nhau.",
      "reconciliation": "Danh sách selected/processed/error ↔ object population; posted result ↔ CO09/FI02 qua refs.",
      "control": "Không thực hiện Create/Execute/Close trong tài liệu huấn luyện. Ghi rerun/reversal thay vì ghi đè kết quả cũ.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Costing run → material/step attempt → result/document pointers.",
      "worked_example": "99 success + 1 error trên 100 vật tư: coverage 99%, không chứng nhận toàn kỳ complete.",
      "existing_contract": "D12",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + material + valuation_area + step + attempt. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S20",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/7f47a6d9441c46ac86c96fd27f6015f0/c8f1d353ca9f4408e10000000a174cb4.html",
          "version": "Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "CKMLCP executes actual costing, not a simple display report."
        },
        {
          "id": "S21",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8fbeed5f2046489696a50ac7fd76f9c6/b374805c0b0645e7a6969259e6af3031.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "UPA introduces ledger runs; previous period run displays differ; old-run reversal restrictions."
        },
        {
          "id": "S39",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/7f47a6d9441c46ac86c96fd27f6015f0/af657fd431b949e5996581b0dfdf07b2.html?q=Display+Actual+Costing+Result",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Released CDS listed; related-search results mark F6073 deprecated. Replacement not established here."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "step",
          "label": "Run Step",
          "meaning": "Bước thực thi theo edition/UPA; giữ nhãn raw chính xác.",
          "sample": "SETTLEMENT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "attempt",
          "label": "Run Attempt",
          "meaning": "Lần thực hiện trong run/step; cần lưu để không cộng rerun.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "error_count",
          "label": "Error Count",
          "meaning": "Số lỗi của bước; 0 không tự chứng minh postings đầy đủ.",
          "sample": "0",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Đọc existing run và log do người vận hành cung cấp; lưu period, run type, ledger/UPA và từng attempt.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Danh sách selected/processed/error ↔ object population; posted result ↔ CO09/FI02 qua refs. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO10-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Hai vật tư để học đọc status; không phải dữ liệu cho worked example 100 vật tư.",
        "columns": [
          "run",
          "material",
          "valuation_area",
          "year",
          "period",
          "step",
          "attempt",
          "status",
          "error_count",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "material": "FG-CONNECTOR-01",
            "valuation_area": "1100",
            "year": "2026",
            "period": "009",
            "step": "SETTLEMENT",
            "attempt": "1",
            "status": "SUCCESS",
            "error_count": "0",
            "test_run": "true"
          },
          {
            "run": "DEMO-RUN-09",
            "material": "FG-CONNECTOR-02",
            "valuation_area": "1100",
            "year": "2026",
            "period": "009",
            "step": "SETTLEMENT",
            "attempt": "1",
            "status": "ERROR",
            "error_count": "1",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO10",
        "variants": [
          {
            "id": "CO10-01",
            "source_transaction": "CKMLCP (Costing Cockpit: Actual Costing, S/4HANA ≥1610)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapinsider.org/wp-content/uploads/2024/10/ReunionA_Oct15_130-230_Ovigele_WhatYouNeedToKnowMaterialLedger.pdf",
            "fields_read_from_source": 17,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO10-01.xlsx",
            "raw_csv": "source-layout-downloads/CO10-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO10-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO11",
      "module": "CO",
      "title": "Kết quả phân tích variance sản xuất",
      "tcode": "KKS1 / KKS1H",
      "fiori_app": null,
      "source_ids": [
        "S22"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "order",
        "year",
        "period",
        "version",
        "category",
        "cost_element",
        "currency"
      ],
      "columns": [
        "order",
        "year",
        "period",
        "version",
        "category",
        "cost_element",
        "actual",
        "target",
        "variance",
        "currency",
        "test_run"
      ],
      "selection": "Chỉ đọc kết quả calculation đã lưu; chốt target-cost version, order status và period.",
      "reading": "Variance = actual control costs - target costs trong phép minh họa; category theo config không cố định 5 nhóm.",
      "reconciliation": "Tổng category ↔ calculation control total; CO04 input bridge, CO13 settlement-relevant amount bridge.",
      "control": "KKS result không phải FI posting; WIP/output credits và target version có thể làm delta khác actual-plan.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Order actuals + quantity/target basis → variance result → eligible settlement.",
      "worked_example": "Actual 1.200 - target 1.100 = 100; price 60 + usage 40 chỉ hợp lệ nếu nguồn phân loại hỗ trợ.",
      "existing_contract": "D08",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: order + year + period + version + category + cost_element + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S22",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878055.html?locale=pl-PL&state=PRODUCTION&version=1.0",
          "version": "Support content; not a release matrix",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KKS1/H, KKAO/H, CO88/H; differing supported functions; source is translated."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "category",
          "label": "Category",
          "meaning": "Nhóm luồng/variance/giá; ý nghĩa phụ thuộc report.",
          "sample": "RECEIPTS",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "target",
          "label": "Target Cost",
          "meaning": "Chi phí mục tiêu theo output và target version; không đồng nhất ngân sách.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "variance",
          "label": "Variance",
          "meaning": "Derived trong bài tập: actual - target hoặc actual - plan theo hồ sơ.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Chỉ đọc kết quả calculation đã lưu; chốt target-cost version, order status và period.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Tổng category ↔ calculation control total; CO04 input bridge, CO13 settlement-relevant amount bridge. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO11-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Một dòng tổng; không tạo giả decomposition price/usage khi thiếu dữ liệu.",
        "columns": [
          "order",
          "year",
          "period",
          "version",
          "category",
          "cost_element",
          "actual",
          "target",
          "variance",
          "currency",
          "test_run"
        ],
        "rows": [
          {
            "order": "1000001",
            "year": "2026",
            "period": "009",
            "version": "000",
            "category": "TOTAL_VARIANCE",
            "cost_element": "510000",
            "actual": "1200",
            "target": "1100",
            "variance": "100",
            "currency": "USD",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO11",
        "variants": [
          {
            "id": "CO11-01",
            "source_transaction": "KKBC_ORD (Target/Actual – Comparison; xem kết quả sau KKS1, không phải màn hình chạy KKS1)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://skillstek.com/wip-in-sap-configuration-requirements/",
            "fields_read_from_source": 20,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO11-01.xlsx",
            "raw_csv": "source-layout-downloads/CO11-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO11-01.flat.csv"
          },
          {
            "id": "CO11-02",
            "source_transaction": "F1780 Production Cost Analysis (Fiori)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://erpcorp.com/sap-controlling-blog/sap-fiori-apps-for-variance-management-in-manufacturing",
            "fields_read_from_source": 18,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO11-02.xlsx",
            "raw_csv": "source-layout-downloads/CO11-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO11-02.flat.csv"
          },
          {
            "id": "CO11-03",
            "source_transaction": "Order Cost Detail (Fiori, mở từ F1780; tương đương KKBC_ORD)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://erpcorp.com/sap-controlling-blog/sap-fiori-apps-for-variance-management-in-manufacturing",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO11-03.xlsx",
            "raw_csv": "source-layout-downloads/CO11-03.layout.csv",
            "flat_csv": "source-layout-downloads/CO11-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO12",
      "module": "CO",
      "title": "Kết quả WIP theo order",
      "tcode": "KKAO / KKAOH",
      "fiori_app": null,
      "source_ids": [
        "S22",
        "S44"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "order",
        "year",
        "period",
        "version",
        "currency"
      ],
      "columns": [
        "order",
        "year",
        "period",
        "version",
        "actual",
        "amount",
        "currency",
        "status",
        "test_run"
      ],
      "selection": "Đọc log/result hiện có; lưu results-analysis key/version, status và cutoff, classic hay event-based.",
      "reading": "Amount ở đây là WIP tính toán, actual là cost base; WIP không luôn bằng toàn bộ order balance.",
      "reconciliation": "Opening WIP + change - relieved WIP ↔ closing WIP; posted WIP GL qua CO13/settlement refs.",
      "control": "TECO/DLV, scrap và loss provisions có thể đổi kết quả. Không gọi mọi MTO WIP là contract asset IFRS15.",
      "ifrs_ref": "WIP",
      "lineage": "Order costs + RA configuration/status → WIP calculation → posting evidence bridge.",
      "worked_example": "Costs 1.200, eligible completed transfer 900 ⇒ WIP minh họa 300; cần RA rules trước kết luận thực tế.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: order + year + period + version + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S22",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878055.html?locale=pl-PL&state=PRODUCTION&version=1.0",
          "version": "Support content; not a release matrix",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KKS1/H, KKAO/H, CO88/H; differing supported functions; source is translated."
        },
        {
          "id": "S44",
          "url": "https://www.ifrs.org/content/dam/ifrs/meetings/2024/march/iasb/ap6b-ifrs-15-pir-timing.pdf",
          "version": "IASB staff paper March 2024; not a new standard",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Summarizes IFRS15.31,35,38: control and over-time tests; MTO alone is insufficient."
        }
      ],
      "ifrs_policy": {
        "title": "WIP sản xuất và hợp đồng khách hàng",
        "sources": [
          "S40",
          "S44"
        ],
        "text": "Phân biệt inventory WIP và contract asset theo bản chất hợp đồng. MTO hoặc sales-order stock E không tự đáp ứng IFRS15.35. Xem quyền kiểm soát, alternative use và enforceable right to payment; cần accounting/legal assessment của hợp đồng. Calculation WIP trong CO khác bằng chứng ghi sổ WIP ở FI."
      },
      "column_definitions": [
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "version",
          "label": "Plan / Target Version",
          "meaning": "Phiên bản kế hoạch/target; ý nghĩa khác nhau theo report.",
          "sample": "000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "WIP tính toán theo tiền trong mẫu; khác actual input cost và không chứng minh posting.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Đọc log/result hiện có; lưu results-analysis key/version, status và cutoff, classic hay event-based.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Opening WIP + change - relieved WIP ↔ closing WIP; posted WIP GL qua CO13/settlement refs. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO12-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Giá trị eligible completed transfer 900 là giả định bài tập ngoài sample columns.",
        "columns": [
          "order",
          "year",
          "period",
          "version",
          "actual",
          "amount",
          "currency",
          "status",
          "test_run"
        ],
        "rows": [
          {
            "order": "1000001",
            "year": "2026",
            "period": "009",
            "version": "000",
            "actual": "1200",
            "amount": "300",
            "currency": "USD",
            "status": "CALCULATED_NOT_POSTED",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO12",
        "variants": [
          {
            "id": "CO12-01",
            "source_transaction": "KKAO / KKAX (Calculate Work in Process: Object List)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://skillstek.com/wip-in-sap-configuration-requirements/",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO12-01.xlsx",
            "raw_csv": "source-layout-downloads/CO12-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO12-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO13",
      "module": "CO",
      "title": "Bằng chứng settlement order",
      "tcode": "CO88 / CO88H",
      "fiori_app": null,
      "source_ids": [
        "S22"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "sender",
        "receiver",
        "year",
        "period",
        "line",
        "currency"
      ],
      "columns": [
        "run",
        "sender",
        "receiver",
        "year",
        "period",
        "line",
        "amount",
        "currency",
        "accounting_ref",
        "status",
        "test_run"
      ],
      "selection": "Chỉ xem completed/test log và accounting references đã cung cấp; giữ settlement type/period và receiver rules.",
      "reading": "Sender credit/receiver debit là cặp chuyển chi phí; receiver có thể nhiều loại đối tượng.",
      "reconciliation": "Sum sender transfer ↔ sum receiver allocations cùng valuation; tie FI reference tới FI02 nếu relevant.",
      "control": "CO88 khác VA88 của simulator MTO; không thay mapping runtime. Rerun/test không tự thành posting mới.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Settlement rule + calculated result → allocation bridge → accounting documents.",
      "worked_example": "Sender 100 chuyển material 70 + expense 30; không ghi thêm expense 100 ngoài hai receiver.",
      "existing_contract": "SUP01",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + sender + receiver + year + period + line + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S22",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878055.html?locale=pl-PL&state=PRODUCTION&version=1.0",
          "version": "Support content; not a release matrix",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KKS1/H, KKAO/H, CO88/H; differing supported functions; source is translated."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sender",
          "label": "Settlement Sender",
          "meaning": "Đối tượng phát sinh chi phí cần kết chuyển.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "receiver",
          "label": "Settlement Receiver",
          "meaning": "Đối tượng nhận phân bổ/settlement; không tự đồng nghĩa GL account.",
          "sample": "MATERIAL_FG",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Chỉ xem completed/test log và accounting references đã cung cấp; giữ settlement type/period và receiver rules.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum sender transfer ↔ sum receiver allocations cùng valuation; tie FI reference tới FI02 nếu relevant. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO13-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Tất cả test-only nên accounting_ref=null; tuyệt đối không diễn giải đã posted.",
        "columns": [
          "run",
          "sender",
          "receiver",
          "year",
          "period",
          "line",
          "amount",
          "currency",
          "accounting_ref",
          "status",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "sender": "1000001",
            "receiver": "MATERIAL_FG",
            "year": "2026",
            "period": "009",
            "line": "001",
            "amount": "70",
            "currency": "USD",
            "accounting_ref": null,
            "status": "TEST_ONLY",
            "test_run": "true"
          },
          {
            "run": "DEMO-RUN-09",
            "sender": "1000001",
            "receiver": "EXPENSE",
            "year": "2026",
            "period": "009",
            "line": "002",
            "amount": "30",
            "currency": "USD",
            "accounting_ref": null,
            "status": "TEST_ONLY",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO13",
        "variants": [
          {
            "id": "CO13-01",
            "source_transaction": "KO88 (settlement từng order — cùng định dạng output 'Actual Settlement' với CO88)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://sapficoblog.com/internal-order-settlement-in-sap-auc-asset-ko88/",
            "fields_read_from_source": 10,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO13-01.xlsx",
            "raw_csv": "source-layout-downloads/CO13-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO13-01.flat.csv"
          },
          {
            "id": "CO13-02",
            "source_transaction": "KO88 — Basic list",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://sapficoblog.com/internal-order-settlement-in-sap-auc-asset-ko88/",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO13-02.xlsx",
            "raw_csv": "source-layout-downloads/CO13-02.layout.csv",
            "flat_csv": "source-layout-downloads/CO13-02.flat.csv"
          }
        ]
      },
      "supplemental_source_examples": {
        "viewer": "supplemental.html#CO13",
        "target_release": "UNKNOWN",
        "native_export": false,
        "full_field_catalog_verified": false,
        "variants": [
          {
            "id": "SUP-CO13-01",
            "source_file": "SAP COPA.pdf",
            "source_page": 23,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 14,
            "xlsx": "supplemental-downloads/SUP-CO13-01.xlsx"
          }
        ]
      }
    },
    {
      "id": "CO14",
      "module": "CO",
      "title": "Kết quả đơn giá hoạt động thực tế",
      "tcode": "KSII",
      "fiori_app": "F9080",
      "source_ids": [
        "S23"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "run",
        "cost_center",
        "activity",
        "year",
        "period",
        "currency"
      ],
      "columns": [
        "run",
        "cost_center",
        "activity",
        "year",
        "period",
        "actual",
        "qty",
        "uom",
        "cost_rate",
        "currency",
        "test_run"
      ],
      "selection": "Đọc kết quả run đã có; chốt ledger/CO area và periodic/cumulative method; không tạo run mới.",
      "reading": "Cost rate cần price unit, fixed/variable split và splitting rules ngoài mẫu giản lược.",
      "reconciliation": "Eligible cost ÷ activity qty ↔ rate theo method; revaluation delta ↔ CO04/CO09.",
      "control": "Zero activity giữ rate null và exception. Actual rate không thay IAS2 normal-capacity assessment.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Cost-center actuals + splitting/activity quantity → rate → activity revaluation.",
      "worked_example": "1.200 / 100 H = 12/H trong ví dụ một activity; nhiều activities cần splitting, không chia chung.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: run + cost_center + activity + year + period + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S23",
          "url": "https://help.sap.com/docs/s4hana-cloud-best-practices/actual-costing-33q-in/calculate-actual-cost-rates-cost-centers",
          "version": "Cloud best practice India; release not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F9080 and KSII alternatives; rate methods and ledger scope matter; sample production-run settings not recommended here."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "run",
          "label": "Run ID",
          "meaning": "Định danh lần chạy hoặc kết quả được lưu; không gộp hai lần chạy.",
          "sample": "DEMO-RUN-09",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_center",
          "label": "Cost Center",
          "meaning": "Trung tâm chi phí và thời hạn hiệu lực; không tự coi mọi chi phí là sản xuất.",
          "sample": "CC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "activity",
          "label": "Activity Type",
          "meaning": "Loại hoạt động CO, ví dụ giờ máy; phải kèm activity UoM.",
          "sample": "MACHINE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "actual",
          "label": "Actual Cost",
          "meaning": "Chi phí thực tế trong phạm vi chọn, tách credit/settlement theo mục đích.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_rate",
          "label": "Cost Rate",
          "meaning": "Chi phí/đơn vị hoạt động; cần fixed/variable và price unit khi dùng thực tế.",
          "sample": "12",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "test_run",
          "label": "Test Run",
          "meaning": "True là kết quả thử, không được coi là actual posting.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Đọc kết quả run đã có; chốt ledger/CO area và periodic/cumulative method; không tạo run mới.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Eligible cost ÷ activity qty ↔ rate theo method; revaluation delta ↔ CO04/CO09. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO14-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "run",
          "cost_center",
          "activity",
          "year",
          "period",
          "actual",
          "qty",
          "uom",
          "cost_rate",
          "currency",
          "test_run"
        ],
        "rows": [
          {
            "run": "DEMO-RUN-09",
            "cost_center": "CC1100",
            "activity": "MACHINE",
            "year": "2026",
            "period": "009",
            "actual": "1200",
            "qty": "100",
            "uom": "H",
            "cost_rate": "12",
            "currency": "USD",
            "test_run": "true"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#CO14",
        "variants": [
          {
            "id": "CO14-01",
            "source_transaction": "KSII (Price Calculation Results - Actual)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://sapficocorner.blogspot.com/2024/02/actual-activity-rate-calculation-with.html",
            "fields_read_from_source": 24,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/CO14-01.xlsx",
            "raw_csv": "source-layout-downloads/CO14-01.layout.csv",
            "flat_csv": "source-layout-downloads/CO14-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "CO15",
      "module": "CO",
      "title": "Chi tiết profitability / CO-PA",
      "tcode": "KE24",
      "fiori_app": null,
      "source_ids": [
        "S24"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "co_area",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "co_area",
        "year",
        "period",
        "doc",
        "line",
        "customer",
        "product",
        "profit_center",
        "cost_element",
        "amount",
        "currency"
      ],
      "selection": "Operating concern, PA type, actual record scope/year/period; lưu archive/source selection.",
      "reading": "Costing-based value fields và account-based margin analysis không chung schema. Sample chọn account-like view.",
      "reconciliation": "Account-based totals ↔ FI02 P&L theo market segment; costing-based cần value-field bridge riêng.",
      "control": "Không gán missing customer thành một khách mặc định; derivation changes có thể đổi segment lịch sử.",
      "ifrs_ref": "REVENUE",
      "lineage": "PA type-specific line items → segment classification → margin bridge.",
      "worked_example": "Revenue credit -1.800 và cost debit +1.200 cho margin management +600 sau đổi dấu revenue.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: co_area + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S24",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
          "version": "S/4HANA; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KE24, KE25, KE30; cost-based vs margin analysis data distinction and archive selection."
        }
      ],
      "ifrs_policy": {
        "title": "Doanh thu và margin",
        "sources": [
          "S44",
          "S45"
        ],
        "text": "IFRS15.31/35/38 yêu cầu xem việc chuyển control và tiêu chí over-time. Billing không tự xác định revenue recognition. Product/customer margin trong thư viện là chỉ tiêu quản trị cần bridge về GL và adjustments; chưa phải một subtotal IFRS18. Duy trì sign convention và kỳ phân bổ COGS để tránh margin giả do lệch cutoff."
      },
      "column_definitions": [
        {
          "id": "co_area",
          "label": "Controlling Area",
          "meaning": "Phạm vi CO; quan hệ company cần cấu hình, không đoán từ prefix.",
          "sample": "A100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "customer",
          "label": "Customer",
          "meaning": "Khách hàng hoặc segment theo derivation; thiếu segment phải giữ exception.",
          "sample": "CUST-DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "product",
          "label": "Product",
          "meaning": "Sản phẩm phân tích margin; join master theo hiệu lực.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "profit_center",
          "label": "Profit Center",
          "meaning": "Đơn vị trách nhiệm lợi nhuận; master có thời hạn hiệu lực.",
          "sample": "PC1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cost_element",
          "label": "Cost Element / G/L",
          "meaning": "Phân loại chi phí; trong S/4 có liên hệ GL, vẫn cần category/scope.",
          "sample": "510000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở KE24 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Operating concern, PA type, actual record scope/year/period; lưu archive/source selection.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Account-based totals ↔ FI02 P&L theo market segment; costing-based cần value-field bridge riêng. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO15-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "co_area",
          "year",
          "period",
          "doc",
          "line",
          "customer",
          "product",
          "profit_center",
          "cost_element",
          "amount",
          "currency"
        ],
        "rows": [
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "001",
            "customer": "CUST-DEMO",
            "product": "FG-CONNECTOR-01",
            "profit_center": "PC1100",
            "cost_element": "400000",
            "amount": "-1800",
            "currency": "USD"
          },
          {
            "co_area": "A100",
            "year": "2026",
            "period": "009",
            "doc": "1900000001",
            "line": "002",
            "customer": "CUST-DEMO",
            "product": "FG-CONNECTOR-01",
            "profit_center": "PC1100",
            "cost_element": "500000",
            "amount": "1200",
            "currency": "USD"
          }
        ]
      },
      "co_pa_examples": {
        "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_EXPORT_LAYOUT",
        "viewer": "co-pa.html#CO15",
        "target_release": "UNKNOWN",
        "output_layout_verified": false,
        "variants": [
          {
            "id": "CO15-01",
            "columns": 37,
            "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_EXPORT_LAYOUT",
            "xlsx": "co-pa-downloads/CO15-01.xlsx",
            "raw_csv": "co-pa-downloads/CO15-01.layout.csv",
            "flat_csv": "co-pa-downloads/CO15-01.flat.csv"
          },
          {
            "id": "CO15-02",
            "columns": 39,
            "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_EXPORT_LAYOUT",
            "xlsx": "co-pa-downloads/CO15-02.xlsx",
            "raw_csv": "co-pa-downloads/CO15-02.layout.csv",
            "flat_csv": "co-pa-downloads/CO15-02.flat.csv"
          }
        ]
      },
      "supplemental_source_examples": {
        "viewer": "supplemental.html#CO15",
        "target_release": "UNKNOWN",
        "native_export": false,
        "full_field_catalog_verified": false,
        "variants": [
          {
            "id": "SUP-CO15-01",
            "source_file": "SAP COPA.pdf",
            "source_page": 37,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 27,
            "xlsx": "supplemental-downloads/SUP-CO15-01.xlsx"
          },
          {
            "id": "SUP-CO15-02",
            "source_file": "SAP COPA.pdf",
            "source_page": 8,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 23,
            "xlsx": "supplemental-downloads/SUP-CO15-02.xlsx"
          },
          {
            "id": "SUP-CO15-03",
            "source_file": "SAP COPA.pdf",
            "source_page": 32,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 27,
            "xlsx": "supplemental-downloads/SUP-CO15-03.xlsx"
          },
          {
            "id": "SUP-CO15-04",
            "source_file": "SAP COPA.pdf",
            "source_page": 33,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 33,
            "xlsx": "supplemental-downloads/SUP-CO15-04.xlsx"
          },
          {
            "id": "SUP-CO15-05",
            "source_file": "SAP COPA.pdf",
            "source_page": 8,
            "classification": "SOURCE_SCREEN_RECONSTRUCTION_SYNTHETIC_DATA",
            "fields_read": 18,
            "xlsx": "supplemental-downloads/SUP-CO15-05.xlsx"
          }
        ]
      }
    },
    {
      "id": "CO16",
      "module": "CO",
      "title": "Biên lợi nhuận sản phẩm/khách hàng",
      "tcode": null,
      "fiori_app": null,
      "source_ids": [
        "S24",
        "S44",
        "S45"
      ],
      "kind": "DERIVED_ANALYSIS",
      "keys": [
        "company",
        "year",
        "period",
        "customer",
        "product",
        "currency"
      ],
      "columns": [
        "company",
        "year",
        "period",
        "customer",
        "product",
        "revenue",
        "cogs",
        "margin",
        "currency"
      ],
      "selection": "Chọn account-based PA hoặc approved GL mapping; cùng revenue recognition/cost period và product grain.",
      "reading": "Revenue trình bày dương, COGS dương, margin = revenue - COGS; không tự là IFRS18 operating profit.",
      "reconciliation": "Total revenue/COGS ↔ mapped FI02; missing segment và IFRS adjustments nằm trong bridge riêng.",
      "control": "Không trộn billing amount với recognized revenue; MTO không tự đủ điều kiện over-time.",
      "ifrs_ref": "REVENUE",
      "lineage": "Approved GL/PA sign mapping → product/customer aggregate → margin analysis.",
      "worked_example": "Revenue 1.800 - COGS 1.200 = margin 600 (33,33%); còn expenses khác ngoài phạm vi.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAVA_DERIVED_NOT_NATIVE",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Cost Accountant / Plant Controller",
      "frequency": "Hàng tháng; ad-hoc theo yêu cầu đối chiếu",
      "grain": "Một dòng cho tổ hợp: company + year + period + customer + product + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S24",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
          "version": "S/4HANA; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "KE24, KE25, KE30; cost-based vs margin analysis data distinction and archive selection."
        },
        {
          "id": "S44",
          "url": "https://www.ifrs.org/content/dam/ifrs/meetings/2024/march/iasb/ap6b-ifrs-15-pir-timing.pdf",
          "version": "IASB staff paper March 2024; not a new standard",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Summarizes IFRS15.31,35,38: control and over-time tests; MTO alone is insufficient."
        },
        {
          "id": "S45",
          "url": "https://www.ifrs.org/content/dam/ifrs/publications/pdf-standards/english/2025/issued/part-a/ifrs-18-presentation-and-disclosure-in-financial-statements.pdf?bypass=on",
          "version": "Issued 2025 text, Appendix C",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Effective annual periods beginning 2027-01-01; early application permitted, retrospective transition."
        }
      ],
      "ifrs_policy": {
        "title": "Doanh thu và margin",
        "sources": [
          "S44",
          "S45"
        ],
        "text": "IFRS15.31/35/38 yêu cầu xem việc chuyển control và tiêu chí over-time. Billing không tự xác định revenue recognition. Product/customer margin trong thư viện là chỉ tiêu quản trị cần bridge về GL và adjustments; chưa phải một subtotal IFRS18. Duy trì sign convention và kỳ phân bổ COGS để tránh margin giả do lệch cutoff."
      },
      "column_definitions": [
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "period",
          "label": "Fiscal Period",
          "meaning": "Kỳ hạch toán; phân biệt kỳ đặc biệt 13–16 với tháng.",
          "sample": "009",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "customer",
          "label": "Customer",
          "meaning": "Khách hàng hoặc segment theo derivation; thiếu segment phải giữ exception.",
          "sample": "CUST-DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "product",
          "label": "Product",
          "meaning": "Sản phẩm phân tích margin; join master theo hiệu lực.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "revenue",
          "label": "Revenue",
          "meaning": "Doanh thu thuần theo chính sách; mẫu dương để phân tích margin, khác dấu FI credit.",
          "sample": "1800",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "cogs",
          "label": "Cost of Sales",
          "meaning": "Chi phí hàng bán trong cùng kỳ và phạm vi với revenue.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "margin",
          "label": "Margin",
          "meaning": "Derived: revenue - cogs; không tự là IFRS18 operating profit.",
          "sample": "600",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Lấy nguồn đầu vào được chỉ rõ trong lineage, giữ manifest và policy version.",
        "Chọn account-based PA hoặc approved GL mapping; cùng revenue recognition/cost period và product grain.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Total revenue/COGS ↔ mapped FI02; missing segment và IFRS adjustments nằm trong bridge riêng. Ghi exception và chuyển Cost Accountant / Plant Controller review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "CO16-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "company",
          "year",
          "period",
          "customer",
          "product",
          "revenue",
          "cogs",
          "margin",
          "currency"
        ],
        "rows": [
          {
            "company": "1000",
            "year": "2026",
            "period": "009",
            "customer": "CUST-DEMO",
            "product": "FG-CONNECTOR-01",
            "revenue": "1800",
            "cogs": "1200",
            "margin": "600",
            "currency": "USD"
          }
        ]
      },
      "co_pa_examples": {
        "classification": "SAVA_DERIVED_NOT_NATIVE",
        "viewer": "co-pa.html#CO16",
        "target_release": "UNKNOWN",
        "output_layout_verified": false,
        "variants": [
          {
            "id": "CO16-01",
            "columns": 23,
            "classification": "SAVA_DERIVED_NOT_NATIVE",
            "xlsx": "co-pa-downloads/CO16-01.xlsx",
            "raw_csv": "co-pa-downloads/CO16-01.layout.csv",
            "flat_csv": "co-pa-downloads/CO16-01.flat.csv"
          },
          {
            "id": "CO16-02",
            "columns": 23,
            "classification": "SAVA_DERIVED_NOT_NATIVE",
            "xlsx": "co-pa-downloads/CO16-02.xlsx",
            "raw_csv": "co-pa-downloads/CO16-02.layout.csv",
            "flat_csv": "co-pa-downloads/CO16-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM01",
      "module": "MM",
      "title": "Danh sách chứng từ vật tư",
      "tcode": "MB51",
      "fiori_app": "F1077",
      "source_ids": [
        "S25",
        "S38"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "year",
        "material_doc",
        "item"
      ],
      "columns": [
        "year",
        "material_doc",
        "item",
        "date",
        "material",
        "plant",
        "movement",
        "special_stock",
        "qty",
        "uom",
        "amount",
        "currency",
        "po",
        "order",
        "accounting_ref"
      ],
      "selection": "Plant/material/posting-date range; include relevant reversals và special stock; bảo toàn complete population.",
      "reading": "Movement item khác FI line. Non-valuated movement có quantity nhưng có thể không có amount/account assignment.",
      "reconciliation": "Net receipts/issues ↔ MM04 rollforward; accounting refs ↔ FI02 chỉ cho valuated postings.",
      "control": "Không double-negate reversal; dùng source sign policy được duyệt; MB51→F1077 là related functionality, không schema equivalence.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Material movement records → signed movements → stock and accounting-reference bridge.",
      "worked_example": "101 receipt +100 EA và 102 reversal -10 EA ⇒ net 90 EA; amount không suy từ qty đơn thuần.",
      "existing_contract": "D01",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + material_doc + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S25",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/32da8359c8ee4e8b8e8c5e15cacba5aa/7cc07e548af58e4ce10000000a4450e5.html?locale=en-US",
          "version": "S/4HANA Cloud; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F1077 material item display; no account assignments for non-valuated postings."
        },
        {
          "id": "S38",
          "url": "https://help.sap.com/doc/ce01d82756b947a1a043a5d5a3204226/2602.10/en-US/WN_CE2602.3_EN.pdf",
          "version": "Public Cloud 2602.3 HFC10 p46",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Stock overview navigation changes from MB51 to F1077; not evidence MB51 removed everywhere."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material_doc",
          "label": "Material Document",
          "meaning": "Số chứng từ vật tư; khóa kèm năm và item, không bằng FI doc.",
          "sample": "5000000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "movement",
          "label": "Movement Type",
          "meaning": "Mã movement; reversal và special stock phải xét riêng, không suy dấu chỉ từ mã.",
          "sample": "101",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "order",
          "label": "Order",
          "meaning": "Mã cost object/order; xem loại order trước diễn giải sản xuất hay nội bộ.",
          "sample": "1000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB51 / F1077 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/material/posting-date range; include relevant reversals và special stock; bảo toàn complete population.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net receipts/issues ↔ MM04 rollforward; accounting refs ↔ FI02 chỉ cho valuated postings. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM01-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "year",
          "material_doc",
          "item",
          "date",
          "material",
          "plant",
          "movement",
          "special_stock",
          "qty",
          "uom",
          "amount",
          "currency",
          "po",
          "order",
          "accounting_ref"
        ],
        "rows": [
          {
            "year": "2026",
            "material_doc": "5000000001",
            "item": "00010",
            "date": "2026-09-15",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "movement": "101",
            "special_stock": "NONE",
            "qty": "100",
            "uom": "EA",
            "amount": "1000",
            "currency": "USD",
            "po": "4500000001",
            "order": "1000001",
            "accounting_ref": "1000/2026/4900000001/001"
          },
          {
            "year": "2026",
            "material_doc": "5000000002",
            "item": "00010",
            "date": "2026-09-15",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "movement": "102",
            "special_stock": "NONE",
            "qty": "-10",
            "uom": "EA",
            "amount": "-100",
            "currency": "USD",
            "po": "4500000001",
            "order": "1000001",
            "accounting_ref": "1000/2026/4900000002/001"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM01",
        "variants": [
          {
            "id": "MM01-01",
            "source_transaction": "MB51 (Material Document List — danh sách phân cấp)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM01-01.xlsx",
            "raw_csv": "source-layout-downloads/MM01-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM01-01.flat.csv"
          },
          {
            "id": "MM01-02",
            "source_transaction": "MB51 (Material Document List — ALV detail list)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/mb51-consulta-de-movimento-de-estoque/",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM01-02.xlsx",
            "raw_csv": "source-layout-downloads/MM01-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM01-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM02",
      "module": "MM",
      "title": "Danh sách tồn kho nhiều vật tư",
      "tcode": "MB52",
      "fiori_app": "F1595",
      "source_ids": [
        "S26",
        "S27"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "plant",
        "sloc",
        "batch",
        "stock_type",
        "special_stock"
      ],
      "columns": [
        "material",
        "plant",
        "sloc",
        "batch",
        "stock_type",
        "special_stock",
        "qty",
        "uom",
        "stock_value",
        "currency"
      ],
      "selection": "Plant/storage/material/batch và stock-type scope; lưu as-of timestamp và valuation method cho value.",
      "reading": "Snapshot quantity không cộng qua ngày; giá Fiori tùy calculation method không tự khớp historical GL.",
      "reconciliation": "Same-cutoff quantities ↔ MM03 leaf; values ↔ MM05 sau valuation/ownership bridge.",
      "control": "Không cộng QI/blocked như available-to-promise. Zero value có thể do phân quyền, không phải free stock.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Stock snapshot → quantity/value display → inventory control bridge.",
      "worked_example": "100 unrestricted + 20 QI = physical 120 nhưng production-available không tự là 120.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + plant + sloc + batch + stock_type + special_stock. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S26",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/5307b753128eb44ce10000000a174cb4.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB52, MB5T, MB5B and related stock reports."
        },
        {
          "id": "S27",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/aff0b3f5f46c42a2b2c0fabfc233bab2/f27e02758591469fa489705a1d212df4.html",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F1595 stock/value; valuation method options need separate configuration evidence."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "batch",
          "label": "Batch",
          "meaning": "Lô tồn kho; trống hợp lệ với non-batch-managed material.",
          "sample": "LOT-DEMO-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_type",
          "label": "Stock Type",
          "meaning": "Unrestricted/QI/blocked; trạng thái vật lý khác quyền sở hữu.",
          "sample": "UNRESTRICTED",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_value",
          "label": "Stock Value",
          "meaning": "Giá trị tồn theo cơ sở giá đã khai báo; không tự bằng số dư GL.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB52 / F1595 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/storage/material/batch và stock-type scope; lưu as-of timestamp và valuation method cho value.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Same-cutoff quantities ↔ MM03 leaf; values ↔ MM05 sau valuation/ownership bridge. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM02-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "plant",
          "sloc",
          "batch",
          "stock_type",
          "special_stock",
          "qty",
          "uom",
          "stock_value",
          "currency"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "batch": "LOT-DEMO-01",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "100",
            "uom": "EA",
            "stock_value": "1000",
            "currency": "USD"
          },
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "batch": "LOT-DEMO-01",
            "stock_type": "QI",
            "special_stock": "NONE",
            "qty": "20",
            "uom": "EA",
            "stock_value": "200",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM02",
        "variants": [
          {
            "id": "MM02-01",
            "source_transaction": "MB52 (Display Warehouse Stocks of Material)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.tutorialscampus.com/sap-pp/how-to-display-stock-of-multiple-materials.htm",
            "fields_read_from_source": 18,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM02-01.xlsx",
            "raw_csv": "source-layout-downloads/MM02-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM02-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM03",
      "module": "MM",
      "title": "Stock overview theo cây tổ chức",
      "tcode": "MMBE",
      "fiori_app": null,
      "source_ids": [
        "S28",
        "S37"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "node",
        "stock_type",
        "special_stock"
      ],
      "columns": [
        "material",
        "plant",
        "sloc",
        "batch",
        "node",
        "is_leaf",
        "stock_type",
        "special_stock",
        "qty",
        "uom"
      ],
      "selection": "Một material, chọn company/plant/sloc/batch levels; segmentation chỉ khi hệ bật chức năng liên quan.",
      "reading": "Parent chứa tổng children. Dòng warehouse/plant không phải một stock độc lập để cộng cùng batch.",
      "reconciliation": "Sum selected leaf quantities ↔ MM02 cùng stock type, cutoff, owner và special stock.",
      "control": "Không flatten cây rồi sum mọi dòng. Nguồn Retail về segmentation không áp thành prerequisite manufacturing.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Material stock hierarchy → selected display levels → leaf stock comparison.",
      "worked_example": "Plant 100, kho A 60, kho B 40: total 100, không phải 200 khi cộng cả parent.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + node + stock_type + special_stock. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S28",
          "url": "https://help.sap.com/docs/PRODUCT_ID/9905622a5c1f49ba84e9076fc83a9c2c/b8fbc492055a4801b92456ff68a6d971.html?locale=en-US&state=PRODUCTION&version=2023.latest",
          "version": "S/4HANA Retail 2023",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MMBE hierarchy example; segmentation requires business function, not general manufacturing prerequisite."
        },
        {
          "id": "S37",
          "url": "https://help.sap.com/http.svc/rc/2d1f4f3d24da48d7b3d0d842e7c0ab2d/2025.1/en-US/MD4_EN.pdf",
          "version": "PDF2026-02-12, URL2025.1; 40pages",
          "method": "WEB_OPEN_FULL_PDF_TEXT",
          "claim": "PDF là SCM Consulting Solution Advanced MD04. Search preview nhắc MMBE nhưng tìm trong text mở không xác nhận; original sample candidate chưa xác minh. Trang40 cấm tái phân phối nếu chưa có express permission."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "batch",
          "label": "Batch",
          "meaning": "Lô tồn kho; trống hợp lệ với non-batch-managed material.",
          "sample": "LOT-DEMO-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "node",
          "label": "Hierarchy Node",
          "meaning": "Mã node; bắt buộc nhận diện subtotal khi cộng cây.",
          "sample": "NODE-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "is_leaf",
          "label": "Is Leaf",
          "meaning": "Cờ phân biệt dòng lá và dòng tổng; chỉ cộng một cấp hợp lệ.",
          "sample": "true",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_type",
          "label": "Stock Type",
          "meaning": "Unrestricted/QI/blocked; trạng thái vật lý khác quyền sở hữu.",
          "sample": "UNRESTRICTED",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MMBE nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Một material, chọn company/plant/sloc/batch levels; segmentation chỉ khi hệ bật chức năng liên quan.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum selected leaf quantities ↔ MM02 cùng stock type, cutoff, owner và special stock. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM03-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "plant",
          "sloc",
          "batch",
          "node",
          "is_leaf",
          "stock_type",
          "special_stock",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": null,
            "batch": null,
            "node": "PLANT",
            "is_leaf": "false",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "100",
            "uom": "EA"
          },
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "A",
            "batch": null,
            "node": "SLOC-A",
            "is_leaf": "true",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "60",
            "uom": "EA"
          },
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "B",
            "batch": null,
            "node": "SLOC-B",
            "is_leaf": "true",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "qty": "40",
            "uom": "EA"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM03",
        "variants": [
          {
            "id": "MM03-01",
            "source_transaction": "MMBE (Stock Overview: Basic List)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.docsie.io/tutorials/sap/check-the-stock-overview-with-mmbe/",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM03-01.xlsx",
            "raw_csv": "source-layout-downloads/MM03-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM03-01.flat.csv"
          },
          {
            "id": "MM03-02",
            "source_transaction": "MMBE (Stock Overview: Basic List — cuộn sang phải)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.docsie.io/tutorials/sap/check-the-stock-overview-with-mmbe/",
            "fields_read_from_source": 11,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM03-02.xlsx",
            "raw_csv": "source-layout-downloads/MM03-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM03-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM04",
      "module": "MM",
      "title": "Tồn kho tại ngày hạch toán",
      "tcode": "MB5B",
      "fiori_app": null,
      "source_ids": [
        "S26"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "plant",
        "sloc",
        "stock_type",
        "special_stock",
        "key_date"
      ],
      "columns": [
        "material",
        "plant",
        "sloc",
        "stock_type",
        "special_stock",
        "key_date",
        "opening",
        "gr_qty",
        "ir_qty",
        "closing",
        "uom"
      ],
      "selection": "Material/plant/date from-to; profile lượng: gr_qty là receipts, ir_qty dùng làm issues trong mẫu này, không phải invoice.",
      "reading": "Hồ sơ mẫu là quantity rollforward, opening/closing theo UoM; tiêu đề canonical được đổi theo report.",
      "reconciliation": "Opening quantity + receipts - issues = closing; movement scope từ MM01; kết thúc khớp snapshot cùng thời điểm.",
      "control": "Backdated postings sau ngày xuất có thể đổi số kỳ cũ; freeze file và extraction timestamp.",
      "ifrs_ref": "CUTOFF",
      "lineage": "Historical stock calculation + movements → dated quantity balance.",
      "worked_example": "Opening 50 EA + receipts 100 - issues 30 = 120 EA; đây không phải giá trị tiền.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + plant + sloc + stock_type + special_stock + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S26",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/5307b753128eb44ce10000000a174cb4.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB52, MB5T, MB5B and related stock reports."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_type",
          "label": "Stock Type",
          "meaning": "Unrestricted/QI/blocked; trạng thái vật lý khác quyền sở hữu.",
          "sample": "UNRESTRICTED",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "opening",
          "label": "Opening Balance",
          "meaning": "Lượng đầu khoảng ngày theo UoM; không là tiền.",
          "sample": "500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "Receipts Quantity",
          "meaning": "Lượng nhập thuần theo phạm vi movement; không là số invoice.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_qty",
          "label": "Issues Quantity",
          "meaning": "Lượng xuất thuần theo phạm vi movement; không là lượng hóa đơn.",
          "sample": "90",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "closing",
          "label": "Closing Balance",
          "meaning": "Lượng cuối khoảng ngày theo UoM; không là tiền.",
          "sample": "1500",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5B nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Material/plant/date from-to; profile lượng: gr_qty là receipts, ir_qty dùng làm issues trong mẫu này, không phải invoice.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Opening quantity + receipts - issues = closing; movement scope từ MM01; kết thúc khớp snapshot cùng thời điểm. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM04-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "gr_qty/ir_qty được đổi nhãn RECEIPTS/ISSUES chỉ trong mẫu quantity rollforward này.",
        "columns": [
          "material",
          "plant",
          "sloc",
          "stock_type",
          "special_stock",
          "key_date",
          "opening",
          "gr_qty",
          "ir_qty",
          "closing",
          "uom"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "stock_type": "UNRESTRICTED",
            "special_stock": "NONE",
            "key_date": "2026-09-30",
            "opening": "50",
            "gr_qty": "100",
            "ir_qty": "30",
            "closing": "120",
            "uom": "EA"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#MM04",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-MM04-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 10,
            "source_url": "https://community.sap.com/t5/enterprise-resource-planning-q-a/duplicated-entries-of-amount-in-lc-in-transaction-mb5b/qaq-p/505669",
            "source_sha256": "7352ebde4970874be772044fb19e1d0c6c0b6edfc16772ba197789ea4d3f3d89",
            "xlsx": "finance-gaps-downloads/GAP-MM04-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-MM04-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-MM04-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM05",
      "module": "MM",
      "title": "Đối chiếu giá trị tồn kho và GL",
      "tcode": "MB5L",
      "fiori_app": null,
      "source_ids": [
        "S29"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "valuation_area",
        "valuation_type",
        "gl",
        "currency"
      ],
      "columns": [
        "material",
        "valuation_area",
        "valuation_type",
        "gl",
        "qty",
        "uom",
        "stock_value",
        "currency",
        "price",
        "price_unit"
      ],
      "selection": "Company/valuation area/material/period theo khả năng report; lấy valuation class và GL mapping bổ trợ nếu thiếu.",
      "reading": "Valuated stock khác physical stock; special stock, price changes và ML closing có thể tạo bridge.",
      "reconciliation": "Sum stock_value theo valuation GL ↔ FI02/FI03 inventory balance; preserve differences, không plug.",
      "control": "MB5L source hiện legacy support; key/columns là canonical candidate. Không coi mọi stock qty × current price là historical balance.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Material valuation → inventory valuation account → GL reconciliation bridge.",
      "worked_example": "Stock subledger 1.000, GL 1.020 ⇒ điều tra manual/ML/timing 20, không sửa subledger cho bằng.",
      "existing_contract": "D19",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + valuation_area + valuation_type + gl + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S29",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/sewm/3900061781.html",
          "version": "Support content EWM/ERP; version not shown",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB5L and MB54 transaction names; legacy context, not target release validation."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_area",
          "label": "Valuation Area",
          "meaning": "Phạm vi định giá; cần ánh xạ plant/company được duyệt.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valuation_type",
          "label": "Valuation Type",
          "meaning": "Split valuation; trống chỉ hợp lệ khi profile xác nhận không dùng.",
          "sample": "DOMESTIC",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gl",
          "label": "G/L Account",
          "meaning": "Tài khoản kế toán theo chart of accounts; mã là ví dụ, không ánh xạ TT99 tự động.",
          "sample": "150000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_value",
          "label": "Stock Value",
          "meaning": "Giá trị tồn theo cơ sở giá đã khai báo; không tự bằng số dư GL.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price",
          "label": "Price",
          "meaning": "Giá cho price_unit đơn vị; không mặc định giá cho 1.",
          "sample": "10",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "price_unit",
          "label": "Price Unit",
          "meaning": "Mẫu số định giá: value = qty × price / price_unit khi phù hợp.",
          "sample": "1",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5L nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/valuation area/material/period theo khả năng report; lấy valuation class và GL mapping bổ trợ nếu thiếu.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Sum stock_value theo valuation GL ↔ FI02/FI03 inventory balance; preserve differences, không plug. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM05-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "valuation_area",
          "valuation_type",
          "gl",
          "qty",
          "uom",
          "stock_value",
          "currency",
          "price",
          "price_unit"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "valuation_area": "1100",
            "valuation_type": "DOMESTIC",
            "gl": "150000",
            "qty": "100",
            "uom": "EA",
            "stock_value": "1000",
            "currency": "USD",
            "price": "10",
            "price_unit": "1"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#MM05",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-MM05-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 9,
            "source_url": "https://community.sap.com/t5/enterprise-resource-planning-q-a/getting-multiple-lines-for-a-same-material-plant-combination-in-mb5l-report/qaq-p/11933926",
            "source_sha256": "063658b932a5121a102735122d0c3e1b2496604b7629ac5a5518f80470074fd4",
            "xlsx": "finance-gaps-downloads/GAP-MM05-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-MM05-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-MM05-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM06",
      "module": "MM",
      "title": "GR/IR list of balances",
      "tcode": "MB5S",
      "fiori_app": null,
      "source_ids": [
        "S30"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "po",
        "item",
        "currency"
      ],
      "columns": [
        "po",
        "item",
        "gr_qty",
        "ir_qty",
        "uom",
        "gr_value",
        "ir_value",
        "difference",
        "currency"
      ],
      "selection": "PO/vendor/plant theo selection có trong hệ; lưu dates và final-invoice/final-delivery scope.",
      "reading": "Quantity difference và value difference giải thích các vấn đề khác nhau; currency/UoM cần đồng nhất.",
      "reconciliation": "GR/IR values ↔ MM08 history; tie FI16 qua timing, costs, FX, clearing và opening bridge.",
      "control": "Qty khớp không có nghĩa value khớp. Chưa chứng minh MB5S và F3302 cùng population.",
      "ifrs_ref": "CUTOFF",
      "lineage": "PO history GR/IR aggregates → imbalance list → AP/MM investigation.",
      "worked_example": "GR 100 EA/1.000; IR 100 EA/1.050: qty difference 0, price/value difference -50.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item + currency. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S30",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/6cfdc7caaef746cd9c7543e32e7e87c0/2f07b753128eb44ce10000000a174cb4.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB5S compares PO GR/IR quantities and values."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "GR Quantity",
          "meaning": "Lượng nhận thuần sau reversal, theo UoM của phép đối chiếu.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_qty",
          "label": "IR Quantity",
          "meaning": "Lượng đã invoice thuần; tách quy đổi order unit/base unit.",
          "sample": "90",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_value",
          "label": "GR Value",
          "meaning": "Giá trị nhập hàng trong cùng cơ sở tiền/định giá với IR.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_value",
          "label": "IR Value",
          "meaning": "Giá trị hóa đơn; VAT/charges/FX phải tách trước đối chiếu.",
          "sample": "900",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Chênh lệch theo công thức trong hồ sơ; dấu dương không luôn là bất lợi.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5S nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "PO/vendor/plant theo selection có trong hệ; lưu dates và final-invoice/final-delivery scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "GR/IR values ↔ MM08 history; tie FI16 qua timing, costs, FX, clearing và opening bridge. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM06-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "po",
          "item",
          "gr_qty",
          "ir_qty",
          "uom",
          "gr_value",
          "ir_value",
          "difference",
          "currency"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "gr_qty": "100",
            "ir_qty": "100",
            "uom": "EA",
            "gr_value": "1000",
            "ir_value": "1050",
            "difference": "-50",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM06",
        "variants": [
          {
            "id": "MM06-01",
            "source_transaction": "MB5S (List of GR/IR Balances)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/gr-ir-analysis-in-sap-s4hana-finance",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM06-01.xlsx",
            "raw_csv": "source-layout-downloads/MM06-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM06-01.flat.csv"
          },
          {
            "id": "MM06-02",
            "source_transaction": "MB5S (List of GR/IR Balances)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://blog.sap-press.com/how-to-create-an-invoice-receipt-in-sap-s4hana",
            "fields_read_from_source": 15,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM06-02.xlsx",
            "raw_csv": "source-layout-downloads/MM06-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM06-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM07",
      "module": "MM",
      "title": "Danh sách đơn mua theo số chứng từ",
      "tcode": "ME2N",
      "fiori_app": null,
      "source_ids": [
        "S31"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "po",
        "item"
      ],
      "columns": [
        "po",
        "item",
        "partner",
        "material",
        "plant",
        "ordered_qty",
        "gr_qty",
        "open_qty",
        "uom",
        "net_value",
        "currency",
        "status"
      ],
      "selection": "Purchasing org/group/plant/vendor; selection parameter và scope-of-list; item view, không schedule view.",
      "reading": "ME2L/ME2M là lối chọn khác của họ PO, không đếm thêm để đủ số lượng. Open_qty phụ thuộc closing flags.",
      "reconciliation": "PO ordered versus net receipts MM08; open value là commitment indicator, chưa là AP liability.",
      "control": "Một PO item nhiều schedules/account assignments cần child datasets; không nhân net_value qua join 1:N.",
      "ifrs_ref": "CUTOFF",
      "lineage": "Purchasing item snapshot → PO history aggregation → open commitment view.",
      "worked_example": "Order 120, net GR 100 ⇒ residual 20 nếu chưa final-delivery; flag đóng có thể làm open khác.",
      "existing_contract": "D13",
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S31",
          "url": "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME2N and ME2L/ME2M alternatives, ME5A, ME3N; do not count selection variants as new reports."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ordered_qty",
          "label": "Ordered Quantity",
          "meaning": "Lượng đặt trong đơn vị đơn hàng; xử lý deletion/final-delivery riêng.",
          "sample": "120",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "GR Quantity",
          "meaning": "Lượng nhận thuần sau reversal, theo UoM của phép đối chiếu.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "open_qty",
          "label": "Open Quantity",
          "meaning": "Lượng còn mở theo quy tắc report; có thể khác ordered - GR do closing/returns.",
          "sample": "20",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME2N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Purchasing org/group/plant/vendor; selection parameter và scope-of-list; item view, không schedule view.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "PO ordered versus net receipts MM08; open value là commitment indicator, chưa là AP liability. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM07-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "po",
          "item",
          "partner",
          "material",
          "plant",
          "ordered_qty",
          "gr_qty",
          "open_qty",
          "uom",
          "net_value",
          "currency",
          "status"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "partner": "0000100001",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "ordered_qty": "120",
            "gr_qty": "100",
            "open_qty": "20",
            "uom": "EA",
            "net_value": "1200",
            "currency": "USD",
            "status": "OPEN"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM07",
        "variants": [
          {
            "id": "MM07-01",
            "source_transaction": "ME2N (Purchasing Documents per Document Number, ALV)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://finance.utoronto.ca/wp-content/uploads/2015/11/Display-List-of-Purchasing-Documents-Converted.pdf",
            "fields_read_from_source": 16,
            "documented_fields": 6,
            "xlsx": "source-layout-downloads/MM07-01.xlsx",
            "raw_csv": "source-layout-downloads/MM07-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM07-01.flat.csv"
          },
          {
            "id": "MM07-02",
            "source_transaction": "ME2N (Purchasing Documents by Document Number, danh sách cổ điển)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.docsie.io/tutorials/sap/check-the-stock-overview-with-mmbe/",
            "fields_read_from_source": 29,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM07-02.xlsx",
            "raw_csv": "source-layout-downloads/MM07-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM07-02.flat.csv"
          },
          {
            "id": "MM07-03",
            "source_transaction": "ME80FN (Purchasing Documents — Header/item data, danh mục F = PO)",
            "classification": "PROXY_ME80FN",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM07-03.xlsx",
            "raw_csv": "source-layout-downloads/MM07-03.layout.csv",
            "flat_csv": "source-layout-downloads/MM07-03.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM08",
      "module": "MM",
      "title": "Lịch sử PO — GR, IR, reversal",
      "tcode": "ME80FN",
      "fiori_app": null,
      "source_ids": [
        "S32"
      ],
      "kind": "NATIVE_VIEW",
      "keys": [
        "po",
        "item",
        "event",
        "year",
        "doc",
        "line"
      ],
      "columns": [
        "po",
        "item",
        "event",
        "year",
        "doc",
        "line",
        "date",
        "qty",
        "uom",
        "amount",
        "currency",
        "accounting_ref"
      ],
      "selection": "Chọn Change View → Purchase Order History; cùng PO population MM07; lấy năm/doc/item và event.",
      "reading": "Header/item, schedule và history có grain khác; không áp extractor field list như ALV thực.",
      "reconciliation": "Group signed GR/IR events theo PO/item/currency ↔ MM06; link material/FI bằng ref xác nhận.",
      "control": "Giữ delivery costs, returns và subsequent debit/credit riêng; không dedup chỉ PO/item.",
      "ifrs_ref": "CUTOFF",
      "lineage": "PO history entries → event/sign normalization → GR/IR bridge.",
      "worked_example": "Một PO có 2 receipts 600+400 và invoice 900 ⇒ GR 1.000, IR 900, chưa invoice 100.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item + event + year + doc + line. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S32",
          "url": "https://help.sap.com/docs/BI_CONTENT_757/45e4eda3753c458ead20c81f77c55921/eb487053bbe77c1ee10000000a174cb4.html?version=7.57.20",
          "version": "BI Content 7.57 SP20 / legacy ERP source",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME80FN has header/item, schedule and PO-history views; no claim BW extractor schema equals ALV."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "event",
          "label": "History Event",
          "meaning": "Loại GR/IR/reversal/delivery cost trong PO history; có thể nhiều event cùng doc.",
          "sample": "GR",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "doc",
          "label": "Accounting Document",
          "meaning": "Mã chứng từ; cần company và year để định danh.",
          "sample": "1900000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "line",
          "label": "Line Item",
          "meaning": "Dòng trong đúng view; FI entry line và ledger journal line không tự đồng nhất.",
          "sample": "001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME80FN nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Chọn Change View → Purchase Order History; cùng PO population MM07; lấy năm/doc/item và event.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Group signed GR/IR events theo PO/item/currency ↔ MM06; link material/FI bằng ref xác nhận. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM08-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "po",
          "item",
          "event",
          "year",
          "doc",
          "line",
          "date",
          "qty",
          "uom",
          "amount",
          "currency",
          "accounting_ref"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "event": "GR",
            "year": "2026",
            "doc": "5000000001",
            "line": "001",
            "date": "2026-09-15",
            "qty": "60",
            "uom": "EA",
            "amount": "600",
            "currency": "USD",
            "accounting_ref": "1000/2026/4900000001/001"
          },
          {
            "po": "4500000001",
            "item": "00010",
            "event": "GR",
            "year": "2026",
            "doc": "5000000002",
            "line": "001",
            "date": "2026-09-15",
            "qty": "40",
            "uom": "EA",
            "amount": "400",
            "currency": "USD",
            "accounting_ref": "1000/2026/4900000001/001"
          },
          {
            "po": "4500000001",
            "item": "00010",
            "event": "IR",
            "year": "2026",
            "doc": "5100000001",
            "line": "001",
            "date": "2026-09-15",
            "qty": "90",
            "uom": "EA",
            "amount": "900",
            "currency": "USD",
            "accounting_ref": "1000/2026/4900000001/001"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM08",
        "variants": [
          {
            "id": "MM08-01",
            "source_transaction": "ME23N — PO History (màn hình 'PO History for Purchase Order … Item …'; gần với ME80FN view lịch sử)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://blog.sap-press.com/how-to-create-an-invoice-receipt-in-sap-s4hana",
            "fields_read_from_source": 19,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM08-01.xlsx",
            "raw_csv": "source-layout-downloads/MM08-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM08-01.flat.csv"
          },
          {
            "id": "MM08-02",
            "source_transaction": "ME23N — tab Purchase Order History (mở từ ME80FN)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 19,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM08-02.xlsx",
            "raw_csv": "source-layout-downloads/MM08-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM08-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM09",
      "module": "MM",
      "title": "Danh sách đề nghị mua",
      "tcode": "ME5A",
      "fiori_app": null,
      "source_ids": [
        "S31"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "request",
        "item"
      ],
      "columns": [
        "request",
        "item",
        "material",
        "plant",
        "qty",
        "uom",
        "net_value",
        "currency",
        "status",
        "po"
      ],
      "selection": "Plant/requester/purchasing group/date; chọn release/deletion/assigned-to-PO scope.",
      "reading": "PR là yêu cầu, chưa phải PO hoặc khoản nợ. Expected value phụ thuộc valuation input.",
      "reconciliation": "PR referenced quantity ↔ PO item bridge; chỉ commitments được duyệt vào forecast.",
      "control": "Không cộng cả PR đã chuyển PO và PO thành hai commitments; kiểm tra partial conversion.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Purchase requisition → approval/conversion reference → procurement forecast.",
      "worked_example": "PR 100 đã chuyển PO 60 thì residual 40; forecast không cộng PR100 + PO60.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: request + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S31",
          "url": "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME2N and ME2L/ME2M alternatives, ME5A, ME3N; do not count selection variants as new reports."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "request",
          "label": "Purchase Requisition",
          "meaning": "Đề nghị mua; chưa phải công nợ hoặc PO.",
          "sample": "10000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME5A nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/requester/purchasing group/date; chọn release/deletion/assigned-to-PO scope.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "PR referenced quantity ↔ PO item bridge; chỉ commitments được duyệt vào forecast. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM09-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "PO conversion60 là giả định trong bài tập, không suy ra từ mã PO có mặt.",
        "columns": [
          "request",
          "item",
          "material",
          "plant",
          "qty",
          "uom",
          "net_value",
          "currency",
          "status",
          "po"
        ],
        "rows": [
          {
            "request": "10000001",
            "item": "00010",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "qty": "100",
            "uom": "EA",
            "net_value": "1000",
            "currency": "USD",
            "status": "PARTIALLY_CONVERTED",
            "po": "4500000001"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM09",
        "variants": [
          {
            "id": "MM09-01",
            "source_transaction": "ME5A (List Display of Purchase Requisitions — ALV, đã thêm cột PO)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/tutorial-sap-transacao-me5a-lista-de-requisicao-de-compras/",
            "fields_read_from_source": 26,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM09-01.xlsx",
            "raw_csv": "source-layout-downloads/MM09-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM09-01.flat.csv"
          },
          {
            "id": "MM09-02",
            "source_transaction": "ME5A (List Display of Purchase Requisitions — ALV mặc định)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://freirecruz.com/tutorial-sap-transacao-me5a-lista-de-requisicao-de-compras/",
            "fields_read_from_source": 26,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM09-02.xlsx",
            "raw_csv": "source-layout-downloads/MM09-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM09-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM10",
      "module": "MM",
      "title": "Danh sách hợp đồng khung mua hàng",
      "tcode": "ME3N",
      "fiori_app": null,
      "source_ids": [
        "S31"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "agreement",
        "item"
      ],
      "columns": [
        "agreement",
        "item",
        "partner",
        "material",
        "valid_from",
        "valid_to",
        "qty",
        "uom",
        "net_value",
        "currency"
      ],
      "selection": "Agreement/vendor/purchasing org; scope contracts versus scheduling agreements ghi rõ.",
      "reading": "Target value/quantity không bằng liability. Release orders và validity quyết định remaining capacity.",
      "reconciliation": "Approved release PO values ↔ agreement utilization; agreements không cộng trực tiếp vào FI AP.",
      "control": "Không suy purchase obligation chỉ từ target value; kiểm tra minimum commitments và điều khoản hợp đồng.",
      "ifrs_ref": "MANAGEMENT",
      "lineage": "Outline agreement → release-order references → utilization/expiry analysis.",
      "worked_example": "Contract ceiling 1.000, releases 600 ⇒ unused ceiling 400, chưa có nghĩa phải trả 400.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: agreement + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S31",
          "url": "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html",
          "version": "ERP 6.0 EHP8 SP25",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "ME2N and ME2L/ME2M alternatives, ME5A, ME3N; do not count selection variants as new reports."
        }
      ],
      "ifrs_policy": {
        "title": "Kế hoạch và cam kết quản trị",
        "sources": [
          "S40"
        ],
        "text": "Plan, PR, PO và contract ceiling là thông tin quản trị; báo cáo này không quyết định bút toán IFRS. Khi phát sinh nhận hàng/dịch vụ và quyền/nghĩa vụ mới đánh giá recognition trên chứng cứ riêng. Chênh lệch actual-plan cần phân tích output, mix, price và thời gian, không tự gọi là lãng phí."
      },
      "column_definitions": [
        {
          "id": "agreement",
          "label": "Outline Agreement",
          "meaning": "Hợp đồng khung; không đồng nhất cam kết và nợ phải trả.",
          "sample": "4600000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valid_from",
          "label": "Valid From",
          "meaning": "Ngày bắt đầu hiệu lực; không dùng estimate tương lai cho kỳ quá khứ.",
          "sample": "2026-09-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "valid_to",
          "label": "Valid To",
          "meaning": "Hạn hợp đồng; cần xem phụ lục/điều khoản gia hạn.",
          "sample": "2026-12-31",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở ME3N nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Agreement/vendor/purchasing org; scope contracts versus scheduling agreements ghi rõ.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Approved release PO values ↔ agreement utilization; agreements không cộng trực tiếp vào FI AP. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM10-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Release600 là giả định bài tập, cần dataset child thực trước tính utilization.",
        "columns": [
          "agreement",
          "item",
          "partner",
          "material",
          "valid_from",
          "valid_to",
          "qty",
          "uom",
          "net_value",
          "currency"
        ],
        "rows": [
          {
            "agreement": "4600000001",
            "item": "00010",
            "partner": "0000100001",
            "material": "FG-CONNECTOR-01",
            "valid_from": "2026-09-01",
            "valid_to": "2026-12-31",
            "qty": "100",
            "uom": "EA",
            "net_value": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM10",
        "variants": [
          {
            "id": "MM10-01",
            "source_transaction": "ME80FN (Purchasing Documents — danh mục K = Contract)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM10-01.xlsx",
            "raw_csv": "source-layout-downloads/MM10-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM10-01.flat.csv"
          },
          {
            "id": "MM10-02",
            "source_transaction": "ME80FN (Purchasing Documents — danh mục L = Scheduling Agreement)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://freirecruz.com/me80fn-listagem-de-documentos-de-compras/",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM10-02.xlsx",
            "raw_csv": "source-layout-downloads/MM10-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM10-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM11",
      "module": "MM",
      "title": "Danh sách logistics invoice",
      "tcode": "MIR5",
      "fiori_app": null,
      "source_ids": [
        "S33"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "year",
        "invoice"
      ],
      "columns": [
        "year",
        "invoice",
        "company",
        "partner",
        "date",
        "net_value",
        "tax",
        "currency",
        "status",
        "accounting_ref"
      ],
      "selection": "Company/vendor/invoice/posting-date/status; xác minh header-level export trước lấy item allocation.",
      "reading": "Logistics invoice number khác FI doc; gross, net và tax phải phân biệt.",
      "reconciliation": "Net + tax ↔ gross AP invoice theo fixture; mapping FI ref ↔ FI06 và PO history MM08.",
      "control": "Parked/canceled/reversed không xử lý như posted invoices; MIR5 source legacy chỉ xác nhận tên.",
      "ifrs_ref": "CUTOFF",
      "lineage": "LIV invoice header → accounting-document reference → AP and PO-history reconciliation.",
      "worked_example": "Net 1.000 + recoverable tax 100 = AP gross 1.100; không cộng tax vào inventory mặc định.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + invoice. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S33",
          "url": "https://help.sap.com/doc/7a272e0fb75e4a5e85920122184629b3/1.0/en-us/ariba_se_admiin_guide.pdf",
          "version": "ERP connectivity Ariba SP13",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MIR5/MIR6 invoice lists mentioned; insufficient for S/4 release certification."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "invoice",
          "label": "Invoice Document",
          "meaning": "Chứng từ logistics invoice; cần năm; khác FI accounting document.",
          "sample": "5100000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "date",
          "label": "Posting Date",
          "meaning": "Ngày vào sổ; dùng cutoff kế toán thay cho ngày tạo file.",
          "sample": "2026-09-15",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "net_value",
          "label": "Net Value",
          "meaning": "Giá trị chưa thuế theo currency của PO; không đồng nhất accrual.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "tax",
          "label": "Tax Amount",
          "meaning": "Thuế theo chứng từ; khả năng thu hồi thuế cần đánh giá riêng, không tự vốn hóa.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MIR5 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Company/vendor/invoice/posting-date/status; xác minh header-level export trước lấy item allocation.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net + tax ↔ gross AP invoice theo fixture; mapping FI ref ↔ FI06 và PO history MM08. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM11-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "year",
          "invoice",
          "company",
          "partner",
          "date",
          "net_value",
          "tax",
          "currency",
          "status",
          "accounting_ref"
        ],
        "rows": [
          {
            "year": "2026",
            "invoice": "5100000001",
            "company": "1000",
            "partner": "0000100001",
            "date": "2026-09-15",
            "net_value": "1000",
            "tax": "100",
            "currency": "USD",
            "status": "POSTED",
            "accounting_ref": "1000/2026/4900000001/001"
          }
        ]
      },
      "finance_gap_examples": {
        "viewer": "finance-gaps.html#MM11",
        "native_export": false,
        "target_release": "UNKNOWN",
        "full_catalog_verified": false,
        "variants": [
          {
            "id": "GAP-MM11-01",
            "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
            "columns": 17,
            "source_url": "https://www.learntosap.com/ficotutoriallineitemandinvlist.html",
            "source_sha256": "e0771a5d42d3c5652ad7078a35cf35b0ae26755efa2d8029c6698d301342586f",
            "xlsx": "finance-gaps-downloads/GAP-MM11-01.xlsx",
            "raw_csv": "finance-gaps-downloads/GAP-MM11-01.layout.csv",
            "flat_csv": "finance-gaps-downloads/GAP-MM11-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM12",
      "module": "MM",
      "title": "Hóa đơn bị khóa — danh sách được cung cấp",
      "tcode": "MRBR",
      "fiori_app": "MRBR",
      "source_ids": [
        "S34"
      ],
      "kind": "EXECUTION_OUTPUT",
      "keys": [
        "year",
        "invoice",
        "item",
        "block"
      ],
      "columns": [
        "year",
        "invoice",
        "item",
        "company",
        "partner",
        "block",
        "amount",
        "currency",
        "status"
      ],
      "selection": "Dùng danh sách blocked invoices do AP cung cấp; giữ block reason/selection; không gọi automatic release.",
      "reading": "Invoice blocked payment vẫn có thể đã posted liability. Một invoice có nhiều block reasons.",
      "reconciliation": "Distinct invoice amount ↔ MM11/FI06 payment blocks; reason counts có thể lớn hơn invoice count.",
      "control": "Không sum invoice gross lặp trên nhiều reason/item. Quyền release tách khỏi người rà soát reporting.",
      "ifrs_ref": "CUTOFF",
      "lineage": "LIV tolerance/block evaluation → blocked list → controlled AP resolution.",
      "worked_example": "Invoice 1.100 có price và qty block vẫn là nợ 1.100, không thành 2.200.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "SAME_BUSINESS_PURPOSE_NOT_CERTIFIED_1_TO_1",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + invoice + item + block. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S34",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/74497657a11a0522e10000000a44147b.html?locale=en-US",
          "version": "Public Cloud 2608",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "App ID MRBR; can release invoices, use supplied display evidence for library training."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "invoice",
          "label": "Invoice Document",
          "meaning": "Chứng từ logistics invoice; cần năm; khác FI accounting document.",
          "sample": "5100000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "company",
          "label": "Company Code",
          "meaning": "Pháp nhân kế toán; không cộng giữa công ty nếu chưa xử lý liên công ty.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "block",
          "label": "Block Reason",
          "meaning": "Lý do khóa invoice/thanh toán; khác trạng thái đã ghi nhận nợ.",
          "sample": "PRICE_VARIANCE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "amount",
          "label": "Signed Amount",
          "meaning": "Số tiền có dấu trong tiền đã khai báo; dương Nợ, âm Có cho mẫu FI; CO dương chi phí, âm credit. Quy tắc nguồn phải được duyệt.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở kết quả/log đã được operator cung cấp; không tạo, execute hoặc post một run mới.",
        "Dùng danh sách blocked invoices do AP cung cấp; giữ block reason/selection; không gọi automatic release.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Distinct invoice amount ↔ MM11/FI06 payment blocks; reason counts có thể lớn hơn invoice count. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM12-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Hai block reasons lặp cùng invoice amount; tổng liability dùng distinct invoice, không sum hai rows.",
        "columns": [
          "year",
          "invoice",
          "item",
          "company",
          "partner",
          "block",
          "amount",
          "currency",
          "status"
        ],
        "rows": [
          {
            "year": "2026",
            "invoice": "5100000001",
            "item": "00010",
            "company": "1000",
            "partner": "0000100001",
            "block": "PRICE_VARIANCE",
            "amount": "1100",
            "currency": "USD",
            "status": "BLOCKED"
          },
          {
            "year": "2026",
            "invoice": "5100000001",
            "item": "00010",
            "company": "1000",
            "partner": "0000100001",
            "block": "QTY_VARIANCE",
            "amount": "1100",
            "currency": "USD",
            "status": "BLOCKED"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM12",
        "variants": [
          {
            "id": "MM12-01",
            "source_transaction": "ZMRBR (bản sao SCEIS của MRBR — màn hình 'Release Blocked Invoices')",
            "classification": "CUSTOM_SOURCE_LAYOUT",
            "source_url": "http://sceis.sc.gov/documents/AP330_Accounts_Payable_and_Agency_Blocked_Invoice_Reconciler_Course_Guide--clickable.pdf",
            "fields_read_from_source": 16,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM12-01.xlsx",
            "raw_csv": "source-layout-downloads/MM12-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM12-01.flat.csv"
          },
          {
            "id": "MM12-02",
            "source_transaction": "MRBR (Release Blocked Invoices)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://www.guru99.com/how-to-release-an-invoice.html",
            "fields_read_from_source": 13,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM12-02.xlsx",
            "raw_csv": "source-layout-downloads/MM12-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM12-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM13",
      "module": "MM",
      "title": "Tồn kho ký gửi nhà cung cấp",
      "tcode": "MB54",
      "fiori_app": null,
      "source_ids": [
        "S29"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "partner",
        "material",
        "plant",
        "sloc",
        "batch"
      ],
      "columns": [
        "partner",
        "material",
        "plant",
        "sloc",
        "batch",
        "special_stock",
        "qty",
        "uom",
        "owner"
      ],
      "selection": "Vendor/material/plant/storage; stock special K khi profile xác nhận; snapshot thời điểm thống nhất.",
      "reading": "Hàng nằm trong nhà máy không tự thuộc sở hữu doanh nghiệp. Xem hợp đồng và withdrawal event.",
      "reconciliation": "Qty ↔ physical third-party stock; withdrawals ↔ liability/settlement theo hợp đồng và source evidence.",
      "control": "Không cộng vendor-owned consignment vào own-inventory valuation; quyền sở hữu không suy từ location.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Supplier consignment stock → ownership classification → withdrawal/settlement bridge.",
      "worked_example": "Kho chứa 100 EA ký gửi của vendor: physical 100, own stock có thể 0 trước khi nhận quyền theo hợp đồng.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "LEGACY_REFERENCE_ONLY_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: partner + material + plant + sloc + batch. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S29",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/sewm/3900061781.html",
          "version": "Support content EWM/ERP; version not shown",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB5L and MB54 transaction names; legacy context, not target release validation."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "partner",
          "label": "Supplier / Customer",
          "meaning": "Mã đối tác giữ zero đầu; vai trò supplier/customer theo hồ sơ báo cáo.",
          "sample": "0000100001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "batch",
          "label": "Batch",
          "meaning": "Lô tồn kho; trống hợp lệ với non-batch-managed material.",
          "sample": "LOT-DEMO-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "special_stock",
          "label": "Special Stock",
          "meaning": "Loại tồn đặc biệt; E/K/O... phải theo profile, không gộp với stock_type.",
          "sample": "NONE",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "owner",
          "label": "Owner",
          "meaning": "Chủ sở hữu/đối tác theo hợp đồng; trường bổ trợ có thể không có trong export.",
          "sample": "SAVA_DEMO",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB54 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Vendor/material/plant/storage; stock special K khi profile xác nhận; snapshot thời điểm thống nhất.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Qty ↔ physical third-party stock; withdrawals ↔ liability/settlement theo hợp đồng và source evidence. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM13-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "partner",
          "material",
          "plant",
          "sloc",
          "batch",
          "special_stock",
          "qty",
          "uom",
          "owner"
        ],
        "rows": [
          {
            "partner": "0000100001",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "batch": "LOT-DEMO-01",
            "special_stock": "K",
            "qty": "100",
            "uom": "EA",
            "owner": "SUPPLIER_DEMO"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM13",
        "variants": [
          {
            "id": "MM13-01",
            "source_transaction": "MMBE (Stock Overview — dòng Vendor Consignment)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://www.guru99.com/special-stock-and-special-procurement.html",
            "fields_read_from_source": 9,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM13-01.xlsx",
            "raw_csv": "source-layout-downloads/MM13-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM13-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM14",
      "module": "MM",
      "title": "Hàng đang chuyển giữa nhà máy",
      "tcode": "MB5T",
      "fiori_app": null,
      "source_ids": [
        "S26"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "po",
        "item",
        "from_plant",
        "to_plant"
      ],
      "columns": [
        "po",
        "item",
        "material",
        "from_plant",
        "to_plant",
        "gr_qty",
        "ir_qty",
        "qty",
        "uom"
      ],
      "selection": "Supplying/receiving plant và STO; snapshot cutoff; phân biệt valuated/non-valuated transit.",
      "reading": "Mẫu gr_qty = đã xuất, ir_qty = đã nhận; qty = transit residual. Không dùng invoice meaning tại đây.",
      "reconciliation": "Net GI sending - net GR receiving = transit; tie GL chỉ theo ownership/valuation scenario.",
      "control": "Không tính cùng hàng vào cả sending stock và transit sau GI. Intercompany cần bridge riêng.",
      "ifrs_ref": "CUTOFF",
      "lineage": "STO → outbound GI and inbound GR → stock-in-transit balance.",
      "worked_example": "Xuất 100 EA, nhận 90 EA ⇒ 10 EA transit; không tự định giá nếu thiếu valuation/control evidence.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: po + item + from_plant + to_plant. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S26",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/5307b753128eb44ce10000000a174cb4.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MB52, MB5T, MB5B and related stock reports."
        }
      ],
      "ifrs_policy": {
        "title": "Cutoff mua hàng và tồn kho",
        "sources": [
          "S40",
          "S43"
        ],
        "text": "Reconciliation hỗ trợ kiểm tra completeness/cutoff, không tự tạo quy tắc IFRS. Đọc hợp đồng, bằng chứng nhận hàng, điều kiện chuyển quyền, invoice, freight và tax recovery. GR/IR có số dư chưa đồng nghĩa cần accrual mới; trước tiên kiểm tra nợ đã ghi nhận và các chênh lệch thời điểm/FX. PO, PR và unused contract ceiling không tự là liability."
      },
      "column_definitions": [
        {
          "id": "po",
          "label": "Purchase Order",
          "meaning": "Số đơn mua; giữ zero đầu và source namespace.",
          "sample": "4500000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "from_plant",
          "label": "Supplying Plant",
          "meaning": "Plant xuất chuyển kho; để đối chiếu GI với GR plant nhận.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "to_plant",
          "label": "Receiving Plant",
          "meaning": "Plant nhận chuyển kho; cần phân biệt cùng/khác company.",
          "sample": "1200",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "gr_qty",
          "label": "Issued Quantity",
          "meaning": "Lượng GI thuần của sending plant.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "ir_qty",
          "label": "Received Quantity",
          "meaning": "Lượng GR thuần của receiving plant.",
          "sample": "90",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MB5T nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Supplying/receiving plant và STO; snapshot cutoff; phân biệt valuated/non-valuated transit.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Net GI sending - net GR receiving = transit; tie GL chỉ theo ownership/valuation scenario. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM14-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "gr_qty/ir_qty là nhãn canonical nội bộ cho GI/GR trong mẫu, không phải technical alias SAP.",
        "columns": [
          "po",
          "item",
          "material",
          "from_plant",
          "to_plant",
          "gr_qty",
          "ir_qty",
          "qty",
          "uom"
        ],
        "rows": [
          {
            "po": "4500000001",
            "item": "00010",
            "material": "FG-CONNECTOR-01",
            "from_plant": "1100",
            "to_plant": "1200",
            "gr_qty": "100",
            "ir_qty": "90",
            "qty": "10",
            "uom": "EA"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM14",
        "variants": [
          {
            "id": "MM14-01",
            "source_transaction": "MB5T (Display Stock in Transit)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://connect.saplinked.in/read-blog/7_intracompany-sto.html",
            "fields_read_from_source": 18,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM14-01.xlsx",
            "raw_csv": "source-layout-downloads/MM14-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM14-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM15",
      "module": "MM",
      "title": "Vật tư chậm luân chuyển/không tiêu thụ",
      "tcode": null,
      "fiori_app": "F2137",
      "source_ids": [
        "S35",
        "S40"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "material",
        "plant",
        "key_date"
      ],
      "columns": [
        "material",
        "plant",
        "key_date",
        "last_consumption",
        "qty",
        "consumption",
        "uom",
        "stock_value",
        "currency"
      ],
      "selection": "Plant/material/reporting date/lookback và consumption group; lưu price basis và permissions.",
      "reading": "No consumption khác no goods movement. Theo nguồn này value dùng current price dù reporting date khác.",
      "reconciliation": "Qty ↔ MM02/04 đúng cutoff; impairment assessment cần NRV evidence bổ sung, không bằng slow-stock value.",
      "control": "Không tự provision 100% cho stock >180 ngày; zero financial value có thể do quyền.",
      "ifrs_ref": "NRV",
      "lineage": "Stock + consumption group/time window → slow-moving signal → separate NRV review.",
      "worked_example": "100 EA không dùng 180 ngày là cờ rà soát; nếu còn firm order có lợi nhuận, chưa kết luận write-down.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "APP_IDENTIFIED_NO_TCODE_EQUIVALENCE_CLAIM",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: material + plant + key_date. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S35",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/91b21005dded4984bcccf4a69ae1300c/276b1b645ec64e808e430b363d6efd6b.html",
          "version": "S/4HANA on-premise; release header not captured",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "F2137 uses consumption group and current price per this page; zero value may reflect authorization."
        },
        {
          "id": "S40",
          "url": "https://www.ifrs.org/issued-standards/list-of-standards/ias-2-inventories/",
          "version": "Current overview consulted 2026-10-08",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "Inventory cost and lower-of-cost/NRV principles."
        }
      ],
      "ifrs_policy": {
        "title": "Chậm luân chuyển và NRV",
        "sources": [
          "S40"
        ],
        "text": "Định giá tồn kho cần xem mức thấp hơn giữa cost và NRV. NRV dùng giá bán ước tính trừ chi phí hoàn thành và bán hàng cần thiết. Tồn không tiêu thụ là tín hiệu thu thập thêm demand/quality/selling-price evidence; không phải công thức dự phòng tự động theo tuổi. Dữ liệu kế toán và dữ liệu vật lý có thể có phạm vi sở hữu khác nhau."
      },
      "column_definitions": [
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "key_date",
          "label": "Key Date",
          "meaning": "Ngày chốt số dư/tuổi nợ, không phải ngày tải báo cáo.",
          "sample": "2026-09-30",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "last_consumption",
          "label": "Last Consumption Date",
          "meaning": "Ngày consumption theo movement group; không nhất thiết ngày receipt cuối.",
          "sample": "2026-03-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "qty",
          "label": "Quantity",
          "meaning": "Lượng theo UoM; cộng được chỉ trong cùng đơn vị và vật liệu/phạm vi thích hợp.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "consumption",
          "label": "Consumption Quantity",
          "meaning": "Lượng tiêu thụ trong khoảng phân tích với định nghĩa movement được lưu.",
          "sample": "0",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "stock_value",
          "label": "Stock Value",
          "meaning": "Giá trị tồn theo cơ sở giá đã khai báo; không tự bằng số dư GL.",
          "sample": "1000",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "currency",
          "label": "Currency",
          "meaning": "Đồng tiền của mọi số tiền trong dòng; tách từng đồng tiền trước cộng.",
          "sample": "USD",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở F2137 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/material/reporting date/lookback và consumption group; lưu price basis và permissions.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Qty ↔ MM02/04 đúng cutoff; impairment assessment cần NRV evidence bổ sung, không bằng slow-stock value. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM15-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "material",
          "plant",
          "key_date",
          "last_consumption",
          "qty",
          "consumption",
          "uom",
          "stock_value",
          "currency"
        ],
        "rows": [
          {
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "key_date": "2026-09-30",
            "last_consumption": "2026-03-01",
            "qty": "100",
            "consumption": "0",
            "uom": "EA",
            "stock_value": "1000",
            "currency": "USD"
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM15",
        "variants": [
          {
            "id": "MM15-01",
            "source_transaction": "MC46 (Key Figure: Slow-Moving Items — chế độ Double-line)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM15-01.xlsx",
            "raw_csv": "source-layout-downloads/MM15-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM15-01.flat.csv"
          },
          {
            "id": "MM15-02",
            "source_transaction": "MC50 (Key Figure: Dead Stock)",
            "classification": "PROXY_SOURCE_LAYOUT",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 12,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM15-02.xlsx",
            "raw_csv": "source-layout-downloads/MM15-02.layout.csv",
            "flat_csv": "source-layout-downloads/MM15-02.flat.csv"
          }
        ]
      }
    },
    {
      "id": "MM16",
      "module": "MM",
      "title": "Danh sách chênh lệch kiểm kê",
      "tcode": "MI20",
      "fiori_app": null,
      "source_ids": [
        "S36"
      ],
      "kind": "NATIVE_REPORT",
      "keys": [
        "year",
        "count_doc",
        "item"
      ],
      "columns": [
        "year",
        "count_doc",
        "item",
        "material",
        "plant",
        "sloc",
        "book_qty",
        "counted_qty",
        "difference",
        "uom",
        "status",
        "accounting_ref"
      ],
      "selection": "Plant/count-document/year/date; giữ book-stock timestamp và trạng thái posted/unposted/recount.",
      "reading": "Difference = counted - book trong mẫu; zero-count phải có xác nhận, blank chưa phải 0.",
      "reconciliation": "Approved differences ↔ MM01 inventory-adjustment movements và FI02 valuation postings sau khi đã post.",
      "control": "Tách người đếm/người duyệt; giữ recount lịch sử. MI20 list không chứng minh adjustment đã được ghi sổ.",
      "ifrs_ref": "INVENTORY_COST",
      "lineage": "Physical inventory book snapshot + count → difference list → approved adjustment refs.",
      "worked_example": "Sổ 100, đếm 98 ⇒ -2 EA; chỉ sau approval/posting mới đối với GL theo giá trị phù hợp.",
      "existing_contract": null,
      "status": "AUTHORED_RESEARCH_PENDING_TARGET_AND_SME",
      "target_system": {
        "edition": null,
        "release": null,
        "status": "USER_CONFIRMED_UNKNOWN_2026-10-08"
      },
      "mapping_status": "SAP_DOCUMENTED_CONTEXT_TARGET_PENDING",
      "tcode_fiori_relation": "NO_FIORI_MAPPING_CLAIMED",
      "owner": "Inventory Accountant / Purchasing & Warehouse key user",
      "frequency": "Hàng ngày và snapshot khóa sổ",
      "grain": "Một dòng cho tổ hợp: year + count_doc + item. Thêm source_system/client; snapshot lưu dataset_id riêng.",
      "source_evidence": [
        {
          "id": "S36",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/8a57feade137489098f59374c06f1e0e/4407b753128eb44ce10000000a174cb4.html",
          "version": "2025 FPS01",
          "method": "WEB_SEARCH_EXTRACT",
          "claim": "MI20 prints differences; separate posting processes."
        }
      ],
      "ifrs_policy": {
        "title": "Giá thành và tồn kho theo IAS 2",
        "sources": [
          "S40",
          "S41"
        ],
        "text": "Đọc IAS2.10–16,21: phân biệt chi phí đủ điều kiện đưa hàng về địa điểm/trạng thái hiện tại, hao phí bất thường và chi phí bán hàng. Standard costing cần gần với cost và được rà soát; S/V hoặc bật Material Ledger không tự bảo đảm điều đó. Cần đánh giá normal capacity cho overhead; công thức actual cost rate SAP không tự thay chính sách IFRS. Các tình huống trong hồ sơ là phân tích do SAVA biên soạn, chờ SME duyệt; không là trích chuẩn mực."
      },
      "column_definitions": [
        {
          "id": "year",
          "label": "Fiscal Year",
          "meaning": "Năm tài chính theo fiscal-year variant, có thể khác năm dương lịch.",
          "sample": "2026",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "count_doc",
          "label": "Physical Inventory Document",
          "meaning": "Chứng từ kiểm kê; khóa kèm fiscal year và item.",
          "sample": "100000001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "item",
          "label": "Item",
          "meaning": "Dòng chứng từ nghiệp vụ; không đồng nhất với FI line.",
          "sample": "00010",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "material",
          "label": "Material",
          "meaning": "Mã vật tư/thành phẩm; không phải cost-estimate identity.",
          "sample": "FG-CONNECTOR-01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "plant",
          "label": "Plant",
          "meaning": "Nhà máy; có thể nhiều plant trong một valuation/company scope.",
          "sample": "1100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "sloc",
          "label": "Storage Location",
          "meaning": "Kho trong plant; không tự coi là valuation area.",
          "sample": "RM01",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "book_qty",
          "label": "Book Quantity",
          "meaning": "Lượng sổ tại mốc kiểm kê, xét freeze/backpost đúng quy trình.",
          "sample": "100",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "counted_qty",
          "label": "Counted Quantity",
          "meaning": "Lượng kiểm đếm đã phê duyệt; zero-count cần flag, không thay blank bằng 0.",
          "sample": "98",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "difference",
          "label": "Difference",
          "meaning": "Derived: counted_qty - book_qty, cùng UoM; chưa là giá trị posting.",
          "sample": "8",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "uom",
          "label": "Unit of Measure",
          "meaning": "Đơn vị đo; mã EA minh họa, không trộn với KG/H.",
          "sample": "EA",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "status",
          "label": "Status",
          "meaning": "Trạng thái theo profile nguồn; test/success không chứng minh đã vào GL.",
          "sample": "TEST_RESULT",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        },
        {
          "id": "accounting_ref",
          "label": "Accounting Reference",
          "meaning": "Liên kết chứng từ FI có company/year/document/line; null là chưa có bằng chứng.",
          "sample": "1000/2026/4900000001/001",
          "technical_name": null,
          "source_status": "CANONICAL_TEACHING_NOT_SAP_FIELD_CATALOG"
        }
      ],
      "run_steps": [
        "Xác nhận edition/release, quyền đọc, view và scope với key user; chưa có cấu hình thì chỉ dùng mẫu đào tạo.",
        "Mở MI20 nếu có trong hệ; hai lối truy cập cần kiểm tra layout riêng.",
        "Plant/count-document/year/date; giữ book-stock timestamp và trạng thái posted/unposted/recount.",
        "Đối chiếu từng cột trong hồ sơ với layout thực bằng technical information; thiếu cột ghi missing, không dùng mẫu tổng hợp để chứng nhận schema.",
        "Kiểm tra count, totals, subtotal/leaf, giới hạn export và đơn vị. Giữ file gốc, hash, selection, layout, extraction timestamp; đọc/export theo quyền được cấp.",
        "Approved differences ↔ MM01 inventory-adjustment movements và FI02 valuation postings sau khi đã post. Ghi exception và chuyển Inventory Accountant / Purchasing & Warehouse key user review."
      ],
      "sample": {
        "classification": "SYNTHETIC_TEACHING",
        "is_original_sap_export": false,
        "source_system": "SAVA_TEACHING_ONLY",
        "client": "000",
        "dataset_id": "MM16-DEMO-20260930",
        "key_date": "2026-09-30",
        "sign_policy": "FI: debit positive/credit negative; CO: debit cost positive/credit negative; other measures per column definition.",
        "note": "Mini-case độc lập để đọc cột; không là full population, không dùng để nghiệm thu hệ SAP.",
        "columns": [
          "year",
          "count_doc",
          "item",
          "material",
          "plant",
          "sloc",
          "book_qty",
          "counted_qty",
          "difference",
          "uom",
          "status",
          "accounting_ref"
        ],
        "rows": [
          {
            "year": "2026",
            "count_doc": "100000001",
            "item": "00010",
            "material": "FG-CONNECTOR-01",
            "plant": "1100",
            "sloc": "RM01",
            "book_qty": "100",
            "counted_qty": "98",
            "difference": "-2",
            "uom": "EA",
            "status": "COUNTED_NOT_POSTED",
            "accounting_ref": null
          }
        ]
      },
      "source_layout_examples": {
        "classification": "SOURCE_LAYOUT_RECONSTRUCTION_SYNTHETIC_DATA",
        "target_release": "UNKNOWN",
        "full_sap_catalog_verified": false,
        "viewer": "source-layouts.html#MM16",
        "variants": [
          {
            "id": "MM16-01",
            "source_transaction": "MI20 (List of Inventory Differences)",
            "classification": "SOURCE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://streamaz.sc.gov/lms/CO400/CO400ParticipantGuide2026Final.pdf",
            "fields_read_from_source": 14,
            "documented_fields": 0,
            "xlsx": "source-layout-downloads/MM16-01.xlsx",
            "raw_csv": "source-layout-downloads/MM16-01.layout.csv",
            "flat_csv": "source-layout-downloads/MM16-01.flat.csv"
          }
        ]
      }
    },
    {
      "id": "AA01",
      "tcode": "AW01N",
      "title": "Asset Explorer — giá trị và giao dịch",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA01",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA01-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=31",
            "source_page": 31,
            "columns": 9,
            "xlsx": "fi-aa-downloads/AA01-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA01-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA01-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA02",
      "tcode": "S_ALR_87011963",
      "title": "Số dư tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA02",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA02-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=4",
            "source_page": 4,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA02-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA02-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA02-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA03",
      "tcode": "S_ALR_87011990",
      "title": "Lịch sử biến động tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA03",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA03-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=33",
            "source_page": 33,
            "columns": 19,
            "xlsx": "fi-aa-downloads/AA03-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA03-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA03-01.flat.csv"
          },
          {
            "id": "AA03-02",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=33",
            "source_page": 33,
            "columns": 10,
            "xlsx": "fi-aa-downloads/AA03-02.xlsx",
            "raw_csv": "fi-aa-downloads/AA03-02.layout.csv",
            "flat_csv": "fi-aa-downloads/AA03-02.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA04",
      "tcode": "S_ALR_87012006",
      "title": "Khấu hao thông thường",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA04",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA04-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=34",
            "source_page": 34,
            "columns": 15,
            "xlsx": "fi-aa-downloads/AA04-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA04-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA04-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA05",
      "tcode": "S_ALR_87012050",
      "title": "Tăng tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA05",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA05-01",
            "classification": "ECC_VISIBLE_LAYOUT_RECONSTRUCTION",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=36",
            "source_page": 36,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA05-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA05-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA05-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA06",
      "tcode": "S_ALR_87012052",
      "title": "Giảm tài sản",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA06",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA06-01",
            "classification": "PROXY_FAMILY_LAYOUT_PROVISIONAL",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=36",
            "source_page": 36,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA06-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA06-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA06-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "AA07",
      "tcode": "S_ALR_87012054",
      "title": "Điều chuyển nội bộ",
      "module": "FI-AA",
      "viewer": "fi-aa.html#AA07",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_TARGET_AND_SME",
      "native_export": false,
      "target_release": "UNKNOWN",
      "full_catalog_verified": false,
      "source_layout_examples": {
        "variants": [
          {
            "id": "AA07-01",
            "classification": "PROXY_FAMILY_LAYOUT_PROVISIONAL",
            "source_url": "https://umoja.un.org/sites/umoja.un.org/files/fi-aa_ja1-_fixed_asset_ecc_reports_v1.5.pdf#page=36",
            "source_page": 36,
            "columns": 16,
            "xlsx": "fi-aa-downloads/AA07-01.xlsx",
            "raw_csv": "fi-aa-downloads/AA07-01.layout.csv",
            "flat_csv": "fi-aa-downloads/AA07-01.flat.csv"
          }
        ]
      },
      "controls": [
        "Asset/company/subnumber/depreciation-area context; do not add summary and details",
        "Source ECC/IPSAS/custom fields are not company IFRS policy"
      ],
      "documentation": "../../docs/reporting-library/fi-aa/README.md"
    },
    {
      "id": "FI17",
      "tcode": "F.15",
      "kind": "NEW_BUSINESS_REPORT",
      "name_vi": "Danh sách chứng từ định kỳ",
      "viewer": "supplemental.html#FI17",
      "source_file": "SAP FICO CO.pdf",
      "source_page": 47,
      "target_release": "UNKNOWN",
      "native_export": false,
      "grain": "Recurring template document / accounting item",
      "data_lineage": "Recurring-entry template list; not actual posted GL items",
      "controls": [
        "Group header/document scope",
        "Debit/credit sign preserved",
        "Do not treat F.15 template amount as F.14 actual postings",
        "Source numeric precision unresolved; preserve raw text"
      ],
      "ifrs_interpretation": "Template schedule does not itself prove recognition or actual expense. Compare actual posted documents separately.",
      "variants": [
        "SUP-FI17-01"
      ],
      "module": "FI"
    },
    {
      "id": "PP01",
      "module": "PP",
      "tcode": "COOIS",
      "title": "Lệnh sản xuất và các view chi tiết",
      "grain": "Order/item; operation/component là grain riêng",
      "controls": [
        "Delivered quantity khác confirmed yield và scrap.",
        "Maximum orders/layout selection có thể làm thiếu dữ liệu.",
        "Không join header với operations/components rồi sum lại header quantity."
      ],
      "lineage": "Production order → operations/components/confirmations → goods movement / CO order costs",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/2bba750d1e124e1ea2a039bb1cd9b6c5/e804b753128eb44ce10000000a174cb4.html",
      "source_edition": "Source screenshot SAP R/3 2005 / official Cloud2608 feature documentation",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PP01",
      "variants": [
        {
          "id": "OPS-PP01-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP01-01.flat.csv"
        },
        {
          "id": "OPS-PP01-02",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 34,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PP01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP01-02.flat.csv"
        },
        {
          "id": "OPS-PP01-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 14,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP01-03.xlsx",
          "raw_csv": "operations-downloads/OPS-PP01-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP01-03.flat.csv"
        }
      ]
    },
    {
      "id": "PP02",
      "module": "PP",
      "tcode": "MD04",
      "title": "Tồn kho và nhu cầu động",
      "grain": "Material/plant/MRParea + MRP element row + snapshot timestamp",
      "controls": [
        "Available quantity là running balance, không cộng.",
        "Không coi rescheduling date là actual posting date.",
        "Snapshot khác thời điểm không ghép như cùng stock."
      ],
      "lineage": "MRP elements → receipts/requirements → current available balance",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/2bba750d1e124e1ea2a039bb1cd9b6c5/daf35d93b67542c0b1f6a18807e9f6e9.html",
      "source_edition": "Official Cloud2608; R/3 thesis indexed text2012, screenshot inaccessible",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PP02",
      "variants": [
        {
          "id": "OPS-PP02-01",
          "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 18,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP02-01.flat.csv"
        },
        {
          "id": "OPS-PP02-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 11,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PP02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP02-02.flat.csv"
        }
      ]
    },
    {
      "id": "SD01",
      "module": "SD",
      "tcode": "VA05",
      "title": "Danh sách sales order và schedule lines",
      "grain": "Sales document/item/schedule line theo listtype",
      "controls": [
        "Không dedup theo Sales Document làm mấtitems/schedule lines.",
        "Không sum amount item lặp theo schedule line.",
        "Order value và confirmed quantity không là revenue/AR."
      ],
      "lineage": "Sales order items → schedule lines → delivery/billing chain",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/25a41481f62e469ba0e61015a0d39d20/32756754e90d8c4ce10000000a4450e5.html?locale=en-US",
      "source_edition": "Official S4 on-premise Reporting in Sales; exact source release/body screenshot unresolved",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#SD01",
      "variants": [
        {
          "id": "OPS-SD01-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 32,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-SD01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD01-01.flat.csv"
        },
        {
          "id": "OPS-SD01-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 11,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-SD01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD01-02.flat.csv"
        }
      ]
    },
    {
      "id": "SD02",
      "module": "SD",
      "tcode": "VF05",
      "title": "Danh sách billing document",
      "grain": "Billing document/item; cancellation links riêng",
      "controls": [
        "Loại invoice/credit/cancellation phải có sign policy.",
        "Không đảo dấu amount âm lầnhai.",
        "Tách FItransferstatus/actual posting khỏi billingdate."
      ],
      "lineage": "Billing items → documentflow → accounting document/AR",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/25a41481f62e469ba0e61015a0d39d20/32756754e90d8c4ce10000000a4450e5.html?locale=en-US",
      "source_edition": "Official S4 Reporting in Sales; exact VF05 layout not read",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#SD02",
      "variants": [
        {
          "id": "OPS-SD02-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 32,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-SD02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD02-01.flat.csv"
        },
        {
          "id": "OPS-SD02-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 7,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-SD02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD02-02.flat.csv"
        },
        {
          "id": "OPS-SD02-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 7,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD02-03.xlsx",
          "raw_csv": "operations-downloads/OPS-SD02-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD02-03.flat.csv"
        }
      ]
    },
    {
      "id": "QM01",
      "module": "QM",
      "tcode": "QA33",
      "title": "Danh sách inspection lot",
      "grain": "Inspection lot/plant; characteristics/inspectionpoints khácgrain",
      "controls": [
        "Lot quantity khácsample size vàpostedstock.",
        "Monitor trafficlight không tự làqualitypass/fail.",
        "Joinlot/material/plant/batch; không chỉbatch."
      ],
      "lineage": "Inspection lot → results/usage decision → stock posting/material documents",
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/1346ba53422bb54ce10000000a174cb4.html",
      "source_edition": "Official S4Cloud documentation; target release/layout unknown",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#QM01",
      "variants": [
        {
          "id": "OPS-QM01-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 28,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-QM01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM01-01.flat.csv"
        },
        {
          "id": "OPS-QM01-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-QM01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM01-02.flat.csv"
        }
      ]
    },
    {
      "id": "QM02",
      "module": "QM",
      "tcode": "QM11",
      "title": "Danh sách quality notification",
      "grain": "Notification header; defect/item/task/activity khácgrain",
      "controls": [
        "Mộtcasecónhiềudefect/taskkhông cộngcasecountlặp.",
        "Monitor có thể theo priority hoặc date, không tự suy chất lượng theo severity.",
        "Case không tự bằng provision/claim liability."
      ],
      "lineage": "Quality notification → items/tasks/activities → inspection/material/customer evidence",
      "source_url": "https://help.sap.com/docs/s4hana-cloud-best-practices/quality-management-for-complaints-from-customers-2fa-de/display-list-of-quality-notifications-optional",
      "source_edition": "Official Best Practice2FA / Cloud2608 linked source; target unknown",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#QM02",
      "variants": [
        {
          "id": "OPS-QM02-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 28,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-QM02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM02-01.flat.csv"
        },
        {
          "id": "OPS-QM02-02",
          "classification": "SOURCE_LAYOUT_CONFIGURATION_PREVIEW_NOT_VERIFIED_OUTPUT",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-QM02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM02-02.flat.csv"
        },
        {
          "id": "OPS-QM02-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 7,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM02-03.xlsx",
          "raw_csv": "operations-downloads/OPS-QM02-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM02-03.flat.csv"
        }
      ]
    },
    {
      "id": "PM01",
      "module": "PM",
      "tcode": "IW38",
      "title": "Lệnh bảo trì outstanding/in process",
      "grain": "Maintenance order header",
      "controls": [
        "Ảnh/hướngdẫnIW38 change không đổi thànhIW39 display.",
        "TECO khác settlement hoặc financial closure.",
        "Actual cost khác CAPEX được ghi nhận."
      ],
      "lineage": "Maintenance order → operations/confirmations/materials → CO costs/settlement",
      "source_url": "https://itre.ncsu.edu/bsip/training-procedures-resources/",
      "source_edition": "NCDPI instructions2020; ECC-style GUI, release not stated",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PM01",
      "variants": [
        {
          "id": "OPS-PM01-01",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 28,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM01-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PM01-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM01-01.flat.csv"
        },
        {
          "id": "OPS-PM01-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 5,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM01-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PM01-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM01-02.flat.csv"
        }
      ]
    },
    {
      "id": "PM02",
      "module": "PM",
      "tcode": "IW49N",
      "title": "Lệnh và operation bảo trì",
      "grain": "Order/activity; actualwork operation / totalactualcost order",
      "controls": [
        "Total actual costs theo order lặp theo activity, không cộnghaihoạtđộng.",
        "Actual work giữ unit và cancelled confirmations.",
        "Nguồn cho phép đổi thứ tự layout; không chứng minh một danh mục cột cố định."
      ],
      "lineage": "Order/operation → confirmations actualwork → CO order-level cost bridge",
      "source_url": "https://itre.ncsu.edu/bsip/training-procedures-resources/",
      "source_edition": "NCDPI guide31/12/2019; six layout columns documented, no screenshot output",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "ifrs": "Dữ liệu vận hành hỗ trợ đối chiếu; không tự chứng minh recognition/valuation hoặc chính sách IFRS công ty.",
      "viewer": "operations.html#PM02",
      "variants": [
        {
          "id": "OPS-PM02-01",
          "classification": "DOCUMENTED_COLUMN_SELECTION_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 6,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM02-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PM02-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM02-01.flat.csv"
        },
        {
          "id": "OPS-PM02-02",
          "classification": "SAVA_PROPOSED_SCHEMA_NOT_SOURCE_LAYOUT",
          "columns": 22,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM02-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PM02-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM02-02.flat.csv"
        }
      ]
    },
    {
      "id": "QM03",
      "module": "QM",
      "tcode": "QA32",
      "title": "Worklist inspection lots và operations",
      "grain": "Inspection lot hoặc lot/operation, tùy biến thể",
      "controls": [
        "QA32 có chức năng change; QA33 display không được coi cùng layout đã chứng minh.",
        "Monitor đánh giá theo reference field, không tự là lỗi chất lượng.",
        "Không join lot với operations rồi cộng lặp Lot Qty.",
        "Không diễn giải BUn bị cắt thành đơn vị đã xác minh."
      ],
      "lineage": "Inspection lot → operation/characteristic → result → usage decision → stock postings",
      "source_url": "https://saplibrary.eslsteel360.com/eBook/PP%20Module/ESL%20%20User%20Training%20Manual%20-%20PP.pdf",
      "source_edition": "ESL user training draft 10 April 2020; IIT Roorkee 30 July 2016; installed release unknown",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#QM03",
      "variants": [
        {
          "id": "OPS-QM03-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 13,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-QM03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM03-01.flat.csv"
        },
        {
          "id": "OPS-QM03-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 12,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM03-02.xlsx",
          "raw_csv": "operations-downloads/OPS-QM03-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM03-02.flat.csv"
        },
        {
          "id": "OPS-QM03-03",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 6,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-QM03-03.xlsx",
          "raw_csv": "operations-downloads/OPS-QM03-03.layout.csv",
          "flat_csv": "operations-downloads/OPS-QM03-03.flat.csv"
        }
      ]
    },
    {
      "id": "PM03",
      "module": "PM",
      "tcode": "IP24",
      "title": "Danh sách lịch gọi bảo trì",
      "grain": "Maintenance plan/item/call; call object có thể chưa sinh",
      "controls": [
        "Một maintenance item có nhiều call; không bỏ trùng theo item.",
        "Order trống không tự là missing error hoặc chi phí zero.",
        "Start date không tự đồng nghĩa ngày hoàn thành.",
        "Trạng thái S là biểu tượng chưa có legend đầy đủ."
      ],
      "lineage": "Maintenance plan/item → scheduling call → order/notification → operation/cost settlement",
      "source_url": "https://www.iitr.ac.in/Main/uploads/File/erp/Maintenance%20Processing.pdf",
      "source_edition": "IIT Roorkee training 30 July 2016; SAP on-premise 2025 FPS01 functionality only",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#PM03",
      "variants": [
        {
          "id": "OPS-PM03-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 8,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PM03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PM03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PM03-01.flat.csv"
        }
      ]
    },
    {
      "id": "SD03",
      "module": "SD",
      "tcode": "VL06O",
      "title": "Outbound delivery monitor — view STO",
      "grain": "Delivery/item theo view; snapshot/filter context bắt buộc",
      "controls": [
        "Header view và item view có thể khác grain/cột.",
        "View được mô tả thiếu item number; không tự gán số item hoặc coi là unique key.",
        "Dlv.qty trong hướng dẫn có mô tả sai là material code; giữ unresolved.",
        "GI/Pick date cần phân biệt planned/actual và status, không tự là posting hoặc GR.",
        "STO transfer không tự là doanh thu bán hàng."
      ],
      "lineage": "STO → outbound delivery/item → picking/WM → goods issue → receiving goods receipt",
      "source_url": "https://umoja.un.org/sites/umoja.un.org/files/umoja_job_aid_-_outbound_delivery_processing_for_stos_v1.1.pdf",
      "source_edition": "Umoja ECC/STO guide version 1.0 indexed description; source file 403; SAP Cloud 2608 functionality only",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#SD03",
      "variants": [
        {
          "id": "OPS-SD03-01",
          "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 13,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-SD03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-SD03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-SD03-01.flat.csv"
        }
      ]
    },
    {
      "id": "MM17",
      "module": "MM",
      "tcode": "LX02",
      "title": "WM stock theo material/bin",
      "grain": "Warehouse/material/plant/storage location/batch/special stock/bin",
      "controls": [
        "Hai cột S có cùng nhãn nhưng khác vị trí; chưa có định nghĩa đủ.",
        "Không gộp khác batch/bin/special stock hoặc đơn vị.",
        "Available stock âm phải giữ dấu và điều tra, không clamp zero.",
        "WM available stock không tự là valuated stock hoặc GL inventory.",
        "LX02 là classic WM source; không tự mapping sang EWM/S4 app."
      ],
      "lineage": "Warehouse stock/bin → material/batch/special stock → IM stock/goods movements → valuation/GL bridge",
      "source_url": "https://umoja.un.org/sites/umoja.un.org/files/umoja_job_aid_-_outbound_delivery_processing_for_stos_v1.1.pdf",
      "source_edition": "Umoja classic WM/ECC; indexed description only, output image not inspected",
      "target_release": "UNKNOWN",
      "status": "RESEARCH_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "Hồ sơ vận hành hỗ trợ đối chiếu. Không tự chứng minh doanh thu, định giá tồn kho, chi phí hoặc điều kiện ghi nhận IFRS.",
      "viewer": "operations.html#MM17",
      "variants": [
        {
          "id": "OPS-MM17-01",
          "classification": "DOCUMENTED_SCHEMA_DEMO_NOT_SOURCE_OUTPUT_LAYOUT",
          "columns": 13,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-MM17-01.xlsx",
          "raw_csv": "operations-downloads/OPS-MM17-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-MM17-01.flat.csv"
        }
      ]
    },
    {
      "id": "PP03",
      "module": "PP",
      "tcode": "CS12",
      "title": "BOM nhiều cấp — đường dẫn component",
      "grain": "Một occurrence của component theo đường dẫn cây, material/plant/usage/alternative/key date/explosion scope",
      "controls": [
        "CS12 level-by-level khác CS13 summarized; tên tutorial không chứng minh summarized semantics.",
        "Component lặp ở hai nhánh không tự dedup.",
        "Ảnh không có quantity component; không tự chèn Comp. Qty vào bảng nguồn.",
        "Required/base quantity của header khác định mức từng component."
      ],
      "lineage": "Material BOM + usage/alternative/validity/application → explosion occurrence → component allocation/costing",
      "source_url": "https://www.tutorialscampus.com/sap-pp/how-to-display-summarized-multi-level-bom.htm",
      "source_edition": "Public tutorial or SAP 2016 harmonization example; target release unknown",
      "target_release": "UNKNOWN",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "BOM/routing/order header là bằng chứng vận hành; chưa là chi phí actual, giá trị tồn kho, WIP hoặc bút toán IFRS.",
      "viewer": "operations.html#PP03",
      "variants": [
        {
          "id": "OPS-PP03-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 6,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP03-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP03-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP03-01.flat.csv"
        }
      ]
    },
    {
      "id": "PP04",
      "module": "PP",
      "tcode": "CA03",
      "title": "Routing — tổng quan operation",
      "grain": "Material/plant/task-list group/counter/sequence/operation/validity; source thiếu group ID và key date",
      "controls": [
        "Hai operation dùng cùng work center vẫn khác dòng.",
        "Setup/machine có đơn vị riêng; không cộng minute với hour.",
        "Standard activity khác actual confirmation hoặc cost.",
        "Routing master khác snapshot operation của production order sau khi copy/change."
      ],
      "lineage": "Material/plant/validity → routing group/counter/sequence/operation → work center/standard value → costing; order operation snapshot tách",
      "source_url": "https://www.guru99.com/how-to-create-change-routing.html",
      "source_edition": "Public tutorial or SAP 2016 harmonization example; target release unknown",
      "target_release": "UNKNOWN",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "BOM/routing/order header là bằng chứng vận hành; chưa là chi phí actual, giá trị tồn kho, WIP hoặc bút toán IFRS.",
      "viewer": "operations.html#PP04",
      "variants": [
        {
          "id": "OPS-PP04-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 16,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP04-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP04-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP04-01.flat.csv"
        }
      ]
    },
    {
      "id": "PP05",
      "module": "PP",
      "tcode": "CO03",
      "title": "Lệnh sản xuất — form header, quantity và dates",
      "grain": "Một order snapshot + các field theo section; không là order operation/component rows",
      "controls": [
        "Form được chuyển bảng phẳng bởi SAVA; chưa chứng minh CO03 có export CSV/XLSX theo cấu trúc này.",
        "Basic/scheduled/confirmed date/time không gộp một date.",
        "Status text là chuỗi mã, không tự là complete/cost settled.",
        "Total Qty, Delivered, Scrap Portion và Short/Exc. Rcpt khác measure và grain.",
        "Không suy WIP/variance/expense từ trạng thái order."
      ],
      "lineage": "Order header → order operations/components → confirmations/MM movement → CO line items → approved WIP/settlement bridge",
      "source_url": "https://assets.dm.ux.sap.com/desapusergroupsknowledgetransfer/2017/pdfs/170503_fiori_%2020_in_S4HANA_1610.pdf",
      "source_edition": "Public tutorial or SAP 2016 harmonization example; target release unknown",
      "target_release": "UNKNOWN",
      "status": "PARTIAL_SOURCE_DEMO_PENDING_COMPANY_LAYOUT",
      "kind": "NEW_BUSINESS_REPORT",
      "ifrs": "BOM/routing/order header là bằng chứng vận hành; chưa là chi phí actual, giá trị tồn kho, WIP hoặc bút toán IFRS.",
      "viewer": "operations.html#PP05",
      "variants": [
        {
          "id": "OPS-PP05-01",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 31,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP05-01.xlsx",
          "raw_csv": "operations-downloads/OPS-PP05-01.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP05-01.flat.csv"
        },
        {
          "id": "OPS-PP05-02",
          "classification": "SOURCE_SCREEN_FRAGMENT_RECONSTRUCTION_SYNTHETIC_DATA",
          "columns": 21,
          "full_catalog_verified": false,
          "xlsx": "operations-downloads/OPS-PP05-02.xlsx",
          "raw_csv": "operations-downloads/OPS-PP05-02.layout.csv",
          "flat_csv": "operations-downloads/OPS-PP05-02.flat.csv"
        }
      ]
    },
    {
      "id": "FI18",
      "module": "FI",
      "tcode": "F.13",
      "title": "Kết quả ghép và clearing tự động",
      "sourceFamily": "clear",
      "kind": "RUN_EVIDENCE",
      "grain": "Một nhóm clearing và từng item được xét",
      "keys": [
        "Company Code",
        "Run ID",
        "Document",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Account Type",
        "Account",
        "Document",
        "Fiscal Year",
        "Item",
        "Posting Date",
        "Assignment",
        "Reference",
        "Document Currency",
        "Debit Amount",
        "Credit Amount",
        "Difference",
        "Grouping Rule",
        "Clearing Document",
        "Clearing Date",
        "Test Run",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Account Type",
          "label": "Account Type",
          "position": 4,
          "type": "text",
          "meaning": "loại nghiệp vụ: Account Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 5,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 6,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 7,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 10,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 11,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Currency",
          "label": "Document Currency",
          "position": 12,
          "type": "text",
          "meaning": "Tiền tệ chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Debit Amount",
          "label": "Debit Amount",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Debit Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Credit Amount",
          "label": "Credit Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Credit Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Grouping Rule",
          "label": "Grouping Rule",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Grouping Rule. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Document",
          "label": "Clearing Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Date",
          "label": "Clearing Date",
          "position": 18,
          "type": "raw_date",
          "meaning": "Ngày clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 19,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 21,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Nhóm nào cân nhưng chưa clearing, nhóm nào bị loại?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả ghép và clearing tự động. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Một nhóm clearing và từng item được xét. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Test run hoặc nhóm cân không chứng minh đã tạo clearing document. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Test run hoặc nhóm cân không chứng minh đã tạo clearing document.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Test run hoặc nhóm cân không chứng minh đã tạo clearing document.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Automatic Clearing",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/8db4855746fa0322e10000000a44147b.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/8db4855746fa0322e10000000a44147b.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI19",
      "module": "FI",
      "tcode": "FCHN (candidate)",
      "title": "Sổ theo dõi séc và trạng thái thanh toán",
      "sourceFamily": "checks",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Một check trong house bank và account",
      "keys": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Check Number"
      ],
      "columns": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Check Number",
        "Check Lot",
        "Payment Document",
        "Fiscal Year",
        "Supplier",
        "Payee",
        "Issue Date",
        "Payment Date",
        "Amount",
        "Currency",
        "Encashment Date",
        "Void Date",
        "Void Reason",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Check Number",
          "label": "Check Number",
          "position": 4,
          "type": "text",
          "meaning": "số định danh: Check Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Check Lot",
          "label": "Check Lot",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Check Lot. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Document",
          "label": "Payment Document",
          "position": 6,
          "type": "text",
          "meaning": "chứng từ: Payment Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 7,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 8,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payee",
          "label": "Payee",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payee. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Issue Date",
          "label": "Issue Date",
          "position": 10,
          "type": "raw_date",
          "meaning": "ngày: Issue Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Payment Date",
          "label": "Payment Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Payment Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Encashment Date",
          "label": "Encashment Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Encashment Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Void Date",
          "label": "Void Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Void Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Void Reason",
          "label": "Void Reason",
          "position": 16,
          "type": "text",
          "meaning": "lý do: Void Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Séc nào đã phát hành, chưa encash hoặc bị void?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Sổ theo dõi séc và trạng thái thanh toán. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một check trong house bank và account. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Issued check chưa chắc là cash movement; đối chiếu payment document và bank settlement, không tự void/reprint. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + House Bank + Bank Account + Check Number cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Issued check chưa chắc là cash movement; đối chiếu payment document và bank settlement, không tự void/reprint.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Issued check chưa chắc là cash movement; đối chiếu payment document và bank settlement, không tự void/reprint.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "checks",
          "title": "Displaying the Check Register",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/aaccd253913e4608e10000000a174cb4.html",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/aaccd253913e4608e10000000a174cb4.html",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI20",
      "module": "FI",
      "tcode": "F110",
      "title": "Đề xuất thanh toán và exception",
      "sourceFamily": "payment",
      "kind": "WORKLIST",
      "grain": "Run và invoice item được đề xuất",
      "keys": [
        "Company Code",
        "Run ID",
        "Document",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Supplier",
        "Document",
        "Fiscal Year",
        "Item",
        "Due Date",
        "Payment Method",
        "Payment Block",
        "House Bank",
        "Bank Account",
        "Invoice Amount",
        "Discount Amount",
        "Payment Amount",
        "Currency",
        "Payment Document",
        "Exception Code",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 5,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 7,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Payment Method",
          "label": "Payment Method",
          "position": 9,
          "type": "text",
          "meaning": "phương pháp: Payment Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Block",
          "label": "Payment Block",
          "position": 10,
          "type": "text",
          "meaning": "Mã khóa thanh toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Invoice Amount",
          "label": "Invoice Amount",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Invoice Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Discount Amount",
          "label": "Discount Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Discount Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Payment Amount",
          "label": "Payment Amount",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Payment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 16,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Document",
          "label": "Payment Document",
          "position": 17,
          "type": "text",
          "meaning": "chứng từ: Payment Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 18,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 20,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Hóa đơn nào được đề xuất trả, bị khóa hoặc thiếu thông tin?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Đề xuất thanh toán và exception. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Run và invoice item được đề xuất. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Proposal không phải tiền đã chuyển; tách payment document và bank confirmation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Proposal không phải tiền đã chuyển; tách payment document và bank confirmation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Proposal không phải tiền đã chuyển; tách payment document và bank confirmation.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Integration with the Payment Run in SAP S/⁠4HANA",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn155search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI21",
      "module": "FI",
      "tcode": "F150",
      "title": "Đề xuất nhắc nợ và lịch sử dunning",
      "sourceFamily": "dunning",
      "kind": "WORKLIST",
      "grain": "Run và customer invoice item",
      "keys": [
        "Company Code",
        "Run ID",
        "Customer",
        "Document",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Customer",
        "Document",
        "Fiscal Year",
        "Item",
        "Due Date",
        "Days Overdue",
        "Open Amount",
        "Currency",
        "Dunning Area",
        "Dunning Level",
        "Dunning Block",
        "Last Dunning Date",
        "Dunning Fee",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 4,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 5,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 7,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Days Overdue",
          "label": "Days Overdue",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Days Overdue. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Amount",
          "label": "Open Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Open Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dunning Area",
          "label": "Dunning Area",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Dunning Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dunning Level",
          "label": "Dunning Level",
          "position": 13,
          "type": "text",
          "meaning": "cấp: Dunning Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dunning Block",
          "label": "Dunning Block",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Dunning Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Last Dunning Date",
          "label": "Last Dunning Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Last Dunning Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Dunning Fee",
          "label": "Dunning Fee",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Dunning Fee. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 18,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Khoản nào cần nhắc nợ và bị bỏ qua do block?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Đề xuất nhắc nợ và lịch sử dunning. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Run và customer invoice item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Dunning level không phải tỷ lệ ECL; giữ block và ngày khóa sổ. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Customer + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Dunning level không phải tỷ lệ ECL; giữ block và ngày khóa sổ.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Dunning level không phải tỷ lệ ECL; giữ block và ngày khóa sổ.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI21 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Dunning",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26c2d5e366bc44c1a98f2a9212a0c49d/e9c5a6cb7bfe40418debd4d96c6f09ba.html?version=LATEST",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search10",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26c2d5e366bc44c1a98f2a9212a0c49d/e9c5a6cb7bfe40418debd4d96c6f09ba.html?version=LATEST",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI22",
      "module": "FI",
      "tcode": "FEB_BSPROC / FEBAN",
      "title": "Worklist đối chiếu sao kê ngân hàng",
      "sourceFamily": "bank",
      "kind": "WORKLIST",
      "grain": "Sao kê và bank statement item",
      "keys": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Statement",
        "Item"
      ],
      "columns": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Statement",
        "Statement Date",
        "Item",
        "Value Date",
        "Posting Date",
        "External Transaction",
        "Amount",
        "Currency",
        "Reference",
        "Assignment",
        "Posting Rule",
        "Accounting Document",
        "Clearing Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Statement",
          "label": "Statement",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Statement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Statement Date",
          "label": "Statement Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: Statement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 6,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Date",
          "label": "Value Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày giá trị",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "External Transaction",
          "label": "External Transaction",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: External Transaction. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 12,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 13,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Rule",
          "label": "Posting Rule",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posting Rule. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Document",
          "label": "Clearing Document",
          "position": 16,
          "type": "text",
          "meaning": "Chứng từ clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 18,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Dòng sao kê nào chưa liên kết với chứng từ kế toán?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Worklist đối chiếu sao kê ngân hàng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sao kê và bank statement item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Một bank line có thể ghép nhiều FI items; không nhân bank amount qua join1:N. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + House Bank + Bank Account + Statement + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Một bank line có thể ghép nhiều FI items; không nhân bank amount qua join1:N.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Một bank line có thể ghép nhiều FI items; không nhân bank amount qua join1:N.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI22 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Reprocess Bank Statement Items",
          "url": "https://help.sap.com/docs/PRODUCT_ID/918bca53037f408f91a2295d04ac16bc/bc1fe656fe590950e10000000a44147b.html",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/918bca53037f408f91a2295d04ac16bc/bc1fe656fe590950e10000000a44147b.html",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI23",
      "module": "FI",
      "tcode": "S_ALR_87012357",
      "title": "Danh sách cơ sở thuế và thuế theo mã",
      "sourceFamily": "tax",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Company và tax item hoặc aggregate riêng",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Tax Code"
      ],
      "columns": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Posting Date",
        "Document Date",
        "Tax Code",
        "Tax Jurisdiction",
        "Tax Base",
        "Tax Amount",
        "Currency",
        "Tax Account",
        "Country",
        "Tax Rate",
        "Reference",
        "Tax Period",
        "Debit Credit",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 4,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Tax Code",
          "label": "Tax Code",
          "position": 7,
          "type": "text",
          "meaning": "mã phân loại: Tax Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Jurisdiction",
          "label": "Tax Jurisdiction",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Jurisdiction. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Base",
          "label": "Tax Base",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Tax Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Account",
          "label": "Tax Account",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Country",
          "label": "Country",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Country. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Rate",
          "label": "Tax Rate",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "tỷ lệ: Tax Rate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 15,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Period",
          "label": "Tax Period",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Period. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Debit Credit",
          "label": "Debit Credit",
          "position": 17,
          "type": "text",
          "meaning": "Phân biệt Nợ/Có theo nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Thuế đầu vào/đầu ra có khớp chứng từ và GL?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách cơ sở thuế và thuế theo mã. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Company và tax item hoặc aggregate riêng. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Nguồn ERP localization Belarus không xác nhận báo cáo thuế Việt Nam. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Item + Tax Code cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Nguồn ERP localization Belarus không xác nhận báo cáo thuế Việt Nam.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Nguồn ERP localization Belarus không xác nhận báo cáo thuế Việt Nam.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI23 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "END-USER GUIDES (Finance)",
          "url": "https://help.sap.com/doc/8184a7e0b639444b891777f1c9195ec1/1.0/en-US/End_User_Guide_FI_SAP_ERP_Loc_Extension_Belarus_EPAM_1.0_EN.pdf",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search12",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/doc/8184a7e0b639444b891777f1c9195ec1/1.0/en-US/End_User_Guide_FI_SAP_ERP_Loc_Extension_Belarus_EPAM_1.0_EN.pdf",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI24",
      "module": "FI",
      "tcode": "FS00 / F0731A",
      "title": "Danh mục tài khoản và thuộc tính kiểm soát",
      "sourceFamily": "gl",
      "kind": "MASTER_DISPLAY",
      "grain": "Chart of accounts và company account",
      "keys": [
        "Chart of Accounts",
        "Company Code",
        "Account"
      ],
      "columns": [
        "Chart of Accounts",
        "Company Code",
        "Account",
        "Account Name",
        "Account Group",
        "Account Type",
        "Account Currency",
        "Open Item Managed",
        "Line Item Display",
        "Tax Category",
        "Reconciliation Account",
        "Cost Element Category",
        "Sort Key",
        "Field Status Group",
        "Posting Block",
        "Deletion Flag",
        "Alternative Account",
        "Group Account",
        "Valid From"
      ],
      "fields": [
        {
          "key": "Chart of Accounts",
          "label": "Chart of Accounts",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Chart of Accounts. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 3,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Name",
          "label": "Account Name",
          "position": 4,
          "type": "text",
          "meaning": "tên: Account Name. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Group",
          "label": "Account Group",
          "position": 5,
          "type": "text",
          "meaning": "nhóm: Account Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Type",
          "label": "Account Type",
          "position": 6,
          "type": "text",
          "meaning": "loại nghiệp vụ: Account Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Currency",
          "label": "Account Currency",
          "position": 7,
          "type": "text",
          "meaning": "tiền tệ: Account Currency. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Open Item Managed",
          "label": "Open Item Managed",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Open Item Managed. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Line Item Display",
          "label": "Line Item Display",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Line Item Display. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Category",
          "label": "Tax Category",
          "position": 10,
          "type": "text",
          "meaning": "loại: Tax Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reconciliation Account",
          "label": "Reconciliation Account",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reconciliation Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element Category",
          "label": "Cost Element Category",
          "position": 12,
          "type": "text",
          "meaning": "loại: Cost Element Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sort Key",
          "label": "Sort Key",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sort Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Field Status Group",
          "label": "Field Status Group",
          "position": 14,
          "type": "text",
          "meaning": "nhóm: Field Status Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Block",
          "label": "Posting Block",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posting Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 16,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative Account",
          "label": "Alternative Account",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Account",
          "label": "Group Account",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Group Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 19,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        }
      ],
      "purpose": "Tài khoản nào có cấu hình ảnh hưởng mapping và clearing?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục tài khoản và thuộc tính kiểm soát. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Chart of accounts và company account. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không dùng account master snapshot làm số dư; mapping IFRS phải được duyệt riêng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Chart of Accounts + Company Code + Account cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không dùng account master snapshot làm số dư; mapping IFRS phải được duyệt riêng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không dùng account master snapshot làm số dư; mapping IFRS phải được duyệt riêng.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI24 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": "F0731A",
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage G/L Account Master Data",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/34428754dccbe85ee10000000a44176d.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn162search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/34428754dccbe85ee10000000a44176d.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI25",
      "module": "FI",
      "tcode": "FB04",
      "title": "Dấu vết thay đổi chứng từ kế toán",
      "sourceFamily": "changes",
      "kind": "AUDIT_REPORT",
      "grain": "Một change event và field được đổi",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Change ID",
        "Field Name"
      ],
      "columns": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Change ID",
        "Changed At",
        "Changed By",
        "Transaction",
        "Field Name",
        "Old Value",
        "New Value",
        "Reference",
        "Assignment",
        "Text",
        "Change Reason",
        "Status",
        "Source Object"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 4,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change ID",
          "label": "Change ID",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Change ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 6,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Changed By",
          "label": "Changed By",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Changed By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Transaction",
          "label": "Transaction",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Transaction. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Field Name",
          "label": "Field Name",
          "position": 9,
          "type": "text",
          "meaning": "tên: Field Name. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Old Value",
          "label": "Old Value",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị: Old Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "New Value",
          "label": "New Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị: New Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 12,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 13,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 14,
          "type": "text",
          "meaning": "Diễn giải trên dòng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Reason",
          "label": "Change Reason",
          "position": 15,
          "type": "text",
          "meaning": "lý do: Change Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Object",
          "label": "Source Object",
          "position": 17,
          "type": "text",
          "meaning": "Đối tượng nguồn có ID/type riêng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Ai đổi trường nào trên chứng từ, vào thời điểm nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Dấu vết thay đổi chứng từ kế toán. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một change event và field được đổi. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không kết luận gian lận chỉ từ change log; phân biệt quyền sửa và authorization thực tế. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Change ID + Field Name cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không kết luận gian lận chỉ từ change log; phân biệt quyền sửa và authorization thực tế.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không kết luận gian lận chỉ từ change log; phân biệt quyền sửa và authorization thực tế.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI25 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Local Financial Close",
          "url": "https://help.sap.com/docs/sap_s4hana_cloud/0fa84c9d9c634132b7c4abb9ffdd8f06/f0b4efed206d4c7c84bfa35f1e5ec91b.html?local=en-us",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search6",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/sap_s4hana_cloud/0fa84c9d9c634132b7c4abb9ffdd8f06/f0b4efed206d4c7c84bfa35f1e5ec91b.html?local=en-us",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI26",
      "module": "FI",
      "tcode": "FB03",
      "title": "Chi tiết chứng từ và đối ứng kế toán",
      "sourceFamily": "journal",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Một accounting document entry item",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Document Type",
        "Document Date",
        "Posting Date",
        "Period",
        "Account",
        "Account Type",
        "Debit Credit",
        "Amount",
        "Currency",
        "Document Amount",
        "Document Currency",
        "Tax Code",
        "Cost Center",
        "Profit Center",
        "Partner Company",
        "Reference",
        "Assignment",
        "Text",
        "Reversal Document",
        "Reversal Reason",
        "Clearing Document"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 4,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 5,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 8,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 9,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Type",
          "label": "Account Type",
          "position": 10,
          "type": "text",
          "meaning": "loại nghiệp vụ: Account Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Debit Credit",
          "label": "Debit Credit",
          "position": 11,
          "type": "text",
          "meaning": "Phân biệt Nợ/Có theo nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Amount",
          "label": "Document Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Document Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Document Currency",
          "label": "Document Currency",
          "position": 15,
          "type": "text",
          "meaning": "Tiền tệ chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Code",
          "label": "Tax Code",
          "position": 16,
          "type": "text",
          "meaning": "mã phân loại: Tax Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 17,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 18,
          "type": "text",
          "meaning": "Trung tâm lợi nhuận",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Partner Company",
          "label": "Partner Company",
          "position": 19,
          "type": "text",
          "meaning": "Pháp nhân đối tác",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 20,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 21,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 22,
          "type": "text",
          "meaning": "Diễn giải trên dòng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Document",
          "label": "Reversal Document",
          "position": 23,
          "type": "text",
          "meaning": "chứng từ: Reversal Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Reason",
          "label": "Reversal Reason",
          "position": 24,
          "type": "text",
          "meaning": "lý do: Reversal Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Document",
          "label": "Clearing Document",
          "position": 25,
          "type": "text",
          "meaning": "Chứng từ clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Bút toán gốc gồm những đối ứng và reversal nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết chứng từ và đối ứng kế toán. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một accounting document entry item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Giữ entry view riêng ledger view; reversal cần document/year/company đủ khóa. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Giữ entry view riêng ledger view; reversal cần document/year/company đủ khóa.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Giữ entry view riêng ledger view; reversal cần document/year/company đủ khóa.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI26 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "journal",
          "title": "Document Display",
          "url": "https://help.sap.com/docs/SAP_ERP/17ec785ed2294431b933daf9a926af80/e950d7531a4d424de10000000a174cb4.html",
          "source_version": "SAP ERP; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/17ec785ed2294431b933daf9a926af80/e950d7531a4d424de10000000a174cb4.html",
      "source_edition": "SAP ERP; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI27",
      "module": "FI",
      "tcode": "F.14",
      "title": "Nhật ký tạo bút toán định kỳ",
      "sourceFamily": "recurring",
      "kind": "RUN_EVIDENCE",
      "grain": "Run và recurring document execution",
      "keys": [
        "Company Code",
        "Run ID",
        "Recurring Document",
        "Sequence"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Recurring Document",
        "Sequence",
        "Posting Date",
        "Document Type",
        "Amount",
        "Currency",
        "Test Run",
        "Session ID",
        "Accounting Document",
        "Fiscal Year",
        "Created By",
        "Status",
        "Message",
        "Next Run Date",
        "Reference"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Recurring Document",
          "label": "Recurring Document",
          "position": 4,
          "type": "text",
          "meaning": "chứng từ: Recurring Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sequence",
          "label": "Sequence",
          "position": 5,
          "type": "text",
          "meaning": "Thứ tự xử lý/công đoạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 10,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Session ID",
          "label": "Session ID",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Session ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 12,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 13,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Next Run Date",
          "label": "Next Run Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Next Run Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Lần chạy định kỳ nào lỗi hoặc đã tạo chứng từ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Nhật ký tạo bút toán định kỳ. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Run và recurring document execution. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Log hoàn tất không tự chứng minh FI posted; đọc kết quả do operator cung cấp. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Recurring Document + Sequence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Log hoàn tất không tự chứng minh FI posted; đọc kết quả do operator cung cấp.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Log hoàn tất không tự chứng minh FI posted; đọc kết quả do operator cung cấp.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI27 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Displaying Recurring Entry Documents",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/2d4cd953189a424de10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn162search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/2d4cd953189a424de10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI28",
      "module": "FI",
      "tcode": "SAVA derived / AP items",
      "title": "Phân tích payment block và nguyên nhân tồn đọng",
      "sourceFamily": "payment",
      "kind": "SAVA_DERIVED",
      "grain": "Một AP item và lần đánh giá block",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Key Date"
      ],
      "columns": [
        "Company Code",
        "Supplier",
        "Document",
        "Fiscal Year",
        "Item",
        "Posting Date",
        "Due Date",
        "Key Date",
        "Open Amount",
        "Currency",
        "Payment Block",
        "Block Reason",
        "Owner",
        "Days Overdue",
        "Purchase Order",
        "Invoice Document",
        "Release Date",
        "Exception Code",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 2,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 3,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 5,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Open Amount",
          "label": "Open Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Open Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Block",
          "label": "Payment Block",
          "position": 11,
          "type": "text",
          "meaning": "Mã khóa thanh toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Block Reason",
          "label": "Block Reason",
          "position": 12,
          "type": "text",
          "meaning": "Lý do bị khóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 13,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Days Overdue",
          "label": "Days Overdue",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Days Overdue. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 15,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Invoice Document",
          "label": "Invoice Document",
          "position": 16,
          "type": "text",
          "meaning": "chứng từ: Invoice Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 18,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Khối lượng nợ bị block thuộc ai và quá hạn bao lâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Phân tích payment block và nguyên nhân tồn đọng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một AP item và lần đánh giá block. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Đây là schema phân tích SAVA; không coi release date trống là đã duyệt thanh toán. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Item + Key Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Đây là schema phân tích SAVA; không coi release date trống là đã duyệt thanh toán.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Đây là schema phân tích SAVA; không coi release date trống là đã duyệt thanh toán.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI28 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Integration with the Payment Run in SAP S/⁠4HANA",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn155search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI29",
      "module": "FI",
      "tcode": "ICMR / legacy FBICR*",
      "title": "Đối chiếu giao dịch liên công ty",
      "sourceFamily": "intercompany",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Company pair và matching item",
      "keys": [
        "Company Code",
        "Partner Company",
        "Document",
        "Item",
        "Matching ID"
      ],
      "columns": [
        "Company Code",
        "Partner Company",
        "Document",
        "Fiscal Year",
        "Item",
        "Reference",
        "Trading Partner",
        "Account",
        "Posting Date",
        "Transaction Currency",
        "Local Amount",
        "Partner Amount",
        "Difference",
        "Matching ID",
        "Reconciliation Case",
        "Status",
        "Reason",
        "Owner"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Partner Company",
          "label": "Partner Company",
          "position": 2,
          "type": "text",
          "meaning": "Pháp nhân đối tác",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 3,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 5,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 6,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Trading Partner",
          "label": "Trading Partner",
          "position": 7,
          "type": "text",
          "meaning": "Mã trading partner theo master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 8,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Transaction Currency",
          "label": "Transaction Currency",
          "position": 10,
          "type": "text",
          "meaning": "Tiền tệ giao dịch",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Local Amount",
          "label": "Local Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Local Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Partner Amount",
          "label": "Partner Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Partner Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Matching ID",
          "label": "Matching ID",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Matching ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reconciliation Case",
          "label": "Reconciliation Case",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reconciliation Case. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reason",
          "label": "Reason",
          "position": 17,
          "type": "text",
          "meaning": "lý do: Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 18,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Các bên lệch do cutoff, FX hay thiếu chứng từ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Đối chiếu giao dịch liên công ty. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Company pair và matching item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chuẩn hóa currency và sign trước so sánh; reconciliation chưa phải consolidation elimination. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Partner Company + Document + Item + Matching ID cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chuẩn hóa currency và sign trước so sánh; reconciliation chưa phải consolidation elimination.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chuẩn hóa currency và sign trước so sánh; reconciliation chưa phải consolidation elimination.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI29 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "SAP Intercompany Reconciliation",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/6b5a7c525ae17154e10000000a44176d.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search5",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/6b5a7c525ae17154e10000000a44176d.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI30",
      "module": "FI",
      "tcode": "F2332",
      "title": "Cash Flow Analyzer và dòng tiền thực tế",
      "sourceFamily": "cash",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Bank account và liquidity flow tại value date",
      "keys": [
        "Company Code",
        "Bank Account",
        "Flow ID",
        "Value Date"
      ],
      "columns": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Flow ID",
        "Value Date",
        "Transaction Date",
        "Liquidity Item",
        "Planning Level",
        "Planning Group",
        "Certainty Level",
        "Amount",
        "Currency",
        "Source Application",
        "Source Document",
        "Opening Balance",
        "Closing Balance",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Flow ID",
          "label": "Flow ID",
          "position": 4,
          "type": "text",
          "meaning": "Khóa cash flow",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Date",
          "label": "Value Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày giá trị",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Transaction Date",
          "label": "Transaction Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: Transaction Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Liquidity Item",
          "label": "Liquidity Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Liquidity Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planning Level",
          "label": "Planning Level",
          "position": 8,
          "type": "text",
          "meaning": "cấp: Planning Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planning Group",
          "label": "Planning Group",
          "position": 9,
          "type": "text",
          "meaning": "nhóm: Planning Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Certainty Level",
          "label": "Certainty Level",
          "position": 10,
          "type": "text",
          "meaning": "Phân loại chắc chắn actual/forecast theo nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Application",
          "label": "Source Application",
          "position": 13,
          "type": "text",
          "meaning": "Ứng dụng tạo flow nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Document",
          "label": "Source Document",
          "position": 14,
          "type": "text",
          "meaning": "Chứng từ tạo dữ liệu nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Opening Balance",
          "label": "Opening Balance",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Số dư đầu kỳ; không cộng snapshot",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Closing Balance",
          "label": "Closing Balance",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Số dư cuối kỳ; không cộng snapshot",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Nguồn và sử dụng tiền ở đâu, flow actual khác forecast thế nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Cash Flow Analyzer và dòng tiền thực tế. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Bank account và liquidity flow tại value date. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng opening/closing balance qua ngày; Cash Flow Analyzer không tự là cash flow statement IAS7. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Bank Account + Flow ID + Value Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng opening/closing balance qua ngày; Cash Flow Analyzer không tự là cash flow statement IAS7.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng opening/closing balance qua ngày; Cash Flow Analyzer không tự là cash flow statement IAS7.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI30 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": "F2332",
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "cash",
          "title": "Cash Flow Analyzer",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/186460fdc35a4b64a713da9bb00deb1e/cd6705281eef4230b81ef5a7b1ec54ee.html",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/186460fdc35a4b64a713da9bb00deb1e/cd6705281eef4230b81ef5a7b1ec54ee.html",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO17",
      "module": "CO",
      "tcode": "KSB2",
      "title": "Cam kết chi phí cost center theo chứng từ",
      "sourceFamily": "commitments",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Cost center và commitment item",
      "keys": [
        "Controlling Area",
        "Cost Center",
        "Document",
        "Item"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Cost Center",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Document",
        "Item",
        "Purchase Order",
        "PO Item",
        "Expected Date",
        "Commitment Amount",
        "Currency",
        "Quantity",
        "Unit",
        "Value Type",
        "Supplier",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 3,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 4,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 7,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 9,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 10,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Expected Date",
          "label": "Expected Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Expected Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Commitment Amount",
          "label": "Commitment Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Commitment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Type",
          "label": "Value Type",
          "position": 16,
          "type": "text",
          "meaning": "Phân biệt actual/plan/commitment theo hệ nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 17,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Cam kết nào chưa chuyển thành actual cost?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Cam kết chi phí cost center theo chứng từ. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Cost center và commitment item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Commitment không phải chi phí actual hoặc khoản nợ IFRS đã ghi nhận. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Cost Center + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Commitment không phải chi phí actual hoặc khoản nợ IFRS đã ghi nhận.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Commitment không phải chi phí actual hoặc khoản nợ IFRS đã ghi nhận.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO17 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "commitments",
          "title": "Cost Centers: Commitments Line Item Report",
          "url": "https://help.sap.com/docs/SAP_ERP/b42281c1645049a4b07c0ab25ec8b899/e30cd553088f4308e10000000a174cb4.html?locale=en-US",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/b42281c1645049a4b07c0ab25ec8b899/e30cd553088f4308e10000000a174cb4.html?locale=en-US",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO18",
      "module": "CO",
      "tcode": "KOB2",
      "title": "Cam kết chi phí internal order",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order và commitment item",
      "keys": [
        "Controlling Area",
        "Order",
        "Document",
        "Item"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Order Type",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Document",
        "Item",
        "Purchase Order",
        "PO Item",
        "Expected Date",
        "Commitment Amount",
        "Currency",
        "Quantity",
        "Unit",
        "Value Type",
        "Supplier",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 4,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 5,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 8,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 9,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 10,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 11,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Expected Date",
          "label": "Expected Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "ngày: Expected Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Commitment Amount",
          "label": "Commitment Amount",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Commitment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 16,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Type",
          "label": "Value Type",
          "position": 17,
          "type": "text",
          "meaning": "Phân biệt actual/plan/commitment theo hệ nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 18,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nào còn cam kết mở và có vượt nguồn lực?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Cam kết chi phí internal order. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order và commitment item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Giảm commitment khi actual phát sinh phải theo đúng PO item, không trừ toàn order tùy ý. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Giảm commitment khi actual phát sinh phải theo đúng PO item, không trừ toàn order tùy ý.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Giảm commitment khi actual phát sinh phải theo đúng PO item, không trừ toàn order tùy ý.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO19",
      "module": "CO",
      "tcode": "KSBT",
      "title": "Danh mục đơn giá hoạt động theo phiên bản",
      "sourceFamily": "rates",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Cost center activity type version period",
      "keys": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Version",
        "Fiscal Year",
        "Period"
      ],
      "columns": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Version",
        "Fiscal Year",
        "Period",
        "Valuation View",
        "Price Indicator",
        "Fixed Price",
        "Variable Price",
        "Total Price",
        "Price Unit",
        "Currency",
        "Activity Unit",
        "Planned Activity",
        "Actual Activity",
        "Capacity",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 4,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation View",
          "label": "Valuation View",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation View. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Indicator",
          "label": "Price Indicator",
          "position": 8,
          "type": "text",
          "meaning": "cờ chỉ báo: Price Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fixed Price",
          "label": "Fixed Price",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "đơn giá: Fixed Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variable Price",
          "label": "Variable Price",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "đơn giá: Variable Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Total Price",
          "label": "Total Price",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "đơn giá: Total Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Activity",
          "label": "Planned Activity",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planned Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Actual Activity",
          "label": "Actual Activity",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Actual Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity",
          "label": "Capacity",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "công suất: Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Đơn giá cố định/biến đổi khác nhau theo version nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục đơn giá hoạt động theo phiên bản. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Cost center activity type version period. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "CO14 là run actual rate; hồ sơ này là price lookup theo version/valuation, không cộng đơn giá. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Cost Center + Activity Type + Version + Fiscal Year + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "CO14 là run actual rate; hồ sơ này là price lookup theo version/valuation, không cộng đơn giá.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "CO14 là run actual rate; hồ sơ này là price lookup theo version/valuation, không cộng đơn giá.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "rates",
          "title": "Price Calculation",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/5e23dc8fe9be4fd496f8ab556667ea05/1a34cb14867d4f7db1854060113ae248.html",
          "source_version": "2025 FPS02",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/5e23dc8fe9be4fd496f8ab556667ea05/1a34cb14867d4f7db1854060113ae248.html",
      "source_edition": "2025 FPS02",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO20",
      "module": "CO",
      "tcode": "S_ALR_87013617 (candidate)",
      "title": "Hoạt động kế hoạch, sử dụng và công suất CO",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Cost center activity type và period",
      "keys": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Fiscal Year",
        "Period",
        "Version"
      ],
      "columns": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Fiscal Year",
        "Period",
        "Version",
        "Planned Activity",
        "Actual Activity",
        "Scheduled Activity",
        "Capacity",
        "Activity Unit",
        "Fixed Price",
        "Variable Price",
        "Currency",
        "Utilization",
        "Variance",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 5,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 6,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Activity",
          "label": "Planned Activity",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planned Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Actual Activity",
          "label": "Actual Activity",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Actual Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Scheduled Activity",
          "label": "Scheduled Activity",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Scheduled Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity",
          "label": "Capacity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "công suất: Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 11,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fixed Price",
          "label": "Fixed Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Fixed Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variable Price",
          "label": "Variable Price",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "đơn giá: Variable Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Utilization",
          "label": "Utilization",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Tỷ lệ sử dụng capacity theo denominator",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Activity demand có vượt planned capacity và delivered activity?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Hoạt động kế hoạch, sử dụng và công suất CO. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Cost center activity type và period. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không lấy actual activity CO thay machine hours nếu chưa có approved conversion. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Cost Center + Activity Type + Fiscal Year + Period + Version cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không lấy actual activity CO thay machine hours nếu chưa có approved conversion.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không lấy actual activity CO thay machine hours nếu chưa có approved conversion.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO21",
      "module": "CO",
      "tcode": "S_ALR_87012993 (candidate)",
      "title": "Internal order actual, plan và variance",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order cost element period version",
      "keys": [
        "Controlling Area",
        "Order",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Version"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Order Type",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Version",
        "Plan Amount",
        "Actual Amount",
        "Variance",
        "Currency",
        "Plan Quantity",
        "Actual Quantity",
        "Unit",
        "Responsible Cost Center",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 4,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 5,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 8,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Quantity",
          "label": "Plan Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Plan Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Quantity",
          "label": "Actual Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Actual Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Cost Center",
          "label": "Responsible Cost Center",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Cost Center. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nào lệch kế hoạch và lệch do lượng hay giá?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Internal order actual, plan và variance. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order cost element period version. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng summary order với KOB1 detail; variance phải giữ period/version. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Cost Element + Fiscal Year + Period + Version cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng summary order với KOB1 detail; variance phải giữ period/version.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng summary order với KOB1 detail; variance phải giữ period/version.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO21 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO22",
      "module": "CO",
      "tcode": "S_ALR_87013019 (candidate)",
      "title": "Order budget, actual và commitment",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order budget year và currency",
      "keys": [
        "Controlling Area",
        "Order",
        "Fiscal Year",
        "Currency"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Fiscal Year",
        "Budget",
        "Supplement",
        "Return Amount",
        "Released Budget",
        "Actual Amount",
        "Commitment Amount",
        "Assigned Amount",
        "Available Budget",
        "Currency",
        "Responsible Cost Center",
        "Order Type",
        "Status",
        "Owner"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Budget",
          "label": "Budget",
          "position": 5,
          "type": "raw_decimal",
          "meaning": "ngân sách: Budget. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Supplement",
          "label": "Supplement",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Supplement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Return Amount",
          "label": "Return Amount",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Return Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Released Budget",
          "label": "Released Budget",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "ngân sách: Released Budget. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Commitment Amount",
          "label": "Commitment Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Commitment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Assigned Amount",
          "label": "Assigned Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Assigned Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Budget",
          "label": "Available Budget",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "ngân sách: Available Budget. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Cost Center",
          "label": "Responsible Cost Center",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Cost Center. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 15,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 17,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Ngân sách còn khả dụng sau actual và commitments?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Order budget, actual và commitment. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order budget year và currency. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Budget release không phải liability; tránh double count commitments đã chuyển actual. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Fiscal Year + Currency cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Budget release không phải liability; tránh double count commitments đã chuyển actual.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Budget release không phải liability; tránh double count commitments đã chuyển actual.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO22 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO23",
      "module": "CO",
      "tcode": "KSU5",
      "title": "Kết quả assessment và bridge sender-receiver",
      "sourceFamily": "allocation",
      "kind": "RUN_EVIDENCE",
      "grain": "Cycle run segment và sender receiver",
      "keys": [
        "Controlling Area",
        "Run ID",
        "Cycle",
        "Segment",
        "Sender",
        "Receiver"
      ],
      "columns": [
        "Controlling Area",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Cycle",
        "Segment",
        "Sender",
        "Receiver",
        "Assessment Cost Element",
        "Tracing Factor",
        "Allocation Base",
        "Allocated Amount",
        "Currency",
        "Sender Credit",
        "Receiver Debit",
        "Test Run",
        "Accounting Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cycle",
          "label": "Cycle",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender",
          "label": "Sender",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sender. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receiver",
          "label": "Receiver",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receiver. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assessment Cost Element",
          "label": "Assessment Cost Element",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Assessment Cost Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tracing Factor",
          "label": "Tracing Factor",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Tracing Factor. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocation Base",
          "label": "Allocation Base",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Allocation Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Amount",
          "label": "Allocated Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Allocated Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender Credit",
          "label": "Sender Credit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Sender Credit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Receiver Debit",
          "label": "Receiver Debit",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Receiver Debit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 16,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 19,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Assessment đã phân bổ cho ai và có bảo toàn tổng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả assessment và bridge sender-receiver. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Cycle run segment và sender receiver. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Test log không chứng minh posting; đối chiếu tổng sender credit với receiver debit cùng currency. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Run ID + Cycle + Segment + Sender + Receiver cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Test log không chứng minh posting; đối chiếu tổng sender credit với receiver debit cùng currency.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Test log không chứng minh posting; đối chiếu tổng sender credit với receiver debit cùng currency.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO23 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "allocation",
          "title": "Controlling and Project System",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO24",
      "module": "CO",
      "tcode": "KSV5",
      "title": "Kết quả distribution theo cost element gốc",
      "sourceFamily": "allocation",
      "kind": "RUN_EVIDENCE",
      "grain": "Cycle run segment cost element sender receiver",
      "keys": [
        "Controlling Area",
        "Run ID",
        "Cycle",
        "Segment",
        "Cost Element",
        "Sender",
        "Receiver"
      ],
      "columns": [
        "Controlling Area",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Cycle",
        "Segment",
        "Cost Element",
        "Sender",
        "Receiver",
        "Tracing Factor",
        "Allocation Base",
        "Allocated Amount",
        "Currency",
        "Sender Credit",
        "Receiver Debit",
        "Test Run",
        "Accounting Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cycle",
          "label": "Cycle",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 7,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender",
          "label": "Sender",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sender. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receiver",
          "label": "Receiver",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receiver. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tracing Factor",
          "label": "Tracing Factor",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Tracing Factor. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocation Base",
          "label": "Allocation Base",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Allocation Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Amount",
          "label": "Allocated Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Allocated Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender Credit",
          "label": "Sender Credit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Sender Credit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Receiver Debit",
          "label": "Receiver Debit",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Receiver Debit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 16,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 19,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Chi phí gốc được chuyển giữa các cost center ra sao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả distribution theo cost element gốc. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Cycle run segment cost element sender receiver. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Distribution giữ cost element gốc, khác assessment; không gộp cả hai bridge thành một loại chi phí. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Run ID + Cycle + Segment + Cost Element + Sender + Receiver cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Distribution giữ cost element gốc, khác assessment; không gộp cả hai bridge thành một loại chi phí.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Distribution giữ cost element gốc, khác assessment; không gộp cả hai bridge thành một loại chi phí.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO24 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "allocation",
          "title": "Controlling and Project System",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO25",
      "module": "CO",
      "tcode": "KSC5",
      "title": "Kết quả phân bổ hoạt động gián tiếp",
      "sourceFamily": "allocation",
      "kind": "RUN_EVIDENCE",
      "grain": "Run segment activity type sender receiver",
      "keys": [
        "Controlling Area",
        "Run ID",
        "Segment",
        "Activity Type",
        "Sender",
        "Receiver"
      ],
      "columns": [
        "Controlling Area",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Cycle",
        "Segment",
        "Activity Type",
        "Sender",
        "Receiver",
        "Allocation Base",
        "Activity Quantity",
        "Activity Unit",
        "Price",
        "Price Unit",
        "Allocated Amount",
        "Currency",
        "Test Run",
        "Accounting Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cycle",
          "label": "Cycle",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender",
          "label": "Sender",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sender. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receiver",
          "label": "Receiver",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receiver. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Allocation Base",
          "label": "Allocation Base",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Allocation Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Quantity",
          "label": "Activity Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Activity Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 12,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price",
          "label": "Price",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "đơn giá: Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Amount",
          "label": "Allocated Amount",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Allocated Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 16,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 17,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 18,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 20,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Hoạt động gián tiếp được phân bổ theo driver nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả phân bổ hoạt động gián tiếp. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Run segment activity type sender receiver. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Quantity × price cần Price Unit; không tự nhân đơn giá nếu price unit khác1. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Run ID + Segment + Activity Type + Sender + Receiver cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Quantity × price cần Price Unit; không tự nhân đơn giá nếu price unit khác1.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Quantity × price cần Price Unit; không tự nhân đơn giá nếu price unit khác1.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO25 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "allocation",
          "title": "Controlling and Project System",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO26",
      "module": "CO",
      "tcode": "CK40N",
      "title": "Trạng thái costing run nhiều vật tư",
      "sourceFamily": "costRun",
      "kind": "RUN_EVIDENCE",
      "grain": "Costing run material plant và bước",
      "keys": [
        "Run ID",
        "Material",
        "Plant",
        "Step"
      ],
      "columns": [
        "Run ID",
        "Run Date",
        "Material",
        "Plant",
        "Costing Variant",
        "Costing Version",
        "Costing Date",
        "Valuation Date",
        "Quantity Structure Date",
        "Lot Size",
        "Unit",
        "Step",
        "Cost Estimate",
        "Costing Level",
        "Status",
        "Message",
        "Marked",
        "Released",
        "Amount",
        "Currency"
      ],
      "fields": [
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 1,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 2,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 4,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Variant",
          "label": "Costing Variant",
          "position": 5,
          "type": "text",
          "meaning": "Biến thể costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Version",
          "label": "Costing Version",
          "position": 6,
          "type": "text",
          "meaning": "Phiên bản costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Date",
          "label": "Costing Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày cost estimate",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valuation Date",
          "label": "Valuation Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Valuation Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Quantity Structure Date",
          "label": "Quantity Structure Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Quantity Structure Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Lot Size",
          "label": "Lot Size",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Cỡ lô làm cơ sở costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Step",
          "label": "Step",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Step. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Estimate",
          "label": "Cost Estimate",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Estimate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Level",
          "label": "Costing Level",
          "position": 14,
          "type": "text",
          "meaning": "cấp: Costing Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Marked",
          "label": "Marked",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Marked. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Released",
          "label": "Released",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Released. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 19,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 20,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Vật tư nào costing thành công nhưng chưa mark/release?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Trạng thái costing run nhiều vật tư. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Costing run material plant và bước. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không chạy mark/release từ thư viện; costing thành công không xác nhận standard price đã cập nhật. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Run ID + Material + Plant + Step cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không chạy mark/release từ thư viện; costing thành công không xác nhận standard price đã cập nhật.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không chạy mark/release từ thư viện; costing thành công không xác nhận standard price đã cập nhật.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO26 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Costing run",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO27",
      "module": "CO",
      "tcode": "CK80_99 (candidate)",
      "title": "So sánh các cost estimate và giá định giá",
      "sourceFamily": "costRun",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant và cặp cost estimate",
      "keys": [
        "Material",
        "Plant",
        "Cost Estimate",
        "Comparison Estimate"
      ],
      "columns": [
        "Material",
        "Plant",
        "Cost Estimate",
        "Comparison Estimate",
        "Costing Variant",
        "Costing Version",
        "Costing Date",
        "Lot Size",
        "Unit",
        "Current Cost",
        "Previous Cost",
        "Standard Price",
        "Price Unit",
        "Difference",
        "Currency",
        "Status",
        "Cost Component"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Estimate",
          "label": "Cost Estimate",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Estimate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Comparison Estimate",
          "label": "Comparison Estimate",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Comparison Estimate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Variant",
          "label": "Costing Variant",
          "position": 5,
          "type": "text",
          "meaning": "Biến thể costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Version",
          "label": "Costing Version",
          "position": 6,
          "type": "text",
          "meaning": "Phiên bản costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Date",
          "label": "Costing Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày cost estimate",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Lot Size",
          "label": "Lot Size",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Cỡ lô làm cơ sở costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Current Cost",
          "label": "Current Cost",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Current Cost. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Previous Cost",
          "label": "Previous Cost",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Previous Cost. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Standard Price",
          "label": "Standard Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Standard Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Component",
          "label": "Cost Component",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Cost estimate mới lệch estimate cũ và standard price bao nhiêu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của So sánh các cost estimate và giá định giá. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant và cặp cost estimate. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chuẩn hóa lot size, currency, valuation date; nguồn costing run chưa xác minh CK80_99 output. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Cost Estimate + Comparison Estimate cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chuẩn hóa lot size, currency, valuation date; nguồn costing run chưa xác minh CK80_99 output.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chuẩn hóa lot size, currency, valuation date; nguồn costing run chưa xác minh CK80_99 output.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO27 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Costing run",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO28",
      "module": "CO",
      "tcode": "KKBC_ORD",
      "title": "Phân tích chi phí lệnh theo cost element",
      "sourceFamily": "costOrder",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order cost element và cost category",
      "keys": [
        "Controlling Area",
        "Order",
        "Cost Element",
        "Cost Category",
        "Period"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Material",
        "Plant",
        "Fiscal Year",
        "Period",
        "Cost Element",
        "Cost Category",
        "Plan Amount",
        "Actual Amount",
        "Target Amount",
        "Variance",
        "Currency",
        "Plan Quantity",
        "Actual Quantity",
        "Unit",
        "Origin",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 8,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Category",
          "label": "Cost Category",
          "position": 9,
          "type": "text",
          "meaning": "loại: Cost Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Target Amount",
          "label": "Target Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Target Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Quantity",
          "label": "Plan Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Plan Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Quantity",
          "label": "Actual Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "số lượng: Actual Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 17,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Origin",
          "label": "Origin",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Origin. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Chi phí target, plan và actual của order khác nhau ở đâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Phân tích chi phí lệnh theo cost element. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order cost element và cost category. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Khác log variance CO11: đây là matrix cost analysis; target cost phụ thuộc target version và output basis. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Cost Element + Cost Category + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Khác log variance CO11: đây là matrix cost analysis; target cost phụ thuộc target version và output basis.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Khác log variance CO11: đây là matrix cost analysis; target cost phụ thuộc target version và output basis.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO28 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Cost Analysis explanation (KKBC_ORD)",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878124.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878124.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO29",
      "module": "CO",
      "tcode": "KE25",
      "title": "Chi tiết kế hoạch profitability analysis",
      "sourceFamily": "copaPlan",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Operating concern plan document item version",
      "keys": [
        "Operating Concern",
        "Document",
        "Item",
        "Version",
        "Fiscal Year",
        "Period"
      ],
      "columns": [
        "Operating Concern",
        "Document",
        "Item",
        "Version",
        "Fiscal Year",
        "Period",
        "Record Type",
        "Customer",
        "Material",
        "Sales Organization",
        "Plant",
        "Profit Center",
        "Value Field",
        "Plan Amount",
        "Currency",
        "Quantity",
        "Unit",
        "Segment",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Operating Concern",
          "label": "Operating Concern",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi profitability analysis",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 3,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 4,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Record Type",
          "label": "Record Type",
          "position": 7,
          "type": "text",
          "meaning": "Loại record CO-PA",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 8,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 11,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 12,
          "type": "text",
          "meaning": "Trung tâm lợi nhuận",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Field",
          "label": "Value Field",
          "position": 13,
          "type": "text",
          "meaning": "Trường giá trị costing-based CO-PA",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 17,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 19,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Kế hoạch doanh thu/chi phí theo profitability segment là gì?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết kế hoạch profitability analysis. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Operating concern plan document item version. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "KE25 plan không union vào KE24 actual; costing-based value fields không tự tương đương margin analysis GL. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Operating Concern + Document + Item + Version + Fiscal Year + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "KE25 plan không union vào KE24 actual; costing-based value fields không tự tương đương margin analysis GL.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "KE25 plan không union vào KE24 actual; costing-based value fields không tự tương đương margin analysis GL.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO29 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Archiving of CO-PA Transaction Data",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn156search1",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO30",
      "module": "CO",
      "tcode": "Fiori profit center reporting (candidate)",
      "title": "Profit center actual và plan theo tài khoản",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Profit center account ledger period plan category",
      "keys": [
        "Controlling Area",
        "Profit Center",
        "Account",
        "Ledger",
        "Fiscal Year",
        "Period",
        "Plan Category"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Profit Center",
        "Account",
        "Ledger",
        "Fiscal Year",
        "Period",
        "Plan Category",
        "Plan Amount",
        "Actual Amount",
        "Variance",
        "Currency",
        "Functional Area",
        "Segment",
        "Partner Profit Center",
        "Status",
        "Hierarchy Node"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 3,
          "type": "text",
          "meaning": "Trung tâm lợi nhuận",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 4,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ledger",
          "label": "Ledger",
          "position": 5,
          "type": "text",
          "meaning": "Sổ kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Category",
          "label": "Plan Category",
          "position": 8,
          "type": "text",
          "meaning": "loại: Plan Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Area",
          "label": "Functional Area",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Functional Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Partner Profit Center",
          "label": "Partner Profit Center",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Partner Profit Center. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Hierarchy Node",
          "label": "Hierarchy Node",
          "position": 17,
          "type": "text",
          "meaning": "Nút phân cấp; không cộng cùng leaf",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Profit center nào lệch kế hoạch và tài khoản nào đóng góp?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Profit center actual và plan theo tài khoản. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Profit center account ledger period plan category. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng parent hierarchy và leaf; layout/app ID mục tiêu chưa xác minh. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Profit Center + Account + Ledger + Fiscal Year + Period + Plan Category cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng parent hierarchy và leaf; layout/app ID mục tiêu chưa xác minh.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng parent hierarchy và leaf; layout/app ID mục tiêu chưa xác minh.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO30 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM18",
      "module": "MM",
      "tcode": "ME1M (candidate)",
      "title": "Danh mục purchasing info record và điều kiện mua",
      "sourceFamily": "info",
      "kind": "MASTER_DISPLAY",
      "grain": "Info record purchase organization plant validity",
      "keys": [
        "Info Record",
        "Purchasing Organization",
        "Plant",
        "Valid From"
      ],
      "columns": [
        "Info Record",
        "Material",
        "Material Group",
        "Supplier",
        "Purchasing Organization",
        "Plant",
        "Info Category",
        "Valid From",
        "Valid To",
        "Net Price",
        "Currency",
        "Price Unit",
        "Order Unit",
        "Base Unit",
        "Conversion Numerator",
        "Conversion Denominator",
        "Planned Delivery Time",
        "Minimum Quantity",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Info Record",
          "label": "Info Record",
          "position": 1,
          "type": "text",
          "meaning": "bản ghi: Info Record. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 3,
          "type": "text",
          "meaning": "nhóm: Material Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 6,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Info Category",
          "label": "Info Category",
          "position": 7,
          "type": "text",
          "meaning": "loại: Info Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Net Price",
          "label": "Net Price",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "đơn giá: Net Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Order Unit",
          "label": "Order Unit",
          "position": 13,
          "type": "text",
          "meaning": "đơn vị: Order Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Base Unit",
          "label": "Base Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Base Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Conversion Numerator",
          "label": "Conversion Numerator",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Conversion Numerator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Conversion Denominator",
          "label": "Conversion Denominator",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Conversion Denominator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Planned Delivery Time",
          "label": "Planned Delivery Time",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "thời gian: Planned Delivery Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Minimum Quantity",
          "label": "Minimum Quantity",
          "position": 18,
          "type": "raw_decimal",
          "meaning": "số lượng: Minimum Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 19,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Giá và đơn vị mua đã thống nhất với vật tư/nhà cung cấp chưa?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục purchasing info record và điều kiện mua. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Info record purchase organization plant validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Condition validity/price unit/UoM có thể làm sai giá; master price khác actual invoice cost. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Info Record + Purchasing Organization + Plant + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Condition validity/price unit/UoM có thể làm sai giá; master price khác actual invoice cost.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Condition validity/price unit/UoM có thể làm sai giá; master price khác actual invoice cost.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Purchasing Info Records",
          "url": "https://help.sap.com/docs/PRODUCT_ID/af9ef57f504840d2b81be8667206d485/49e387576b49ab76e10000000a441470.html?locale=en-US",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/af9ef57f504840d2b81be8667206d485/49e387576b49ab76e10000000a441470.html?locale=en-US",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM19",
      "module": "MM",
      "tcode": "ME0M (candidate)",
      "title": "Source list và nhà cung cấp hiệu lực",
      "sourceFamily": "sourceList",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant source list validity",
      "keys": [
        "Material",
        "Plant",
        "Source List Item",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "Source List Item",
        "Supplier",
        "Purchasing Organization",
        "Agreement",
        "Agreement Item",
        "Info Record",
        "Valid From",
        "Valid To",
        "Fixed Source",
        "Blocked",
        "MRP Relevant",
        "Procurement Type",
        "Created By",
        "Changed At",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source List Item",
          "label": "Source List Item",
          "position": 3,
          "type": "text",
          "meaning": "dòng: Source List Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Agreement",
          "label": "Agreement",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Agreement Item",
          "label": "Agreement Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Agreement Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Info Record",
          "label": "Info Record",
          "position": 8,
          "type": "text",
          "meaning": "bản ghi: Info Record. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 10,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Fixed Source",
          "label": "Fixed Source",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Fixed Source. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Blocked",
          "label": "Blocked",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Blocked. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Relevant",
          "label": "MRP Relevant",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Relevant. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 14,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 16,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Vật tư nào thiếu nguồn cung hợp lệ hoặc có nguồn bị block?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Source list và nhà cung cấp hiệu lực. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant source list validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Ngày hiệu lực và fixed source phải xét tại ngày nhu cầu, không chỉ ngày xem master. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Source List Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Ngày hiệu lực và fixed source phải xét tại ngày nhu cầu, không chỉ ngày xem master.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Ngày hiệu lực và fixed source phải xét tại ngày nhu cầu, không chỉ ngày xem master.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Source Lists",
          "url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/49fb9b57aba49f2de10000000a44147b.html?locale=en-us",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/49fb9b57aba49f2de10000000a44147b.html?locale=en-us",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM20",
      "module": "MM",
      "tcode": "MEQ3 (candidate)",
      "title": "Quota arrangement và phân bổ nguồn cung",
      "sourceFamily": "quota",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant quota item validity",
      "keys": [
        "Material",
        "Plant",
        "Quota Item",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "Quota Item",
        "Supplier",
        "Procurement Type",
        "Supplying Plant",
        "Production Version",
        "Quota",
        "Quota Base Quantity",
        "Allocated Quantity",
        "Quota Rating",
        "Unit",
        "Valid From",
        "Valid To",
        "Minimum Quantity",
        "Maximum Quantity",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quota Item",
          "label": "Quota Item",
          "position": 3,
          "type": "text",
          "meaning": "dòng: Quota Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 5,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplying Plant",
          "label": "Supplying Plant",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Supplying Plant. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 7,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quota",
          "label": "Quota",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Quota. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quota Base Quantity",
          "label": "Quota Base Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Quota Base Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Quantity",
          "label": "Allocated Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Allocated Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quota Rating",
          "label": "Quota Rating",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Quota Rating. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Minimum Quantity",
          "label": "Minimum Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Minimum Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Maximum Quantity",
          "label": "Maximum Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "số lượng: Maximum Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Quota có tập trung quá mức vào một supplier hay supplying plant?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Quota arrangement và phân bổ nguồn cung. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant quota item validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Quota rating là logic procurement, không phải supplier KPI chất lượng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Quota Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Quota rating là logic procurement, không phải supplier KPI chất lượng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Quota rating là logic procurement, không phải supplier KPI chất lượng.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Quota Arrangements",
          "url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/a565c3dddcf943c69dc8d43ac2016e4c.html?q=flexible+workflow+for+purchase+order",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn165search5",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/a565c3dddcf943c69dc8d43ac2016e4c.html?q=flexible+workflow+for+purchase+order",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM21",
      "module": "MM",
      "tcode": "ME9F (candidate)",
      "title": "Trạng thái output và thông báo đơn mua",
      "sourceFamily": "poOutput",
      "kind": "WORKLIST",
      "grain": "Purchasing document và output message",
      "keys": [
        "Purchase Order",
        "Message ID",
        "Output Type"
      ],
      "columns": [
        "Purchase Order",
        "Message ID",
        "Output Type",
        "Supplier",
        "Purchasing Organization",
        "Plant",
        "Created At",
        "Medium",
        "Recipient",
        "Language",
        "Processing Time",
        "Output Status",
        "Retry Count",
        "Changed By",
        "Transmission ID",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 1,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message ID",
          "label": "Message ID",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Message ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Output Type",
          "label": "Output Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Output Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 6,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created At",
          "label": "Created At",
          "position": 7,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Created At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Medium",
          "label": "Medium",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Medium. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recipient",
          "label": "Recipient",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Recipient. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Language",
          "label": "Language",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Language. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Processing Time",
          "label": "Processing Time",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "thời gian: Processing Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Output Status",
          "label": "Output Status",
          "position": 12,
          "type": "text",
          "meaning": "trạng thái: Output Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Retry Count",
          "label": "Retry Count",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Retry Count. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Changed By",
          "label": "Changed By",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Changed By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Transmission ID",
          "label": "Transmission ID",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Transmission ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 17,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Đơn mua nào chưa gửi hoặc output bị lỗi?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Trạng thái output và thông báo đơn mua. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Purchasing document và output message. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Output sent không chứng minh supplier accepted; tách truyền thông và confirmation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Purchase Order + Message ID + Output Type cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Output sent không chứng minh supplier accepted; tách truyền thông và confirmation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Output sent không chứng minh supplier accepted; tách truyền thông và confirmation.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM21 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "POWER Lists for Purchaser",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/d75db6531de6b64ce10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/d75db6531de6b64ce10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM22",
      "module": "MM",
      "tcode": "ME2O",
      "title": "Vật tư giao gia công và yêu cầu bổ sung",
      "sourceFamily": "goods",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Supplier component material plant và requirement",
      "keys": [
        "Supplier",
        "Material",
        "Plant",
        "Requirement ID"
      ],
      "columns": [
        "Supplier",
        "Material",
        "Plant",
        "Storage Location",
        "Batch",
        "Special Stock",
        "Requirement ID",
        "Purchase Order",
        "PO Item",
        "Requirement Date",
        "Required Quantity",
        "Provided Quantity",
        "Available Quantity",
        "Shortage Quantity",
        "Unit",
        "Finished Material",
        "Status"
      ],
      "fields": [
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 1,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 4,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 5,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 6,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement ID",
          "label": "Requirement ID",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Requirement ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 8,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 9,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 10,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Quantity",
          "label": "Required Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Required Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Provided Quantity",
          "label": "Provided Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Provided Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Quantity",
          "label": "Available Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Available Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Shortage Quantity",
          "label": "Shortage Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Shortage Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Finished Material",
          "label": "Finished Material",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Finished Material. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier gia công thiếu component nào và theo PO nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Vật tư giao gia công và yêu cầu bổ sung. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Supplier component material plant và requirement. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Stock tại subcontractor có thể vẫn thuộc doanh nghiệp; special stock O cần bridge ownership. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Supplier + Material + Plant + Requirement ID cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Stock tại subcontractor có thể vẫn thuộc doanh nghiệp; special stock O cần bridge ownership.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Stock tại subcontractor có thể vẫn thuộc doanh nghiệp; special stock O cần bridge ownership.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM22 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Goods Movement (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM23",
      "module": "MM",
      "tcode": "MB58 (candidate)",
      "title": "Tồn ký gửi tại khách hàng",
      "sourceFamily": "goods",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Customer material plant batch special stock",
      "keys": [
        "Customer",
        "Material",
        "Plant",
        "Batch",
        "Special Stock"
      ],
      "columns": [
        "Customer",
        "Material",
        "Plant",
        "Batch",
        "Special Stock",
        "Stock Category",
        "Unrestricted Quantity",
        "Quality Quantity",
        "Blocked Quantity",
        "Unit",
        "Value",
        "Currency",
        "Valuation Type",
        "Key Date",
        "Last Movement Date",
        "Sales Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Customer",
          "label": "Customer",
          "position": 1,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 4,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 5,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stock Category",
          "label": "Stock Category",
          "position": 6,
          "type": "text",
          "meaning": "loại: Stock Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Unrestricted Quantity",
          "label": "Unrestricted Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Unrestricted Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quality Quantity",
          "label": "Quality Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Quality Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Blocked Quantity",
          "label": "Blocked Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Blocked Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value",
          "label": "Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị: Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Type",
          "label": "Valuation Type",
          "position": 13,
          "type": "text",
          "meaning": "Loại định giá phân tách",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Last Movement Date",
          "label": "Last Movement Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Last Movement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 16,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Hàng gửi tại khách còn thuộc doanh nghiệp bao nhiêu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Tồn ký gửi tại khách hàng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Customer material plant batch special stock. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Ký gửi khách khác ký gửi supplier; giao hàng ký gửi chưa tự là doanh thu. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Customer + Material + Plant + Batch + Special Stock cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Ký gửi khách khác ký gửi supplier; giao hàng ký gửi chưa tự là doanh thu.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Ký gửi khách khác ký gửi supplier; giao hàng ký gửi chưa tự là doanh thu.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM23 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Goods Movement (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM24",
      "module": "MM",
      "tcode": "MB5K (candidate)",
      "title": "Kiểm tra nhất quán stock và chứng từ",
      "sourceFamily": "consistency",
      "kind": "CONTROL_REPORT",
      "grain": "Material valuation scope và control rule",
      "keys": [
        "Material",
        "Plant",
        "Valuation Type",
        "Rule ID"
      ],
      "columns": [
        "Material",
        "Plant",
        "Storage Location",
        "Batch",
        "Valuation Type",
        "Special Stock",
        "Rule ID",
        "Stored Quantity",
        "Calculated Quantity",
        "Difference",
        "Unit",
        "Stored Value",
        "Calculated Value",
        "Currency",
        "Last Movement Date",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 3,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 4,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Type",
          "label": "Valuation Type",
          "position": 5,
          "type": "text",
          "meaning": "Loại định giá phân tách",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 6,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Rule ID",
          "label": "Rule ID",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Rule ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stored Quantity",
          "label": "Stored Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Stored Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Calculated Quantity",
          "label": "Calculated Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Calculated Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stored Value",
          "label": "Stored Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Stored Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Calculated Value",
          "label": "Calculated Value",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị: Calculated Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Last Movement Date",
          "label": "Last Movement Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Last Movement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 17,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Tồn lưu và tồn tính từ chứng từ lệch tại đâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kiểm tra nhất quán stock và chứng từ. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material valuation scope và control rule. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không tự sửa stock từ báo cáo consistency; source context không chứng nhận target MB5K implementation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Valuation Type + Rule ID cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không tự sửa stock từ báo cáo consistency; source context không chứng nhận target MB5K implementation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không tự sửa stock từ báo cáo consistency; source context không chứng nhận target MB5K implementation.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM24 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Stock Consistency Check Report",
          "url": "https://help.sap.com/docs/PRODUCT_ID/cc8f759e1b0e4f3b8048c3cf808d4068/b155971166e74155ad1dc8e6b22468f8.html?locale=en-US&state=PRODUCTION&version=LATEST",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/cc8f759e1b0e4f3b8048c3cf808d4068/b155971166e74155ad1dc8e6b22468f8.html?locale=en-US&state=PRODUCTION&version=LATEST",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM25",
      "module": "MM",
      "tcode": "MB5M (candidate)",
      "title": "Hạn sử dụng và batch cần xử lý",
      "sourceFamily": "goods",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant batch và snapshot date",
      "keys": [
        "Material",
        "Plant",
        "Batch",
        "Key Date"
      ],
      "columns": [
        "Material",
        "Plant",
        "Storage Location",
        "Batch",
        "Manufacturing Date",
        "Expiry Date",
        "Key Date",
        "Remaining Shelf Life",
        "Total Shelf Life",
        "Quantity",
        "Unit",
        "Value",
        "Currency",
        "Stock Category",
        "Quality Status",
        "Supplier",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 3,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 4,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Manufacturing Date",
          "label": "Manufacturing Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: Manufacturing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Expiry Date",
          "label": "Expiry Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: Expiry Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Remaining Shelf Life",
          "label": "Remaining Shelf Life",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Remaining Shelf Life. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Total Shelf Life",
          "label": "Total Shelf Life",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Total Shelf Life. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value",
          "label": "Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stock Category",
          "label": "Stock Category",
          "position": 14,
          "type": "text",
          "meaning": "loại: Stock Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quality Status",
          "label": "Quality Status",
          "position": 15,
          "type": "text",
          "meaning": "trạng thái: Quality Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 16,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Batch nào sắp hết hạn và bị quality block?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Hạn sử dụng và batch cần xử lý. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant batch và snapshot date. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Tuổi batch là tín hiệu IAS2 NRV, không tự là tỷ lệ dự phòng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Batch + Key Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Tuổi batch là tín hiệu IAS2 NRV, không tự là tỷ lệ dự phòng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Tuổi batch là tín hiệu IAS2 NRV, không tự là tỷ lệ dự phòng.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM25 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Goods Movement (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM26",
      "module": "MM",
      "tcode": "F1956",
      "title": "Phân tích vòng quay tồn kho",
      "sourceFamily": "inventory",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant kỳ và định nghĩa consumption",
      "keys": [
        "Material",
        "Plant",
        "From Date",
        "To Date",
        "Consumption Definition"
      ],
      "columns": [
        "Material",
        "Plant",
        "From Date",
        "To Date",
        "Consumption Definition",
        "Consumption Quantity",
        "Average Stock Quantity",
        "Unit",
        "Inventory Turnover",
        "Stock Coverage",
        "Opening Quantity",
        "Closing Quantity",
        "Stock Value",
        "Currency",
        "Material Group",
        "ABC Indicator",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "From Date",
          "label": "From Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "ngày: From Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "To Date",
          "label": "To Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: To Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Consumption Definition",
          "label": "Consumption Definition",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Consumption Definition. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Consumption Quantity",
          "label": "Consumption Quantity",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "số lượng: Consumption Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Average Stock Quantity",
          "label": "Average Stock Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Average Stock Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inventory Turnover",
          "label": "Inventory Turnover",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Vòng quay; không cộng các tỷ lệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Stock Coverage",
          "label": "Stock Coverage",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Stock Coverage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Opening Quantity",
          "label": "Opening Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Opening Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Closing Quantity",
          "label": "Closing Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Closing Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Stock Value",
          "label": "Stock Value",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị: Stock Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 15,
          "type": "text",
          "meaning": "nhóm: Material Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "ABC Indicator",
          "label": "ABC Indicator",
          "position": 16,
          "type": "text",
          "meaning": "cờ chỉ báo: ABC Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Vòng quay thấp do ít tiêu thụ hay tồn bình quân cao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Phân tích vòng quay tồn kho. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant kỳ và định nghĩa consumption. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng turnover hoặc coverage; phải khớp definition consumption và time weighting. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + From Date + To Date + Consumption Definition cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng turnover hoặc coverage; phải khớp definition consumption và time weighting.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng turnover hoặc coverage; phải khớp definition consumption và time weighting.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM26 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": "F1956",
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Inventory Turnover Analysis",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/91b21005dded4984bcccf4a69ae1300c/3649cd5616d2152ce10000000a4450e5.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn157search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/91b21005dded4984bcccf4a69ae1300c/3649cd5616d2152ce10000000a4450e5.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM27",
      "module": "MM",
      "tcode": "MI24",
      "title": "Danh sách chứng từ kiểm kê và trạng thái đếm",
      "sourceFamily": "physical",
      "kind": "WORKLIST",
      "grain": "Physical inventory document item year",
      "keys": [
        "Plant",
        "Inventory Document",
        "Fiscal Year",
        "Item"
      ],
      "columns": [
        "Plant",
        "Storage Location",
        "Inventory Document",
        "Fiscal Year",
        "Item",
        "Material",
        "Batch",
        "Special Stock",
        "Book Quantity",
        "Count Quantity",
        "Difference",
        "Unit",
        "Count Date",
        "Posting Date",
        "Counted",
        "Posted",
        "Recount Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 2,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inventory Document",
          "label": "Inventory Document",
          "position": 3,
          "type": "text",
          "meaning": "chứng từ: Inventory Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 5,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 7,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 8,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Book Quantity",
          "label": "Book Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Book Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Count Quantity",
          "label": "Count Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Count Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Count Date",
          "label": "Count Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Count Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Counted",
          "label": "Counted",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Counted. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posted",
          "label": "Posted",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posted. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recount Document",
          "label": "Recount Document",
          "position": 17,
          "type": "text",
          "meaning": "chứng từ: Recount Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Item nào chưa đếm, recount hoặc chưa ghi chênh lệch?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách chứng từ kiểm kê và trạng thái đếm. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Physical inventory document item year. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "MI24 process status khác MI20 difference list; book snapshot và count date cần cutoff bridge. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Inventory Document + Fiscal Year + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "MI24 process status khác MI20 difference list; book snapshot và count date cần cutoff bridge.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "MI24 process status khác MI20 difference list; book snapshot và count date cần cutoff bridge.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM27 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Reporting in Physical Inventory (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/666b7ae6edfe4c05a90ac0150637f964/4a07b753128eb44ce10000000a174cb4.html?version=6.06.34",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search10",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/666b7ae6edfe4c05a90ac0150637f964/4a07b753128eb44ce10000000a174cb4.html?version=6.06.34",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM28",
      "module": "MM",
      "tcode": "ME33L (candidate)",
      "title": "Lịch giao hàng của scheduling agreement mua",
      "sourceFamily": "schedule",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Agreement item schedule line",
      "keys": [
        "Agreement",
        "Agreement Item",
        "Schedule Line"
      ],
      "columns": [
        "Agreement",
        "Agreement Item",
        "Schedule Line",
        "Supplier",
        "Purchasing Organization",
        "Material",
        "Plant",
        "Delivery Date",
        "Scheduled Quantity",
        "Received Quantity",
        "Open Quantity",
        "Unit",
        "Release Number",
        "Release Date",
        "Confirmation Category",
        "Confirmed Date",
        "Confirmed Quantity",
        "Status"
      ],
      "fields": [
        {
          "key": "Agreement",
          "label": "Agreement",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Agreement Item",
          "label": "Agreement Item",
          "position": 2,
          "type": "text",
          "meaning": "dòng: Agreement Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Schedule Line",
          "label": "Schedule Line",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Schedule Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Date",
          "label": "Delivery Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Delivery Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Scheduled Quantity",
          "label": "Scheduled Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Scheduled Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Received Quantity",
          "label": "Received Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Received Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Number",
          "label": "Release Number",
          "position": 13,
          "type": "text",
          "meaning": "số định danh: Release Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Confirmation Category",
          "label": "Confirmation Category",
          "position": 15,
          "type": "text",
          "meaning": "loại: Confirmation Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmed Date",
          "label": "Confirmed Date",
          "position": 16,
          "type": "raw_date",
          "meaning": "ngày: Confirmed Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Confirmed Quantity",
          "label": "Confirmed Quantity",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "số lượng: Confirmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier schedule nào còn mở và release nào áp dụng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Lịch giao hàng của scheduling agreement mua. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Agreement item schedule line. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Schedule changes không được cộng như lịch sử nhận hàng; giữ latest version và release basis. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Agreement + Agreement Item + Schedule Line cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Schedule changes không được cộng như lịch sử nhận hàng; giữ latest version và release basis.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Schedule changes không được cộng như lịch sử nhận hàng; giữ latest version và release basis.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM28 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Supplier Confirmations",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/9900dd93aec14047b483dc1a52561bf5.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn165search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/9900dd93aec14047b483dc1a52561bf5.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM29",
      "module": "MM",
      "tcode": "Monitor Supplier Confirmations",
      "title": "Xác nhận giao hàng và thiếu hụt supplier",
      "sourceFamily": "confirmations",
      "kind": "WORKLIST",
      "grain": "Purchasing document item confirmation sequence",
      "keys": [
        "Purchase Order",
        "PO Item",
        "Confirmation Sequence"
      ],
      "columns": [
        "Purchase Order",
        "PO Item",
        "Supplier",
        "Material",
        "Plant",
        "Confirmation Sequence",
        "Confirmation Category",
        "Requested Date",
        "Confirmed Date",
        "Ordered Quantity",
        "Confirmed Quantity",
        "Delivered Quantity",
        "Open Quantity",
        "Unit",
        "Confirmation Control",
        "Exception Code",
        "Owner",
        "Status"
      ],
      "fields": [
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 1,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 3,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Sequence",
          "label": "Confirmation Sequence",
          "position": 6,
          "type": "text",
          "meaning": "thứ tự: Confirmation Sequence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Category",
          "label": "Confirmation Category",
          "position": 7,
          "type": "text",
          "meaning": "loại: Confirmation Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requested Date",
          "label": "Requested Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Requested Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Confirmed Date",
          "label": "Confirmed Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Confirmed Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Ordered Quantity",
          "label": "Ordered Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Ordered Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Confirmed Quantity",
          "label": "Confirmed Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Confirmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Delivered Quantity",
          "label": "Delivered Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Delivered Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Control",
          "label": "Confirmation Control",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Confirmation Control. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 16,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 17,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier nào chưa xác nhận đủ lượng hoặc đúng ngày?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Xác nhận giao hàng và thiếu hụt supplier. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Purchasing document item confirmation sequence. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không coi confirmation là receipt; aggregate confirmations có cancellation và revision trước join PO. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Purchase Order + PO Item + Confirmation Sequence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không coi confirmation là receipt; aggregate confirmations có cancellation và revision trước join PO.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không coi confirmation là receipt; aggregate confirmations có cancellation và revision trước join PO.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM29 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Monitor Supplier Confirmations",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/f8b9e757dc3bf032e10000000a441470.html",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn165search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/f8b9e757dc3bf032e10000000a441470.html",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM30",
      "module": "MM",
      "tcode": "MM60 (candidate)",
      "title": "Danh mục vật tư và thuộc tính định giá",
      "sourceFamily": "materials",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant valuation type",
      "keys": [
        "Material",
        "Plant",
        "Valuation Type"
      ],
      "columns": [
        "Material",
        "Material Description",
        "Material Type",
        "Material Group",
        "Plant",
        "Base Unit",
        "Valuation Area",
        "Valuation Type",
        "Valuation Class",
        "Price Control",
        "Standard Price",
        "Moving Average Price",
        "Price Unit",
        "Currency",
        "MRP Type",
        "Procurement Type",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Description",
          "label": "Material Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Material Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Type",
          "label": "Material Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Material Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 4,
          "type": "text",
          "meaning": "nhóm: Material Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Base Unit",
          "label": "Base Unit",
          "position": 6,
          "type": "text",
          "meaning": "đơn vị: Base Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Area",
          "label": "Valuation Area",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Type",
          "label": "Valuation Type",
          "position": 8,
          "type": "text",
          "meaning": "Loại định giá phân tách",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Class",
          "label": "Valuation Class",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation Class. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Control",
          "label": "Price Control",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Price Control. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Standard Price",
          "label": "Standard Price",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "đơn giá: Standard Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Moving Average Price",
          "label": "Moving Average Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Moving Average Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Type",
          "label": "MRP Type",
          "position": 15,
          "type": "text",
          "meaning": "loại nghiệp vụ: MRP Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 16,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 17,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Master material nào có cấu hình gây sai grouping/valuation?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục vật tư và thuộc tính định giá. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant valuation type. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "S/V và giá master không tự là giá IFRS; snapshot price không thay historical valuation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Valuation Type cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "S/V và giá master không tự là giá IFRS; snapshot price không thay historical valuation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "S/V và giá master không tự là giá IFRS; snapshot price không thay historical valuation.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM30 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Documentary Batches in Production",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/4eb099dbc8a6435c9b36a854a7e05522/36ffb753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/4eb099dbc8a6435c9b36a854a7e05522/36ffb753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP06",
      "module": "PP",
      "tcode": "MD05",
      "title": "MRP list tại lần chạy kế hoạch",
      "sourceFamily": "mrp",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant MRP run element",
      "keys": [
        "Material",
        "Plant",
        "MRP Run",
        "MRP Element",
        "Element Item"
      ],
      "columns": [
        "Material",
        "Plant",
        "MRP Run",
        "MRP Date",
        "MRP Controller",
        "MRP Element",
        "Element Item",
        "Requirement Date",
        "Receipt Quantity",
        "Requirement Quantity",
        "Available Quantity",
        "Unit",
        "Exception Code",
        "Processing Indicator",
        "Source Document",
        "Status",
        "Key Date"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Run",
          "label": "MRP Run",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Run. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Date",
          "label": "MRP Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: MRP Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "MRP Controller",
          "label": "MRP Controller",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Controller. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Element",
          "label": "MRP Element",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Element Item",
          "label": "Element Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Element Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Receipt Quantity",
          "label": "Receipt Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Receipt Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Requirement Quantity",
          "label": "Requirement Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Requirement Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Quantity",
          "label": "Available Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Available Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 13,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Processing Indicator",
          "label": "Processing Indicator",
          "position": 14,
          "type": "text",
          "meaning": "cờ chỉ báo: Processing Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Document",
          "label": "Source Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ tạo dữ liệu nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        }
      ],
      "purpose": "Lần MRP đã lưu tạo exception gì?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của MRP list tại lần chạy kế hoạch. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant MRP run element. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Classic MRP snapshot khác MD04 dynamic; MRP Live không tạo MRP lists thông thường. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + MRP Run + MRP Element + Element Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Classic MRP snapshot khác MD04 dynamic; MRP Live không tạo MRP lists thông thường.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Classic MRP snapshot khác MD04 dynamic; MRP Live không tạo MRP lists thông thường.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "MD05 là classic MRP snapshot; không giả định MRP Live tạo list này.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP07",
      "module": "PP",
      "tcode": "MD09",
      "title": "Pegged requirements và nguồn nhu cầu",
      "sourceFamily": "mrp",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Receipt element và requirement edge",
      "keys": [
        "Material",
        "Plant",
        "Receipt Element",
        "Requirement Element",
        "Occurrence"
      ],
      "columns": [
        "Material",
        "Plant",
        "Receipt Element",
        "Requirement Element",
        "Occurrence",
        "Source Document",
        "Source Item",
        "Requirement Date",
        "Required Quantity",
        "Assigned Quantity",
        "Unit",
        "Parent Material",
        "Sales Document",
        "Order",
        "Project",
        "MRP Area",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receipt Element",
          "label": "Receipt Element",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receipt Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Element",
          "label": "Requirement Element",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Requirement Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Occurrence",
          "label": "Occurrence",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Occurrence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Document",
          "label": "Source Document",
          "position": 6,
          "type": "text",
          "meaning": "Chứng từ tạo dữ liệu nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Item",
          "label": "Source Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Source Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Quantity",
          "label": "Required Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Required Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Assigned Quantity",
          "label": "Assigned Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Assigned Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Parent Material",
          "label": "Parent Material",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Parent Material. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 13,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 14,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Project",
          "label": "Project",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Project. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Area",
          "label": "MRP Area",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Receipt hoặc component phục vụ nhu cầu nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Pegged requirements và nguồn nhu cầu. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Receipt element và requirement edge. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Một receipt cấp nhiều requirements; không nhân full receipt quantity qua từng edge. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Receipt Element + Requirement Element + Occurrence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Một receipt cấp nhiều requirements; không nhân full receipt quantity qua từng edge.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Một receipt cấp nhiều requirements; không nhân full receipt quantity qua từng edge.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP08",
      "module": "PP",
      "tcode": "MD13",
      "title": "Planned order và cấu trúc lượng, ngày",
      "sourceFamily": "mrp",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Planned order header và material assignment",
      "keys": [
        "Plant",
        "Planned Order"
      ],
      "columns": [
        "Plant",
        "Planned Order",
        "Material",
        "MRP Area",
        "MRP Controller",
        "Order Type",
        "Order Quantity",
        "Unit",
        "Start Date",
        "Finish Date",
        "Opening Date",
        "Production Version",
        "Procurement Type",
        "Firming Indicator",
        "Sales Document",
        "Sales Item",
        "Conversion Status",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Order",
          "label": "Planned Order",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planned Order. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Area",
          "label": "MRP Area",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Controller",
          "label": "MRP Controller",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Controller. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 6,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Quantity",
          "label": "Order Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Order Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Start Date",
          "label": "Start Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Start Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Finish Date",
          "label": "Finish Date",
          "position": 10,
          "type": "raw_date",
          "meaning": "ngày: Finish Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Opening Date",
          "label": "Opening Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Opening Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 12,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 13,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Firming Indicator",
          "label": "Firming Indicator",
          "position": 14,
          "type": "text",
          "meaning": "cờ chỉ báo: Firming Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 16,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Conversion Status",
          "label": "Conversion Status",
          "position": 17,
          "type": "text",
          "meaning": "trạng thái: Conversion Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Planned order nào được firm và chưa chuyển thành lệnh thực hiện?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Planned order và cấu trúc lượng, ngày. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Planned order header và material assignment. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Planned order là kế hoạch, không phải actual production hoặc WIP ledger. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Planned Order cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Planned order là kế hoạch, không phải actual production hoặc WIP ledger.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Planned order là kế hoạch, không phải actual production hoặc WIP ledger.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP09",
      "module": "PP",
      "tcode": "MF52 / MF50",
      "title": "Planning table cho sản xuất lặp lại",
      "sourceFamily": "mrp",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Production line material version và time bucket",
      "keys": [
        "Plant",
        "Production Line",
        "Material",
        "Production Version",
        "Period"
      ],
      "columns": [
        "Plant",
        "Production Line",
        "Material",
        "Production Version",
        "Period",
        "From Date",
        "To Date",
        "Planned Quantity",
        "Firmed Quantity",
        "Actual Quantity",
        "Unit",
        "Available Capacity",
        "Required Capacity",
        "Capacity Unit",
        "Utilization",
        "MRP Controller",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Line",
          "label": "Production Line",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 4,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 5,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "From Date",
          "label": "From Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: From Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "To Date",
          "label": "To Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "ngày: To Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Planned Quantity",
          "label": "Planned Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Planned Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Firmed Quantity",
          "label": "Firmed Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Firmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Quantity",
          "label": "Actual Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Actual Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Available Capacity",
          "label": "Available Capacity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "công suất: Available Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Required Capacity",
          "label": "Required Capacity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "công suất: Required Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Utilization",
          "label": "Utilization",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Tỷ lệ sử dụng capacity theo denominator",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "MRP Controller",
          "label": "MRP Controller",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Controller. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Sản lượng kế hoạch theo dây chuyền có phù hợp capacity?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Planning table cho sản xuất lặp lại. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Production line material version và time bucket. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Ưu tiên display MF52; MF50 có chức năng thay đổi, thư viện không thực hiện planning. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Production Line + Material + Production Version + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Ưu tiên display MF52; MF50 có chức năng thay đổi, thư viện không thực hiện planning.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Ưu tiên display MF52; MF50 có chức năng thay đổi, thư viện không thực hiện planning.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP09 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP10",
      "module": "PP",
      "tcode": "CM01",
      "title": "Tải và công suất work center",
      "sourceFamily": "capacity",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Work center capacity category và time bucket",
      "keys": [
        "Plant",
        "Work Center",
        "Capacity Category",
        "Period"
      ],
      "columns": [
        "Plant",
        "Work Center",
        "Capacity Category",
        "Period",
        "From Date",
        "To Date",
        "Available Capacity",
        "Required Capacity",
        "Remaining Capacity",
        "Capacity Unit",
        "Utilization",
        "Shift",
        "Factory Calendar",
        "Number of Capacities",
        "Backlog",
        "Status",
        "Planner Group"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Category",
          "label": "Capacity Category",
          "position": 3,
          "type": "text",
          "meaning": "loại: Capacity Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 4,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "From Date",
          "label": "From Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: From Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "To Date",
          "label": "To Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: To Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Available Capacity",
          "label": "Available Capacity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "công suất: Available Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Required Capacity",
          "label": "Required Capacity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "công suất: Required Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Remaining Capacity",
          "label": "Remaining Capacity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "công suất: Remaining Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 10,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Utilization",
          "label": "Utilization",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Tỷ lệ sử dụng capacity theo denominator",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Shift",
          "label": "Shift",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Shift. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Factory Calendar",
          "label": "Factory Calendar",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Factory Calendar. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Number of Capacities",
          "label": "Number of Capacities",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Number of Capacities. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Backlog",
          "label": "Backlog",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Backlog. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 17,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Work center nào quá tải trong kỳ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Tải và công suất work center. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Work center capacity category và time bucket. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Utilization cần denominator availability theo calendar/shift; không cộng tỷ lệ giữa các bucket. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Work Center + Capacity Category + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Utilization cần denominator availability theo calendar/shift; không cộng tỷ lệ giữa các bucket.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Utilization cần denominator availability theo calendar/shift; không cộng tỷ lệ giữa các bucket.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP10 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "capacity",
          "title": "Transaction List for Capacity Leveling and Evaluation",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
          "source_version": "Support content; target release unknown",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
      "source_edition": "Support content; target release unknown",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP11",
      "module": "PP",
      "tcode": "CM25",
      "title": "Worklist điều độ và phân bổ capacity",
      "sourceFamily": "capacity",
      "kind": "WORKLIST",
      "grain": "Order operation và dispatch slot",
      "keys": [
        "Plant",
        "Order",
        "Operation",
        "Sequence"
      ],
      "columns": [
        "Plant",
        "Work Center",
        "Order",
        "Operation",
        "Sequence",
        "Material",
        "Dispatch Date",
        "Start Date",
        "Finish Date",
        "Required Capacity",
        "Capacity Unit",
        "Priority",
        "Dispatch Status",
        "Setup Time",
        "Processing Time",
        "Time Unit",
        "Capacity Category",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 4,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sequence",
          "label": "Sequence",
          "position": 5,
          "type": "text",
          "meaning": "Thứ tự xử lý/công đoạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dispatch Date",
          "label": "Dispatch Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "ngày: Dispatch Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Start Date",
          "label": "Start Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Start Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Finish Date",
          "label": "Finish Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Finish Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Capacity",
          "label": "Required Capacity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "công suất: Required Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 11,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Priority",
          "label": "Priority",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Priority. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dispatch Status",
          "label": "Dispatch Status",
          "position": 13,
          "type": "text",
          "meaning": "trạng thái: Dispatch Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Setup Time",
          "label": "Setup Time",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "thời gian: Setup Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Processing Time",
          "label": "Processing Time",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "thời gian: Processing Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Time Unit",
          "label": "Time Unit",
          "position": 16,
          "type": "text",
          "meaning": "đơn vị: Time Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Category",
          "label": "Capacity Category",
          "position": 17,
          "type": "text",
          "meaning": "loại: Capacity Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Operation nào chưa dispatch hoặc nằm ngoài slot khả dụng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Worklist điều độ và phân bổ capacity. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order operation và dispatch slot. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Tách dispatch planning khỏi actual confirmation; capacity leveling có quyền ghi, chỉ xem mẫu. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Order + Operation + Sequence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Tách dispatch planning khỏi actual confirmation; capacity leveling có quyền ghi, chỉ xem mẫu.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Tách dispatch planning khỏi actual confirmation; capacity leveling có quyền ghi, chỉ xem mẫu.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP11 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "capacity",
          "title": "Transaction List for Capacity Leveling and Evaluation",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
          "source_version": "Support content; target release unknown",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
      "source_edition": "Support content; target release unknown",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP12",
      "module": "PP",
      "tcode": "MF47 (candidate)",
      "title": "Exception backflush của sản xuất lặp lại",
      "sourceFamily": "backflush",
      "kind": "WORKLIST",
      "grain": "Backflush error record component",
      "keys": [
        "Plant",
        "Error ID",
        "Material",
        "Component"
      ],
      "columns": [
        "Plant",
        "Error ID",
        "Material",
        "Component",
        "Production Version",
        "Production Line",
        "Posting Date",
        "Quantity",
        "Unit",
        "Movement Type",
        "Storage Location",
        "Batch",
        "Cost Object",
        "Confirmation",
        "Error Code",
        "Message",
        "Reprocessing Status",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error ID",
          "label": "Error ID",
          "position": 2,
          "type": "text",
          "meaning": "Khóa bản ghi lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component",
          "label": "Component",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 5,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Line",
          "label": "Production Line",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Movement Type",
          "label": "Movement Type",
          "position": 10,
          "type": "text",
          "meaning": "loại nghiệp vụ: Movement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 11,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 12,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Object",
          "label": "Cost Object",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Object. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation",
          "label": "Confirmation",
          "position": 14,
          "type": "text",
          "meaning": "xác nhận: Confirmation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error Code",
          "label": "Error Code",
          "position": 15,
          "type": "text",
          "meaning": "Mã lỗi xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reprocessing Status",
          "label": "Reprocessing Status",
          "position": 17,
          "type": "text",
          "meaning": "trạng thái: Reprocessing Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Backflush nào chưa tạo đủ goods movement?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Exception backflush của sản xuất lặp lại. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Backflush error record component. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Error record không phải movement posted; chỉ đối chiếu material document sau reprocessing. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Error ID + Material + Component cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Error record không phải movement posted; chỉ đối chiếu material document sau reprocessing.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Error record không phải movement posted; chỉ đối chiếu material document sau reprocessing.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP12 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Material Staging (with EWM)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP13",
      "module": "PP",
      "tcode": "COGI",
      "title": "Lỗi goods movement từ confirmation",
      "sourceFamily": "movementErrors",
      "kind": "WORKLIST",
      "grain": "Error record và material movement dự kiến",
      "keys": [
        "Plant",
        "Error ID",
        "Order",
        "Material",
        "Movement Type"
      ],
      "columns": [
        "Plant",
        "Error ID",
        "Order",
        "Operation",
        "Confirmation",
        "Material",
        "Movement Type",
        "Quantity",
        "Unit",
        "Storage Location",
        "Batch",
        "Posting Date",
        "Reservation",
        "Reservation Item",
        "Error Code",
        "Message",
        "Material Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error ID",
          "label": "Error ID",
          "position": 2,
          "type": "text",
          "meaning": "Khóa bản ghi lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 4,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation",
          "label": "Confirmation",
          "position": 5,
          "type": "text",
          "meaning": "xác nhận: Confirmation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Movement Type",
          "label": "Movement Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Movement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 10,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 11,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reservation",
          "label": "Reservation",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reservation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reservation Item",
          "label": "Reservation Item",
          "position": 14,
          "type": "text",
          "meaning": "dòng: Reservation Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error Code",
          "label": "Error Code",
          "position": 15,
          "type": "text",
          "meaning": "Mã lỗi xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Confirmation nào tạo GI/GR lỗi và ảnh hưởng stock/cost?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Lỗi goods movement từ confirmation. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Error record và material movement dự kiến. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không rerun COGI từ thư viện; có confirmation không đồng nghĩa component GI thành công. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Error ID + Order + Material + Movement Type cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không rerun COGI từ thư viện; có confirmation không đồng nghĩa component GI thành công.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không rerun COGI từ thư viện; có confirmation không đồng nghĩa component GI thành công.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP13 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Material Staging (with EWM)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP14",
      "module": "PP",
      "tcode": "CO16 (candidate)",
      "title": "Exception xử lý confirmation sản xuất",
      "sourceFamily": "confirmationErrors",
      "kind": "WORKLIST",
      "grain": "Confirmation error record và order operation",
      "keys": [
        "Plant",
        "Error ID",
        "Order",
        "Operation",
        "Confirmation"
      ],
      "columns": [
        "Plant",
        "Error ID",
        "Order",
        "Operation",
        "Confirmation",
        "Confirmation Counter",
        "Posting Date",
        "Yield Quantity",
        "Scrap Quantity",
        "Rework Quantity",
        "Unit",
        "Activity Quantity",
        "Activity Unit",
        "Error Code",
        "Message",
        "Created By",
        "Reversal Indicator",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error ID",
          "label": "Error ID",
          "position": 2,
          "type": "text",
          "meaning": "Khóa bản ghi lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 4,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation",
          "label": "Confirmation",
          "position": 5,
          "type": "text",
          "meaning": "xác nhận: Confirmation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Counter",
          "label": "Confirmation Counter",
          "position": 6,
          "type": "text",
          "meaning": "bộ đếm: Confirmation Counter. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Yield Quantity",
          "label": "Yield Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Yield Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Scrap Quantity",
          "label": "Scrap Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Scrap Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Rework Quantity",
          "label": "Rework Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Rework Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Quantity",
          "label": "Activity Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Activity Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 13,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error Code",
          "label": "Error Code",
          "position": 14,
          "type": "text",
          "meaning": "Mã lỗi xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 15,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Indicator",
          "label": "Reversal Indicator",
          "position": 17,
          "type": "text",
          "meaning": "Cờ reversal; cần chứng từ/counter gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Confirmation nào lỗi hoặc có cancellation cần kiểm tra?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Exception xử lý confirmation sản xuất. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Confirmation error record và order operation. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không gộp confirmation error với COGI movement error; reversal và counter quyết định net quantity. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Error ID + Order + Operation + Confirmation cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không gộp confirmation error với COGI movement error; reversal và counter quyết định net quantity.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không gộp confirmation error với COGI movement error; reversal và counter quyết định net quantity.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP14 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Collective Entry of Measurement Documents for Order Confirmation",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP15",
      "module": "PP",
      "tcode": "CS15",
      "title": "Where-used BOM và mức ảnh hưởng component",
      "sourceFamily": "bom",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Component tới parent BOM item occurrence",
      "keys": [
        "Component",
        "Parent Material",
        "Plant",
        "BOM",
        "Item",
        "Occurrence"
      ],
      "columns": [
        "Component",
        "Parent Material",
        "Plant",
        "BOM",
        "BOM Usage",
        "Alternative BOM",
        "Item",
        "Occurrence",
        "Level",
        "Component Quantity",
        "Base Quantity",
        "Unit",
        "Valid From",
        "Valid To",
        "Change Number",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Component",
          "label": "Component",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Parent Material",
          "label": "Parent Material",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Parent Material. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM",
          "label": "BOM",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM Usage",
          "label": "BOM Usage",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative BOM",
          "label": "Alternative BOM",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 7,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Occurrence",
          "label": "Occurrence",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Occurrence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Level",
          "label": "Level",
          "position": 9,
          "type": "text",
          "meaning": "cấp: Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component Quantity",
          "label": "Component Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Component Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Base Quantity",
          "label": "Base Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Base Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 15,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 16,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Thay component ảnh hưởng thành phẩm và BOM nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Where-used BOM và mức ảnh hưởng component. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Component tới parent BOM item occurrence. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Where-used là edge dependency, khác CS12 explosion; không tính lượng chỉ bằng cộng các cấp. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Component + Parent Material + Plant + BOM + Item + Occurrence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Where-used là edge dependency, khác CS12 explosion; không tính lượng chỉ bằng cộng các cấp.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Where-used là edge dependency, khác CS12 explosion; không tính lượng chỉ bằng cộng các cấp.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP15 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Where-Used Lists and Central Replacement",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search3",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP16",
      "module": "PP",
      "tcode": "CS03",
      "title": "BOM master hiệu lực tại ngày và alternative",
      "sourceFamily": "bom",
      "kind": "MASTER_DISPLAY",
      "grain": "BOM alternative item validity",
      "keys": [
        "Material",
        "Plant",
        "BOM",
        "BOM Usage",
        "Alternative BOM",
        "Item",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "BOM",
        "BOM Usage",
        "Alternative BOM",
        "Base Quantity",
        "Base Unit",
        "Item",
        "Component",
        "Component Quantity",
        "Unit",
        "Item Category",
        "Scrap Percent",
        "Valid From",
        "Valid To",
        "Change Number",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM",
          "label": "BOM",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM Usage",
          "label": "BOM Usage",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative BOM",
          "label": "Alternative BOM",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Base Quantity",
          "label": "Base Quantity",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "số lượng: Base Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Base Unit",
          "label": "Base Unit",
          "position": 7,
          "type": "text",
          "meaning": "đơn vị: Base Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component",
          "label": "Component",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component Quantity",
          "label": "Component Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Component Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item Category",
          "label": "Item Category",
          "position": 12,
          "type": "text",
          "meaning": "loại: Item Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Scrap Percent",
          "label": "Scrap Percent",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "tỷ lệ: Scrap Percent. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 16,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 17,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "BOM alternative nào đúng với thời điểm và batch sản xuất?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của BOM master hiệu lực tại ngày và alternative. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: BOM alternative item validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "BOM master snapshot khác explosion occurrence CS12; effectivity phải khớp change number và key date. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + BOM + BOM Usage + Alternative BOM + Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "BOM master snapshot khác explosion occurrence CS12; effectivity phải khớp change number và key date.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "BOM master snapshot khác explosion occurrence CS12; effectivity phải khớp change number và key date.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP16 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Where-Used Lists and Central Replacement",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search3",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP17",
      "module": "PP",
      "tcode": "C223",
      "title": "Production version và liên kết BOM-routing",
      "sourceFamily": "versions",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant production version validity",
      "keys": [
        "Material",
        "Plant",
        "Production Version",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "Production Version",
        "Version Description",
        "Valid From",
        "Valid To",
        "Minimum Lot Size",
        "Maximum Lot Size",
        "Unit",
        "BOM Usage",
        "Alternative BOM",
        "Task List Group",
        "Group Counter",
        "Production Line",
        "Lock Indicator",
        "Consistency Status",
        "Last Check Date",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 3,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version Description",
          "label": "Version Description",
          "position": 4,
          "type": "text",
          "meaning": "diễn giải: Version Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Minimum Lot Size",
          "label": "Minimum Lot Size",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Minimum Lot Size. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Maximum Lot Size",
          "label": "Maximum Lot Size",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Maximum Lot Size. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM Usage",
          "label": "BOM Usage",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative BOM",
          "label": "Alternative BOM",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 12,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 13,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Line",
          "label": "Production Line",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lock Indicator",
          "label": "Lock Indicator",
          "position": 15,
          "type": "text",
          "meaning": "cờ chỉ báo: Lock Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Consistency Status",
          "label": "Consistency Status",
          "position": 16,
          "type": "text",
          "meaning": "trạng thái: Consistency Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Last Check Date",
          "label": "Last Check Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Last Check Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Version nào nối đúng BOM/routing và lot size?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Production version và liên kết BOM-routing. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant production version validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chỉ version hợp lệ và đã check mới là candidate routing, không tự xác nhận order snapshot. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Production Version + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chỉ version hợp lệ và đã check mới là candidate routing, không tự xác nhận order snapshot.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chỉ version hợp lệ và đã check mới là candidate routing, không tự xác nhận order snapshot.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP17 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Costing and Selecting Preferred Production Versions",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/698b19fa88b846359bc611f11184c810/7968793f8eb940529882b4d19837bd19.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search11",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/698b19fa88b846359bc611f11184c810/7968793f8eb940529882b4d19837bd19.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP18",
      "module": "PP",
      "tcode": "CR05 (candidate)",
      "title": "Danh mục work center và liên kết cost center",
      "sourceFamily": "workcenters",
      "kind": "MASTER_DISPLAY",
      "grain": "Plant work center validity",
      "keys": [
        "Plant",
        "Work Center",
        "Valid From"
      ],
      "columns": [
        "Plant",
        "Work Center",
        "Work Center Description",
        "Work Center Category",
        "Person Responsible",
        "Cost Center",
        "Activity Type",
        "Capacity Category",
        "Capacity Unit",
        "Factory Calendar",
        "Standard Value Key",
        "Usage",
        "Valid From",
        "Valid To",
        "Deletion Flag",
        "Status",
        "Planner Group"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center Description",
          "label": "Work Center Description",
          "position": 3,
          "type": "text",
          "meaning": "diễn giải: Work Center Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center Category",
          "label": "Work Center Category",
          "position": 4,
          "type": "text",
          "meaning": "loại: Work Center Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Person Responsible",
          "label": "Person Responsible",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Person Responsible. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 6,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Category",
          "label": "Capacity Category",
          "position": 8,
          "type": "text",
          "meaning": "loại: Capacity Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 9,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Factory Calendar",
          "label": "Factory Calendar",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Factory Calendar. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Standard Value Key",
          "label": "Standard Value Key",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Standard Value Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Usage",
          "label": "Usage",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 15,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 17,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Work center nào thiếu cost center/activity type hoặc calendar?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục work center và liên kết cost center. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Plant work center validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Master mapping không chứng minh actual hours; cần interval validity trước nối activity price. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Work Center + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Master mapping không chứng minh actual hours; cần interval validity trước nối activity price.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Master mapping không chứng minh actual hours; cần interval validity trước nối activity price.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "workcenters",
          "title": "Work Center Display",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/69c3a05bb8d44f02bdd2abe5e822da8e/6025bf53d25ab64ce10000000a174cb4.html",
          "source_version": "S/4HANA; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/69c3a05bb8d44f02bdd2abe5e822da8e/6025bf53d25ab64ce10000000a174cb4.html",
      "source_edition": "S/4HANA; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP19",
      "module": "PP",
      "tcode": "CC03",
      "title": "Engineering change và đối tượng bị ảnh hưởng",
      "sourceFamily": "engineering",
      "kind": "MASTER_DISPLAY",
      "grain": "Change number object và validity",
      "keys": [
        "Change Number",
        "Source Object",
        "Valid From"
      ],
      "columns": [
        "Change Number",
        "Change Description",
        "Change Type",
        "Valid From",
        "Valid To",
        "Source Object",
        "Material",
        "Plant",
        "BOM",
        "Task List Group",
        "Group Counter",
        "Change Status",
        "Created By",
        "Created At",
        "Changed By",
        "Changed At",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 1,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Description",
          "label": "Change Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Change Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Type",
          "label": "Change Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Change Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Source Object",
          "label": "Source Object",
          "position": 6,
          "type": "text",
          "meaning": "Đối tượng nguồn có ID/type riêng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 7,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 8,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM",
          "label": "BOM",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 10,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 11,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Status",
          "label": "Change Status",
          "position": 12,
          "type": "text",
          "meaning": "trạng thái: Change Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created At",
          "label": "Created At",
          "position": 14,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Created At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Changed By",
          "label": "Changed By",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Changed By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 16,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Thay đổi kỹ thuật nào có hiệu lực và ảnh hưởng cost structure?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Engineering change và đối tượng bị ảnh hưởng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Change number object và validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không áp BOM hiện tại cho order quá khứ; tách effectivity, release và object history. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Change Number + Source Object + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không áp BOM hiện tại cho order quá khứ; tách effectivity, release và object history.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không áp BOM hiện tại cho order quá khứ; tách effectivity, release và object history.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "engineering",
          "title": "ECM - Change master",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/375c134383134d7faf15aa7677091aab.html",
          "source_version": "S/4HANA; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/375c134383134d7faf15aa7677091aab.html",
      "source_edition": "S/4HANA; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP20",
      "module": "PP",
      "tcode": "MF60",
      "title": "Pull list và nhu cầu cấp vật tư sản xuất",
      "sourceFamily": "staging",
      "kind": "WORKLIST",
      "grain": "Production supply area component replenishment item",
      "keys": [
        "Plant",
        "Production Supply Area",
        "Material",
        "Replenishment Item"
      ],
      "columns": [
        "Plant",
        "Production Supply Area",
        "Material",
        "Storage Location",
        "Source Storage Location",
        "Replenishment Item",
        "Requirement Date",
        "Required Quantity",
        "Available Quantity",
        "Replenishment Quantity",
        "Unit",
        "Order",
        "Reservation",
        "Control Cycle",
        "Staging Method",
        "Delivery",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Supply Area",
          "label": "Production Supply Area",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Supply Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 4,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Storage Location",
          "label": "Source Storage Location",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Source Storage Location. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Replenishment Item",
          "label": "Replenishment Item",
          "position": 6,
          "type": "text",
          "meaning": "dòng: Replenishment Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Quantity",
          "label": "Required Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Required Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Quantity",
          "label": "Available Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Available Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Replenishment Quantity",
          "label": "Replenishment Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Replenishment Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 12,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reservation",
          "label": "Reservation",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reservation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Control Cycle",
          "label": "Control Cycle",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Control Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Staging Method",
          "label": "Staging Method",
          "position": 15,
          "type": "text",
          "meaning": "phương pháp: Staging Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery",
          "label": "Delivery",
          "position": 16,
          "type": "text",
          "meaning": "Chứng từ giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "PSA nào thiếu component để đáp ứng sản xuất?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Pull list và nhu cầu cấp vật tư sản xuất. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Production supply area component replenishment item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Staging proposal không phải consumption; EWM/IM stock transfer semantics cần xác minh company setup. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Production Supply Area + Material + Replenishment Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Staging proposal không phải consumption; EWM/IM stock transfer semantics cần xác minh company setup.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Staging proposal không phải consumption; EWM/IM stock transfer semantics cần xác minh company setup.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Material Staging (with EWM)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD04",
      "module": "SD",
      "tcode": "VA15",
      "title": "Danh sách yêu cầu báo giá của khách hàng",
      "sourceFamily": "inquiries",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Sales inquiry item",
      "keys": [
        "Sales Document",
        "Sales Item"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Document Type",
        "Document Date",
        "Sold-to Party",
        "Ship-to Party",
        "Sales Organization",
        "Distribution Channel",
        "Division",
        "Material",
        "Plant",
        "Requested Quantity",
        "Unit",
        "Net Value",
        "Currency",
        "Valid From",
        "Valid To",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Distribution Channel",
          "label": "Distribution Channel",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Distribution Channel. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Division",
          "label": "Division",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Division. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 10,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 11,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requested Quantity",
          "label": "Requested Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Requested Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 16,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 17,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Inquiry nào còn hiệu lực và chưa thành quotation?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách yêu cầu báo giá của khách hàng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales inquiry item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Inquiry pipeline không phải doanh thu hoặc backlog đã được khách cam kết. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Sales Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Inquiry pipeline không phải doanh thu hoặc backlog đã được khách cam kết.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Inquiry pipeline không phải doanh thu hoặc backlog đã được khách cam kết.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD04 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "List Inquiries - VA15",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/267558ccf9244fc18fe4753bff883b53.html?locale=ja-JPversion%3D2208.503",
          "source_version": "2602 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn161search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/267558ccf9244fc18fe4753bff883b53.html?locale=ja-JPversion%3D2208.503",
      "source_edition": "2602 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD05",
      "module": "SD",
      "tcode": "VA25 (candidate)",
      "title": "Danh sách quotation và hiệu lực chào giá",
      "sourceFamily": "quotations",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Sales quotation item",
      "keys": [
        "Sales Document",
        "Sales Item"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Document Type",
        "Document Date",
        "Sold-to Party",
        "Ship-to Party",
        "Sales Organization",
        "Material",
        "Plant",
        "Quoted Quantity",
        "Unit",
        "Net Price",
        "Price Unit",
        "Net Value",
        "Currency",
        "Valid From",
        "Valid To",
        "Probability",
        "Rejection Reason",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 8,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 9,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quoted Quantity",
          "label": "Quoted Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Quoted Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Price",
          "label": "Net Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Net Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 16,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 17,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Probability",
          "label": "Probability",
          "position": 18,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Probability. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Rejection Reason",
          "label": "Rejection Reason",
          "position": 19,
          "type": "text",
          "meaning": "lý do: Rejection Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 20,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 21,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Quotation nào hết hạn, bị từ chối hoặc đã thành order?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách quotation và hiệu lực chào giá. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales quotation item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Quotation value/probability là sales pipeline, không phải revenue recognition. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Sales Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Quotation value/probability là sales pipeline, không phải revenue recognition.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Quotation value/probability là sales pipeline, không phải revenue recognition.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD05 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Sales Orders - VA03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD06",
      "module": "SD",
      "tcode": "VA45 (candidate)",
      "title": "Hợp đồng bán và phần đã release",
      "sourceFamily": "contracts",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Contract item và validity",
      "keys": [
        "Contract",
        "Sales Item",
        "Valid From"
      ],
      "columns": [
        "Contract",
        "Sales Item",
        "Document Type",
        "Sold-to Party",
        "Sales Organization",
        "Material",
        "Target Quantity",
        "Released Quantity",
        "Open Quantity",
        "Unit",
        "Target Value",
        "Released Value",
        "Currency",
        "Valid From",
        "Valid To",
        "Reference",
        "Rejection Reason",
        "Status"
      ],
      "fields": [
        {
          "key": "Contract",
          "label": "Contract",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Contract. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Target Quantity",
          "label": "Target Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Target Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Released Quantity",
          "label": "Released Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Released Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Target Value",
          "label": "Target Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Mức mục tiêu của characteristic",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Released Value",
          "label": "Released Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Released Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 16,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Rejection Reason",
          "label": "Rejection Reason",
          "position": 17,
          "type": "text",
          "meaning": "lý do: Rejection Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Contract nào gần hết hạn hoặc còn giá trị chưa release?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Hợp đồng bán và phần đã release. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Contract item và validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Release quantity không phải delivered quantity; contract ceiling chưa là revenue. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Contract + Sales Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Release quantity không phải delivered quantity; contract ceiling chưa là revenue.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Release quantity không phải delivered quantity; contract ceiling chưa là revenue.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "List Sales Contracts",
          "url": "https://help.sap.com/docs/s4hana-cloud-best-practices/sales-contract-management-i9i-ch/list-sales-contracts?locale=en-US&state=PRODUCTION&version=2608",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/s4hana-cloud-best-practices/sales-contract-management-i9i-ch/list-sales-contracts?locale=en-US&state=PRODUCTION&version=2608",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD07",
      "module": "SD",
      "tcode": "VA35 (candidate)",
      "title": "Sales scheduling agreement và schedule lines",
      "sourceFamily": "salesSchedule",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Sales agreement item schedule line release",
      "keys": [
        "Agreement",
        "Sales Item",
        "Schedule Line",
        "Release Number"
      ],
      "columns": [
        "Agreement",
        "Sales Item",
        "Schedule Line",
        "Release Number",
        "Sold-to Party",
        "Ship-to Party",
        "Material",
        "Plant",
        "Delivery Date",
        "Scheduled Quantity",
        "Confirmed Quantity",
        "Delivered Quantity",
        "Open Quantity",
        "Unit",
        "Cumulative Quantity",
        "Release Date",
        "Customer Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Agreement",
          "label": "Agreement",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Schedule Line",
          "label": "Schedule Line",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Schedule Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Number",
          "label": "Release Number",
          "position": 4,
          "type": "text",
          "meaning": "số định danh: Release Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 7,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 8,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Date",
          "label": "Delivery Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Delivery Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Scheduled Quantity",
          "label": "Scheduled Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Scheduled Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Confirmed Quantity",
          "label": "Confirmed Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Confirmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Delivered Quantity",
          "label": "Delivered Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Delivered Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cumulative Quantity",
          "label": "Cumulative Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Cumulative Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 16,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Customer Reference",
          "label": "Customer Reference",
          "position": 17,
          "type": "text",
          "meaning": "tham chiếu: Customer Reference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Lịch giao của khách khác schedule đã xác nhận ra sao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Sales scheduling agreement và schedule lines. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales agreement item schedule line release. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Phải tách cumulative quantity khỏi period quantity, và release revision khỏi giao hàng actual. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Agreement + Sales Item + Schedule Line + Release Number cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Phải tách cumulative quantity khỏi period quantity, và release revision khỏi giao hàng actual.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Phải tách cumulative quantity khỏi period quantity, và release revision khỏi giao hàng actual.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "App Extensibility: Manage Sales Scheduling Agreements",
          "url": "https://help.sap.com/docs/PRODUCT_ID/a376cd9ea00d476b96f18dea1247e6a5/5a6888f05ba743458991ef373024c438.html?locale=en-US",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/a376cd9ea00d476b96f18dea1247e6a5/5a6888f05ba743458991ef373024c438.html?locale=en-US",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD08",
      "module": "SD",
      "tcode": "VFX3 (candidate)",
      "title": "Billing chưa chuyển thành chứng từ FI",
      "sourceFamily": "billingBlocked",
      "kind": "WORKLIST",
      "grain": "Billing document và accounting transfer exception",
      "keys": [
        "Billing Document",
        "Exception Code"
      ],
      "columns": [
        "Billing Document",
        "Billing Type",
        "Billing Date",
        "Sold-to Party",
        "Payer",
        "Sales Organization",
        "Company Code",
        "Net Value",
        "Tax Amount",
        "Currency",
        "Accounting Status",
        "Posting Block",
        "Exception Code",
        "Message",
        "Accounting Document",
        "Reference",
        "Owner",
        "Status"
      ],
      "fields": [
        {
          "key": "Billing Document",
          "label": "Billing Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Type",
          "label": "Billing Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Billing Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Date",
          "label": "Billing Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "ngày: Billing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payer",
          "label": "Payer",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 7,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Tax Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Status",
          "label": "Accounting Status",
          "position": 11,
          "type": "text",
          "meaning": "trạng thái: Accounting Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Block",
          "label": "Posting Block",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posting Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 13,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 14,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 16,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 17,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Billing nào đã lập nhưng chưa chuyển FI và vì sao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Billing chưa chuyển thành chứng từ FI. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Billing document và accounting transfer exception. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng billing blocked thành AR posted; reconciliation với VF05 cần accounting status. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Billing Document + Exception Code cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng billing blocked thành AR posted; reconciliation với VF05 cần accounting status.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng billing blocked thành AR posted; reconciliation với VF05 cần accounting status.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Billing Documents Blocked for Accounting",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/ab70b6535fe6b74ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search1",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/ab70b6535fe6b74ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD09",
      "module": "SD",
      "tcode": "V.02 (candidate)",
      "title": "Chứng từ bán thiếu dữ liệu bắt buộc",
      "sourceFamily": "incomplete",
      "kind": "WORKLIST",
      "grain": "Sales document item và missing field",
      "keys": [
        "Sales Document",
        "Sales Item",
        "Field Name"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Document Type",
        "Sold-to Party",
        "Sales Organization",
        "Material",
        "Field Name",
        "Incompletion Group",
        "Status Group",
        "Delivery Block",
        "Billing Block",
        "Created Date",
        "Changed At",
        "Owner",
        "Reference",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Field Name",
          "label": "Field Name",
          "position": 7,
          "type": "text",
          "meaning": "tên: Field Name. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Incompletion Group",
          "label": "Incompletion Group",
          "position": 8,
          "type": "text",
          "meaning": "nhóm: Incompletion Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status Group",
          "label": "Status Group",
          "position": 9,
          "type": "text",
          "meaning": "nhóm: Status Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Block",
          "label": "Delivery Block",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Delivery Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Block",
          "label": "Billing Block",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Billing Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created Date",
          "label": "Created Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "ngày: Created Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 13,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 14,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 15,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 17,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Trường nào khiến sales document không thể xử lý tiếp?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chứng từ bán thiếu dữ liệu bắt buộc. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales document item và missing field. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Một document nhiều missing fields: count documents distinct, không sum net value từng lỗi. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Sales Item + Field Name cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Một document nhiều missing fields: count documents distinct, không sum net value từng lỗi.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Một document nhiều missing fields: count documents distinct, không sum net value từng lỗi.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD09 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "List of Incomplete Sales Documents",
          "url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/16a7c6535e601e4be10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=6.18.latest",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/16a7c6535e601e4be10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=6.18.latest",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD10",
      "module": "SD",
      "tcode": "VF04",
      "title": "Billing due list và hạn lập hóa đơn",
      "sourceFamily": "billingDue",
      "kind": "WORKLIST",
      "grain": "Reference document item billing due date",
      "keys": [
        "Reference Document",
        "Reference Item",
        "Billing Date"
      ],
      "columns": [
        "Reference Document",
        "Reference Item",
        "Document Category",
        "Billing Date",
        "Sold-to Party",
        "Payer",
        "Sales Organization",
        "Company Code",
        "Material",
        "Quantity",
        "Unit",
        "Net Value",
        "Currency",
        "Billing Block",
        "Billing Type",
        "Invoice Split Key",
        "Status"
      ],
      "fields": [
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 1,
          "type": "text",
          "meaning": "chứng từ: Reference Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Item",
          "label": "Reference Item",
          "position": 2,
          "type": "text",
          "meaning": "dòng: Reference Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Category",
          "label": "Document Category",
          "position": 3,
          "type": "text",
          "meaning": "loại: Document Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Date",
          "label": "Billing Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: Billing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payer",
          "label": "Payer",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 8,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Block",
          "label": "Billing Block",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Billing Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Type",
          "label": "Billing Type",
          "position": 15,
          "type": "text",
          "meaning": "loại nghiệp vụ: Billing Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Invoice Split Key",
          "label": "Invoice Split Key",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Invoice Split Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Shipment/order nào đến hạn billing nhưng chưa lập?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Billing due list và hạn lập hóa đơn. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Reference document item billing due date. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chỉ xem due list; không nhấn tạo billing. Invoice split có thể biến1delivery thành nhiều invoices. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Reference Document + Reference Item + Billing Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chỉ xem due list; không nhấn tạo billing. Invoice split có thể biến1delivery thành nhiều invoices.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chỉ xem due list; không nhấn tạo billing. Invoice split có thể biến1delivery thành nhiều invoices.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD10 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Create Billing Documents - VF04",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/419c8257692eab76e10000000a441470.html?advAll=Returns+and+CBAR+Process+",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn161search1",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/419c8257692eab76e10000000a441470.html?advAll=Returns+and+CBAR+Process+",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD11",
      "module": "SD",
      "tcode": "VF03",
      "title": "Chi tiết billing item và pricing",
      "sourceFamily": "billing",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Billing document item",
      "keys": [
        "Billing Document",
        "Billing Item"
      ],
      "columns": [
        "Billing Document",
        "Billing Item",
        "Billing Type",
        "Billing Date",
        "Company Code",
        "Sales Organization",
        "Sold-to Party",
        "Payer",
        "Material",
        "Plant",
        "Quantity",
        "Unit",
        "Net Price",
        "Price Unit",
        "Net Value",
        "Tax Amount",
        "Currency",
        "Reference Document",
        "Reference Item",
        "Accounting Document",
        "Cancellation Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Billing Document",
          "label": "Billing Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Item",
          "label": "Billing Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Type",
          "label": "Billing Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Billing Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Date",
          "label": "Billing Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: Billing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 5,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payer",
          "label": "Payer",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 10,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Price",
          "label": "Net Price",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "đơn giá: Net Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Tax Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 17,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 18,
          "type": "text",
          "meaning": "chứng từ: Reference Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Item",
          "label": "Reference Item",
          "position": 19,
          "type": "text",
          "meaning": "dòng: Reference Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 20,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cancellation Document",
          "label": "Cancellation Document",
          "position": 21,
          "type": "text",
          "meaning": "chứng từ: Cancellation Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 22,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Billing item lấy giá, thuế và reference từ đâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết billing item và pricing. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Billing document item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "VF03 item/pricing phục vụ drilldown khác VF05 list; cancellation cần link gốc. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Billing Document + Billing Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "VF03 item/pricing phục vụ drilldown khác VF05 list; cancellation cần link gốc.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "VF03 item/pricing phục vụ drilldown khác VF05 list; cancellation cần link gốc.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD11 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Sales Orders - VA03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD12",
      "module": "SD",
      "tcode": "VL03N",
      "title": "Chi tiết outbound delivery và goods issue",
      "sourceFamily": "delivery",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Delivery item batch split item",
      "keys": [
        "Delivery",
        "Delivery Item",
        "Batch Split Item"
      ],
      "columns": [
        "Delivery",
        "Delivery Item",
        "Batch Split Item",
        "Delivery Type",
        "Ship-to Party",
        "Shipping Point",
        "Plant",
        "Storage Location",
        "Material",
        "Batch",
        "Delivery Quantity",
        "Picked Quantity",
        "Unit",
        "Planned GI Date",
        "Actual GI Date",
        "Goods Movement Status",
        "Material Document",
        "Reference Document",
        "Reference Item",
        "Status"
      ],
      "fields": [
        {
          "key": "Delivery",
          "label": "Delivery",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Item",
          "label": "Delivery Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch Split Item",
          "label": "Batch Split Item",
          "position": 3,
          "type": "text",
          "meaning": "dòng: Batch Split Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Type",
          "label": "Delivery Type",
          "position": 4,
          "type": "text",
          "meaning": "loại nghiệp vụ: Delivery Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Shipping Point",
          "label": "Shipping Point",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Shipping Point. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 8,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 10,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Quantity",
          "label": "Delivery Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Delivery Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Picked Quantity",
          "label": "Picked Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Picked Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned GI Date",
          "label": "Planned GI Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Planned GI Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Actual GI Date",
          "label": "Actual GI Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Actual GI Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Goods Movement Status",
          "label": "Goods Movement Status",
          "position": 16,
          "type": "text",
          "meaning": "trạng thái: Goods Movement Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 18,
          "type": "text",
          "meaning": "chứng từ: Reference Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Item",
          "label": "Reference Item",
          "position": 19,
          "type": "text",
          "meaning": "dòng: Reference Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Delivery nào chưa GI, có batch split hoặc thiếu picking?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết outbound delivery và goods issue. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Delivery item batch split item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Goods issue date không tự xác định IFRS15 control transfer; aggregate batch splits trước so với parent. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Delivery + Delivery Item + Batch Split Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Goods issue date không tự xác định IFRS15 control transfer; aggregate batch splits trước so với parent.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Goods issue date không tự xác định IFRS15 control transfer; aggregate batch splits trước so với parent.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD12 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "delivery",
          "title": "Display Outbound Delivery",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/32da8359c8ee4e8b8e8c5e15cacba5aa/a8a033d4094d4581ac556a629d73e588.html?locale=en-us",
          "source_version": "Cloud; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/32da8359c8ee4e8b8e8c5e15cacba5aa/a8a033d4094d4581ac556a629d73e588.html?locale=en-us",
      "source_edition": "Cloud; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD13",
      "module": "SD",
      "tcode": "VKM1 (legacy candidate)",
      "title": "Credit block và worklist giải phóng đơn",
      "sourceFamily": "credit",
      "kind": "WORKLIST",
      "grain": "Credit blocked document và credit segment",
      "keys": [
        "Sales Document",
        "Credit Segment"
      ],
      "columns": [
        "Sales Document",
        "Sold-to Party",
        "Credit Segment",
        "Credit Limit",
        "Credit Exposure",
        "Currency",
        "Document Value",
        "Risk Class",
        "Credit Status",
        "Block Reason",
        "Check Date",
        "Due Date",
        "Owner",
        "Release Date",
        "Released By",
        "Status",
        "Reference"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Credit Segment",
          "label": "Credit Segment",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Credit Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Credit Limit",
          "label": "Credit Limit",
          "position": 4,
          "type": "raw_decimal",
          "meaning": "giới hạn: Credit Limit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Credit Exposure",
          "label": "Credit Exposure",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Credit Exposure. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 6,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Value",
          "label": "Document Value",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "giá trị: Document Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Risk Class",
          "label": "Risk Class",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Risk Class. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Credit Status",
          "label": "Credit Status",
          "position": 9,
          "type": "text",
          "meaning": "trạng thái: Credit Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Block Reason",
          "label": "Block Reason",
          "position": 10,
          "type": "text",
          "meaning": "Lý do bị khóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Check Date",
          "label": "Check Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Check Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 13,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Released By",
          "label": "Released By",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Released By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nào bị credit block và exposure thuộc segment nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Credit block và worklist giải phóng đơn. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Credit blocked document và credit segment. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Legacy VKM1 không tự áp cho S/4 FSCM; chỉ read context, không release credit. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Credit Segment cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Legacy VKM1 không tự áp cho S/4 FSCM; chỉ read context, không release credit.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Legacy VKM1 không tự áp cho S/4 FSCM; chỉ read context, không release credit.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD13 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Sales and Distribution Functions in Credit Management",
          "url": "https://help.sap.com/docs/SAP_ERP/b451edee79a640b7aa5306170573c56d/f9adc9535c267114e10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search9",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/b451edee79a640b7aa5306170573c56d/f9adc9535c267114e10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "VKM1 là legacy context; FSCM credit workflow cần kiểm riêng.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD14",
      "module": "SD",
      "tcode": "VA03",
      "title": "Document flow của sales order",
      "sourceFamily": "salesOrder",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Preceding item tới subsequent item edge",
      "keys": [
        "Preceding Document",
        "Preceding Item",
        "Subsequent Document",
        "Subsequent Item"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Preceding Document",
        "Preceding Item",
        "Subsequent Document",
        "Subsequent Item",
        "Document Category",
        "Document Date",
        "Quantity",
        "Unit",
        "Net Value",
        "Currency",
        "Delivery",
        "Delivery Item",
        "Billing Document",
        "Billing Item",
        "Status"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Preceding Document",
          "label": "Preceding Document",
          "position": 3,
          "type": "text",
          "meaning": "chứng từ: Preceding Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Preceding Item",
          "label": "Preceding Item",
          "position": 4,
          "type": "text",
          "meaning": "dòng: Preceding Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Subsequent Document",
          "label": "Subsequent Document",
          "position": 5,
          "type": "text",
          "meaning": "chứng từ: Subsequent Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Subsequent Item",
          "label": "Subsequent Item",
          "position": 6,
          "type": "text",
          "meaning": "dòng: Subsequent Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Category",
          "label": "Document Category",
          "position": 7,
          "type": "text",
          "meaning": "loại: Document Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery",
          "label": "Delivery",
          "position": 13,
          "type": "text",
          "meaning": "Chứng từ giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Item",
          "label": "Delivery Item",
          "position": 14,
          "type": "text",
          "meaning": "Dòng giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Document",
          "label": "Billing Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Item",
          "label": "Billing Item",
          "position": 16,
          "type": "text",
          "meaning": "Dòng billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nối quotation, delivery, billing và return như thế nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Document flow của sales order. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Preceding item tới subsequent item edge. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không sum parent net value sau join nhiều edge; keep document category và reversal chain. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Preceding Document + Preceding Item + Subsequent Document + Subsequent Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không sum parent net value sau join nhiều edge; keep document category và reversal chain.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không sum parent net value sau join nhiều edge; keep document category và reversal chain.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD14 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Sales Orders - VA03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD15",
      "module": "SD",
      "tcode": "V/LD (candidate)",
      "title": "Điều kiện giá và validity của sales pricing",
      "sourceFamily": "pricing",
      "kind": "MASTER_DISPLAY",
      "grain": "Condition record key và validity",
      "keys": [
        "Condition Record",
        "Condition Type",
        "Valid From"
      ],
      "columns": [
        "Condition Record",
        "Condition Type",
        "Sales Organization",
        "Distribution Channel",
        "Customer",
        "Material",
        "Price List",
        "Valid From",
        "Valid To",
        "Condition Amount",
        "Currency",
        "Price Unit",
        "Unit",
        "Scale Quantity",
        "Scale Value",
        "Calculation Type",
        "Access Sequence",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Condition Record",
          "label": "Condition Record",
          "position": 1,
          "type": "text",
          "meaning": "bản ghi: Condition Record. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Condition Type",
          "label": "Condition Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Condition Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Distribution Channel",
          "label": "Distribution Channel",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Distribution Channel. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 5,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price List",
          "label": "Price List",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Price List. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Condition Amount",
          "label": "Condition Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Condition Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Scale Quantity",
          "label": "Scale Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Scale Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Scale Value",
          "label": "Scale Value",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị: Scale Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Calculation Type",
          "label": "Calculation Type",
          "position": 16,
          "type": "text",
          "meaning": "loại nghiệp vụ: Calculation Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Access Sequence",
          "label": "Access Sequence",
          "position": 17,
          "type": "text",
          "meaning": "thứ tự: Access Sequence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 18,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Giá/discount nào có hiệu lực cho customer-material?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Điều kiện giá và validity của sales pricing. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Condition record key và validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Condition record không phải applied invoice price; giữ scale, unit, calculation type và validity. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Condition Record + Condition Type + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Condition record không phải applied invoice price; giữ scale, unit, calculation type và validity.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Condition record không phải applied invoice price; giữ scale, unit, calculation type và validity.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD15 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Pricing Reports",
          "url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/958dc95360267214e10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/958dc95360267214e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM04",
      "module": "QM",
      "tcode": "QE51N",
      "title": "Kết quả kiểm định theo characteristic",
      "sourceFamily": "results",
      "kind": "WORKLIST",
      "grain": "Inspection lot operation characteristic sample",
      "keys": [
        "Inspection Lot",
        "Operation",
        "Characteristic",
        "Sample"
      ],
      "columns": [
        "Inspection Lot",
        "Operation",
        "Characteristic",
        "Sample",
        "Material",
        "Plant",
        "Batch",
        "Inspection Type",
        "Result",
        "Result Unit",
        "Lower Limit",
        "Upper Limit",
        "Target Value",
        "Sample Size",
        "Valuation",
        "Recorded By",
        "Recorded Date",
        "Result Status",
        "Status"
      ],
      "fields": [
        {
          "key": "Inspection Lot",
          "label": "Inspection Lot",
          "position": 1,
          "type": "text",
          "meaning": "Lô kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 2,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic",
          "label": "Characteristic",
          "position": 3,
          "type": "text",
          "meaning": "Đặc tính kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sample",
          "label": "Sample",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sample. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 5,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 6,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 7,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Type",
          "label": "Inspection Type",
          "position": 8,
          "type": "text",
          "meaning": "loại nghiệp vụ: Inspection Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Result",
          "label": "Result",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Giá trị kết quả đo/đánh giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lower Limit",
          "label": "Lower Limit",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Giới hạn dưới theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Upper Limit",
          "label": "Upper Limit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giới hạn trên theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Target Value",
          "label": "Target Value",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Mức mục tiêu của characteristic",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Sample Size",
          "label": "Sample Size",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Sample Size. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Valuation",
          "label": "Valuation",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recorded By",
          "label": "Recorded By",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Recorded By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recorded Date",
          "label": "Recorded Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Recorded Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Result Status",
          "label": "Result Status",
          "position": 18,
          "type": "text",
          "meaning": "trạng thái: Result Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Characteristic nào ngoài giới hạn hoặc thiếu kết quả?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả kiểm định theo characteristic. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Inspection lot operation characteristic sample. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "QA33 là lot list; result grain cần sample/characteristic, không suy release chỉ từ một result. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Inspection Lot + Operation + Characteristic + Sample cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "QA33 là lot list; result grain cần sample/characteristic, không suy release chỉ từ một result.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "QA33 là lot list; result grain cần sample/characteristic, không suy release chỉ từ một result.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM04 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Inspection Lots",
          "url": "https://help.sap.com/docs/service-asset-manager/sap-service-and-asset-manager-configuration-guide/inspection-lots",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn159search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/service-asset-manager/sap-service-and-asset-manager-configuration-guide/inspection-lots",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM05",
      "module": "QM",
      "tcode": "QA13",
      "title": "Usage decision và phân loại xử lý stock",
      "sourceFamily": "decision",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Inspection lot decision và stock posting item",
      "keys": [
        "Inspection Lot",
        "Decision ID",
        "Item"
      ],
      "columns": [
        "Inspection Lot",
        "Decision ID",
        "Item",
        "Material",
        "Plant",
        "Batch",
        "Lot Quantity",
        "Unit",
        "Decision Code",
        "Code Group",
        "Decision Date",
        "Decision By",
        "Quality Score",
        "Accepted Quantity",
        "Rejected Quantity",
        "Blocked Quantity",
        "Stock Posting Status",
        "Material Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Inspection Lot",
          "label": "Inspection Lot",
          "position": 1,
          "type": "text",
          "meaning": "Lô kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Decision ID",
          "label": "Decision ID",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Decision ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 3,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 6,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lot Quantity",
          "label": "Lot Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Lot Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Decision Code",
          "label": "Decision Code",
          "position": 9,
          "type": "text",
          "meaning": "mã phân loại: Decision Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Code Group",
          "label": "Code Group",
          "position": 10,
          "type": "text",
          "meaning": "nhóm: Code Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Decision Date",
          "label": "Decision Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Decision Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Decision By",
          "label": "Decision By",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Decision By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quality Score",
          "label": "Quality Score",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Điểm chất lượng theo phương pháp cấu hình",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Accepted Quantity",
          "label": "Accepted Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Accepted Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Rejected Quantity",
          "label": "Rejected Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Rejected Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Blocked Quantity",
          "label": "Blocked Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "số lượng: Blocked Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Stock Posting Status",
          "label": "Stock Posting Status",
          "position": 17,
          "type": "text",
          "meaning": "trạng thái: Stock Posting Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 18,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Lot được quyết định chấp nhận hay loại và stock đã post chưa?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Usage decision và phân loại xử lý stock. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Inspection lot decision và stock posting item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Usage decision code không tự chứng minh stock movement; tie accepted/rejected theo lot quantity và posting. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Inspection Lot + Decision ID + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Usage decision code không tự chứng minh stock movement; tie accepted/rejected theo lot quantity và posting.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Usage decision code không tự chứng minh stock movement; tie accepted/rejected theo lot quantity và posting.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM05 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Usage Decision - Transaction",
          "url": "https://help.sap.com/docs/SAP_ERP/2ff9f2a003194e3b93e8201a0b44618f/85c2b65334e6b54ce10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/2ff9f2a003194e3b93e8201a0b44618f/85c2b65334e6b54ce10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM06",
      "module": "QM",
      "tcode": "QS26 (candidate)",
      "title": "Danh mục master inspection characteristic",
      "sourceFamily": "characteristics",
      "kind": "MASTER_DISPLAY",
      "grain": "Plant characteristic version validity",
      "keys": [
        "Plant",
        "Characteristic",
        "Version",
        "Valid From"
      ],
      "columns": [
        "Plant",
        "Characteristic",
        "Version",
        "Characteristic Description",
        "Characteristic Type",
        "Result Unit",
        "Lower Limit",
        "Upper Limit",
        "Target Value",
        "Decimal Places",
        "Sampling Procedure",
        "Inspection Method",
        "Control Indicator",
        "Valid From",
        "Valid To",
        "Status",
        "Change Number"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic",
          "label": "Characteristic",
          "position": 2,
          "type": "text",
          "meaning": "Đặc tính kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 3,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic Description",
          "label": "Characteristic Description",
          "position": 4,
          "type": "text",
          "meaning": "diễn giải: Characteristic Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic Type",
          "label": "Characteristic Type",
          "position": 5,
          "type": "text",
          "meaning": "loại nghiệp vụ: Characteristic Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 6,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lower Limit",
          "label": "Lower Limit",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "Giới hạn dưới theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Upper Limit",
          "label": "Upper Limit",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Giới hạn trên theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Target Value",
          "label": "Target Value",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Mức mục tiêu của characteristic",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Decimal Places",
          "label": "Decimal Places",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Decimal Places. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Sampling Procedure",
          "label": "Sampling Procedure",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sampling Procedure. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Method",
          "label": "Inspection Method",
          "position": 12,
          "type": "text",
          "meaning": "phương pháp: Inspection Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Control Indicator",
          "label": "Control Indicator",
          "position": 13,
          "type": "text",
          "meaning": "cờ chỉ báo: Control Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 17,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Định nghĩa characteristic nào đang được tái dùng trong plans?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục master inspection characteristic. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Plant characteristic version validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chỉnh master có thể đổi plan dependent; version và history cần capture trước phân tích. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Characteristic + Version + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chỉnh master có thể đổi plan dependent; version và history cần capture trước phân tích.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chỉnh master có thể đổi plan dependent; version và history cần capture trước phân tích.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Listing Master Inspection Characteristics",
          "url": "https://help.sap.com/docs/SAP_ERP/90f562dc43f84f5f8ab7e082e47f9a6c/1a23bd534f22b44ce10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/90f562dc43f84f5f8ab7e082e47f9a6c/1a23bd534f22b44ce10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM07",
      "module": "QM",
      "tcode": "QP03",
      "title": "Inspection plan và đặc tính kiểm tra",
      "sourceFamily": "inspectionPlan",
      "kind": "MASTER_DISPLAY",
      "grain": "Task list group counter operation characteristic validity",
      "keys": [
        "Plant",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Characteristic",
        "Valid From"
      ],
      "columns": [
        "Plant",
        "Material",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Characteristic",
        "Work Center",
        "Inspection Type",
        "Sampling Procedure",
        "Inspection Method",
        "Characteristic Type",
        "Lower Limit",
        "Upper Limit",
        "Result Unit",
        "Valid From",
        "Valid To",
        "Change Number",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 3,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 4,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 5,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic",
          "label": "Characteristic",
          "position": 6,
          "type": "text",
          "meaning": "Đặc tính kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 7,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Type",
          "label": "Inspection Type",
          "position": 8,
          "type": "text",
          "meaning": "loại nghiệp vụ: Inspection Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sampling Procedure",
          "label": "Sampling Procedure",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sampling Procedure. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Method",
          "label": "Inspection Method",
          "position": 10,
          "type": "text",
          "meaning": "phương pháp: Inspection Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic Type",
          "label": "Characteristic Type",
          "position": 11,
          "type": "text",
          "meaning": "loại nghiệp vụ: Characteristic Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lower Limit",
          "label": "Lower Limit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giới hạn dưới theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Upper Limit",
          "label": "Upper Limit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Giới hạn trên theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 16,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 17,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Plan nào áp dụng cho material và operation tại ngày kiểm định?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Inspection plan và đặc tính kiểm tra. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Task list group counter operation characteristic validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Plan master không thay inspection lot snapshot; selection lot size/version phải được lưu. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Task List Group + Group Counter + Operation + Characteristic + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Plan master không thay inspection lot snapshot; selection lot size/version phải được lưu.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Plan master không thay inspection lot snapshot; selection lot size/version phải được lưu.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Classic Apps for Inspection Planning",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/2bc3ee8d1c83404e8cf62418640004f2/f96e02507e6b46c9a2b83cec20d5cc29.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search5",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/2bc3ee8d1c83404e8cf62418640004f2/f96e02507e6b46c9a2b83cec20d5cc29.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM08",
      "module": "QM",
      "tcode": "QI03 (legacy candidate)",
      "title": "Quality info record trong procurement",
      "sourceFamily": "qualityInfo",
      "kind": "MASTER_DISPLAY",
      "grain": "Material supplier plant validity",
      "keys": [
        "Material",
        "Supplier",
        "Plant",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Supplier",
        "Plant",
        "Valid From",
        "Valid To",
        "Release Quantity",
        "Consumed Quantity",
        "Unit",
        "Inspection Type",
        "Certificate Required",
        "Quality Agreement",
        "Block Reason",
        "Release Date",
        "Released By",
        "Status",
        "Reference",
        "Deletion Flag"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 2,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Release Quantity",
          "label": "Release Quantity",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "số lượng: Release Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Consumed Quantity",
          "label": "Consumed Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Consumed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Type",
          "label": "Inspection Type",
          "position": 9,
          "type": "text",
          "meaning": "loại nghiệp vụ: Inspection Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Certificate Required",
          "label": "Certificate Required",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Certificate Required. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quality Agreement",
          "label": "Quality Agreement",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Quality Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Block Reason",
          "label": "Block Reason",
          "position": 12,
          "type": "text",
          "meaning": "Lý do bị khóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Released By",
          "label": "Released By",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Released By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 16,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 17,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier-material nào chưa được quality release?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Quality info record trong procurement. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material supplier plant validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Source Cloud đánh dấu app deprecated; kiểm successor trên target trước dùng, không tự gán QI03 mới nhất. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Supplier + Plant + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Source Cloud đánh dấu app deprecated; kiểm successor trên target trước dùng, không tự gán QI03 mới nhất.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Source Cloud đánh dấu app deprecated; kiểm successor trên target trước dùng, không tự gán QI03 mới nhất.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Quality Info Record in Procurement (Deprecated)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/aa7e87579f345c08e10000000a441470.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/aa7e87579f345c08e10000000a441470.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Nguồn đánh dấu app deprecated; phải kiểm successor theo target release.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM09",
      "module": "QM",
      "tcode": "QC55 (candidate)",
      "title": "Incoming quality certificates và liên kết receipt",
      "sourceFamily": "certificates",
      "kind": "WORKLIST",
      "grain": "Certificate và receipt item",
      "keys": [
        "Certificate",
        "Purchase Order",
        "PO Item",
        "Material Document",
        "Item"
      ],
      "columns": [
        "Certificate",
        "Certificate Type",
        "Supplier",
        "Material",
        "Plant",
        "Batch",
        "Purchase Order",
        "PO Item",
        "Material Document",
        "Item",
        "Receipt Date",
        "Received Date",
        "Required Date",
        "Certificate Status",
        "Inspection Lot",
        "Owner",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Certificate",
          "label": "Certificate",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Certificate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Certificate Type",
          "label": "Certificate Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Certificate Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 3,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 6,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 7,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 9,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 10,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receipt Date",
          "label": "Receipt Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Receipt Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Received Date",
          "label": "Received Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "ngày: Received Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Date",
          "label": "Required Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Required Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Certificate Status",
          "label": "Certificate Status",
          "position": 14,
          "type": "text",
          "meaning": "trạng thái: Certificate Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Lot",
          "label": "Inspection Lot",
          "position": 15,
          "type": "text",
          "meaning": "Lô kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 16,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Receipt nào thiếu chứng nhận hoặc certificate đến trễ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Incoming quality certificates và liên kết receipt. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Certificate và receipt item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Có certificate không đồng nghĩa lot pass; tên/format QC55 chỉ là candidate, chưa full layout. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Certificate + Purchase Order + PO Item + Material Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Có certificate không đồng nghĩa lot pass; tên/format QC55 chỉ là candidate, chưa full layout.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Có certificate không đồng nghĩa lot pass; tên/format QC55 chỉ là candidate, chưa full layout.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM09 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Quality Certificates",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/dc733e09815e41d3b0591bfd7640f1b9.html?locale=en-US",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/dc733e09815e41d3b0591bfd7640f1b9.html?locale=en-US",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM10",
      "module": "QM",
      "tcode": "QM13",
      "title": "Tasks của quality notification và hạn xử lý",
      "sourceFamily": "qualityTasks",
      "kind": "WORKLIST",
      "grain": "Notification task",
      "keys": [
        "Notification",
        "Task"
      ],
      "columns": [
        "Notification",
        "Task",
        "Task Code",
        "Code Group",
        "Task Description",
        "Material",
        "Plant",
        "Batch",
        "Supplier",
        "Customer",
        "Responsible Person",
        "Planned Start",
        "Planned Finish",
        "Completed Date",
        "Task Status",
        "Priority",
        "Cause Code",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Notification",
          "label": "Notification",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Notification. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task",
          "label": "Task",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Task. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task Code",
          "label": "Task Code",
          "position": 3,
          "type": "text",
          "meaning": "mã phân loại: Task Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Code Group",
          "label": "Code Group",
          "position": 4,
          "type": "text",
          "meaning": "nhóm: Code Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task Description",
          "label": "Task Description",
          "position": 5,
          "type": "text",
          "meaning": "diễn giải: Task Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 8,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 9,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 10,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Person",
          "label": "Responsible Person",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Person. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Start",
          "label": "Planned Start",
          "position": 12,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Planned Start. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Planned Finish",
          "label": "Planned Finish",
          "position": 13,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Planned Finish. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Completed Date",
          "label": "Completed Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Completed Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Task Status",
          "label": "Task Status",
          "position": 15,
          "type": "text",
          "meaning": "trạng thái: Task Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Priority",
          "label": "Priority",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Priority. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cause Code",
          "label": "Cause Code",
          "position": 17,
          "type": "text",
          "meaning": "mã phân loại: Cause Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Task CAPA nào quá hạn hoặc chưa hoàn tất?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Tasks của quality notification và hạn xử lý. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Notification task. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "QM11 notification header khác QM13 task; một notification nhiều task, tránh nhân defect cost. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Notification + Task cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "QM11 notification header khác QM13 task; một notification nhiều task, tránh nhân defect cost.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "QM11 notification header khác QM13 task; một notification nhiều task, tránh nhân defect cost.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM10 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display a List of Quality Notification Tasks (optional)",
          "url": "https://help.sap.com/docs/s4hana-cloud-best-practices/quality-management-for-complaints-from-customers-2fa-br/display-list-of-quality-notification-tasks-optional",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn153search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/s4hana-cloud-best-practices/quality-management-for-complaints-from-customers-2fa-br/display-list-of-quality-notification-tasks-optional",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM04",
      "module": "PM",
      "tcode": "IW29",
      "title": "Danh sách maintenance notifications và downtime",
      "sourceFamily": "notifications",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Maintenance notification",
      "keys": [
        "Notification"
      ],
      "columns": [
        "Notification",
        "Notification Type",
        "Equipment",
        "Functional Location",
        "Plant",
        "Work Center",
        "Planner Group",
        "Priority",
        "Reported Date",
        "Malfunction Start",
        "Malfunction End",
        "Breakdown",
        "Duration",
        "Duration Unit",
        "Order",
        "Responsible Person",
        "Damage Code",
        "Cause Code",
        "Status"
      ],
      "fields": [
        {
          "key": "Notification",
          "label": "Notification",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Notification. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Notification Type",
          "label": "Notification Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Notification Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 3,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 4,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 6,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 7,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Priority",
          "label": "Priority",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Priority. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reported Date",
          "label": "Reported Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Reported Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Malfunction Start",
          "label": "Malfunction Start",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Malfunction Start. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Malfunction End",
          "label": "Malfunction End",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Malfunction End. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Breakdown",
          "label": "Breakdown",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Breakdown. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Duration",
          "label": "Duration",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Duration. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Duration Unit",
          "label": "Duration Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Duration Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 15,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Person",
          "label": "Responsible Person",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Person. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Damage Code",
          "label": "Damage Code",
          "position": 17,
          "type": "text",
          "meaning": "mã phân loại: Damage Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cause Code",
          "label": "Cause Code",
          "position": 18,
          "type": "text",
          "meaning": "mã phân loại: Cause Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Sự cố nào kéo dài, tái diễn hoặc chưa có order?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách maintenance notifications và downtime. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Maintenance notification. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Breakdown duration cần overlap/deduplicate trước tính downtime; notification không phải actual maintenance spend. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Notification cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Breakdown duration cần overlap/deduplicate trước tính downtime; notification không phải actual maintenance spend.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Breakdown duration cần overlap/deduplicate trước tính downtime; notification không phải actual maintenance spend.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM04 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Location Analysis Cube",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee6ff9b281d8448f96b4fe6c89f2bdc8/9cebb3d3cfd449dab1c434cf247f5ba3.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search11",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee6ff9b281d8448f96b4fe6c89f2bdc8/9cebb3d3cfd449dab1c434cf247f5ba3.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM05",
      "module": "PM",
      "tcode": "IH08",
      "title": "Danh mục equipment và cấu trúc sử dụng",
      "sourceFamily": "equipment",
      "kind": "MASTER_DISPLAY",
      "grain": "Equipment validity interval",
      "keys": [
        "Equipment",
        "Valid From"
      ],
      "columns": [
        "Equipment",
        "Equipment Description",
        "Equipment Category",
        "Material",
        "Serial Number",
        "Functional Location",
        "Plant",
        "Work Center",
        "Cost Center",
        "Asset",
        "Manufacturer",
        "Model",
        "Acquisition Date",
        "Valid From",
        "Valid To",
        "End of Use Date",
        "Status",
        "Deletion Flag"
      ],
      "fields": [
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 1,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment Description",
          "label": "Equipment Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Equipment Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment Category",
          "label": "Equipment Category",
          "position": 3,
          "type": "text",
          "meaning": "loại: Equipment Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Serial Number",
          "label": "Serial Number",
          "position": 5,
          "type": "text",
          "meaning": "số định danh: Serial Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 6,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 8,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 9,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Asset",
          "label": "Asset",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Asset. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Manufacturer",
          "label": "Manufacturer",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Manufacturer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Model",
          "label": "Model",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Model. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Acquisition Date",
          "label": "Acquisition Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Acquisition Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "End of Use Date",
          "label": "End of Use Date",
          "position": 16,
          "type": "raw_date",
          "meaning": "ngày: End of Use Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 18,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Equipment nào thiếu liên kết asset/cost center hoặc đã hết sử dụng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục equipment và cấu trúc sử dụng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Equipment validity interval. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Equipment khác FI-AA asset; không giả định1:1 và không tự đưa giá trị equipment vào B/S. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Equipment + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Equipment khác FI-AA asset; không giả định1:1 và không tự đưa giá trị equipment vào B/S.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Equipment khác FI-AA asset; không giả định1:1 và không tự đưa giá trị equipment vào B/S.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM05 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Enterprise Asset Management Part 17",
          "url": "https://help.sap.com/docs/SAP_ERP/930f133a36a843318dc3347afe00a9d6/cf2c451676cf4379a60f8ab11afa95e7.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search6",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/930f133a36a843318dc3347afe00a9d6/cf2c451676cf4379a60f8ab11afa95e7.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM06",
      "module": "PM",
      "tcode": "IH06",
      "title": "Danh mục functional location và hierarchy",
      "sourceFamily": "locations",
      "kind": "MASTER_DISPLAY",
      "grain": "Functional location validity interval",
      "keys": [
        "Functional Location",
        "Valid From"
      ],
      "columns": [
        "Functional Location",
        "Location Description",
        "Superior Location",
        "Structure Indicator",
        "Plant",
        "Planning Plant",
        "Work Center",
        "Cost Center",
        "Maintenance Strategy",
        "Planner Group",
        "ABC Indicator",
        "Valid From",
        "Valid To",
        "End of Use Date",
        "Status",
        "Deletion Flag",
        "Reference"
      ],
      "fields": [
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 1,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Location Description",
          "label": "Location Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Location Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Superior Location",
          "label": "Superior Location",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Superior Location. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Structure Indicator",
          "label": "Structure Indicator",
          "position": 4,
          "type": "text",
          "meaning": "cờ chỉ báo: Structure Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planning Plant",
          "label": "Planning Plant",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planning Plant. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 7,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 8,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Maintenance Strategy",
          "label": "Maintenance Strategy",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Maintenance Strategy. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 10,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "ABC Indicator",
          "label": "ABC Indicator",
          "position": 11,
          "type": "text",
          "meaning": "cờ chỉ báo: ABC Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 12,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "End of Use Date",
          "label": "End of Use Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: End of Use Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 16,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Cấu trúc vị trí bảo trì và trách nhiệm chi phí có nhất quán?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục functional location và hierarchy. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Functional location validity interval. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Hierarchy parent không được cộng cùng equipment leaves; giữ alternative labels nếu company dùng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Functional Location + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Hierarchy parent không được cộng cùng equipment leaves; giữ alternative labels nếu company dùng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Hierarchy parent không được cộng cùng equipment leaves; giữ alternative labels nếu company dùng.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "xMAM Backend",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/home/3361892247.html?locale=en-US&source=redirect&state=PRODUCTION&version=1.0",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/home/3361892247.html?locale=en-US&source=redirect&state=PRODUCTION&version=1.0",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM07",
      "module": "PM",
      "tcode": "IK17",
      "title": "Measurement documents và lịch sử counter",
      "sourceFamily": "measurements",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Measuring point measurement document",
      "keys": [
        "Measuring Point",
        "Measurement Document"
      ],
      "columns": [
        "Measuring Point",
        "Measurement Document",
        "Equipment",
        "Functional Location",
        "Measurement Date",
        "Measurement Time",
        "Counter Reading",
        "Counter Difference",
        "Result Unit",
        "Valuation",
        "Recorded By",
        "Order",
        "Reversal Indicator",
        "Reference",
        "Text",
        "Status",
        "Threshold"
      ],
      "fields": [
        {
          "key": "Measuring Point",
          "label": "Measuring Point",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Measuring Point. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Measurement Document",
          "label": "Measurement Document",
          "position": 2,
          "type": "text",
          "meaning": "chứng từ: Measurement Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 3,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 4,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Measurement Date",
          "label": "Measurement Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: Measurement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Measurement Time",
          "label": "Measurement Time",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "thời gian: Measurement Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Counter Reading",
          "label": "Counter Reading",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "Counter tích lũy; không cộng qua thời gian",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Counter Difference",
          "label": "Counter Difference",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Chênh counter sau reset/reversal handling",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation",
          "label": "Valuation",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recorded By",
          "label": "Recorded By",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Recorded By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 12,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Indicator",
          "label": "Reversal Indicator",
          "position": 13,
          "type": "text",
          "meaning": "Cờ reversal; cần chứng từ/counter gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 14,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 15,
          "type": "text",
          "meaning": "Diễn giải trên dòng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Threshold",
          "label": "Threshold",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Threshold. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Counter có nhảy bất thường hoặc measurement đã reversal?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Measurement documents và lịch sử counter. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Measuring point measurement document. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Counter cumulative không cộng readings; xử lý reset/rollover/reversal trước lấy differences. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Measuring Point + Measurement Document cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Counter cumulative không cộng readings; xử lý reset/rollover/reversal trước lấy differences.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Counter cumulative không cộng readings; xử lý reset/rollover/reversal trước lấy differences.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Collective Entry of Measurement Documents for Order Confirmation",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM08",
      "module": "PM",
      "tcode": "IA03",
      "title": "Equipment task list và operation bảo trì",
      "sourceFamily": "taskList",
      "kind": "MASTER_DISPLAY",
      "grain": "Equipment task list group counter operation validity",
      "keys": [
        "Equipment",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Valid From"
      ],
      "columns": [
        "Equipment",
        "Plant",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Operation Description",
        "Work Center",
        "Control Key",
        "Maintenance Activity Type",
        "Maintenance Strategy",
        "Package",
        "Duration",
        "Duration Unit",
        "Activity Quantity",
        "Activity Unit",
        "Material",
        "Component Quantity",
        "Unit",
        "Valid From",
        "Valid To",
        "Status"
      ],
      "fields": [
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 1,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 3,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 4,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 5,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation Description",
          "label": "Operation Description",
          "position": 6,
          "type": "text",
          "meaning": "diễn giải: Operation Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 7,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Control Key",
          "label": "Control Key",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Control Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Maintenance Activity Type",
          "label": "Maintenance Activity Type",
          "position": 9,
          "type": "text",
          "meaning": "loại nghiệp vụ: Maintenance Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Maintenance Strategy",
          "label": "Maintenance Strategy",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Maintenance Strategy. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Package",
          "label": "Package",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Package. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Duration",
          "label": "Duration",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Duration. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Duration Unit",
          "label": "Duration Unit",
          "position": 13,
          "type": "text",
          "meaning": "đơn vị: Duration Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Quantity",
          "label": "Activity Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Activity Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 15,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 16,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component Quantity",
          "label": "Component Quantity",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "số lượng: Component Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 18,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 19,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 20,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 21,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Operation và package bảo trì nào dùng cho equipment?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Equipment task list và operation bảo trì. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Equipment task list group counter operation validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Master task list planned duration khác actual confirmation; nhiều packages có thể dùng chung operation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Equipment + Task List Group + Group Counter + Operation + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Master task list planned duration khác actual confirmation; nhiều packages có thể dùng chung operation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Master task list planned duration khác actual confirmation; nhiều packages có thể dùng chung operation.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "PM - Equipment task list",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/ce832b4e5573481397a96d68a99ced8f.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/ce832b4e5573481397a96d68a99ced8f.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI31",
      "module": "FI",
      "title": "AP due-date analysis classic",
      "tcode": "S_ALR_87012078",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "AP due-date analysis classic",
      "grain": "Company Code + Supplier + Key Date + Currency",
      "keys": [
        "Company Code",
        "Supplier",
        "Key Date",
        "Currency"
      ],
      "columns": [
        "Company Code",
        "Supplier",
        "Supplier Name",
        "Reconciliation Account",
        "Key Date",
        "Not Due Amount",
        "Overdue 1-30",
        "Overdue 31-60",
        "Overdue 61-90",
        "Overdue Over 90",
        "Open Balance",
        "Currency",
        "Special G/L",
        "Payment Terms",
        "Debit Credit Policy",
        "Report Currency",
        "Exchange Rate Type",
        "Selection Scope"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier Name",
          "label": "Supplier Name",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier Name tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Reconciliation Account",
          "label": "Reconciliation Account",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reconciliation Account tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 5,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Key Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Not Due Amount",
          "label": "Not Due Amount",
          "position": 6,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Not Due Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue 1-30",
          "label": "Overdue 1-30",
          "position": 7,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue 1-30 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue 31-60",
          "label": "Overdue 31-60",
          "position": 8,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue 31-60 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue 61-90",
          "label": "Overdue 61-90",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue 61-90 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue Over 90",
          "label": "Overdue Over 90",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue Over 90 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Open Balance",
          "label": "Open Balance",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Số dư signed cùngkeydate/currency dùng tie-out.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Special G/L",
          "label": "Special G/L",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Special G/L tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Payment Terms",
          "label": "Payment Terms",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Payment Terms tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Debit Credit Policy",
          "label": "Debit Credit Policy",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Debit Credit Policy tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Report Currency",
          "label": "Report Currency",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Report Currency tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Exchange Rate Type",
          "label": "Exchange Rate Type",
          "position": 17,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Thuộc tính Exchange Rate Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Selection Scope",
          "label": "Selection Scope",
          "position": 18,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Selection Scope tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. S_ALR_87012078",
      "reading": "Một dòng theo Company Code + Supplier + Key Date + Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Tổng các bucket phải bằng số dư open signed cùng ngày chốt và currency. Credits, special GL và chứng từ archived cần bridge riêng.",
      "control": "Tổng các bucket phải bằng số dư open signed cùng ngày chốt và currency. Credits, special GL và chứng từ archived cần bridge riêng.",
      "ifrs": "Mẫu hỗ trợ đối chiếu và kiểm soát, chưa thay policy hoặc nghiệm thu IFRS. Aging/DSO không tự chứng minh ECL; giá trị/khấu hao theo area không tự là giá trị IAS16. Run log không tự là chứng từ đã posted.",
      "lineage": "Nguồn có URL/version → P24-AP-CLASSIC view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "AP due-date analysis / Aging Analysis",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "version": "ECC public KBA preview / S4 1809–2020 context / S4 2025FPS01 app description and configuration",
          "documented": [
            "Company Code",
            "Supplier",
            "Currency",
            "Aging Interval",
            "Payable Amount",
            "Overdue Amount",
            "Not Due Amount",
            "Open on Key Date",
            "Width of Aging Grid",
            "Number of Aging Grid",
            "Display Currency",
            "Exchange Rate Type",
            "Not Overdue Amount"
          ],
          "scope": "REPORT_IDENTITY_AND_AGING_CONTEXT_NOT_EXPORT_COLUMNS",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "FI32",
      "module": "FI",
      "title": "Days Sales Outstanding",
      "tcode": "F1741",
      "fiori_app": "F1741",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Days Sales Outstanding",
      "grain": "Company Code + Calendar Year + Calendar Month + Customer + Display Currency",
      "keys": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Customer",
        "Display Currency"
      ],
      "columns": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Customer",
        "Account Group",
        "Accounting Clerk",
        "Country Key",
        "Customer Classification",
        "Display Currency",
        "Exchange Rate Type",
        "G/L Account",
        "Reconciliation Account",
        "Region",
        "Special G/L",
        "Days Sales Outstanding",
        "Threshold",
        "Definition Version"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Year",
          "label": "Calendar Year",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Month",
          "label": "Calendar Month",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Month tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Customer tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Account Group",
          "label": "Account Group",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Account Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Accounting Clerk",
          "label": "Accounting Clerk",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Accounting Clerk tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Country Key",
          "label": "Country Key",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Country Key tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Customer Classification",
          "label": "Customer Classification",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Customer Classification tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 9,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Exchange Rate Type",
          "label": "Exchange Rate Type",
          "position": 10,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Thuộc tính Exchange Rate Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "G/L Account",
          "label": "G/L Account",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tài khoản GL theo chartofaccounts nguồn, giữ zero đầu.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Reconciliation Account",
          "label": "Reconciliation Account",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reconciliation Account tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Region",
          "label": "Region",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Region tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Special G/L",
          "label": "Special G/L",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Special G/L tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Days Sales Outstanding",
          "label": "Days Sales Outstanding",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "KPIđã báo cáo tổng hợp giả định; không tự suy exact SAP formula.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Threshold",
          "label": "Threshold",
          "position": 16,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Threshold tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Definition Version",
          "label": "Definition Version",
          "position": 17,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Definition Version tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F1741",
      "reading": "Một dòng theo Company Code + Calendar Year + Calendar Month + Customer + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "DSO là KPI giả định đã báo cáo trong mẫu. Chưa xác minh công thức native; không cộng DSO của nhiều tháng hoặc thay bằng tuổi invoice.",
      "control": "DSO là KPI giả định đã báo cáo trong mẫu. Chưa xác minh công thức native; không cộng DSO của nhiều tháng hoặc thay bằng tuổi invoice.",
      "ifrs": "Mẫu hỗ trợ đối chiếu và kiểm soát, chưa thay policy hoặc nghiệm thu IFRS. Aging/DSO không tự chứng minh ECL; giá trị/khấu hao theo area không tự là giá trị IAS16. Run log không tự là chứng từ đã posted.",
      "lineage": "Nguồn có URL/version → P24-DSO view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Days Sales Outstanding",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "version": "Cloud2602 / S4 1909–2023 KBA context",
          "documented": [
            "Days Sales Outstanding",
            "Account Group",
            "Accounting Clerk",
            "Calendar Month",
            "Calendar Year",
            "Company Code",
            "Country Key",
            "Customer",
            "Customer Classification",
            "Display Currency",
            "Exchange Rate Type",
            "G/L Account",
            "Reconciliation Account",
            "Region",
            "Special G/L"
          ],
          "scope": "DOCUMENTED_KPI_AND_DIMENSIONS_ORDER_NOT_VERIFIED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "CO31",
      "module": "CO",
      "title": "Profit center actual line items classic",
      "tcode": "KE5Z",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Profit center actual line items classic",
      "grain": "Controlling Area + Company Code + Fiscal Year + Document + Line Item",
      "keys": [
        "Controlling Area",
        "Company Code",
        "Fiscal Year",
        "Document",
        "Line Item"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Profit Center",
        "Partner Profit Center",
        "Document",
        "Fiscal Year",
        "Line Item",
        "Posting Date",
        "Period",
        "G/L Account",
        "Cost Center",
        "Order",
        "Material",
        "Reference Document",
        "Amount",
        "Transaction Currency",
        "Local Amount",
        "Local Currency",
        "Record Type",
        "Version",
        "Text"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Controlling Area tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Profit Center tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Partner Profit Center",
          "label": "Partner Profit Center",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Partner Profit Center tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Line Item",
          "label": "Line Item",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Line Item tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 8,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "G/L Account",
          "label": "G/L Account",
          "position": 10,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tài khoản GL theo chartofaccounts nguồn, giữ zero đầu.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Cost Center tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Order tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Material tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reference Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Transaction Currency",
          "label": "Transaction Currency",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Transaction Currency tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Local Amount",
          "label": "Local Amount",
          "position": 17,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Local Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Local Currency",
          "label": "Local Currency",
          "position": 18,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Local Currency tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Record Type",
          "label": "Record Type",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Record Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 20,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Version tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 21,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Text tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. KE5Z",
      "reading": "Một dòng theo Controlling Area + Company Code + Fiscal Year + Document + Line Item. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Khóa dòng PCA legacy khác ACDOCA. Cần bridge record type, version, currency và nguồn GL; không join theo document number đơn lẻ.",
      "control": "Khóa dòng PCA legacy khác ACDOCA. Cần bridge record type, version, currency và nguồn GL; không join theo document number đơn lẻ.",
      "ifrs": "Actual/plan, PCA, margin hoặc PM cost cần bridge GL, allocation, ledger, dấu và policy. Chi phí bất thường không tự đủ điều kiện vốn hóa IAS2; TECO không tự là nghiệm thu CAPEX.",
      "lineage": "Nguồn có URL/version → P24-PCA-LINES view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Profit center line items",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1903518"
          ],
          "version": "SAP ERP 4.6C and higher; targetS4 unknown",
          "documented": [],
          "scope": "KE5Z_AND_REPORT_FAMILY_CONTEXT_ONLY",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/1903518",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "CO32",
      "module": "CO",
      "title": "Profitability report defined by form",
      "tcode": "KE30 (company form unknown)",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Profitability report defined by form",
      "grain": "Operating Concern + Form + Report + Record Type + Fiscal Year + Period + Currency + Row Characteristic",
      "keys": [
        "Operating Concern",
        "Form",
        "Report",
        "Record Type",
        "Fiscal Year",
        "Period",
        "Currency",
        "Row Characteristic"
      ],
      "columns": [
        "Operating Concern",
        "Form",
        "Report",
        "Record Type",
        "Fiscal Year",
        "Period",
        "Version",
        "Currency",
        "Row Characteristic",
        "Row Value",
        "Revenue",
        "Discount",
        "Net Revenue",
        "COGS",
        "Gross Margin",
        "Gross Margin Percent",
        "Allocation",
        "Contribution",
        "Column Set"
      ],
      "fields": [
        {
          "key": "Operating Concern",
          "label": "Operating Concern",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Operating Concern tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Form",
          "label": "Form",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Form tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Report",
          "label": "Report",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Report tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Record Type",
          "label": "Record Type",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Record Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Version tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Row Characteristic",
          "label": "Row Characteristic",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Row Characteristic tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Row Value",
          "label": "Row Value",
          "position": 10,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Row Value tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Revenue",
          "label": "Revenue",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Revenue tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Discount",
          "label": "Discount",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Discount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Revenue",
          "label": "Net Revenue",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Revenue tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "COGS",
          "label": "COGS",
          "position": 14,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính COGS tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Gross Margin",
          "label": "Gross Margin",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Gross Margin tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Gross Margin Percent",
          "label": "Gross Margin Percent",
          "position": 16,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Gross Margin Percent tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Allocation",
          "label": "Allocation",
          "position": 17,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Allocation tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Contribution",
          "label": "Contribution",
          "position": 18,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Contribution tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Column Set",
          "label": "Column Set",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Column Set tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. KE30 (company form unknown)",
      "reading": "Một dòng theo Operating Concern + Form + Report + Record Type + Fiscal Year + Period + Currency + Row Characteristic. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Form SAVA minh họa, không phải universal standard layout KE30. Cần định nghĩa form/report, characteristics và value fields từ công ty.",
      "control": "Form SAVA minh họa, không phải universal standard layout KE30. Cần định nghĩa form/report, characteristics và value fields từ công ty.",
      "ifrs": "Actual/plan, PCA, margin hoặc PM cost cần bridge GL, allocation, ledger, dấu và policy. Chi phí bất thường không tự đủ điều kiện vốn hóa IAS2; TECO không tự là nghiệm thu CAPEX.",
      "lineage": "Nguồn có URL/version → P24-KE30 view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Profitability reports and Market Segments - Actuals",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/2156399",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3784542",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3831134",
            "https://help.sap.com/docs/s4hana-cloud-best-practices/margin-analysis-j55-jp/market-segments-actual-report"
          ],
          "version": "ERP/S4 public KBA / Cloud best practice; exact form unknown",
          "documented": [
            "G/L Account",
            "Cost Center",
            "Account Assignment Type",
            "Profitability Segment"
          ],
          "scope": "KE30_FORM_CONTEXT_AND_F0960_QUERY_DIMENSIONS_NOT_COMPANY_FORM",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/2156399",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "MM31",
      "module": "MM",
      "title": "Purchasing Spend",
      "tcode": "F0905",
      "fiori_app": "F0905",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Purchasing Spend",
      "grain": "Supplier + Purchasing Organization + Material Group + Evaluation Period in Days + Display Currency",
      "keys": [
        "Supplier",
        "Purchasing Organization",
        "Material Group",
        "Evaluation Period in Days",
        "Display Currency"
      ],
      "columns": [
        "Supplier",
        "Supplier Country",
        "Purchasing Organization",
        "Purchasing Group",
        "Material Group",
        "Service Performer",
        "Purchasing Category",
        "Document",
        "Evaluation Period in Days",
        "Display Currency",
        "Comparison Net Amount",
        "Net Amount",
        "Purchasing Spend Ratio"
      ],
      "fields": [
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier Country",
          "label": "Supplier Country",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier Country tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchasing Organization tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchasing Group",
          "label": "Purchasing Group",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchasing Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Material Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Service Performer",
          "label": "Service Performer",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Service Performer tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchasing Category",
          "label": "Purchasing Category",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchasing Category tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Evaluation Period in Days",
          "label": "Evaluation Period in Days",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Evaluation Period in Days tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 10,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Comparison Net Amount",
          "label": "Comparison Net Amount",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Comparison Net Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Amount",
          "label": "Net Amount",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Purchasing Spend Ratio",
          "label": "Purchasing Spend Ratio",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "100*comparisonnetamount/netamount trongcùngscope/currency.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F0905",
      "reading": "Một dòng theo Supplier + Purchasing Organization + Material Group + Evaluation Period in Days + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Tỷ lệ=100*comparison net amount/net amount cùng phạm vi và currency. Tổng bằng0 thì tỷ lệ unavailable. Đây không phải quantity evaluation F1661.",
      "control": "Tỷ lệ=100*comparison net amount/net amount cùng phạm vi và currency. Tổng bằng0 thì tỷ lệ unavailable. Đây không phải quantity evaluation F1661.",
      "ifrs": "PO, spend hoặc commitment không tự là liability. Đối chiếu GR/IR, invoice, cutoff và chi phí đủ điều kiện IAS2; giữ scope, currency và UoM.",
      "lineage": "Nguồn có URL/version → P24-SPEND view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Purchasing Spend and implementation F0905",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "version": "Cloud2608 / S4 2025FPS01; target unknown",
          "documented": [
            "Supplier",
            "Supplier Country",
            "Purchasing Group",
            "Purchasing Organization",
            "Material Group",
            "Service Performer",
            "Purchasing Category",
            "Document",
            "Display Currency",
            "Evaluation Period in Days",
            "Comparison Net Amount",
            "Net Amount",
            "Purchasing Spend Ratio"
          ],
          "scope": "DOCUMENTED_DIMENSIONS_AND_RATIO_NOT_OBSERVED_EXPORT",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "MM32",
      "module": "MM",
      "title": "Supplier invoice header and item detail",
      "tcode": "F0859 (invoice detail) / F1060A (list context)",
      "fiori_app": "F0859",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Supplier invoice header and item detail",
      "grain": "Company Code + Fiscal Year + Invoice + Item",
      "keys": [
        "Company Code",
        "Fiscal Year",
        "Invoice",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Invoice",
        "Fiscal Year",
        "Supplier",
        "Invoice Date",
        "Posting Date",
        "Currency",
        "Gross Amount",
        "Tax Amount",
        "Net Amount",
        "Reference",
        "Assignment",
        "Header Text",
        "Item",
        "Purchase Order",
        "PO Item",
        "Material",
        "Quantity",
        "Unit",
        "Item Amount",
        "Tax Code",
        "Item Text",
        "Payment Block",
        "Status",
        "Accounting Document"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Invoice",
          "label": "Invoice",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Invoice tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Invoice Date",
          "label": "Invoice Date",
          "position": 5,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Invoice Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 6,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Gross Amount",
          "label": "Gross Amount",
          "position": 8,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Sốheaderinvoice; lặp lại khiflattenitem nênkhông cộng theoitem.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Tax Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Amount",
          "label": "Net Amount",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reference tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Assignment tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Header Text",
          "label": "Header Text",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Header Text tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Item tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchase Order tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính PO Item tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 17,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Material tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 18,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Quantity tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Unit tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Item Amount",
          "label": "Item Amount",
          "position": 20,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Item Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Tax Code",
          "label": "Tax Code",
          "position": 21,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Tax Code tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Item Text",
          "label": "Item Text",
          "position": 22,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Item Text tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Payment Block",
          "label": "Payment Block",
          "position": 23,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Payment Block tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 24,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Trạng thái tạisnapshot; thànhcông/test không chứngminh posting.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 25,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Accounting Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F0859 (invoice detail) / F1060A (list context)",
      "reading": "Một dòng theo Company Code + Fiscal Year + Invoice + Item. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Flatten header và item là biến đổi SAVA. Gross amount ở header có thể lặp, không cộng theo item. F0859 detail khác list F1060A.",
      "control": "Flatten header và item là biến đổi SAVA. Gross amount ở header có thể lặp, không cộng theo item. F0859 detail khác list F1060A.",
      "ifrs": "PO, spend hoặc commitment không tự là liability. Đối chiếu GR/IR, invoice, cutoff và chi phí đủ điều kiện IAS2; giữ scope, currency và UoM.",
      "lineage": "Nguồn có URL/version → P24-INVOICE view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Supplier invoice apps and Create Supplier Invoice",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "version": "Cloud2608; target unknown",
          "documented": [
            "Company Code",
            "Invoice Date",
            "Posting Date",
            "Assignment",
            "Item Text",
            "Header Text"
          ],
          "scope": "DOCUMENTED_FORM_FIELDS_NOT_LIST_SCHEMA",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "SD16",
      "module": "SD",
      "title": "Sales Volume - Flexible Analysis",
      "tcode": "F1250",
      "fiori_app": "F1250",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Sales Volume - Flexible Analysis",
      "grain": "Company Code + Calendar Year + Calendar Month + Sales Organization + Product + Display Currency",
      "keys": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Display Currency"
      ],
      "columns": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Product Group",
        "Sold-to Party",
        "Display Currency",
        "Net Value",
        "Sales Volume",
        "Sales Volume Qty",
        "Cancellations",
        "Profit Margin",
        "Credit Memos",
        "Credit Memos Qty",
        "Credit Memo Profit Margin",
        "Net Sales Volume",
        "Net Profit Margin",
        "Net Sales Cost"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Year",
          "label": "Calendar Year",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Month",
          "label": "Calendar Month",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Month tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sales Organization tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product",
          "label": "Product",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product Group",
          "label": "Product Group",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sold-to Party tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 8,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Measure cópopulation xácđịnh bởi view; không mặcđịnh doanhthuIFRS.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Sales Volume",
          "label": "Sales Volume",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Sales Volume tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Sales Volume Qty",
          "label": "Sales Volume Qty",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Sales Volume Qty tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Cancellations",
          "label": "Cancellations",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Cancellations tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Profit Margin",
          "label": "Profit Margin",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Profit Margin tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Credit Memos",
          "label": "Credit Memos",
          "position": 14,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Credit Memos tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Credit Memos Qty",
          "label": "Credit Memos Qty",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Credit Memos Qty tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Credit Memo Profit Margin",
          "label": "Credit Memo Profit Margin",
          "position": 16,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Credit Memo Profit Margin tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Sales Volume",
          "label": "Net Sales Volume",
          "position": 17,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Sales Volume tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Profit Margin",
          "label": "Net Profit Margin",
          "position": 18,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Mẫu salesview là sốtiềnmargin, không phải tỷlệ; giữmeasure definition.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Sales Cost",
          "label": "Net Sales Cost",
          "position": 19,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Sales Cost tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F1250",
      "reading": "Một dòng theo Company Code + Calendar Year + Calendar Month + Sales Organization + Product + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Net sales=volume-credit memos; cancellation population theo nguồn. Số billing/KPI không tự chứng minh recognition theo IFRS15.",
      "control": "Net sales=volume-credit memos; cancellation population theo nguồn. Số billing/KPI không tự chứng minh recognition theo IFRS15.",
      "ifrs": "Sales order hoặc billing KPI không tự là revenue IFRS15. Đối chiếu hợp đồng, performance obligation, cutoff, returns và credit memos.",
      "lineage": "Nguồn có URL/version → P24-SALES-VOLUME view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Sales Volume - Flexible Analysis F1250",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "version": "Cloud documentation; release header not captured",
          "documented": [
            "Net Value",
            "Sales Volume",
            "Sales Volume Qty",
            "Cancellations",
            "Profit Margin",
            "Credit Memos",
            "Credit Memos Qty",
            "Credit Memo Profit Margin",
            "Net Sales Volume",
            "Net Profit Margin",
            "Net Sales Cost"
          ],
          "scope": "DOCUMENTED_MEASURES_ORDER_NOT_OBSERVED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "SD17",
      "module": "SD",
      "title": "Incoming Sales Orders - Flexible Analysis",
      "tcode": "F1249",
      "fiori_app": "F1249",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Incoming Sales Orders - Flexible Analysis",
      "grain": "Calendar Year + Calendar Month + Sales Organization + Product + Sold-to Party + Display Currency",
      "keys": [
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Sold-to Party",
        "Display Currency"
      ],
      "columns": [
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Product Group",
        "Sold-to Party",
        "Sales Document Type",
        "Display Currency",
        "Net Value",
        "Incoming Orders",
        "Incoming Orders Quantity",
        "Incoming Items",
        "Cumulative Confirmed Quantity",
        "Order Income Date",
        "Selection Scope"
      ],
      "fields": [
        {
          "key": "Calendar Year",
          "label": "Calendar Year",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Month",
          "label": "Calendar Month",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Month tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sales Organization tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product",
          "label": "Product",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product Group",
          "label": "Product Group",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sold-to Party tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sales Document Type",
          "label": "Sales Document Type",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sales Document Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 8,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Measure cópopulation xácđịnh bởi view; không mặcđịnh doanhthuIFRS.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Incoming Orders",
          "label": "Incoming Orders",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Incoming Orders tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Incoming Orders Quantity",
          "label": "Incoming Orders Quantity",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Incoming Orders Quantity tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Incoming Items",
          "label": "Incoming Items",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Incoming Items tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Cumulative Confirmed Quantity",
          "label": "Cumulative Confirmed Quantity",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Cumulative Confirmed Quantity tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Order Income Date",
          "label": "Order Income Date",
          "position": 14,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Order Income Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Selection Scope",
          "label": "Selection Scope",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Selection Scope tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F1249",
      "reading": "Một dòng theo Calendar Year + Calendar Month + Sales Organization + Product + Sold-to Party + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Population là order items liên quan billing/delivery trong kỳ income. So VA05 phải có bridge về date và population.",
      "control": "Population là order items liên quan billing/delivery trong kỳ income. So VA05 phải có bridge về date và population.",
      "ifrs": "Sales order hoặc billing KPI không tự là revenue IFRS15. Đối chiếu hợp đồng, performance obligation, cutoff, returns và credit memos.",
      "lineage": "Nguồn có URL/version → P24-INCOMING view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Incoming Sales Orders - Flexible Analysis F1249",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "version": "Cloud2608 / S4 key figures documentation",
          "documented": [
            "Net Value",
            "Incoming Orders",
            "Incoming Orders Quantity",
            "Incoming Items",
            "Cumulative Confirmed Quantity"
          ],
          "scope": "DOCUMENTED_MEASURES_NOT_VA05_EQUIVALENCE",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "PM09",
      "module": "PM",
      "title": "PMIS cost analysis",
      "tcode": "MCI8",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "PMIS cost analysis",
      "grain": "Maintenance Plant + Fiscal Year + Period + Equipment + Value Category + Currency",
      "keys": [
        "Maintenance Plant",
        "Fiscal Year",
        "Period",
        "Equipment",
        "Value Category",
        "Currency"
      ],
      "columns": [
        "Maintenance Plant",
        "Planning Plant",
        "Fiscal Year",
        "Period",
        "Equipment",
        "Functional Location",
        "Order Type",
        "Planner Group",
        "Value Category",
        "Planned Cost",
        "Actual Cost",
        "Variance",
        "Order Count",
        "Currency",
        "Statistics Update Date",
        "Aggregation Level"
      ],
      "fields": [
        {
          "key": "Maintenance Plant",
          "label": "Maintenance Plant",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Maintenance Plant tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planning Plant",
          "label": "Planning Plant",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Planning Plant tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Equipment tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Functional Location tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Order Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Planner Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Value Category",
          "label": "Value Category",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Value Category tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planned Cost",
          "label": "Planned Cost",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Planned Cost tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Actual Cost",
          "label": "Actual Cost",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Actual Cost tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Mẫu SAVA dùng plan-actual; quy ước SAP của nguồn cần xác minh.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Order Count",
          "label": "Order Count",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Order Count tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Statistics Update Date",
          "label": "Statistics Update Date",
          "position": 15,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Statistics Update Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Aggregation Level",
          "label": "Aggregation Level",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Aggregation Level tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. MCI8",
      "reading": "Một dòng theo Maintenance Plant + Fiscal Year + Period + Equipment + Value Category + Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "PMIS statistical update/currency/scope có thể khác IW39. Giữ statistics timestamp, value category và cấp aggregation để đối chiếu.",
      "control": "PMIS statistical update/currency/scope có thể khác IW39. Giữ statistics timestamp, value category và cấp aggregation để đối chiếu.",
      "ifrs": "Actual/plan, PCA, margin hoặc PM cost cần bridge GL, allocation, ledger, dấu và policy. Chi phí bất thường không tự đủ điều kiện vốn hóa IAS2; TECO không tự là nghiệm thu CAPEX.",
      "lineage": "Nguồn có URL/version → P24-MCI8 view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "PM list editing and PMIS cost analysis",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "version": "ECC/S4 onprem/private KBA contexts",
          "documented": [
            "Planned Cost",
            "Actual Cost",
            "Fiscal Year",
            "Currency"
          ],
          "scope": "PMIS_VS_LIST_SCOPE_AND_CURRENCY_NOT_IW39_FIELD_CATALOG",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "AA08",
      "module": "FI-AA",
      "title": "Depreciation posting run log",
      "tcode": "AFAB (log) / F1914 (scheduling context)",
      "fiori_app": null,
      "kind": "RUN_EVIDENCE",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Depreciation posting run log",
      "grain": "Company Code + Fiscal Year + Period + Run ID + Asset Number + Subnumber + Ledger",
      "keys": [
        "Company Code",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Asset Number",
        "Subnumber",
        "Ledger"
      ],
      "columns": [
        "Company Code",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Run Type",
        "Test Run",
        "Ledger",
        "Accounting Principle",
        "Depreciation Area",
        "Asset Number",
        "Subnumber",
        "Planned Depreciation",
        "Posted Depreciation",
        "Difference",
        "Currency",
        "Posting Document",
        "Posting Date",
        "Status",
        "Message ID",
        "Message",
        "Job Name",
        "Spool"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Run ID tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Run Type",
          "label": "Run Type",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Run Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Test Run tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Ledger",
          "label": "Ledger",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Ledger tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Accounting Principle",
          "label": "Accounting Principle",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Accounting Principle tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Depreciation Area",
          "label": "Depreciation Area",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Khuvực khấuhao theo cấu hình; area01 khôngmặcđịnhIFRS.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Asset Number",
          "label": "Asset Number",
          "position": 10,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Asset Number tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Subnumber",
          "label": "Subnumber",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Subnumber tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planned Depreciation",
          "label": "Planned Depreciation",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Planned Depreciation tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Posted Depreciation",
          "label": "Posted Depreciation",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Posted Depreciation tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 14,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Difference tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Document",
          "label": "Posting Document",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 17,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Trạng thái tạisnapshot; thànhcông/test không chứngminh posting.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Message ID",
          "label": "Message ID",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Message ID tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 20,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Message tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Job Name",
          "label": "Job Name",
          "position": 21,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Job Name tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Spool",
          "label": "Spool",
          "position": 22,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Spool tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. AFAB (log) / F1914 (scheduling context)",
      "reading": "Một dòng theo Company Code + Fiscal Year + Period + Run ID + Asset Number + Subnumber + Ledger. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Chỉ mẫu run log, không chạy/post SAP. Test run hoặc thông báo success không chứng minh giá trị đã vào FI; repeat/rerun theo policy target.",
      "control": "Chỉ mẫu run log, không chạy/post SAP. Test run hoặc thông báo success không chứng minh giá trị đã vào FI; repeat/rerun theo policy target.",
      "ifrs": "Mẫu hỗ trợ đối chiếu và kiểm soát, chưa thay policy hoặc nghiệm thu IFRS. Aging/DSO không tự chứng minh ECL; giá trị/khấu hao theo area không tự là giá trị IAS16. Run log không tự là chứng từ đã posted.",
      "lineage": "Nguồn có URL/version → P24-AFAB view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Post Depreciation AFAB / Schedule Asset Accounting Jobs",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "version": "S4 2025FPS01 / public KBA",
          "documented": [
            "Company Code",
            "Period",
            "Accounting Principle"
          ],
          "scope": "POSTING_RUN_CONTEXT_NOT_NATIVE_SPOOL_FIELDS",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    }
  ],
  "report_master_counts": {
    "total_profiles": 160,
    "by_module": {
      "FI": 32,
      "CO": 32,
      "MM": 32,
      "FI-AA": 8,
      "PP": 20,
      "SD": 17,
      "QM": 10,
      "PM": 9
    },
    "native_exports": 0,
    "full_company_catalog_verified": false,
    "new_proposed_profiles": 79,
    "counting_rule": "Unique authored profile IDs; variants and corrected entrypoints do not each count as a profile. No SAP native acceptance.",
    "priority_new_profiles": 10
  },
  "expansion_reports": [
    {
      "id": "FI18",
      "module": "FI",
      "tcode": "F.13",
      "title": "Kết quả ghép và clearing tự động",
      "sourceFamily": "clear",
      "kind": "RUN_EVIDENCE",
      "grain": "Một nhóm clearing và từng item được xét",
      "keys": [
        "Company Code",
        "Run ID",
        "Document",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Account Type",
        "Account",
        "Document",
        "Fiscal Year",
        "Item",
        "Posting Date",
        "Assignment",
        "Reference",
        "Document Currency",
        "Debit Amount",
        "Credit Amount",
        "Difference",
        "Grouping Rule",
        "Clearing Document",
        "Clearing Date",
        "Test Run",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Account Type",
          "label": "Account Type",
          "position": 4,
          "type": "text",
          "meaning": "loại nghiệp vụ: Account Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 5,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 6,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 7,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 10,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 11,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Currency",
          "label": "Document Currency",
          "position": 12,
          "type": "text",
          "meaning": "Tiền tệ chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Debit Amount",
          "label": "Debit Amount",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Debit Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Credit Amount",
          "label": "Credit Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Credit Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Grouping Rule",
          "label": "Grouping Rule",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Grouping Rule. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Document",
          "label": "Clearing Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Date",
          "label": "Clearing Date",
          "position": 18,
          "type": "raw_date",
          "meaning": "Ngày clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 19,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 21,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Nhóm nào cân nhưng chưa clearing, nhóm nào bị loại?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả ghép và clearing tự động. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Một nhóm clearing và từng item được xét. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Test run hoặc nhóm cân không chứng minh đã tạo clearing document. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Test run hoặc nhóm cân không chứng minh đã tạo clearing document.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Test run hoặc nhóm cân không chứng minh đã tạo clearing document.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Automatic Clearing",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/8db4855746fa0322e10000000a44147b.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/8db4855746fa0322e10000000a44147b.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI19",
      "module": "FI",
      "tcode": "FCHN (candidate)",
      "title": "Sổ theo dõi séc và trạng thái thanh toán",
      "sourceFamily": "checks",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Một check trong house bank và account",
      "keys": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Check Number"
      ],
      "columns": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Check Number",
        "Check Lot",
        "Payment Document",
        "Fiscal Year",
        "Supplier",
        "Payee",
        "Issue Date",
        "Payment Date",
        "Amount",
        "Currency",
        "Encashment Date",
        "Void Date",
        "Void Reason",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Check Number",
          "label": "Check Number",
          "position": 4,
          "type": "text",
          "meaning": "số định danh: Check Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Check Lot",
          "label": "Check Lot",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Check Lot. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Document",
          "label": "Payment Document",
          "position": 6,
          "type": "text",
          "meaning": "chứng từ: Payment Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 7,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 8,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payee",
          "label": "Payee",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payee. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Issue Date",
          "label": "Issue Date",
          "position": 10,
          "type": "raw_date",
          "meaning": "ngày: Issue Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Payment Date",
          "label": "Payment Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Payment Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Encashment Date",
          "label": "Encashment Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Encashment Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Void Date",
          "label": "Void Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Void Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Void Reason",
          "label": "Void Reason",
          "position": 16,
          "type": "text",
          "meaning": "lý do: Void Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Séc nào đã phát hành, chưa encash hoặc bị void?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Sổ theo dõi séc và trạng thái thanh toán. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một check trong house bank và account. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Issued check chưa chắc là cash movement; đối chiếu payment document và bank settlement, không tự void/reprint. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + House Bank + Bank Account + Check Number cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Issued check chưa chắc là cash movement; đối chiếu payment document và bank settlement, không tự void/reprint.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Issued check chưa chắc là cash movement; đối chiếu payment document và bank settlement, không tự void/reprint.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "checks",
          "title": "Displaying the Check Register",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/aaccd253913e4608e10000000a174cb4.html",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/aaccd253913e4608e10000000a174cb4.html",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI20",
      "module": "FI",
      "tcode": "F110",
      "title": "Đề xuất thanh toán và exception",
      "sourceFamily": "payment",
      "kind": "WORKLIST",
      "grain": "Run và invoice item được đề xuất",
      "keys": [
        "Company Code",
        "Run ID",
        "Document",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Supplier",
        "Document",
        "Fiscal Year",
        "Item",
        "Due Date",
        "Payment Method",
        "Payment Block",
        "House Bank",
        "Bank Account",
        "Invoice Amount",
        "Discount Amount",
        "Payment Amount",
        "Currency",
        "Payment Document",
        "Exception Code",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 5,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 7,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Payment Method",
          "label": "Payment Method",
          "position": 9,
          "type": "text",
          "meaning": "phương pháp: Payment Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Block",
          "label": "Payment Block",
          "position": 10,
          "type": "text",
          "meaning": "Mã khóa thanh toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Invoice Amount",
          "label": "Invoice Amount",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Invoice Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Discount Amount",
          "label": "Discount Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Discount Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Payment Amount",
          "label": "Payment Amount",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Payment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 16,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Document",
          "label": "Payment Document",
          "position": 17,
          "type": "text",
          "meaning": "chứng từ: Payment Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 18,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 20,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Hóa đơn nào được đề xuất trả, bị khóa hoặc thiếu thông tin?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Đề xuất thanh toán và exception. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Run và invoice item được đề xuất. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Proposal không phải tiền đã chuyển; tách payment document và bank confirmation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Proposal không phải tiền đã chuyển; tách payment document và bank confirmation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Proposal không phải tiền đã chuyển; tách payment document và bank confirmation.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Integration with the Payment Run in SAP S/⁠4HANA",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn155search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI21",
      "module": "FI",
      "tcode": "F150",
      "title": "Đề xuất nhắc nợ và lịch sử dunning",
      "sourceFamily": "dunning",
      "kind": "WORKLIST",
      "grain": "Run và customer invoice item",
      "keys": [
        "Company Code",
        "Run ID",
        "Customer",
        "Document",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Customer",
        "Document",
        "Fiscal Year",
        "Item",
        "Due Date",
        "Days Overdue",
        "Open Amount",
        "Currency",
        "Dunning Area",
        "Dunning Level",
        "Dunning Block",
        "Last Dunning Date",
        "Dunning Fee",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 4,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 5,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 7,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Days Overdue",
          "label": "Days Overdue",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Days Overdue. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Amount",
          "label": "Open Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Open Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dunning Area",
          "label": "Dunning Area",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Dunning Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dunning Level",
          "label": "Dunning Level",
          "position": 13,
          "type": "text",
          "meaning": "cấp: Dunning Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dunning Block",
          "label": "Dunning Block",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Dunning Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Last Dunning Date",
          "label": "Last Dunning Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Last Dunning Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Dunning Fee",
          "label": "Dunning Fee",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Dunning Fee. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 18,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Khoản nào cần nhắc nợ và bị bỏ qua do block?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Đề xuất nhắc nợ và lịch sử dunning. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Run và customer invoice item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Dunning level không phải tỷ lệ ECL; giữ block và ngày khóa sổ. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Customer + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Dunning level không phải tỷ lệ ECL; giữ block và ngày khóa sổ.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Dunning level không phải tỷ lệ ECL; giữ block và ngày khóa sổ.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI21 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Dunning",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26c2d5e366bc44c1a98f2a9212a0c49d/e9c5a6cb7bfe40418debd4d96c6f09ba.html?version=LATEST",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search10",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/26c2d5e366bc44c1a98f2a9212a0c49d/e9c5a6cb7bfe40418debd4d96c6f09ba.html?version=LATEST",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI22",
      "module": "FI",
      "tcode": "FEB_BSPROC / FEBAN",
      "title": "Worklist đối chiếu sao kê ngân hàng",
      "sourceFamily": "bank",
      "kind": "WORKLIST",
      "grain": "Sao kê và bank statement item",
      "keys": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Statement",
        "Item"
      ],
      "columns": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Statement",
        "Statement Date",
        "Item",
        "Value Date",
        "Posting Date",
        "External Transaction",
        "Amount",
        "Currency",
        "Reference",
        "Assignment",
        "Posting Rule",
        "Accounting Document",
        "Clearing Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Statement",
          "label": "Statement",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Statement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Statement Date",
          "label": "Statement Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: Statement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 6,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Date",
          "label": "Value Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày giá trị",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "External Transaction",
          "label": "External Transaction",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: External Transaction. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 12,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 13,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Rule",
          "label": "Posting Rule",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posting Rule. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Document",
          "label": "Clearing Document",
          "position": 16,
          "type": "text",
          "meaning": "Chứng từ clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 18,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Dòng sao kê nào chưa liên kết với chứng từ kế toán?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Worklist đối chiếu sao kê ngân hàng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sao kê và bank statement item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Một bank line có thể ghép nhiều FI items; không nhân bank amount qua join1:N. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + House Bank + Bank Account + Statement + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Một bank line có thể ghép nhiều FI items; không nhân bank amount qua join1:N.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Một bank line có thể ghép nhiều FI items; không nhân bank amount qua join1:N.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI22 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Reprocess Bank Statement Items",
          "url": "https://help.sap.com/docs/PRODUCT_ID/918bca53037f408f91a2295d04ac16bc/bc1fe656fe590950e10000000a44147b.html",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/918bca53037f408f91a2295d04ac16bc/bc1fe656fe590950e10000000a44147b.html",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI23",
      "module": "FI",
      "tcode": "S_ALR_87012357",
      "title": "Danh sách cơ sở thuế và thuế theo mã",
      "sourceFamily": "tax",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Company và tax item hoặc aggregate riêng",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Tax Code"
      ],
      "columns": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Posting Date",
        "Document Date",
        "Tax Code",
        "Tax Jurisdiction",
        "Tax Base",
        "Tax Amount",
        "Currency",
        "Tax Account",
        "Country",
        "Tax Rate",
        "Reference",
        "Tax Period",
        "Debit Credit",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 4,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Tax Code",
          "label": "Tax Code",
          "position": 7,
          "type": "text",
          "meaning": "mã phân loại: Tax Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Jurisdiction",
          "label": "Tax Jurisdiction",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Jurisdiction. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Base",
          "label": "Tax Base",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Tax Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Account",
          "label": "Tax Account",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Country",
          "label": "Country",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Country. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Rate",
          "label": "Tax Rate",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "tỷ lệ: Tax Rate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 15,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Period",
          "label": "Tax Period",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Tax Period. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Debit Credit",
          "label": "Debit Credit",
          "position": 17,
          "type": "text",
          "meaning": "Phân biệt Nợ/Có theo nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Thuế đầu vào/đầu ra có khớp chứng từ và GL?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách cơ sở thuế và thuế theo mã. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Company và tax item hoặc aggregate riêng. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Nguồn ERP localization Belarus không xác nhận báo cáo thuế Việt Nam. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Item + Tax Code cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Nguồn ERP localization Belarus không xác nhận báo cáo thuế Việt Nam.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Nguồn ERP localization Belarus không xác nhận báo cáo thuế Việt Nam.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI23 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "END-USER GUIDES (Finance)",
          "url": "https://help.sap.com/doc/8184a7e0b639444b891777f1c9195ec1/1.0/en-US/End_User_Guide_FI_SAP_ERP_Loc_Extension_Belarus_EPAM_1.0_EN.pdf",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search12",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/doc/8184a7e0b639444b891777f1c9195ec1/1.0/en-US/End_User_Guide_FI_SAP_ERP_Loc_Extension_Belarus_EPAM_1.0_EN.pdf",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI24",
      "module": "FI",
      "tcode": "FS00 / F0731A",
      "title": "Danh mục tài khoản và thuộc tính kiểm soát",
      "sourceFamily": "gl",
      "kind": "MASTER_DISPLAY",
      "grain": "Chart of accounts và company account",
      "keys": [
        "Chart of Accounts",
        "Company Code",
        "Account"
      ],
      "columns": [
        "Chart of Accounts",
        "Company Code",
        "Account",
        "Account Name",
        "Account Group",
        "Account Type",
        "Account Currency",
        "Open Item Managed",
        "Line Item Display",
        "Tax Category",
        "Reconciliation Account",
        "Cost Element Category",
        "Sort Key",
        "Field Status Group",
        "Posting Block",
        "Deletion Flag",
        "Alternative Account",
        "Group Account",
        "Valid From"
      ],
      "fields": [
        {
          "key": "Chart of Accounts",
          "label": "Chart of Accounts",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Chart of Accounts. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 3,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Name",
          "label": "Account Name",
          "position": 4,
          "type": "text",
          "meaning": "tên: Account Name. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Group",
          "label": "Account Group",
          "position": 5,
          "type": "text",
          "meaning": "nhóm: Account Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Type",
          "label": "Account Type",
          "position": 6,
          "type": "text",
          "meaning": "loại nghiệp vụ: Account Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Currency",
          "label": "Account Currency",
          "position": 7,
          "type": "text",
          "meaning": "tiền tệ: Account Currency. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Open Item Managed",
          "label": "Open Item Managed",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Open Item Managed. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Line Item Display",
          "label": "Line Item Display",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Line Item Display. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Category",
          "label": "Tax Category",
          "position": 10,
          "type": "text",
          "meaning": "loại: Tax Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reconciliation Account",
          "label": "Reconciliation Account",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reconciliation Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element Category",
          "label": "Cost Element Category",
          "position": 12,
          "type": "text",
          "meaning": "loại: Cost Element Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sort Key",
          "label": "Sort Key",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sort Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Field Status Group",
          "label": "Field Status Group",
          "position": 14,
          "type": "text",
          "meaning": "nhóm: Field Status Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Block",
          "label": "Posting Block",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posting Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 16,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative Account",
          "label": "Alternative Account",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Account",
          "label": "Group Account",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Group Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 19,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        }
      ],
      "purpose": "Tài khoản nào có cấu hình ảnh hưởng mapping và clearing?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục tài khoản và thuộc tính kiểm soát. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Chart of accounts và company account. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không dùng account master snapshot làm số dư; mapping IFRS phải được duyệt riêng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Chart of Accounts + Company Code + Account cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không dùng account master snapshot làm số dư; mapping IFRS phải được duyệt riêng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không dùng account master snapshot làm số dư; mapping IFRS phải được duyệt riêng.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI24 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": "F0731A",
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage G/L Account Master Data",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/34428754dccbe85ee10000000a44176d.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn162search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/34428754dccbe85ee10000000a44176d.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI25",
      "module": "FI",
      "tcode": "FB04",
      "title": "Dấu vết thay đổi chứng từ kế toán",
      "sourceFamily": "changes",
      "kind": "AUDIT_REPORT",
      "grain": "Một change event và field được đổi",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Change ID",
        "Field Name"
      ],
      "columns": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Change ID",
        "Changed At",
        "Changed By",
        "Transaction",
        "Field Name",
        "Old Value",
        "New Value",
        "Reference",
        "Assignment",
        "Text",
        "Change Reason",
        "Status",
        "Source Object"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 4,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change ID",
          "label": "Change ID",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Change ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 6,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Changed By",
          "label": "Changed By",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Changed By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Transaction",
          "label": "Transaction",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Transaction. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Field Name",
          "label": "Field Name",
          "position": 9,
          "type": "text",
          "meaning": "tên: Field Name. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Old Value",
          "label": "Old Value",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị: Old Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "New Value",
          "label": "New Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị: New Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 12,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 13,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 14,
          "type": "text",
          "meaning": "Diễn giải trên dòng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Reason",
          "label": "Change Reason",
          "position": 15,
          "type": "text",
          "meaning": "lý do: Change Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Object",
          "label": "Source Object",
          "position": 17,
          "type": "text",
          "meaning": "Đối tượng nguồn có ID/type riêng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Ai đổi trường nào trên chứng từ, vào thời điểm nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Dấu vết thay đổi chứng từ kế toán. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một change event và field được đổi. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không kết luận gian lận chỉ từ change log; phân biệt quyền sửa và authorization thực tế. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Change ID + Field Name cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không kết luận gian lận chỉ từ change log; phân biệt quyền sửa và authorization thực tế.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không kết luận gian lận chỉ từ change log; phân biệt quyền sửa và authorization thực tế.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI25 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Local Financial Close",
          "url": "https://help.sap.com/docs/sap_s4hana_cloud/0fa84c9d9c634132b7c4abb9ffdd8f06/f0b4efed206d4c7c84bfa35f1e5ec91b.html?local=en-us",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search6",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/sap_s4hana_cloud/0fa84c9d9c634132b7c4abb9ffdd8f06/f0b4efed206d4c7c84bfa35f1e5ec91b.html?local=en-us",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI26",
      "module": "FI",
      "tcode": "FB03",
      "title": "Chi tiết chứng từ và đối ứng kế toán",
      "sourceFamily": "journal",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Một accounting document entry item",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Document Type",
        "Document Date",
        "Posting Date",
        "Period",
        "Account",
        "Account Type",
        "Debit Credit",
        "Amount",
        "Currency",
        "Document Amount",
        "Document Currency",
        "Tax Code",
        "Cost Center",
        "Profit Center",
        "Partner Company",
        "Reference",
        "Assignment",
        "Text",
        "Reversal Document",
        "Reversal Reason",
        "Clearing Document"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 4,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 5,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 8,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 9,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account Type",
          "label": "Account Type",
          "position": 10,
          "type": "text",
          "meaning": "loại nghiệp vụ: Account Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Debit Credit",
          "label": "Debit Credit",
          "position": 11,
          "type": "text",
          "meaning": "Phân biệt Nợ/Có theo nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Amount",
          "label": "Document Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Document Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Document Currency",
          "label": "Document Currency",
          "position": 15,
          "type": "text",
          "meaning": "Tiền tệ chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tax Code",
          "label": "Tax Code",
          "position": 16,
          "type": "text",
          "meaning": "mã phân loại: Tax Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 17,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 18,
          "type": "text",
          "meaning": "Trung tâm lợi nhuận",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Partner Company",
          "label": "Partner Company",
          "position": 19,
          "type": "text",
          "meaning": "Pháp nhân đối tác",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 20,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 21,
          "type": "text",
          "meaning": "Mã phân bổ dùng cho matching",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 22,
          "type": "text",
          "meaning": "Diễn giải trên dòng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Document",
          "label": "Reversal Document",
          "position": 23,
          "type": "text",
          "meaning": "chứng từ: Reversal Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Reason",
          "label": "Reversal Reason",
          "position": 24,
          "type": "text",
          "meaning": "lý do: Reversal Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Clearing Document",
          "label": "Clearing Document",
          "position": 25,
          "type": "text",
          "meaning": "Chứng từ clearing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Bút toán gốc gồm những đối ứng và reversal nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết chứng từ và đối ứng kế toán. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một accounting document entry item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Giữ entry view riêng ledger view; reversal cần document/year/company đủ khóa. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Giữ entry view riêng ledger view; reversal cần document/year/company đủ khóa.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Giữ entry view riêng ledger view; reversal cần document/year/company đủ khóa.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI26 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "journal",
          "title": "Document Display",
          "url": "https://help.sap.com/docs/SAP_ERP/17ec785ed2294431b933daf9a926af80/e950d7531a4d424de10000000a174cb4.html",
          "source_version": "SAP ERP; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/17ec785ed2294431b933daf9a926af80/e950d7531a4d424de10000000a174cb4.html",
      "source_edition": "SAP ERP; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI27",
      "module": "FI",
      "tcode": "F.14",
      "title": "Nhật ký tạo bút toán định kỳ",
      "sourceFamily": "recurring",
      "kind": "RUN_EVIDENCE",
      "grain": "Run và recurring document execution",
      "keys": [
        "Company Code",
        "Run ID",
        "Recurring Document",
        "Sequence"
      ],
      "columns": [
        "Company Code",
        "Run ID",
        "Run Date",
        "Recurring Document",
        "Sequence",
        "Posting Date",
        "Document Type",
        "Amount",
        "Currency",
        "Test Run",
        "Session ID",
        "Accounting Document",
        "Fiscal Year",
        "Created By",
        "Status",
        "Message",
        "Next Run Date",
        "Reference"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 2,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Recurring Document",
          "label": "Recurring Document",
          "position": 4,
          "type": "text",
          "meaning": "chứng từ: Recurring Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sequence",
          "label": "Sequence",
          "position": 5,
          "type": "text",
          "meaning": "Thứ tự xử lý/công đoạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 10,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Session ID",
          "label": "Session ID",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Session ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 12,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 13,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Next Run Date",
          "label": "Next Run Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Next Run Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Lần chạy định kỳ nào lỗi hoặc đã tạo chứng từ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Nhật ký tạo bút toán định kỳ. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Run và recurring document execution. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Log hoàn tất không tự chứng minh FI posted; đọc kết quả do operator cung cấp. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Run ID + Recurring Document + Sequence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Log hoàn tất không tự chứng minh FI posted; đọc kết quả do operator cung cấp.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Log hoàn tất không tự chứng minh FI posted; đọc kết quả do operator cung cấp.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI27 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Displaying Recurring Entry Documents",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/2d4cd953189a424de10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn162search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/2d4cd953189a424de10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI28",
      "module": "FI",
      "tcode": "SAVA derived / AP items",
      "title": "Phân tích payment block và nguyên nhân tồn đọng",
      "sourceFamily": "payment",
      "kind": "SAVA_DERIVED",
      "grain": "Một AP item và lần đánh giá block",
      "keys": [
        "Company Code",
        "Document",
        "Fiscal Year",
        "Item",
        "Key Date"
      ],
      "columns": [
        "Company Code",
        "Supplier",
        "Document",
        "Fiscal Year",
        "Item",
        "Posting Date",
        "Due Date",
        "Key Date",
        "Open Amount",
        "Currency",
        "Payment Block",
        "Block Reason",
        "Owner",
        "Days Overdue",
        "Purchase Order",
        "Invoice Document",
        "Release Date",
        "Exception Code",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 2,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 3,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 5,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Open Amount",
          "label": "Open Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Open Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payment Block",
          "label": "Payment Block",
          "position": 11,
          "type": "text",
          "meaning": "Mã khóa thanh toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Block Reason",
          "label": "Block Reason",
          "position": 12,
          "type": "text",
          "meaning": "Lý do bị khóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 13,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Days Overdue",
          "label": "Days Overdue",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Days Overdue. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 15,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Invoice Document",
          "label": "Invoice Document",
          "position": 16,
          "type": "text",
          "meaning": "chứng từ: Invoice Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 18,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Khối lượng nợ bị block thuộc ai và quá hạn bao lâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Phân tích payment block và nguyên nhân tồn đọng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Một AP item và lần đánh giá block. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Đây là schema phân tích SAVA; không coi release date trống là đã duyệt thanh toán. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Document + Fiscal Year + Item + Key Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Đây là schema phân tích SAVA; không coi release date trống là đã duyệt thanh toán.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Đây là schema phân tích SAVA; không coi release date trống là đã duyệt thanh toán.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI28 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Integration with the Payment Run in SAP S/⁠4HANA",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn155search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9bb249dda6dc4d1aa34587f3db41f2f3/b54fcc55ca7d1e02e10000000a441470.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI29",
      "module": "FI",
      "tcode": "ICMR / legacy FBICR*",
      "title": "Đối chiếu giao dịch liên công ty",
      "sourceFamily": "intercompany",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Company pair và matching item",
      "keys": [
        "Company Code",
        "Partner Company",
        "Document",
        "Item",
        "Matching ID"
      ],
      "columns": [
        "Company Code",
        "Partner Company",
        "Document",
        "Fiscal Year",
        "Item",
        "Reference",
        "Trading Partner",
        "Account",
        "Posting Date",
        "Transaction Currency",
        "Local Amount",
        "Partner Amount",
        "Difference",
        "Matching ID",
        "Reconciliation Case",
        "Status",
        "Reason",
        "Owner"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Partner Company",
          "label": "Partner Company",
          "position": 2,
          "type": "text",
          "meaning": "Pháp nhân đối tác",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 3,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 5,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 6,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Trading Partner",
          "label": "Trading Partner",
          "position": 7,
          "type": "text",
          "meaning": "Mã trading partner theo master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 8,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Transaction Currency",
          "label": "Transaction Currency",
          "position": 10,
          "type": "text",
          "meaning": "Tiền tệ giao dịch",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Local Amount",
          "label": "Local Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Local Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Partner Amount",
          "label": "Partner Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Partner Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Matching ID",
          "label": "Matching ID",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Matching ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reconciliation Case",
          "label": "Reconciliation Case",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reconciliation Case. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reason",
          "label": "Reason",
          "position": 17,
          "type": "text",
          "meaning": "lý do: Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 18,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Các bên lệch do cutoff, FX hay thiếu chứng từ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Đối chiếu giao dịch liên công ty. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Company pair và matching item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chuẩn hóa currency và sign trước so sánh; reconciliation chưa phải consolidation elimination. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Partner Company + Document + Item + Matching ID cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chuẩn hóa currency và sign trước so sánh; reconciliation chưa phải consolidation elimination.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chuẩn hóa currency và sign trước so sánh; reconciliation chưa phải consolidation elimination.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI29 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "SAP Intercompany Reconciliation",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/6b5a7c525ae17154e10000000a44176d.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn146search5",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/651d8af3ea974ad1a4d74449122c620e/6b5a7c525ae17154e10000000a44176d.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "FI30",
      "module": "FI",
      "tcode": "F2332",
      "title": "Cash Flow Analyzer và dòng tiền thực tế",
      "sourceFamily": "cash",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Bank account và liquidity flow tại value date",
      "keys": [
        "Company Code",
        "Bank Account",
        "Flow ID",
        "Value Date"
      ],
      "columns": [
        "Company Code",
        "House Bank",
        "Bank Account",
        "Flow ID",
        "Value Date",
        "Transaction Date",
        "Liquidity Item",
        "Planning Level",
        "Planning Group",
        "Certainty Level",
        "Amount",
        "Currency",
        "Source Application",
        "Source Document",
        "Opening Balance",
        "Closing Balance",
        "Status"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "House Bank",
          "label": "House Bank",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: House Bank. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Bank Account",
          "label": "Bank Account",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Bank Account. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Flow ID",
          "label": "Flow ID",
          "position": 4,
          "type": "text",
          "meaning": "Khóa cash flow",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Date",
          "label": "Value Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày giá trị",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Transaction Date",
          "label": "Transaction Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: Transaction Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Liquidity Item",
          "label": "Liquidity Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Liquidity Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planning Level",
          "label": "Planning Level",
          "position": 8,
          "type": "text",
          "meaning": "cấp: Planning Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planning Group",
          "label": "Planning Group",
          "position": 9,
          "type": "text",
          "meaning": "nhóm: Planning Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Certainty Level",
          "label": "Certainty Level",
          "position": 10,
          "type": "text",
          "meaning": "Phân loại chắc chắn actual/forecast theo nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Application",
          "label": "Source Application",
          "position": 13,
          "type": "text",
          "meaning": "Ứng dụng tạo flow nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Document",
          "label": "Source Document",
          "position": 14,
          "type": "text",
          "meaning": "Chứng từ tạo dữ liệu nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Opening Balance",
          "label": "Opening Balance",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Số dư đầu kỳ; không cộng snapshot",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Closing Balance",
          "label": "Closing Balance",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Số dư cuối kỳ; không cộng snapshot",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Nguồn và sử dụng tiền ở đâu, flow actual khác forecast thế nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Cash Flow Analyzer và dòng tiền thực tế. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Bank account và liquidity flow tại value date. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng opening/closing balance qua ngày; Cash Flow Analyzer không tự là cash flow statement IAS7. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Company Code + Bank Account + Flow ID + Value Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng opening/closing balance qua ngày; Cash Flow Analyzer không tự là cash flow statement IAS7.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng opening/closing balance qua ngày; Cash Flow Analyzer không tự là cash flow statement IAS7.",
      "ifrs": "Diễn giải SAVA: chứng từ, log, proposal và đối soát có vai trò khác nhau. Recognition cần quyền/nghĩa vụ và policy doanh nghiệp; IAS21 cho ngoại tệ, IFRS9 cho khoản phải thu/phải trả, IAS7 cho cash-flow classification. Dữ liệu quản trị không tự là báo cáo IFRS được duyệt.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile FI30 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": "F2332",
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "cash",
          "title": "Cash Flow Analyzer",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/186460fdc35a4b64a713da9bb00deb1e/cd6705281eef4230b81ef5a7b1ec54ee.html",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/186460fdc35a4b64a713da9bb00deb1e/cd6705281eef4230b81ef5a7b1ec54ee.html",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "GL/AP/AR Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO17",
      "module": "CO",
      "tcode": "KSB2",
      "title": "Cam kết chi phí cost center theo chứng từ",
      "sourceFamily": "commitments",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Cost center và commitment item",
      "keys": [
        "Controlling Area",
        "Cost Center",
        "Document",
        "Item"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Cost Center",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Document",
        "Item",
        "Purchase Order",
        "PO Item",
        "Expected Date",
        "Commitment Amount",
        "Currency",
        "Quantity",
        "Unit",
        "Value Type",
        "Supplier",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 3,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 4,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 7,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 9,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 10,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Expected Date",
          "label": "Expected Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Expected Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Commitment Amount",
          "label": "Commitment Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Commitment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Type",
          "label": "Value Type",
          "position": 16,
          "type": "text",
          "meaning": "Phân biệt actual/plan/commitment theo hệ nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 17,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Cam kết nào chưa chuyển thành actual cost?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Cam kết chi phí cost center theo chứng từ. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Cost center và commitment item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Commitment không phải chi phí actual hoặc khoản nợ IFRS đã ghi nhận. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Cost Center + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Commitment không phải chi phí actual hoặc khoản nợ IFRS đã ghi nhận.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Commitment không phải chi phí actual hoặc khoản nợ IFRS đã ghi nhận.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO17 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "commitments",
          "title": "Cost Centers: Commitments Line Item Report",
          "url": "https://help.sap.com/docs/SAP_ERP/b42281c1645049a4b07c0ab25ec8b899/e30cd553088f4308e10000000a174cb4.html?locale=en-US",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/b42281c1645049a4b07c0ab25ec8b899/e30cd553088f4308e10000000a174cb4.html?locale=en-US",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO18",
      "module": "CO",
      "tcode": "KOB2",
      "title": "Cam kết chi phí internal order",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order và commitment item",
      "keys": [
        "Controlling Area",
        "Order",
        "Document",
        "Item"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Order Type",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Document",
        "Item",
        "Purchase Order",
        "PO Item",
        "Expected Date",
        "Commitment Amount",
        "Currency",
        "Quantity",
        "Unit",
        "Value Type",
        "Supplier",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 4,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 5,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 8,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 9,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 10,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 11,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Expected Date",
          "label": "Expected Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "ngày: Expected Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Commitment Amount",
          "label": "Commitment Amount",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Commitment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 16,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Type",
          "label": "Value Type",
          "position": 17,
          "type": "text",
          "meaning": "Phân biệt actual/plan/commitment theo hệ nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 18,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nào còn cam kết mở và có vượt nguồn lực?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Cam kết chi phí internal order. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order và commitment item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Giảm commitment khi actual phát sinh phải theo đúng PO item, không trừ toàn order tùy ý. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Giảm commitment khi actual phát sinh phải theo đúng PO item, không trừ toàn order tùy ý.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Giảm commitment khi actual phát sinh phải theo đúng PO item, không trừ toàn order tùy ý.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO19",
      "module": "CO",
      "tcode": "KSBT",
      "title": "Danh mục đơn giá hoạt động theo phiên bản",
      "sourceFamily": "rates",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Cost center activity type version period",
      "keys": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Version",
        "Fiscal Year",
        "Period"
      ],
      "columns": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Version",
        "Fiscal Year",
        "Period",
        "Valuation View",
        "Price Indicator",
        "Fixed Price",
        "Variable Price",
        "Total Price",
        "Price Unit",
        "Currency",
        "Activity Unit",
        "Planned Activity",
        "Actual Activity",
        "Capacity",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 4,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation View",
          "label": "Valuation View",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation View. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Indicator",
          "label": "Price Indicator",
          "position": 8,
          "type": "text",
          "meaning": "cờ chỉ báo: Price Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fixed Price",
          "label": "Fixed Price",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "đơn giá: Fixed Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variable Price",
          "label": "Variable Price",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "đơn giá: Variable Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Total Price",
          "label": "Total Price",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "đơn giá: Total Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Activity",
          "label": "Planned Activity",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planned Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Actual Activity",
          "label": "Actual Activity",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Actual Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity",
          "label": "Capacity",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "công suất: Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Đơn giá cố định/biến đổi khác nhau theo version nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục đơn giá hoạt động theo phiên bản. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Cost center activity type version period. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "CO14 là run actual rate; hồ sơ này là price lookup theo version/valuation, không cộng đơn giá. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Cost Center + Activity Type + Version + Fiscal Year + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "CO14 là run actual rate; hồ sơ này là price lookup theo version/valuation, không cộng đơn giá.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "CO14 là run actual rate; hồ sơ này là price lookup theo version/valuation, không cộng đơn giá.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "rates",
          "title": "Price Calculation",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/5e23dc8fe9be4fd496f8ab556667ea05/1a34cb14867d4f7db1854060113ae248.html",
          "source_version": "2025 FPS02",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/5e23dc8fe9be4fd496f8ab556667ea05/1a34cb14867d4f7db1854060113ae248.html",
      "source_edition": "2025 FPS02",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO20",
      "module": "CO",
      "tcode": "S_ALR_87013617 (candidate)",
      "title": "Hoạt động kế hoạch, sử dụng và công suất CO",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Cost center activity type và period",
      "keys": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Fiscal Year",
        "Period",
        "Version"
      ],
      "columns": [
        "Controlling Area",
        "Cost Center",
        "Activity Type",
        "Fiscal Year",
        "Period",
        "Version",
        "Planned Activity",
        "Actual Activity",
        "Scheduled Activity",
        "Capacity",
        "Activity Unit",
        "Fixed Price",
        "Variable Price",
        "Currency",
        "Utilization",
        "Variance",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 5,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 6,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Activity",
          "label": "Planned Activity",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planned Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Actual Activity",
          "label": "Actual Activity",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Actual Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Scheduled Activity",
          "label": "Scheduled Activity",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Scheduled Activity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity",
          "label": "Capacity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "công suất: Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 11,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fixed Price",
          "label": "Fixed Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Fixed Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variable Price",
          "label": "Variable Price",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "đơn giá: Variable Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Utilization",
          "label": "Utilization",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Tỷ lệ sử dụng capacity theo denominator",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Activity demand có vượt planned capacity và delivered activity?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Hoạt động kế hoạch, sử dụng và công suất CO. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Cost center activity type và period. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không lấy actual activity CO thay machine hours nếu chưa có approved conversion. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Cost Center + Activity Type + Fiscal Year + Period + Version cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không lấy actual activity CO thay machine hours nếu chưa có approved conversion.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không lấy actual activity CO thay machine hours nếu chưa có approved conversion.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO21",
      "module": "CO",
      "tcode": "S_ALR_87012993 (candidate)",
      "title": "Internal order actual, plan và variance",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order cost element period version",
      "keys": [
        "Controlling Area",
        "Order",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Version"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Order Type",
        "Cost Element",
        "Fiscal Year",
        "Period",
        "Version",
        "Plan Amount",
        "Actual Amount",
        "Variance",
        "Currency",
        "Plan Quantity",
        "Actual Quantity",
        "Unit",
        "Responsible Cost Center",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 4,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 5,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 8,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Quantity",
          "label": "Plan Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Plan Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Quantity",
          "label": "Actual Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Actual Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Cost Center",
          "label": "Responsible Cost Center",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Cost Center. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nào lệch kế hoạch và lệch do lượng hay giá?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Internal order actual, plan và variance. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order cost element period version. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng summary order với KOB1 detail; variance phải giữ period/version. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Cost Element + Fiscal Year + Period + Version cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng summary order với KOB1 detail; variance phải giữ period/version.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng summary order với KOB1 detail; variance phải giữ period/version.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO21 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO22",
      "module": "CO",
      "tcode": "S_ALR_87013019 (candidate)",
      "title": "Order budget, actual và commitment",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order budget year và currency",
      "keys": [
        "Controlling Area",
        "Order",
        "Fiscal Year",
        "Currency"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Fiscal Year",
        "Budget",
        "Supplement",
        "Return Amount",
        "Released Budget",
        "Actual Amount",
        "Commitment Amount",
        "Assigned Amount",
        "Available Budget",
        "Currency",
        "Responsible Cost Center",
        "Order Type",
        "Status",
        "Owner"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Budget",
          "label": "Budget",
          "position": 5,
          "type": "raw_decimal",
          "meaning": "ngân sách: Budget. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Supplement",
          "label": "Supplement",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Supplement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Return Amount",
          "label": "Return Amount",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Return Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Released Budget",
          "label": "Released Budget",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "ngân sách: Released Budget. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Commitment Amount",
          "label": "Commitment Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Commitment Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Assigned Amount",
          "label": "Assigned Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Assigned Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Budget",
          "label": "Available Budget",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "ngân sách: Available Budget. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Cost Center",
          "label": "Responsible Cost Center",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Cost Center. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 15,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 17,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Ngân sách còn khả dụng sau actual và commitments?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Order budget, actual và commitment. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order budget year và currency. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Budget release không phải liability; tránh double count commitments đã chuyển actual. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Fiscal Year + Currency cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Budget release không phải liability; tránh double count commitments đã chuyển actual.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Budget release không phải liability; tránh double count commitments đã chuyển actual.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO22 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO23",
      "module": "CO",
      "tcode": "KSU5",
      "title": "Kết quả assessment và bridge sender-receiver",
      "sourceFamily": "allocation",
      "kind": "RUN_EVIDENCE",
      "grain": "Cycle run segment và sender receiver",
      "keys": [
        "Controlling Area",
        "Run ID",
        "Cycle",
        "Segment",
        "Sender",
        "Receiver"
      ],
      "columns": [
        "Controlling Area",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Cycle",
        "Segment",
        "Sender",
        "Receiver",
        "Assessment Cost Element",
        "Tracing Factor",
        "Allocation Base",
        "Allocated Amount",
        "Currency",
        "Sender Credit",
        "Receiver Debit",
        "Test Run",
        "Accounting Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cycle",
          "label": "Cycle",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender",
          "label": "Sender",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sender. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receiver",
          "label": "Receiver",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receiver. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Assessment Cost Element",
          "label": "Assessment Cost Element",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Assessment Cost Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tracing Factor",
          "label": "Tracing Factor",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Tracing Factor. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocation Base",
          "label": "Allocation Base",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Allocation Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Amount",
          "label": "Allocated Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Allocated Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender Credit",
          "label": "Sender Credit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Sender Credit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Receiver Debit",
          "label": "Receiver Debit",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Receiver Debit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 16,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 19,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Assessment đã phân bổ cho ai và có bảo toàn tổng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả assessment và bridge sender-receiver. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Cycle run segment và sender receiver. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Test log không chứng minh posting; đối chiếu tổng sender credit với receiver debit cùng currency. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Run ID + Cycle + Segment + Sender + Receiver cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Test log không chứng minh posting; đối chiếu tổng sender credit với receiver debit cùng currency.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Test log không chứng minh posting; đối chiếu tổng sender credit với receiver debit cùng currency.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO23 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "allocation",
          "title": "Controlling and Project System",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO24",
      "module": "CO",
      "tcode": "KSV5",
      "title": "Kết quả distribution theo cost element gốc",
      "sourceFamily": "allocation",
      "kind": "RUN_EVIDENCE",
      "grain": "Cycle run segment cost element sender receiver",
      "keys": [
        "Controlling Area",
        "Run ID",
        "Cycle",
        "Segment",
        "Cost Element",
        "Sender",
        "Receiver"
      ],
      "columns": [
        "Controlling Area",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Cycle",
        "Segment",
        "Cost Element",
        "Sender",
        "Receiver",
        "Tracing Factor",
        "Allocation Base",
        "Allocated Amount",
        "Currency",
        "Sender Credit",
        "Receiver Debit",
        "Test Run",
        "Accounting Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cycle",
          "label": "Cycle",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 7,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender",
          "label": "Sender",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sender. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receiver",
          "label": "Receiver",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receiver. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Tracing Factor",
          "label": "Tracing Factor",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Tracing Factor. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocation Base",
          "label": "Allocation Base",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Allocation Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Amount",
          "label": "Allocated Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Allocated Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender Credit",
          "label": "Sender Credit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Sender Credit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Receiver Debit",
          "label": "Receiver Debit",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Receiver Debit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 16,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 19,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Chi phí gốc được chuyển giữa các cost center ra sao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả distribution theo cost element gốc. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Cycle run segment cost element sender receiver. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Distribution giữ cost element gốc, khác assessment; không gộp cả hai bridge thành một loại chi phí. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Run ID + Cycle + Segment + Cost Element + Sender + Receiver cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Distribution giữ cost element gốc, khác assessment; không gộp cả hai bridge thành một loại chi phí.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Distribution giữ cost element gốc, khác assessment; không gộp cả hai bridge thành một loại chi phí.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO24 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "allocation",
          "title": "Controlling and Project System",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO25",
      "module": "CO",
      "tcode": "KSC5",
      "title": "Kết quả phân bổ hoạt động gián tiếp",
      "sourceFamily": "allocation",
      "kind": "RUN_EVIDENCE",
      "grain": "Run segment activity type sender receiver",
      "keys": [
        "Controlling Area",
        "Run ID",
        "Segment",
        "Activity Type",
        "Sender",
        "Receiver"
      ],
      "columns": [
        "Controlling Area",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Cycle",
        "Segment",
        "Activity Type",
        "Sender",
        "Receiver",
        "Allocation Base",
        "Activity Quantity",
        "Activity Unit",
        "Price",
        "Price Unit",
        "Allocated Amount",
        "Currency",
        "Test Run",
        "Accounting Document",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cycle",
          "label": "Cycle",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sender",
          "label": "Sender",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sender. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receiver",
          "label": "Receiver",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receiver. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Allocation Base",
          "label": "Allocation Base",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Allocation Base. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Quantity",
          "label": "Activity Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Activity Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 12,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price",
          "label": "Price",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "đơn giá: Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Amount",
          "label": "Allocated Amount",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Allocated Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 16,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 17,
          "type": "text",
          "meaning": "Cờ chạy thử; không đồng nghĩa đã posted",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 18,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 20,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Hoạt động gián tiếp được phân bổ theo driver nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả phân bổ hoạt động gián tiếp. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Run segment activity type sender receiver. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Quantity × price cần Price Unit; không tự nhân đơn giá nếu price unit khác1. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Run ID + Segment + Activity Type + Sender + Receiver cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Quantity × price cần Price Unit; không tự nhân đơn giá nếu price unit khác1.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Quantity × price cần Price Unit; không tự nhân đơn giá nếu price unit khác1.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO25 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "allocation",
          "title": "Controlling and Project System",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
          "source_version": "2025 FPS01",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/6d5c8dacefc54f6b879285c366aec1b1/a4e7cc53a8b77214e10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=2025.001",
      "source_edition": "2025 FPS01",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO26",
      "module": "CO",
      "tcode": "CK40N",
      "title": "Trạng thái costing run nhiều vật tư",
      "sourceFamily": "costRun",
      "kind": "RUN_EVIDENCE",
      "grain": "Costing run material plant và bước",
      "keys": [
        "Run ID",
        "Material",
        "Plant",
        "Step"
      ],
      "columns": [
        "Run ID",
        "Run Date",
        "Material",
        "Plant",
        "Costing Variant",
        "Costing Version",
        "Costing Date",
        "Valuation Date",
        "Quantity Structure Date",
        "Lot Size",
        "Unit",
        "Step",
        "Cost Estimate",
        "Costing Level",
        "Status",
        "Message",
        "Marked",
        "Released",
        "Amount",
        "Currency"
      ],
      "fields": [
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 1,
          "type": "text",
          "meaning": "Mã lần chạy, không phải chứng từ ghi sổ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Run Date",
          "label": "Run Date",
          "position": 2,
          "type": "raw_date",
          "meaning": "Ngày lần chạy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 4,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Variant",
          "label": "Costing Variant",
          "position": 5,
          "type": "text",
          "meaning": "Biến thể costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Version",
          "label": "Costing Version",
          "position": 6,
          "type": "text",
          "meaning": "Phiên bản costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Date",
          "label": "Costing Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày cost estimate",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valuation Date",
          "label": "Valuation Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Valuation Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Quantity Structure Date",
          "label": "Quantity Structure Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Quantity Structure Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Lot Size",
          "label": "Lot Size",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Cỡ lô làm cơ sở costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Step",
          "label": "Step",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Step. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Estimate",
          "label": "Cost Estimate",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Estimate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Level",
          "label": "Costing Level",
          "position": 14,
          "type": "text",
          "meaning": "cấp: Costing Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Marked",
          "label": "Marked",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Marked. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Released",
          "label": "Released",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Released. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 19,
          "type": "raw_decimal",
          "meaning": "Giá trị có dấu theo currency",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 20,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Vật tư nào costing thành công nhưng chưa mark/release?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Trạng thái costing run nhiều vật tư. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ đọc log/kết quả operator cung cấp, không chạy posting hoặc release.",
      "reading": "Một dòng: Costing run material plant và bước. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không chạy mark/release từ thư viện; costing thành công không xác nhận standard price đã cập nhật. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Run ID + Material + Plant + Step cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không chạy mark/release từ thư viện; costing thành công không xác nhận standard price đã cập nhật.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không chạy mark/release từ thư viện; costing thành công không xác nhận standard price đã cập nhật.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO26 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Costing run",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO27",
      "module": "CO",
      "tcode": "CK80_99 (candidate)",
      "title": "So sánh các cost estimate và giá định giá",
      "sourceFamily": "costRun",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant và cặp cost estimate",
      "keys": [
        "Material",
        "Plant",
        "Cost Estimate",
        "Comparison Estimate"
      ],
      "columns": [
        "Material",
        "Plant",
        "Cost Estimate",
        "Comparison Estimate",
        "Costing Variant",
        "Costing Version",
        "Costing Date",
        "Lot Size",
        "Unit",
        "Current Cost",
        "Previous Cost",
        "Standard Price",
        "Price Unit",
        "Difference",
        "Currency",
        "Status",
        "Cost Component"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Estimate",
          "label": "Cost Estimate",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Estimate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Comparison Estimate",
          "label": "Comparison Estimate",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Comparison Estimate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Variant",
          "label": "Costing Variant",
          "position": 5,
          "type": "text",
          "meaning": "Biến thể costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Version",
          "label": "Costing Version",
          "position": 6,
          "type": "text",
          "meaning": "Phiên bản costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Costing Date",
          "label": "Costing Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày cost estimate",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Lot Size",
          "label": "Lot Size",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Cỡ lô làm cơ sở costing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Current Cost",
          "label": "Current Cost",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Current Cost. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Previous Cost",
          "label": "Previous Cost",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Previous Cost. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Standard Price",
          "label": "Standard Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Standard Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Component",
          "label": "Cost Component",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Cost estimate mới lệch estimate cũ và standard price bao nhiêu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của So sánh các cost estimate và giá định giá. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant và cặp cost estimate. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chuẩn hóa lot size, currency, valuation date; nguồn costing run chưa xác minh CK80_99 output. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Cost Estimate + Comparison Estimate cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chuẩn hóa lot size, currency, valuation date; nguồn costing run chưa xác minh CK80_99 output.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chuẩn hóa lot size, currency, valuation date; nguồn costing run chưa xác minh CK80_99 output.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO27 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Costing run",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361880913.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO28",
      "module": "CO",
      "tcode": "KKBC_ORD",
      "title": "Phân tích chi phí lệnh theo cost element",
      "sourceFamily": "costOrder",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Order cost element và cost category",
      "keys": [
        "Controlling Area",
        "Order",
        "Cost Element",
        "Cost Category",
        "Period"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Order",
        "Material",
        "Plant",
        "Fiscal Year",
        "Period",
        "Cost Element",
        "Cost Category",
        "Plan Amount",
        "Actual Amount",
        "Target Amount",
        "Variance",
        "Currency",
        "Plan Quantity",
        "Actual Quantity",
        "Unit",
        "Origin",
        "Status"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Element",
          "label": "Cost Element",
          "position": 8,
          "type": "text",
          "meaning": "Yếu tố chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Category",
          "label": "Cost Category",
          "position": 9,
          "type": "text",
          "meaning": "loại: Cost Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Target Amount",
          "label": "Target Amount",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Target Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Quantity",
          "label": "Plan Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Plan Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Quantity",
          "label": "Actual Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "số lượng: Actual Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 17,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Origin",
          "label": "Origin",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Origin. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Chi phí target, plan và actual của order khác nhau ở đâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Phân tích chi phí lệnh theo cost element. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order cost element và cost category. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Khác log variance CO11: đây là matrix cost analysis; target cost phụ thuộc target version và output basis. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Order + Cost Element + Cost Category + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Khác log variance CO11: đây là matrix cost analysis; target cost phụ thuộc target version và output basis.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Khác log variance CO11: đây là matrix cost analysis; target cost phụ thuộc target version và output basis.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO28 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Cost Analysis explanation (KKBC_ORD)",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878124.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/ficontrolling/3361878124.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO29",
      "module": "CO",
      "tcode": "KE25",
      "title": "Chi tiết kế hoạch profitability analysis",
      "sourceFamily": "copaPlan",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Operating concern plan document item version",
      "keys": [
        "Operating Concern",
        "Document",
        "Item",
        "Version",
        "Fiscal Year",
        "Period"
      ],
      "columns": [
        "Operating Concern",
        "Document",
        "Item",
        "Version",
        "Fiscal Year",
        "Period",
        "Record Type",
        "Customer",
        "Material",
        "Sales Organization",
        "Plant",
        "Profit Center",
        "Value Field",
        "Plan Amount",
        "Currency",
        "Quantity",
        "Unit",
        "Segment",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Operating Concern",
          "label": "Operating Concern",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi profitability analysis",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 2,
          "type": "text",
          "meaning": "Số chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 3,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 4,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Record Type",
          "label": "Record Type",
          "position": 7,
          "type": "text",
          "meaning": "Loại record CO-PA",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 8,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 11,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 12,
          "type": "text",
          "meaning": "Trung tâm lợi nhuận",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value Field",
          "label": "Value Field",
          "position": 13,
          "type": "text",
          "meaning": "Trường giá trị costing-based CO-PA",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 17,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 18,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 19,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Kế hoạch doanh thu/chi phí theo profitability segment là gì?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết kế hoạch profitability analysis. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Operating concern plan document item version. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "KE25 plan không union vào KE24 actual; costing-based value fields không tự tương đương margin analysis GL. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Operating Concern + Document + Item + Version + Fiscal Year + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "KE25 plan không union vào KE24 actual; costing-based value fields không tự tương đương margin analysis GL.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "KE25 plan không union vào KE24 actual; costing-based value fields không tự tương đương margin analysis GL.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO29 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Archiving of CO-PA Transaction Data",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn156search1",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/a87b965528884868b4404902123c6004/ce0bd353c6244308e10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "CO30",
      "module": "CO",
      "tcode": "Fiori profit center reporting (candidate)",
      "title": "Profit center actual và plan theo tài khoản",
      "sourceFamily": "coReports",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Profit center account ledger period plan category",
      "keys": [
        "Controlling Area",
        "Profit Center",
        "Account",
        "Ledger",
        "Fiscal Year",
        "Period",
        "Plan Category"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Profit Center",
        "Account",
        "Ledger",
        "Fiscal Year",
        "Period",
        "Plan Category",
        "Plan Amount",
        "Actual Amount",
        "Variance",
        "Currency",
        "Functional Area",
        "Segment",
        "Partner Profit Center",
        "Status",
        "Hierarchy Node"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "meaning": "Phạm vi quản trị chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 3,
          "type": "text",
          "meaning": "Trung tâm lợi nhuận",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Account",
          "label": "Account",
          "position": 4,
          "type": "text",
          "meaning": "Tài khoản kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ledger",
          "label": "Ledger",
          "position": 5,
          "type": "text",
          "meaning": "Sổ kế toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 7,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Category",
          "label": "Plan Category",
          "position": 8,
          "type": "text",
          "meaning": "loại: Plan Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plan Amount",
          "label": "Plan Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Plan Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Amount",
          "label": "Actual Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Actual Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Variance. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Area",
          "label": "Functional Area",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Functional Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Segment",
          "label": "Segment",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Partner Profit Center",
          "label": "Partner Profit Center",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Partner Profit Center. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Hierarchy Node",
          "label": "Hierarchy Node",
          "position": 17,
          "type": "text",
          "meaning": "Nút phân cấp; không cộng cùng leaf",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Profit center nào lệch kế hoạch và tài khoản nào đóng góp?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Profit center actual và plan theo tài khoản. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Profit center account ledger period plan category. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng parent hierarchy và leaf; layout/app ID mục tiêu chưa xác minh. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Controlling Area + Profit Center + Account + Ledger + Fiscal Year + Period + Plan Category cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng parent hierarchy và leaf; layout/app ID mục tiêu chưa xác minh.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng parent hierarchy và leaf; layout/app ID mục tiêu chưa xác minh.",
      "ifrs": "Diễn giải SAVA theo IAS2: plan/budget/commitment không phải chi phí actual. Allocation/cost estimate cần bridge GL, output basis và normal capacity; hao phí bất thường không tự được vốn hóa. Đối chiếu settlement/posting reference trước kết luận WIP hoặc COGS.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile CO30 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "coReports",
          "title": "Reports for Cost Accountant",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
          "source_version": "6.0 EHP8",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/807ad0531d8b4208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Cost Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM18",
      "module": "MM",
      "tcode": "ME1M (candidate)",
      "title": "Danh mục purchasing info record và điều kiện mua",
      "sourceFamily": "info",
      "kind": "MASTER_DISPLAY",
      "grain": "Info record purchase organization plant validity",
      "keys": [
        "Info Record",
        "Purchasing Organization",
        "Plant",
        "Valid From"
      ],
      "columns": [
        "Info Record",
        "Material",
        "Material Group",
        "Supplier",
        "Purchasing Organization",
        "Plant",
        "Info Category",
        "Valid From",
        "Valid To",
        "Net Price",
        "Currency",
        "Price Unit",
        "Order Unit",
        "Base Unit",
        "Conversion Numerator",
        "Conversion Denominator",
        "Planned Delivery Time",
        "Minimum Quantity",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Info Record",
          "label": "Info Record",
          "position": 1,
          "type": "text",
          "meaning": "bản ghi: Info Record. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 3,
          "type": "text",
          "meaning": "nhóm: Material Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 6,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Info Category",
          "label": "Info Category",
          "position": 7,
          "type": "text",
          "meaning": "loại: Info Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Net Price",
          "label": "Net Price",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "đơn giá: Net Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Order Unit",
          "label": "Order Unit",
          "position": 13,
          "type": "text",
          "meaning": "đơn vị: Order Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Base Unit",
          "label": "Base Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Base Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Conversion Numerator",
          "label": "Conversion Numerator",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Conversion Numerator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Conversion Denominator",
          "label": "Conversion Denominator",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Conversion Denominator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Planned Delivery Time",
          "label": "Planned Delivery Time",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "thời gian: Planned Delivery Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Minimum Quantity",
          "label": "Minimum Quantity",
          "position": 18,
          "type": "raw_decimal",
          "meaning": "số lượng: Minimum Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 19,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Giá và đơn vị mua đã thống nhất với vật tư/nhà cung cấp chưa?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục purchasing info record và điều kiện mua. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Info record purchase organization plant validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Condition validity/price unit/UoM có thể làm sai giá; master price khác actual invoice cost. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Info Record + Purchasing Organization + Plant + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Condition validity/price unit/UoM có thể làm sai giá; master price khác actual invoice cost.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Condition validity/price unit/UoM có thể làm sai giá; master price khác actual invoice cost.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Purchasing Info Records",
          "url": "https://help.sap.com/docs/PRODUCT_ID/af9ef57f504840d2b81be8667206d485/49e387576b49ab76e10000000a441470.html?locale=en-US",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/af9ef57f504840d2b81be8667206d485/49e387576b49ab76e10000000a441470.html?locale=en-US",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM19",
      "module": "MM",
      "tcode": "ME0M (candidate)",
      "title": "Source list và nhà cung cấp hiệu lực",
      "sourceFamily": "sourceList",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant source list validity",
      "keys": [
        "Material",
        "Plant",
        "Source List Item",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "Source List Item",
        "Supplier",
        "Purchasing Organization",
        "Agreement",
        "Agreement Item",
        "Info Record",
        "Valid From",
        "Valid To",
        "Fixed Source",
        "Blocked",
        "MRP Relevant",
        "Procurement Type",
        "Created By",
        "Changed At",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source List Item",
          "label": "Source List Item",
          "position": 3,
          "type": "text",
          "meaning": "dòng: Source List Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Agreement",
          "label": "Agreement",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Agreement Item",
          "label": "Agreement Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Agreement Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Info Record",
          "label": "Info Record",
          "position": 8,
          "type": "text",
          "meaning": "bản ghi: Info Record. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 10,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Fixed Source",
          "label": "Fixed Source",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Fixed Source. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Blocked",
          "label": "Blocked",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Blocked. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Relevant",
          "label": "MRP Relevant",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Relevant. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 14,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 16,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Vật tư nào thiếu nguồn cung hợp lệ hoặc có nguồn bị block?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Source list và nhà cung cấp hiệu lực. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant source list validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Ngày hiệu lực và fixed source phải xét tại ngày nhu cầu, không chỉ ngày xem master. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Source List Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Ngày hiệu lực và fixed source phải xét tại ngày nhu cầu, không chỉ ngày xem master.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Ngày hiệu lực và fixed source phải xét tại ngày nhu cầu, không chỉ ngày xem master.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Source Lists",
          "url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/49fb9b57aba49f2de10000000a44147b.html?locale=en-us",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/49fb9b57aba49f2de10000000a44147b.html?locale=en-us",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM20",
      "module": "MM",
      "tcode": "MEQ3 (candidate)",
      "title": "Quota arrangement và phân bổ nguồn cung",
      "sourceFamily": "quota",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant quota item validity",
      "keys": [
        "Material",
        "Plant",
        "Quota Item",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "Quota Item",
        "Supplier",
        "Procurement Type",
        "Supplying Plant",
        "Production Version",
        "Quota",
        "Quota Base Quantity",
        "Allocated Quantity",
        "Quota Rating",
        "Unit",
        "Valid From",
        "Valid To",
        "Minimum Quantity",
        "Maximum Quantity",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quota Item",
          "label": "Quota Item",
          "position": 3,
          "type": "text",
          "meaning": "dòng: Quota Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 5,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplying Plant",
          "label": "Supplying Plant",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Supplying Plant. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 7,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quota",
          "label": "Quota",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Quota. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quota Base Quantity",
          "label": "Quota Base Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Quota Base Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Allocated Quantity",
          "label": "Allocated Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Allocated Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quota Rating",
          "label": "Quota Rating",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Quota Rating. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Minimum Quantity",
          "label": "Minimum Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Minimum Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Maximum Quantity",
          "label": "Maximum Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "số lượng: Maximum Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Quota có tập trung quá mức vào một supplier hay supplying plant?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Quota arrangement và phân bổ nguồn cung. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant quota item validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Quota rating là logic procurement, không phải supplier KPI chất lượng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Quota Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Quota rating là logic procurement, không phải supplier KPI chất lượng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Quota rating là logic procurement, không phải supplier KPI chất lượng.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Quota Arrangements",
          "url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/a565c3dddcf943c69dc8d43ac2016e4c.html?q=flexible+workflow+for+purchase+order",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn165search5",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/sap_s4hana_cloud/0e602d466b99490187fcbb30d1dc897c/a565c3dddcf943c69dc8d43ac2016e4c.html?q=flexible+workflow+for+purchase+order",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM21",
      "module": "MM",
      "tcode": "ME9F (candidate)",
      "title": "Trạng thái output và thông báo đơn mua",
      "sourceFamily": "poOutput",
      "kind": "WORKLIST",
      "grain": "Purchasing document và output message",
      "keys": [
        "Purchase Order",
        "Message ID",
        "Output Type"
      ],
      "columns": [
        "Purchase Order",
        "Message ID",
        "Output Type",
        "Supplier",
        "Purchasing Organization",
        "Plant",
        "Created At",
        "Medium",
        "Recipient",
        "Language",
        "Processing Time",
        "Output Status",
        "Retry Count",
        "Changed By",
        "Transmission ID",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 1,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message ID",
          "label": "Message ID",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Message ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Output Type",
          "label": "Output Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Output Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 6,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created At",
          "label": "Created At",
          "position": 7,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Created At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Medium",
          "label": "Medium",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Medium. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recipient",
          "label": "Recipient",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Recipient. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Language",
          "label": "Language",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Language. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Processing Time",
          "label": "Processing Time",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "thời gian: Processing Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Output Status",
          "label": "Output Status",
          "position": 12,
          "type": "text",
          "meaning": "trạng thái: Output Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Retry Count",
          "label": "Retry Count",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Retry Count. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Changed By",
          "label": "Changed By",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Changed By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Transmission ID",
          "label": "Transmission ID",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Transmission ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 17,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Đơn mua nào chưa gửi hoặc output bị lỗi?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Trạng thái output và thông báo đơn mua. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Purchasing document và output message. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Output sent không chứng minh supplier accepted; tách truyền thông và confirmation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Purchase Order + Message ID + Output Type cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Output sent không chứng minh supplier accepted; tách truyền thông và confirmation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Output sent không chứng minh supplier accepted; tách truyền thông và confirmation.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM21 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "POWER Lists for Purchaser",
          "url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/d75db6531de6b64ce10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6ce39fbda7a14bfea7058d90dceb6fb6/d75db6531de6b64ce10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM22",
      "module": "MM",
      "tcode": "ME2O",
      "title": "Vật tư giao gia công và yêu cầu bổ sung",
      "sourceFamily": "goods",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Supplier component material plant và requirement",
      "keys": [
        "Supplier",
        "Material",
        "Plant",
        "Requirement ID"
      ],
      "columns": [
        "Supplier",
        "Material",
        "Plant",
        "Storage Location",
        "Batch",
        "Special Stock",
        "Requirement ID",
        "Purchase Order",
        "PO Item",
        "Requirement Date",
        "Required Quantity",
        "Provided Quantity",
        "Available Quantity",
        "Shortage Quantity",
        "Unit",
        "Finished Material",
        "Status"
      ],
      "fields": [
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 1,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 4,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 5,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 6,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement ID",
          "label": "Requirement ID",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Requirement ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 8,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 9,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 10,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Quantity",
          "label": "Required Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Required Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Provided Quantity",
          "label": "Provided Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Provided Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Quantity",
          "label": "Available Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Available Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Shortage Quantity",
          "label": "Shortage Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Shortage Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Finished Material",
          "label": "Finished Material",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Finished Material. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier gia công thiếu component nào và theo PO nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Vật tư giao gia công và yêu cầu bổ sung. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Supplier component material plant và requirement. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Stock tại subcontractor có thể vẫn thuộc doanh nghiệp; special stock O cần bridge ownership. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Supplier + Material + Plant + Requirement ID cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Stock tại subcontractor có thể vẫn thuộc doanh nghiệp; special stock O cần bridge ownership.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Stock tại subcontractor có thể vẫn thuộc doanh nghiệp; special stock O cần bridge ownership.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM22 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Goods Movement (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM23",
      "module": "MM",
      "tcode": "MB58 (candidate)",
      "title": "Tồn ký gửi tại khách hàng",
      "sourceFamily": "goods",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Customer material plant batch special stock",
      "keys": [
        "Customer",
        "Material",
        "Plant",
        "Batch",
        "Special Stock"
      ],
      "columns": [
        "Customer",
        "Material",
        "Plant",
        "Batch",
        "Special Stock",
        "Stock Category",
        "Unrestricted Quantity",
        "Quality Quantity",
        "Blocked Quantity",
        "Unit",
        "Value",
        "Currency",
        "Valuation Type",
        "Key Date",
        "Last Movement Date",
        "Sales Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Customer",
          "label": "Customer",
          "position": 1,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 4,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 5,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stock Category",
          "label": "Stock Category",
          "position": 6,
          "type": "text",
          "meaning": "loại: Stock Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Unrestricted Quantity",
          "label": "Unrestricted Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Unrestricted Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quality Quantity",
          "label": "Quality Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Quality Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Blocked Quantity",
          "label": "Blocked Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Blocked Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value",
          "label": "Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị: Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Type",
          "label": "Valuation Type",
          "position": 13,
          "type": "text",
          "meaning": "Loại định giá phân tách",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Last Movement Date",
          "label": "Last Movement Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Last Movement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 16,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Hàng gửi tại khách còn thuộc doanh nghiệp bao nhiêu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Tồn ký gửi tại khách hàng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Customer material plant batch special stock. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Ký gửi khách khác ký gửi supplier; giao hàng ký gửi chưa tự là doanh thu. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Customer + Material + Plant + Batch + Special Stock cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Ký gửi khách khác ký gửi supplier; giao hàng ký gửi chưa tự là doanh thu.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Ký gửi khách khác ký gửi supplier; giao hàng ký gửi chưa tự là doanh thu.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM23 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Goods Movement (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM24",
      "module": "MM",
      "tcode": "MB5K (candidate)",
      "title": "Kiểm tra nhất quán stock và chứng từ",
      "sourceFamily": "consistency",
      "kind": "CONTROL_REPORT",
      "grain": "Material valuation scope và control rule",
      "keys": [
        "Material",
        "Plant",
        "Valuation Type",
        "Rule ID"
      ],
      "columns": [
        "Material",
        "Plant",
        "Storage Location",
        "Batch",
        "Valuation Type",
        "Special Stock",
        "Rule ID",
        "Stored Quantity",
        "Calculated Quantity",
        "Difference",
        "Unit",
        "Stored Value",
        "Calculated Value",
        "Currency",
        "Last Movement Date",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 3,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 4,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Type",
          "label": "Valuation Type",
          "position": 5,
          "type": "text",
          "meaning": "Loại định giá phân tách",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 6,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Rule ID",
          "label": "Rule ID",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Rule ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stored Quantity",
          "label": "Stored Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Stored Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Calculated Quantity",
          "label": "Calculated Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Calculated Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stored Value",
          "label": "Stored Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Stored Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Calculated Value",
          "label": "Calculated Value",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị: Calculated Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Last Movement Date",
          "label": "Last Movement Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Last Movement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 17,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Tồn lưu và tồn tính từ chứng từ lệch tại đâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kiểm tra nhất quán stock và chứng từ. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material valuation scope và control rule. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không tự sửa stock từ báo cáo consistency; source context không chứng nhận target MB5K implementation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Valuation Type + Rule ID cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không tự sửa stock từ báo cáo consistency; source context không chứng nhận target MB5K implementation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không tự sửa stock từ báo cáo consistency; source context không chứng nhận target MB5K implementation.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM24 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Stock Consistency Check Report",
          "url": "https://help.sap.com/docs/PRODUCT_ID/cc8f759e1b0e4f3b8048c3cf808d4068/b155971166e74155ad1dc8e6b22468f8.html?locale=en-US&state=PRODUCTION&version=LATEST",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/cc8f759e1b0e4f3b8048c3cf808d4068/b155971166e74155ad1dc8e6b22468f8.html?locale=en-US&state=PRODUCTION&version=LATEST",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM25",
      "module": "MM",
      "tcode": "MB5M (candidate)",
      "title": "Hạn sử dụng và batch cần xử lý",
      "sourceFamily": "goods",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant batch và snapshot date",
      "keys": [
        "Material",
        "Plant",
        "Batch",
        "Key Date"
      ],
      "columns": [
        "Material",
        "Plant",
        "Storage Location",
        "Batch",
        "Manufacturing Date",
        "Expiry Date",
        "Key Date",
        "Remaining Shelf Life",
        "Total Shelf Life",
        "Quantity",
        "Unit",
        "Value",
        "Currency",
        "Stock Category",
        "Quality Status",
        "Supplier",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 3,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 4,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Manufacturing Date",
          "label": "Manufacturing Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: Manufacturing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Expiry Date",
          "label": "Expiry Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: Expiry Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Remaining Shelf Life",
          "label": "Remaining Shelf Life",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Remaining Shelf Life. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Total Shelf Life",
          "label": "Total Shelf Life",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Total Shelf Life. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Value",
          "label": "Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Stock Category",
          "label": "Stock Category",
          "position": 14,
          "type": "text",
          "meaning": "loại: Stock Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quality Status",
          "label": "Quality Status",
          "position": 15,
          "type": "text",
          "meaning": "trạng thái: Quality Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 16,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Batch nào sắp hết hạn và bị quality block?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Hạn sử dụng và batch cần xử lý. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant batch và snapshot date. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Tuổi batch là tín hiệu IAS2 NRV, không tự là tỷ lệ dự phòng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Batch + Key Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Tuổi batch là tín hiệu IAS2 NRV, không tự là tỷ lệ dự phòng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Tuổi batch là tín hiệu IAS2 NRV, không tự là tỷ lệ dự phòng.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM25 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Goods Movement (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/6cfdc7caaef746cd9c7543e32e7e87c0/3b07b753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM26",
      "module": "MM",
      "tcode": "F1956",
      "title": "Phân tích vòng quay tồn kho",
      "sourceFamily": "inventory",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant kỳ và định nghĩa consumption",
      "keys": [
        "Material",
        "Plant",
        "From Date",
        "To Date",
        "Consumption Definition"
      ],
      "columns": [
        "Material",
        "Plant",
        "From Date",
        "To Date",
        "Consumption Definition",
        "Consumption Quantity",
        "Average Stock Quantity",
        "Unit",
        "Inventory Turnover",
        "Stock Coverage",
        "Opening Quantity",
        "Closing Quantity",
        "Stock Value",
        "Currency",
        "Material Group",
        "ABC Indicator",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "From Date",
          "label": "From Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "ngày: From Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "To Date",
          "label": "To Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: To Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Consumption Definition",
          "label": "Consumption Definition",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Consumption Definition. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Consumption Quantity",
          "label": "Consumption Quantity",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "số lượng: Consumption Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Average Stock Quantity",
          "label": "Average Stock Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Average Stock Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inventory Turnover",
          "label": "Inventory Turnover",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Vòng quay; không cộng các tỷ lệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Stock Coverage",
          "label": "Stock Coverage",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Stock Coverage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Opening Quantity",
          "label": "Opening Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Opening Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Closing Quantity",
          "label": "Closing Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Closing Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Stock Value",
          "label": "Stock Value",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "giá trị: Stock Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 15,
          "type": "text",
          "meaning": "nhóm: Material Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "ABC Indicator",
          "label": "ABC Indicator",
          "position": 16,
          "type": "text",
          "meaning": "cờ chỉ báo: ABC Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Vòng quay thấp do ít tiêu thụ hay tồn bình quân cao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Phân tích vòng quay tồn kho. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant kỳ và định nghĩa consumption. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng turnover hoặc coverage; phải khớp definition consumption và time weighting. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + From Date + To Date + Consumption Definition cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng turnover hoặc coverage; phải khớp definition consumption và time weighting.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng turnover hoặc coverage; phải khớp definition consumption và time weighting.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM26 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": "F1956",
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Inventory Turnover Analysis",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/91b21005dded4984bcccf4a69ae1300c/3649cd5616d2152ce10000000a4450e5.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn157search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/91b21005dded4984bcccf4a69ae1300c/3649cd5616d2152ce10000000a4450e5.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM27",
      "module": "MM",
      "tcode": "MI24",
      "title": "Danh sách chứng từ kiểm kê và trạng thái đếm",
      "sourceFamily": "physical",
      "kind": "WORKLIST",
      "grain": "Physical inventory document item year",
      "keys": [
        "Plant",
        "Inventory Document",
        "Fiscal Year",
        "Item"
      ],
      "columns": [
        "Plant",
        "Storage Location",
        "Inventory Document",
        "Fiscal Year",
        "Item",
        "Material",
        "Batch",
        "Special Stock",
        "Book Quantity",
        "Count Quantity",
        "Difference",
        "Unit",
        "Count Date",
        "Posting Date",
        "Counted",
        "Posted",
        "Recount Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 2,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inventory Document",
          "label": "Inventory Document",
          "position": 3,
          "type": "text",
          "meaning": "chứng từ: Inventory Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 4,
          "type": "text",
          "meaning": "Năm tài chính",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 5,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 7,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Special Stock",
          "label": "Special Stock",
          "position": 8,
          "type": "text",
          "meaning": "Loại tồn đặc biệt và phạm vi sở hữu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Book Quantity",
          "label": "Book Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Book Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Count Quantity",
          "label": "Count Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Count Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "chênh lệch: Difference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Count Date",
          "label": "Count Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Count Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Counted",
          "label": "Counted",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Counted. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posted",
          "label": "Posted",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posted. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recount Document",
          "label": "Recount Document",
          "position": 17,
          "type": "text",
          "meaning": "chứng từ: Recount Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Item nào chưa đếm, recount hoặc chưa ghi chênh lệch?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách chứng từ kiểm kê và trạng thái đếm. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Physical inventory document item year. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "MI24 process status khác MI20 difference list; book snapshot và count date cần cutoff bridge. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Inventory Document + Fiscal Year + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "MI24 process status khác MI20 difference list; book snapshot và count date cần cutoff bridge.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "MI24 process status khác MI20 difference list; book snapshot và count date cần cutoff bridge.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM27 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Reporting in Physical Inventory (MM-IM)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/666b7ae6edfe4c05a90ac0150637f964/4a07b753128eb44ce10000000a174cb4.html?version=6.06.34",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn151search10",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/666b7ae6edfe4c05a90ac0150637f964/4a07b753128eb44ce10000000a174cb4.html?version=6.06.34",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM28",
      "module": "MM",
      "tcode": "ME33L (candidate)",
      "title": "Lịch giao hàng của scheduling agreement mua",
      "sourceFamily": "schedule",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Agreement item schedule line",
      "keys": [
        "Agreement",
        "Agreement Item",
        "Schedule Line"
      ],
      "columns": [
        "Agreement",
        "Agreement Item",
        "Schedule Line",
        "Supplier",
        "Purchasing Organization",
        "Material",
        "Plant",
        "Delivery Date",
        "Scheduled Quantity",
        "Received Quantity",
        "Open Quantity",
        "Unit",
        "Release Number",
        "Release Date",
        "Confirmation Category",
        "Confirmed Date",
        "Confirmed Quantity",
        "Status"
      ],
      "fields": [
        {
          "key": "Agreement",
          "label": "Agreement",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Agreement Item",
          "label": "Agreement Item",
          "position": 2,
          "type": "text",
          "meaning": "dòng: Agreement Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Schedule Line",
          "label": "Schedule Line",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Schedule Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Purchasing Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Date",
          "label": "Delivery Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Delivery Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Scheduled Quantity",
          "label": "Scheduled Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Scheduled Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Received Quantity",
          "label": "Received Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Received Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Number",
          "label": "Release Number",
          "position": 13,
          "type": "text",
          "meaning": "số định danh: Release Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Confirmation Category",
          "label": "Confirmation Category",
          "position": 15,
          "type": "text",
          "meaning": "loại: Confirmation Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmed Date",
          "label": "Confirmed Date",
          "position": 16,
          "type": "raw_date",
          "meaning": "ngày: Confirmed Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Confirmed Quantity",
          "label": "Confirmed Quantity",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "số lượng: Confirmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier schedule nào còn mở và release nào áp dụng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Lịch giao hàng của scheduling agreement mua. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Agreement item schedule line. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Schedule changes không được cộng như lịch sử nhận hàng; giữ latest version và release basis. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Agreement + Agreement Item + Schedule Line cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Schedule changes không được cộng như lịch sử nhận hàng; giữ latest version và release basis.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Schedule changes không được cộng như lịch sử nhận hàng; giữ latest version và release basis.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM28 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Manage Supplier Confirmations",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/9900dd93aec14047b483dc1a52561bf5.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn165search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/9900dd93aec14047b483dc1a52561bf5.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM29",
      "module": "MM",
      "tcode": "Monitor Supplier Confirmations",
      "title": "Xác nhận giao hàng và thiếu hụt supplier",
      "sourceFamily": "confirmations",
      "kind": "WORKLIST",
      "grain": "Purchasing document item confirmation sequence",
      "keys": [
        "Purchase Order",
        "PO Item",
        "Confirmation Sequence"
      ],
      "columns": [
        "Purchase Order",
        "PO Item",
        "Supplier",
        "Material",
        "Plant",
        "Confirmation Sequence",
        "Confirmation Category",
        "Requested Date",
        "Confirmed Date",
        "Ordered Quantity",
        "Confirmed Quantity",
        "Delivered Quantity",
        "Open Quantity",
        "Unit",
        "Confirmation Control",
        "Exception Code",
        "Owner",
        "Status"
      ],
      "fields": [
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 1,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 3,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Sequence",
          "label": "Confirmation Sequence",
          "position": 6,
          "type": "text",
          "meaning": "thứ tự: Confirmation Sequence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Category",
          "label": "Confirmation Category",
          "position": 7,
          "type": "text",
          "meaning": "loại: Confirmation Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requested Date",
          "label": "Requested Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Requested Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Confirmed Date",
          "label": "Confirmed Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Confirmed Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Ordered Quantity",
          "label": "Ordered Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Ordered Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Confirmed Quantity",
          "label": "Confirmed Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Confirmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Delivered Quantity",
          "label": "Delivered Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Delivered Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Control",
          "label": "Confirmation Control",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Confirmation Control. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 16,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 17,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier nào chưa xác nhận đủ lượng hoặc đúng ngày?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Xác nhận giao hàng và thiếu hụt supplier. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Purchasing document item confirmation sequence. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không coi confirmation là receipt; aggregate confirmations có cancellation và revision trước join PO. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Purchase Order + PO Item + Confirmation Sequence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không coi confirmation là receipt; aggregate confirmations có cancellation và revision trước join PO.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không coi confirmation là receipt; aggregate confirmations có cancellation và revision trước join PO.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM29 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Monitor Supplier Confirmations",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/f8b9e757dc3bf032e10000000a441470.html",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn165search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/f8b9e757dc3bf032e10000000a441470.html",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "MM30",
      "module": "MM",
      "tcode": "MM60 (candidate)",
      "title": "Danh mục vật tư và thuộc tính định giá",
      "sourceFamily": "materials",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant valuation type",
      "keys": [
        "Material",
        "Plant",
        "Valuation Type"
      ],
      "columns": [
        "Material",
        "Material Description",
        "Material Type",
        "Material Group",
        "Plant",
        "Base Unit",
        "Valuation Area",
        "Valuation Type",
        "Valuation Class",
        "Price Control",
        "Standard Price",
        "Moving Average Price",
        "Price Unit",
        "Currency",
        "MRP Type",
        "Procurement Type",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Description",
          "label": "Material Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Material Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Type",
          "label": "Material Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Material Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 4,
          "type": "text",
          "meaning": "nhóm: Material Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Base Unit",
          "label": "Base Unit",
          "position": 6,
          "type": "text",
          "meaning": "đơn vị: Base Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Area",
          "label": "Valuation Area",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Type",
          "label": "Valuation Type",
          "position": 8,
          "type": "text",
          "meaning": "Loại định giá phân tách",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation Class",
          "label": "Valuation Class",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation Class. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Control",
          "label": "Price Control",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Price Control. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Standard Price",
          "label": "Standard Price",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "đơn giá: Standard Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Moving Average Price",
          "label": "Moving Average Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Moving Average Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Type",
          "label": "MRP Type",
          "position": 15,
          "type": "text",
          "meaning": "loại nghiệp vụ: MRP Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 16,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 17,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Master material nào có cấu hình gây sai grouping/valuation?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục vật tư và thuộc tính định giá. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant valuation type. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "S/V và giá master không tự là giá IFRS; snapshot price không thay historical valuation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Valuation Type cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "S/V và giá master không tự là giá IFRS; snapshot price không thay historical valuation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "S/V và giá master không tự là giá IFRS; snapshot price không thay historical valuation.",
      "ifrs": "Diễn giải SAVA theo IAS2: xác định quyền sở hữu và cutoff trước định giá; đối chiếu cost với NRV trên evidence riêng. Giá master, purchase commitment hoặc supplier confirmation không tự xác định inventory carrying amount.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile MM30 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Documentary Batches in Production",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/4eb099dbc8a6435c9b36a854a7e05522/36ffb753128eb44ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/4eb099dbc8a6435c9b36a854a7e05522/36ffb753128eb44ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Procurement / Inventory Controller",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP06",
      "module": "PP",
      "tcode": "MD05",
      "title": "MRP list tại lần chạy kế hoạch",
      "sourceFamily": "mrp",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Material plant MRP run element",
      "keys": [
        "Material",
        "Plant",
        "MRP Run",
        "MRP Element",
        "Element Item"
      ],
      "columns": [
        "Material",
        "Plant",
        "MRP Run",
        "MRP Date",
        "MRP Controller",
        "MRP Element",
        "Element Item",
        "Requirement Date",
        "Receipt Quantity",
        "Requirement Quantity",
        "Available Quantity",
        "Unit",
        "Exception Code",
        "Processing Indicator",
        "Source Document",
        "Status",
        "Key Date"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Run",
          "label": "MRP Run",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Run. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Date",
          "label": "MRP Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: MRP Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "MRP Controller",
          "label": "MRP Controller",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Controller. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Element",
          "label": "MRP Element",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Element Item",
          "label": "Element Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Element Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Receipt Quantity",
          "label": "Receipt Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Receipt Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Requirement Quantity",
          "label": "Requirement Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Requirement Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Quantity",
          "label": "Available Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Available Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 13,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Processing Indicator",
          "label": "Processing Indicator",
          "position": 14,
          "type": "text",
          "meaning": "cờ chỉ báo: Processing Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Document",
          "label": "Source Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ tạo dữ liệu nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "Ngày chốt số liệu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        }
      ],
      "purpose": "Lần MRP đã lưu tạo exception gì?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của MRP list tại lần chạy kế hoạch. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Material plant MRP run element. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Classic MRP snapshot khác MD04 dynamic; MRP Live không tạo MRP lists thông thường. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + MRP Run + MRP Element + Element Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Classic MRP snapshot khác MD04 dynamic; MRP Live không tạo MRP lists thông thường.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Classic MRP snapshot khác MD04 dynamic; MRP Live không tạo MRP lists thông thường.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "MD05 là classic MRP snapshot; không giả định MRP Live tạo list này.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP07",
      "module": "PP",
      "tcode": "MD09",
      "title": "Pegged requirements và nguồn nhu cầu",
      "sourceFamily": "mrp",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Receipt element và requirement edge",
      "keys": [
        "Material",
        "Plant",
        "Receipt Element",
        "Requirement Element",
        "Occurrence"
      ],
      "columns": [
        "Material",
        "Plant",
        "Receipt Element",
        "Requirement Element",
        "Occurrence",
        "Source Document",
        "Source Item",
        "Requirement Date",
        "Required Quantity",
        "Assigned Quantity",
        "Unit",
        "Parent Material",
        "Sales Document",
        "Order",
        "Project",
        "MRP Area",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receipt Element",
          "label": "Receipt Element",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Receipt Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Element",
          "label": "Requirement Element",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Requirement Element. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Occurrence",
          "label": "Occurrence",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Occurrence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Document",
          "label": "Source Document",
          "position": 6,
          "type": "text",
          "meaning": "Chứng từ tạo dữ liệu nguồn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Item",
          "label": "Source Item",
          "position": 7,
          "type": "text",
          "meaning": "dòng: Source Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Quantity",
          "label": "Required Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Required Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Assigned Quantity",
          "label": "Assigned Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Assigned Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Parent Material",
          "label": "Parent Material",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Parent Material. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 13,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 14,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Project",
          "label": "Project",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Project. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Area",
          "label": "MRP Area",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Receipt hoặc component phục vụ nhu cầu nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Pegged requirements và nguồn nhu cầu. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Receipt element và requirement edge. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Một receipt cấp nhiều requirements; không nhân full receipt quantity qua từng edge. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Receipt Element + Requirement Element + Occurrence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Một receipt cấp nhiều requirements; không nhân full receipt quantity qua từng edge.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Một receipt cấp nhiều requirements; không nhân full receipt quantity qua từng edge.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP08",
      "module": "PP",
      "tcode": "MD13",
      "title": "Planned order và cấu trúc lượng, ngày",
      "sourceFamily": "mrp",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Planned order header và material assignment",
      "keys": [
        "Plant",
        "Planned Order"
      ],
      "columns": [
        "Plant",
        "Planned Order",
        "Material",
        "MRP Area",
        "MRP Controller",
        "Order Type",
        "Order Quantity",
        "Unit",
        "Start Date",
        "Finish Date",
        "Opening Date",
        "Production Version",
        "Procurement Type",
        "Firming Indicator",
        "Sales Document",
        "Sales Item",
        "Conversion Status",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Order",
          "label": "Planned Order",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planned Order. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Area",
          "label": "MRP Area",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "MRP Controller",
          "label": "MRP Controller",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Controller. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 6,
          "type": "text",
          "meaning": "Loại lệnh",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order Quantity",
          "label": "Order Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Order Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Start Date",
          "label": "Start Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Start Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Finish Date",
          "label": "Finish Date",
          "position": 10,
          "type": "raw_date",
          "meaning": "ngày: Finish Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Opening Date",
          "label": "Opening Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Opening Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 12,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Procurement Type",
          "label": "Procurement Type",
          "position": 13,
          "type": "text",
          "meaning": "loại nghiệp vụ: Procurement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Firming Indicator",
          "label": "Firming Indicator",
          "position": 14,
          "type": "text",
          "meaning": "cờ chỉ báo: Firming Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 16,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Conversion Status",
          "label": "Conversion Status",
          "position": 17,
          "type": "text",
          "meaning": "trạng thái: Conversion Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Planned order nào được firm và chưa chuyển thành lệnh thực hiện?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Planned order và cấu trúc lượng, ngày. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Planned order header và material assignment. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Planned order là kế hoạch, không phải actual production hoặc WIP ledger. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Planned Order cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Planned order là kế hoạch, không phải actual production hoặc WIP ledger.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Planned order là kế hoạch, không phải actual production hoặc WIP ledger.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP09",
      "module": "PP",
      "tcode": "MF52 / MF50",
      "title": "Planning table cho sản xuất lặp lại",
      "sourceFamily": "mrp",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Production line material version và time bucket",
      "keys": [
        "Plant",
        "Production Line",
        "Material",
        "Production Version",
        "Period"
      ],
      "columns": [
        "Plant",
        "Production Line",
        "Material",
        "Production Version",
        "Period",
        "From Date",
        "To Date",
        "Planned Quantity",
        "Firmed Quantity",
        "Actual Quantity",
        "Unit",
        "Available Capacity",
        "Required Capacity",
        "Capacity Unit",
        "Utilization",
        "MRP Controller",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Line",
          "label": "Production Line",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 4,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 5,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "From Date",
          "label": "From Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: From Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "To Date",
          "label": "To Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "ngày: To Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Planned Quantity",
          "label": "Planned Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Planned Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Firmed Quantity",
          "label": "Firmed Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Firmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Actual Quantity",
          "label": "Actual Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Actual Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Available Capacity",
          "label": "Available Capacity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "công suất: Available Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Required Capacity",
          "label": "Required Capacity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "công suất: Required Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Utilization",
          "label": "Utilization",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "Tỷ lệ sử dụng capacity theo denominator",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "MRP Controller",
          "label": "MRP Controller",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: MRP Controller. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Sản lượng kế hoạch theo dây chuyền có phù hợp capacity?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Planning table cho sản xuất lặp lại. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Production line material version và time bucket. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Ưu tiên display MF52; MF50 có chức năng thay đổi, thư viện không thực hiện planning. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Production Line + Material + Production Version + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Ưu tiên display MF52; MF50 có chức năng thay đổi, thư viện không thực hiện planning.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Ưu tiên display MF52; MF50 có chức năng thay đổi, thư viện không thực hiện planning.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP09 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "mrp",
          "title": "Transaction Codes for MRP (PP-MRP)",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
          "source_version": "6.0 EHP8 SP25",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/85d3fce10e264972a0155c8b46ecf93b/f3a9ce5314894208e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 SP25",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP10",
      "module": "PP",
      "tcode": "CM01",
      "title": "Tải và công suất work center",
      "sourceFamily": "capacity",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Work center capacity category và time bucket",
      "keys": [
        "Plant",
        "Work Center",
        "Capacity Category",
        "Period"
      ],
      "columns": [
        "Plant",
        "Work Center",
        "Capacity Category",
        "Period",
        "From Date",
        "To Date",
        "Available Capacity",
        "Required Capacity",
        "Remaining Capacity",
        "Capacity Unit",
        "Utilization",
        "Shift",
        "Factory Calendar",
        "Number of Capacities",
        "Backlog",
        "Status",
        "Planner Group"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Category",
          "label": "Capacity Category",
          "position": 3,
          "type": "text",
          "meaning": "loại: Capacity Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 4,
          "type": "text",
          "meaning": "Kỳ hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "From Date",
          "label": "From Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: From Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "To Date",
          "label": "To Date",
          "position": 6,
          "type": "raw_date",
          "meaning": "ngày: To Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Available Capacity",
          "label": "Available Capacity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "công suất: Available Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Required Capacity",
          "label": "Required Capacity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "công suất: Required Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Remaining Capacity",
          "label": "Remaining Capacity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "công suất: Remaining Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 10,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Utilization",
          "label": "Utilization",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Tỷ lệ sử dụng capacity theo denominator",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Shift",
          "label": "Shift",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Shift. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Factory Calendar",
          "label": "Factory Calendar",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Factory Calendar. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Number of Capacities",
          "label": "Number of Capacities",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Number of Capacities. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Backlog",
          "label": "Backlog",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Backlog. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 17,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Work center nào quá tải trong kỳ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Tải và công suất work center. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Work center capacity category và time bucket. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Utilization cần denominator availability theo calendar/shift; không cộng tỷ lệ giữa các bucket. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Work Center + Capacity Category + Period cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Utilization cần denominator availability theo calendar/shift; không cộng tỷ lệ giữa các bucket.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Utilization cần denominator availability theo calendar/shift; không cộng tỷ lệ giữa các bucket.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP10 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "capacity",
          "title": "Transaction List for Capacity Leveling and Evaluation",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
          "source_version": "Support content; target release unknown",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
      "source_edition": "Support content; target release unknown",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP11",
      "module": "PP",
      "tcode": "CM25",
      "title": "Worklist điều độ và phân bổ capacity",
      "sourceFamily": "capacity",
      "kind": "WORKLIST",
      "grain": "Order operation và dispatch slot",
      "keys": [
        "Plant",
        "Order",
        "Operation",
        "Sequence"
      ],
      "columns": [
        "Plant",
        "Work Center",
        "Order",
        "Operation",
        "Sequence",
        "Material",
        "Dispatch Date",
        "Start Date",
        "Finish Date",
        "Required Capacity",
        "Capacity Unit",
        "Priority",
        "Dispatch Status",
        "Setup Time",
        "Processing Time",
        "Time Unit",
        "Capacity Category",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 4,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sequence",
          "label": "Sequence",
          "position": 5,
          "type": "text",
          "meaning": "Thứ tự xử lý/công đoạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dispatch Date",
          "label": "Dispatch Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "ngày: Dispatch Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Start Date",
          "label": "Start Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "ngày: Start Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Finish Date",
          "label": "Finish Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Finish Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Capacity",
          "label": "Required Capacity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "công suất: Required Capacity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 11,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Priority",
          "label": "Priority",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Priority. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Dispatch Status",
          "label": "Dispatch Status",
          "position": 13,
          "type": "text",
          "meaning": "trạng thái: Dispatch Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Setup Time",
          "label": "Setup Time",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "thời gian: Setup Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Processing Time",
          "label": "Processing Time",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "thời gian: Processing Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Time Unit",
          "label": "Time Unit",
          "position": 16,
          "type": "text",
          "meaning": "đơn vị: Time Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Category",
          "label": "Capacity Category",
          "position": 17,
          "type": "text",
          "meaning": "loại: Capacity Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Operation nào chưa dispatch hoặc nằm ngoài slot khả dụng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Worklist điều độ và phân bổ capacity. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Order operation và dispatch slot. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Tách dispatch planning khỏi actual confirmation; capacity leveling có quyền ghi, chỉ xem mẫu. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Order + Operation + Sequence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Tách dispatch planning khỏi actual confirmation; capacity leveling có quyền ghi, chỉ xem mẫu.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Tách dispatch planning khỏi actual confirmation; capacity leveling có quyền ghi, chỉ xem mẫu.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP11 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "capacity",
          "title": "Transaction List for Capacity Leveling and Evaluation",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
          "source_version": "Support content; target release unknown",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138697924.html?locale=en-US",
      "source_edition": "Support content; target release unknown",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP12",
      "module": "PP",
      "tcode": "MF47 (candidate)",
      "title": "Exception backflush của sản xuất lặp lại",
      "sourceFamily": "backflush",
      "kind": "WORKLIST",
      "grain": "Backflush error record component",
      "keys": [
        "Plant",
        "Error ID",
        "Material",
        "Component"
      ],
      "columns": [
        "Plant",
        "Error ID",
        "Material",
        "Component",
        "Production Version",
        "Production Line",
        "Posting Date",
        "Quantity",
        "Unit",
        "Movement Type",
        "Storage Location",
        "Batch",
        "Cost Object",
        "Confirmation",
        "Error Code",
        "Message",
        "Reprocessing Status",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error ID",
          "label": "Error ID",
          "position": 2,
          "type": "text",
          "meaning": "Khóa bản ghi lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component",
          "label": "Component",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 5,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Line",
          "label": "Production Line",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Movement Type",
          "label": "Movement Type",
          "position": 10,
          "type": "text",
          "meaning": "loại nghiệp vụ: Movement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 11,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 12,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Object",
          "label": "Cost Object",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Cost Object. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation",
          "label": "Confirmation",
          "position": 14,
          "type": "text",
          "meaning": "xác nhận: Confirmation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error Code",
          "label": "Error Code",
          "position": 15,
          "type": "text",
          "meaning": "Mã lỗi xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reprocessing Status",
          "label": "Reprocessing Status",
          "position": 17,
          "type": "text",
          "meaning": "trạng thái: Reprocessing Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Backflush nào chưa tạo đủ goods movement?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Exception backflush của sản xuất lặp lại. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Backflush error record component. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Error record không phải movement posted; chỉ đối chiếu material document sau reprocessing. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Error ID + Material + Component cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Error record không phải movement posted; chỉ đối chiếu material document sau reprocessing.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Error record không phải movement posted; chỉ đối chiếu material document sau reprocessing.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP12 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Material Staging (with EWM)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP13",
      "module": "PP",
      "tcode": "COGI",
      "title": "Lỗi goods movement từ confirmation",
      "sourceFamily": "movementErrors",
      "kind": "WORKLIST",
      "grain": "Error record và material movement dự kiến",
      "keys": [
        "Plant",
        "Error ID",
        "Order",
        "Material",
        "Movement Type"
      ],
      "columns": [
        "Plant",
        "Error ID",
        "Order",
        "Operation",
        "Confirmation",
        "Material",
        "Movement Type",
        "Quantity",
        "Unit",
        "Storage Location",
        "Batch",
        "Posting Date",
        "Reservation",
        "Reservation Item",
        "Error Code",
        "Message",
        "Material Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error ID",
          "label": "Error ID",
          "position": 2,
          "type": "text",
          "meaning": "Khóa bản ghi lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 4,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation",
          "label": "Confirmation",
          "position": 5,
          "type": "text",
          "meaning": "xác nhận: Confirmation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Movement Type",
          "label": "Movement Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Movement Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 10,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 11,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reservation",
          "label": "Reservation",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reservation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reservation Item",
          "label": "Reservation Item",
          "position": 14,
          "type": "text",
          "meaning": "dòng: Reservation Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error Code",
          "label": "Error Code",
          "position": 15,
          "type": "text",
          "meaning": "Mã lỗi xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 16,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Confirmation nào tạo GI/GR lỗi và ảnh hưởng stock/cost?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Lỗi goods movement từ confirmation. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Error record và material movement dự kiến. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không rerun COGI từ thư viện; có confirmation không đồng nghĩa component GI thành công. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Error ID + Order + Material + Movement Type cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không rerun COGI từ thư viện; có confirmation không đồng nghĩa component GI thành công.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không rerun COGI từ thư viện; có confirmation không đồng nghĩa component GI thành công.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP13 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Material Staging (with EWM)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP14",
      "module": "PP",
      "tcode": "CO16 (candidate)",
      "title": "Exception xử lý confirmation sản xuất",
      "sourceFamily": "confirmationErrors",
      "kind": "WORKLIST",
      "grain": "Confirmation error record và order operation",
      "keys": [
        "Plant",
        "Error ID",
        "Order",
        "Operation",
        "Confirmation"
      ],
      "columns": [
        "Plant",
        "Error ID",
        "Order",
        "Operation",
        "Confirmation",
        "Confirmation Counter",
        "Posting Date",
        "Yield Quantity",
        "Scrap Quantity",
        "Rework Quantity",
        "Unit",
        "Activity Quantity",
        "Activity Unit",
        "Error Code",
        "Message",
        "Created By",
        "Reversal Indicator",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error ID",
          "label": "Error ID",
          "position": 2,
          "type": "text",
          "meaning": "Khóa bản ghi lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 3,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 4,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation",
          "label": "Confirmation",
          "position": 5,
          "type": "text",
          "meaning": "xác nhận: Confirmation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Confirmation Counter",
          "label": "Confirmation Counter",
          "position": 6,
          "type": "text",
          "meaning": "bộ đếm: Confirmation Counter. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "Ngày hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Yield Quantity",
          "label": "Yield Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Yield Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Scrap Quantity",
          "label": "Scrap Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Scrap Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Rework Quantity",
          "label": "Rework Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Rework Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Quantity",
          "label": "Activity Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Activity Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 13,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Error Code",
          "label": "Error Code",
          "position": 14,
          "type": "text",
          "meaning": "Mã lỗi xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 15,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Indicator",
          "label": "Reversal Indicator",
          "position": 17,
          "type": "text",
          "meaning": "Cờ reversal; cần chứng từ/counter gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Confirmation nào lỗi hoặc có cancellation cần kiểm tra?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Exception xử lý confirmation sản xuất. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Confirmation error record và order operation. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không gộp confirmation error với COGI movement error; reversal và counter quyết định net quantity. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Error ID + Order + Operation + Confirmation cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không gộp confirmation error với COGI movement error; reversal và counter quyết định net quantity.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không gộp confirmation error với COGI movement error; reversal và counter quyết định net quantity.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP14 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Collective Entry of Measurement Documents for Order Confirmation",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP15",
      "module": "PP",
      "tcode": "CS15",
      "title": "Where-used BOM và mức ảnh hưởng component",
      "sourceFamily": "bom",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Component tới parent BOM item occurrence",
      "keys": [
        "Component",
        "Parent Material",
        "Plant",
        "BOM",
        "Item",
        "Occurrence"
      ],
      "columns": [
        "Component",
        "Parent Material",
        "Plant",
        "BOM",
        "BOM Usage",
        "Alternative BOM",
        "Item",
        "Occurrence",
        "Level",
        "Component Quantity",
        "Base Quantity",
        "Unit",
        "Valid From",
        "Valid To",
        "Change Number",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Component",
          "label": "Component",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Parent Material",
          "label": "Parent Material",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Parent Material. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM",
          "label": "BOM",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM Usage",
          "label": "BOM Usage",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative BOM",
          "label": "Alternative BOM",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 7,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Occurrence",
          "label": "Occurrence",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Occurrence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Level",
          "label": "Level",
          "position": 9,
          "type": "text",
          "meaning": "cấp: Level. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component Quantity",
          "label": "Component Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Component Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Base Quantity",
          "label": "Base Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Base Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 15,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 16,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Thay component ảnh hưởng thành phẩm và BOM nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Where-used BOM và mức ảnh hưởng component. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Component tới parent BOM item occurrence. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Where-used là edge dependency, khác CS12 explosion; không tính lượng chỉ bằng cộng các cấp. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Component + Parent Material + Plant + BOM + Item + Occurrence cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Where-used là edge dependency, khác CS12 explosion; không tính lượng chỉ bằng cộng các cấp.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Where-used là edge dependency, khác CS12 explosion; không tính lượng chỉ bằng cộng các cấp.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP15 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Where-Used Lists and Central Replacement",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search3",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP16",
      "module": "PP",
      "tcode": "CS03",
      "title": "BOM master hiệu lực tại ngày và alternative",
      "sourceFamily": "bom",
      "kind": "MASTER_DISPLAY",
      "grain": "BOM alternative item validity",
      "keys": [
        "Material",
        "Plant",
        "BOM",
        "BOM Usage",
        "Alternative BOM",
        "Item",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "BOM",
        "BOM Usage",
        "Alternative BOM",
        "Base Quantity",
        "Base Unit",
        "Item",
        "Component",
        "Component Quantity",
        "Unit",
        "Item Category",
        "Scrap Percent",
        "Valid From",
        "Valid To",
        "Change Number",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM",
          "label": "BOM",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM Usage",
          "label": "BOM Usage",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative BOM",
          "label": "Alternative BOM",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Base Quantity",
          "label": "Base Quantity",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "số lượng: Base Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Base Unit",
          "label": "Base Unit",
          "position": 7,
          "type": "text",
          "meaning": "đơn vị: Base Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component",
          "label": "Component",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Component. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component Quantity",
          "label": "Component Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Component Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item Category",
          "label": "Item Category",
          "position": 12,
          "type": "text",
          "meaning": "loại: Item Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Scrap Percent",
          "label": "Scrap Percent",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "tỷ lệ: Scrap Percent. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 16,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 17,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "BOM alternative nào đúng với thời điểm và batch sản xuất?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của BOM master hiệu lực tại ngày và alternative. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: BOM alternative item validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "BOM master snapshot khác explosion occurrence CS12; effectivity phải khớp change number và key date. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + BOM + BOM Usage + Alternative BOM + Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "BOM master snapshot khác explosion occurrence CS12; effectivity phải khớp change number và key date.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "BOM master snapshot khác explosion occurrence CS12; effectivity phải khớp change number và key date.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP16 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Where-Used Lists and Central Replacement",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search3",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ONPREMISE/2bc3ee8d1c83404e8cf62418640004f2/82cfba538c95b54ce10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP17",
      "module": "PP",
      "tcode": "C223",
      "title": "Production version và liên kết BOM-routing",
      "sourceFamily": "versions",
      "kind": "MASTER_DISPLAY",
      "grain": "Material plant production version validity",
      "keys": [
        "Material",
        "Plant",
        "Production Version",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Plant",
        "Production Version",
        "Version Description",
        "Valid From",
        "Valid To",
        "Minimum Lot Size",
        "Maximum Lot Size",
        "Unit",
        "BOM Usage",
        "Alternative BOM",
        "Task List Group",
        "Group Counter",
        "Production Line",
        "Lock Indicator",
        "Consistency Status",
        "Last Check Date",
        "Status"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Version",
          "label": "Production Version",
          "position": 3,
          "type": "text",
          "meaning": "Phiên bản sản xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version Description",
          "label": "Version Description",
          "position": 4,
          "type": "text",
          "meaning": "diễn giải: Version Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 6,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Minimum Lot Size",
          "label": "Minimum Lot Size",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Minimum Lot Size. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Maximum Lot Size",
          "label": "Maximum Lot Size",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Maximum Lot Size. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM Usage",
          "label": "BOM Usage",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Alternative BOM",
          "label": "Alternative BOM",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Alternative BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 12,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 13,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Line",
          "label": "Production Line",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lock Indicator",
          "label": "Lock Indicator",
          "position": 15,
          "type": "text",
          "meaning": "cờ chỉ báo: Lock Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Consistency Status",
          "label": "Consistency Status",
          "position": 16,
          "type": "text",
          "meaning": "trạng thái: Consistency Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Last Check Date",
          "label": "Last Check Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Last Check Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Version nào nối đúng BOM/routing và lot size?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Production version và liên kết BOM-routing. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material plant production version validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chỉ version hợp lệ và đã check mới là candidate routing, không tự xác nhận order snapshot. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Plant + Production Version + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chỉ version hợp lệ và đã check mới là candidate routing, không tự xác nhận order snapshot.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chỉ version hợp lệ và đã check mới là candidate routing, không tự xác nhận order snapshot.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP17 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Costing and Selecting Preferred Production Versions",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/698b19fa88b846359bc611f11184c810/7968793f8eb940529882b4d19837bd19.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn160search11",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/698b19fa88b846359bc611f11184c810/7968793f8eb940529882b4d19837bd19.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP18",
      "module": "PP",
      "tcode": "CR05 (candidate)",
      "title": "Danh mục work center và liên kết cost center",
      "sourceFamily": "workcenters",
      "kind": "MASTER_DISPLAY",
      "grain": "Plant work center validity",
      "keys": [
        "Plant",
        "Work Center",
        "Valid From"
      ],
      "columns": [
        "Plant",
        "Work Center",
        "Work Center Description",
        "Work Center Category",
        "Person Responsible",
        "Cost Center",
        "Activity Type",
        "Capacity Category",
        "Capacity Unit",
        "Factory Calendar",
        "Standard Value Key",
        "Usage",
        "Valid From",
        "Valid To",
        "Deletion Flag",
        "Status",
        "Planner Group"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 2,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center Description",
          "label": "Work Center Description",
          "position": 3,
          "type": "text",
          "meaning": "diễn giải: Work Center Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center Category",
          "label": "Work Center Category",
          "position": 4,
          "type": "text",
          "meaning": "loại: Work Center Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Person Responsible",
          "label": "Person Responsible",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Person Responsible. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 6,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Type",
          "label": "Activity Type",
          "position": 7,
          "type": "text",
          "meaning": "loại nghiệp vụ: Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Category",
          "label": "Capacity Category",
          "position": 8,
          "type": "text",
          "meaning": "loại: Capacity Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Capacity Unit",
          "label": "Capacity Unit",
          "position": 9,
          "type": "text",
          "meaning": "đơn vị: Capacity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Factory Calendar",
          "label": "Factory Calendar",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Factory Calendar. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Standard Value Key",
          "label": "Standard Value Key",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Standard Value Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Usage",
          "label": "Usage",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Usage. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 15,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 17,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Work center nào thiếu cost center/activity type hoặc calendar?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục work center và liên kết cost center. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Plant work center validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Master mapping không chứng minh actual hours; cần interval validity trước nối activity price. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Work Center + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Master mapping không chứng minh actual hours; cần interval validity trước nối activity price.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Master mapping không chứng minh actual hours; cần interval validity trước nối activity price.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP18 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "workcenters",
          "title": "Work Center Display",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/69c3a05bb8d44f02bdd2abe5e822da8e/6025bf53d25ab64ce10000000a174cb4.html",
          "source_version": "S/4HANA; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/69c3a05bb8d44f02bdd2abe5e822da8e/6025bf53d25ab64ce10000000a174cb4.html",
      "source_edition": "S/4HANA; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP19",
      "module": "PP",
      "tcode": "CC03",
      "title": "Engineering change và đối tượng bị ảnh hưởng",
      "sourceFamily": "engineering",
      "kind": "MASTER_DISPLAY",
      "grain": "Change number object và validity",
      "keys": [
        "Change Number",
        "Source Object",
        "Valid From"
      ],
      "columns": [
        "Change Number",
        "Change Description",
        "Change Type",
        "Valid From",
        "Valid To",
        "Source Object",
        "Material",
        "Plant",
        "BOM",
        "Task List Group",
        "Group Counter",
        "Change Status",
        "Created By",
        "Created At",
        "Changed By",
        "Changed At",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 1,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Description",
          "label": "Change Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Change Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Type",
          "label": "Change Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Change Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Source Object",
          "label": "Source Object",
          "position": 6,
          "type": "text",
          "meaning": "Đối tượng nguồn có ID/type riêng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 7,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 8,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "BOM",
          "label": "BOM",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: BOM. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 10,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 11,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Status",
          "label": "Change Status",
          "position": 12,
          "type": "text",
          "meaning": "trạng thái: Change Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created By",
          "label": "Created By",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Created By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created At",
          "label": "Created At",
          "position": 14,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Created At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Changed By",
          "label": "Changed By",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Changed By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 16,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Thay đổi kỹ thuật nào có hiệu lực và ảnh hưởng cost structure?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Engineering change và đối tượng bị ảnh hưởng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Change number object và validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không áp BOM hiện tại cho order quá khứ; tách effectivity, release và object history. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Change Number + Source Object + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không áp BOM hiện tại cho order quá khứ; tách effectivity, release và object history.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không áp BOM hiện tại cho order quá khứ; tách effectivity, release và object history.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP19 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "engineering",
          "title": "ECM - Change master",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/375c134383134d7faf15aa7677091aab.html",
          "source_version": "S/4HANA; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/375c134383134d7faf15aa7677091aab.html",
      "source_edition": "S/4HANA; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PP20",
      "module": "PP",
      "tcode": "MF60",
      "title": "Pull list và nhu cầu cấp vật tư sản xuất",
      "sourceFamily": "staging",
      "kind": "WORKLIST",
      "grain": "Production supply area component replenishment item",
      "keys": [
        "Plant",
        "Production Supply Area",
        "Material",
        "Replenishment Item"
      ],
      "columns": [
        "Plant",
        "Production Supply Area",
        "Material",
        "Storage Location",
        "Source Storage Location",
        "Replenishment Item",
        "Requirement Date",
        "Required Quantity",
        "Available Quantity",
        "Replenishment Quantity",
        "Unit",
        "Order",
        "Reservation",
        "Control Cycle",
        "Staging Method",
        "Delivery",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Production Supply Area",
          "label": "Production Supply Area",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Production Supply Area. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 3,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 4,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Source Storage Location",
          "label": "Source Storage Location",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Source Storage Location. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Replenishment Item",
          "label": "Replenishment Item",
          "position": 6,
          "type": "text",
          "meaning": "dòng: Replenishment Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requirement Date",
          "label": "Requirement Date",
          "position": 7,
          "type": "raw_date",
          "meaning": "ngày: Requirement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Quantity",
          "label": "Required Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Required Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Available Quantity",
          "label": "Available Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Available Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Replenishment Quantity",
          "label": "Replenishment Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Replenishment Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 12,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reservation",
          "label": "Reservation",
          "position": 13,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Reservation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Control Cycle",
          "label": "Control Cycle",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Control Cycle. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Staging Method",
          "label": "Staging Method",
          "position": 15,
          "type": "text",
          "meaning": "phương pháp: Staging Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery",
          "label": "Delivery",
          "position": 16,
          "type": "text",
          "meaning": "Chứng từ giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "PSA nào thiếu component để đáp ứng sản xuất?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Pull list và nhu cầu cấp vật tư sản xuất. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Production supply area component replenishment item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Staging proposal không phải consumption; EWM/IM stock transfer semantics cần xác minh company setup. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Production Supply Area + Material + Replenishment Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Staging proposal không phải consumption; EWM/IM stock transfer semantics cần xác minh company setup.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Staging proposal không phải consumption; EWM/IM stock transfer semantics cần xác minh company setup.",
      "ifrs": "Diễn giải SAVA theo IAS2: BOM/routing/planned orders/capacity là dữ liệu vận hành. WIP và variance phải nối đến actual movements và cost postings; không vốn hóa kế hoạch, proposal hoặc lỗi chưa xử lý.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PP20 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Material Staging (with EWM)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn158search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/34de0103497c4b80a7c7fbf6952ff971/8800b753128eb44ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Production Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD04",
      "module": "SD",
      "tcode": "VA15",
      "title": "Danh sách yêu cầu báo giá của khách hàng",
      "sourceFamily": "inquiries",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Sales inquiry item",
      "keys": [
        "Sales Document",
        "Sales Item"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Document Type",
        "Document Date",
        "Sold-to Party",
        "Ship-to Party",
        "Sales Organization",
        "Distribution Channel",
        "Division",
        "Material",
        "Plant",
        "Requested Quantity",
        "Unit",
        "Net Value",
        "Currency",
        "Valid From",
        "Valid To",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Distribution Channel",
          "label": "Distribution Channel",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Distribution Channel. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Division",
          "label": "Division",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Division. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 10,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 11,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Requested Quantity",
          "label": "Requested Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Requested Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 16,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 17,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Inquiry nào còn hiệu lực và chưa thành quotation?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách yêu cầu báo giá của khách hàng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales inquiry item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Inquiry pipeline không phải doanh thu hoặc backlog đã được khách cam kết. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Sales Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Inquiry pipeline không phải doanh thu hoặc backlog đã được khách cam kết.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Inquiry pipeline không phải doanh thu hoặc backlog đã được khách cam kết.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD04 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "List Inquiries - VA15",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/267558ccf9244fc18fe4753bff883b53.html?locale=ja-JPversion%3D2208.503",
          "source_version": "2602 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn161search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/267558ccf9244fc18fe4753bff883b53.html?locale=ja-JPversion%3D2208.503",
      "source_edition": "2602 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD05",
      "module": "SD",
      "tcode": "VA25 (candidate)",
      "title": "Danh sách quotation và hiệu lực chào giá",
      "sourceFamily": "quotations",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Sales quotation item",
      "keys": [
        "Sales Document",
        "Sales Item"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Document Type",
        "Document Date",
        "Sold-to Party",
        "Ship-to Party",
        "Sales Organization",
        "Material",
        "Plant",
        "Quoted Quantity",
        "Unit",
        "Net Price",
        "Price Unit",
        "Net Value",
        "Currency",
        "Valid From",
        "Valid To",
        "Probability",
        "Rejection Reason",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 8,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 9,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quoted Quantity",
          "label": "Quoted Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Quoted Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Price",
          "label": "Net Price",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "đơn giá: Net Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 16,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 17,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Probability",
          "label": "Probability",
          "position": 18,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Probability. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Rejection Reason",
          "label": "Rejection Reason",
          "position": 19,
          "type": "text",
          "meaning": "lý do: Rejection Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 20,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 21,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Quotation nào hết hạn, bị từ chối hoặc đã thành order?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách quotation và hiệu lực chào giá. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales quotation item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Quotation value/probability là sales pipeline, không phải revenue recognition. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Sales Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Quotation value/probability là sales pipeline, không phải revenue recognition.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Quotation value/probability là sales pipeline, không phải revenue recognition.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD05 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Sales Orders - VA03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD06",
      "module": "SD",
      "tcode": "VA45 (candidate)",
      "title": "Hợp đồng bán và phần đã release",
      "sourceFamily": "contracts",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Contract item và validity",
      "keys": [
        "Contract",
        "Sales Item",
        "Valid From"
      ],
      "columns": [
        "Contract",
        "Sales Item",
        "Document Type",
        "Sold-to Party",
        "Sales Organization",
        "Material",
        "Target Quantity",
        "Released Quantity",
        "Open Quantity",
        "Unit",
        "Target Value",
        "Released Value",
        "Currency",
        "Valid From",
        "Valid To",
        "Reference",
        "Rejection Reason",
        "Status"
      ],
      "fields": [
        {
          "key": "Contract",
          "label": "Contract",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Contract. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Target Quantity",
          "label": "Target Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Target Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Released Quantity",
          "label": "Released Quantity",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "số lượng: Released Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Target Value",
          "label": "Target Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Mức mục tiêu của characteristic",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Released Value",
          "label": "Released Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Released Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 16,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Rejection Reason",
          "label": "Rejection Reason",
          "position": 17,
          "type": "text",
          "meaning": "lý do: Rejection Reason. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Contract nào gần hết hạn hoặc còn giá trị chưa release?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Hợp đồng bán và phần đã release. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Contract item và validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Release quantity không phải delivered quantity; contract ceiling chưa là revenue. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Contract + Sales Item + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Release quantity không phải delivered quantity; contract ceiling chưa là revenue.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Release quantity không phải delivered quantity; contract ceiling chưa là revenue.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "List Sales Contracts",
          "url": "https://help.sap.com/docs/s4hana-cloud-best-practices/sales-contract-management-i9i-ch/list-sales-contracts?locale=en-US&state=PRODUCTION&version=2608",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/s4hana-cloud-best-practices/sales-contract-management-i9i-ch/list-sales-contracts?locale=en-US&state=PRODUCTION&version=2608",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD07",
      "module": "SD",
      "tcode": "VA35 (candidate)",
      "title": "Sales scheduling agreement và schedule lines",
      "sourceFamily": "salesSchedule",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Sales agreement item schedule line release",
      "keys": [
        "Agreement",
        "Sales Item",
        "Schedule Line",
        "Release Number"
      ],
      "columns": [
        "Agreement",
        "Sales Item",
        "Schedule Line",
        "Release Number",
        "Sold-to Party",
        "Ship-to Party",
        "Material",
        "Plant",
        "Delivery Date",
        "Scheduled Quantity",
        "Confirmed Quantity",
        "Delivered Quantity",
        "Open Quantity",
        "Unit",
        "Cumulative Quantity",
        "Release Date",
        "Customer Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Agreement",
          "label": "Agreement",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Schedule Line",
          "label": "Schedule Line",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Schedule Line. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Number",
          "label": "Release Number",
          "position": 4,
          "type": "text",
          "meaning": "số định danh: Release Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 7,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 8,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Date",
          "label": "Delivery Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Delivery Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Scheduled Quantity",
          "label": "Scheduled Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "số lượng: Scheduled Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Confirmed Quantity",
          "label": "Confirmed Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Confirmed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Delivered Quantity",
          "label": "Delivered Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Delivered Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Open Quantity",
          "label": "Open Quantity",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "số lượng: Open Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cumulative Quantity",
          "label": "Cumulative Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Cumulative Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 16,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Customer Reference",
          "label": "Customer Reference",
          "position": 17,
          "type": "text",
          "meaning": "tham chiếu: Customer Reference. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Lịch giao của khách khác schedule đã xác nhận ra sao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Sales scheduling agreement và schedule lines. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales agreement item schedule line release. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Phải tách cumulative quantity khỏi period quantity, và release revision khỏi giao hàng actual. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Agreement + Sales Item + Schedule Line + Release Number cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Phải tách cumulative quantity khỏi period quantity, và release revision khỏi giao hàng actual.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Phải tách cumulative quantity khỏi period quantity, và release revision khỏi giao hàng actual.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "App Extensibility: Manage Sales Scheduling Agreements",
          "url": "https://help.sap.com/docs/PRODUCT_ID/a376cd9ea00d476b96f18dea1247e6a5/5a6888f05ba743458991ef373024c438.html?locale=en-US",
          "source_version": "2608 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/PRODUCT_ID/a376cd9ea00d476b96f18dea1247e6a5/5a6888f05ba743458991ef373024c438.html?locale=en-US",
      "source_edition": "2608 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD08",
      "module": "SD",
      "tcode": "VFX3 (candidate)",
      "title": "Billing chưa chuyển thành chứng từ FI",
      "sourceFamily": "billingBlocked",
      "kind": "WORKLIST",
      "grain": "Billing document và accounting transfer exception",
      "keys": [
        "Billing Document",
        "Exception Code"
      ],
      "columns": [
        "Billing Document",
        "Billing Type",
        "Billing Date",
        "Sold-to Party",
        "Payer",
        "Sales Organization",
        "Company Code",
        "Net Value",
        "Tax Amount",
        "Currency",
        "Accounting Status",
        "Posting Block",
        "Exception Code",
        "Message",
        "Accounting Document",
        "Reference",
        "Owner",
        "Status"
      ],
      "fields": [
        {
          "key": "Billing Document",
          "label": "Billing Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Type",
          "label": "Billing Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Billing Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Date",
          "label": "Billing Date",
          "position": 3,
          "type": "raw_date",
          "meaning": "ngày: Billing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payer",
          "label": "Payer",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 7,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Tax Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Status",
          "label": "Accounting Status",
          "position": 11,
          "type": "text",
          "meaning": "trạng thái: Accounting Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Posting Block",
          "label": "Posting Block",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Posting Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Exception Code",
          "label": "Exception Code",
          "position": 13,
          "type": "text",
          "meaning": "Mã exception cần đối chiếu danh mục hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 14,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 16,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 17,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Billing nào đã lập nhưng chưa chuyển FI và vì sao?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Billing chưa chuyển thành chứng từ FI. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Billing document và accounting transfer exception. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không cộng billing blocked thành AR posted; reconciliation với VF05 cần accounting status. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Billing Document + Exception Code cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không cộng billing blocked thành AR posted; reconciliation với VF05 cần accounting status.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không cộng billing blocked thành AR posted; reconciliation với VF05 cần accounting status.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Billing Documents Blocked for Accounting",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/ab70b6535fe6b74ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search1",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/ab70b6535fe6b74ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD09",
      "module": "SD",
      "tcode": "V.02 (candidate)",
      "title": "Chứng từ bán thiếu dữ liệu bắt buộc",
      "sourceFamily": "incomplete",
      "kind": "WORKLIST",
      "grain": "Sales document item và missing field",
      "keys": [
        "Sales Document",
        "Sales Item",
        "Field Name"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Document Type",
        "Sold-to Party",
        "Sales Organization",
        "Material",
        "Field Name",
        "Incompletion Group",
        "Status Group",
        "Delivery Block",
        "Billing Block",
        "Created Date",
        "Changed At",
        "Owner",
        "Reference",
        "Status",
        "Message"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Type",
          "label": "Document Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Document Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Field Name",
          "label": "Field Name",
          "position": 7,
          "type": "text",
          "meaning": "tên: Field Name. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Incompletion Group",
          "label": "Incompletion Group",
          "position": 8,
          "type": "text",
          "meaning": "nhóm: Incompletion Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status Group",
          "label": "Status Group",
          "position": 9,
          "type": "text",
          "meaning": "nhóm: Status Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Block",
          "label": "Delivery Block",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Delivery Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Block",
          "label": "Billing Block",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Billing Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Created Date",
          "label": "Created Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "ngày: Created Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Changed At",
          "label": "Changed At",
          "position": 13,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Changed At. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 14,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 15,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 17,
          "type": "text",
          "meaning": "Nội dung kết quả hoặc lỗi",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Trường nào khiến sales document không thể xử lý tiếp?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chứng từ bán thiếu dữ liệu bắt buộc. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Sales document item và missing field. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Một document nhiều missing fields: count documents distinct, không sum net value từng lỗi. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Sales Item + Field Name cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Một document nhiều missing fields: count documents distinct, không sum net value từng lỗi.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Một document nhiều missing fields: count documents distinct, không sum net value từng lỗi.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD09 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "List of Incomplete Sales Documents",
          "url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/16a7c6535e601e4be10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=6.18.latest",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/16a7c6535e601e4be10000000a174cb4.html?locale=en-US&state=PRODUCTION&version=6.18.latest",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD10",
      "module": "SD",
      "tcode": "VF04",
      "title": "Billing due list và hạn lập hóa đơn",
      "sourceFamily": "billingDue",
      "kind": "WORKLIST",
      "grain": "Reference document item billing due date",
      "keys": [
        "Reference Document",
        "Reference Item",
        "Billing Date"
      ],
      "columns": [
        "Reference Document",
        "Reference Item",
        "Document Category",
        "Billing Date",
        "Sold-to Party",
        "Payer",
        "Sales Organization",
        "Company Code",
        "Material",
        "Quantity",
        "Unit",
        "Net Value",
        "Currency",
        "Billing Block",
        "Billing Type",
        "Invoice Split Key",
        "Status"
      ],
      "fields": [
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 1,
          "type": "text",
          "meaning": "chứng từ: Reference Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Item",
          "label": "Reference Item",
          "position": 2,
          "type": "text",
          "meaning": "dòng: Reference Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Category",
          "label": "Document Category",
          "position": 3,
          "type": "text",
          "meaning": "loại: Document Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Date",
          "label": "Billing Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: Billing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payer",
          "label": "Payer",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 8,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Block",
          "label": "Billing Block",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Billing Block. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Type",
          "label": "Billing Type",
          "position": 15,
          "type": "text",
          "meaning": "loại nghiệp vụ: Billing Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Invoice Split Key",
          "label": "Invoice Split Key",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Invoice Split Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Shipment/order nào đến hạn billing nhưng chưa lập?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Billing due list và hạn lập hóa đơn. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Reference document item billing due date. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chỉ xem due list; không nhấn tạo billing. Invoice split có thể biến1delivery thành nhiều invoices. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Reference Document + Reference Item + Billing Date cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chỉ xem due list; không nhấn tạo billing. Invoice split có thể biến1delivery thành nhiều invoices.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chỉ xem due list; không nhấn tạo billing. Invoice split có thể biến1delivery thành nhiều invoices.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD10 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Create Billing Documents - VF04",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/419c8257692eab76e10000000a441470.html?advAll=Returns+and+CBAR+Process+",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn161search1",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/419c8257692eab76e10000000a441470.html?advAll=Returns+and+CBAR+Process+",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD11",
      "module": "SD",
      "tcode": "VF03",
      "title": "Chi tiết billing item và pricing",
      "sourceFamily": "billing",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Billing document item",
      "keys": [
        "Billing Document",
        "Billing Item"
      ],
      "columns": [
        "Billing Document",
        "Billing Item",
        "Billing Type",
        "Billing Date",
        "Company Code",
        "Sales Organization",
        "Sold-to Party",
        "Payer",
        "Material",
        "Plant",
        "Quantity",
        "Unit",
        "Net Price",
        "Price Unit",
        "Net Value",
        "Tax Amount",
        "Currency",
        "Reference Document",
        "Reference Item",
        "Accounting Document",
        "Cancellation Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Billing Document",
          "label": "Billing Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Item",
          "label": "Billing Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Type",
          "label": "Billing Type",
          "position": 3,
          "type": "text",
          "meaning": "loại nghiệp vụ: Billing Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Date",
          "label": "Billing Date",
          "position": 4,
          "type": "raw_date",
          "meaning": "ngày: Billing Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 5,
          "type": "text",
          "meaning": "Mã pháp nhân hạch toán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Payer",
          "label": "Payer",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Payer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 10,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Price",
          "label": "Net Price",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "đơn giá: Net Price. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Tax Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 17,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 18,
          "type": "text",
          "meaning": "chứng từ: Reference Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Item",
          "label": "Reference Item",
          "position": 19,
          "type": "text",
          "meaning": "dòng: Reference Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 20,
          "type": "text",
          "meaning": "Chứng từ FI được kết quả tham chiếu",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cancellation Document",
          "label": "Cancellation Document",
          "position": 21,
          "type": "text",
          "meaning": "chứng từ: Cancellation Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 22,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Billing item lấy giá, thuế và reference từ đâu?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết billing item và pricing. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Billing document item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "VF03 item/pricing phục vụ drilldown khác VF05 list; cancellation cần link gốc. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Billing Document + Billing Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "VF03 item/pricing phục vụ drilldown khác VF05 list; cancellation cần link gốc.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "VF03 item/pricing phục vụ drilldown khác VF05 list; cancellation cần link gốc.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD11 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "MODULE_CONTEXT_IDENTITY_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Sales Orders - VA03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "MODULE_CONTEXT_ONLY_IDENTITY_NOT_VERIFIED",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Chưa xác minh identity T-code từ nguồn trực tiếp; chỉ có module context.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD12",
      "module": "SD",
      "tcode": "VL03N",
      "title": "Chi tiết outbound delivery và goods issue",
      "sourceFamily": "delivery",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Delivery item batch split item",
      "keys": [
        "Delivery",
        "Delivery Item",
        "Batch Split Item"
      ],
      "columns": [
        "Delivery",
        "Delivery Item",
        "Batch Split Item",
        "Delivery Type",
        "Ship-to Party",
        "Shipping Point",
        "Plant",
        "Storage Location",
        "Material",
        "Batch",
        "Delivery Quantity",
        "Picked Quantity",
        "Unit",
        "Planned GI Date",
        "Actual GI Date",
        "Goods Movement Status",
        "Material Document",
        "Reference Document",
        "Reference Item",
        "Status"
      ],
      "fields": [
        {
          "key": "Delivery",
          "label": "Delivery",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Item",
          "label": "Delivery Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch Split Item",
          "label": "Batch Split Item",
          "position": 3,
          "type": "text",
          "meaning": "dòng: Batch Split Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Type",
          "label": "Delivery Type",
          "position": 4,
          "type": "text",
          "meaning": "loại nghiệp vụ: Delivery Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Ship-to Party",
          "label": "Ship-to Party",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Ship-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Shipping Point",
          "label": "Shipping Point",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Shipping Point. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Storage Location",
          "label": "Storage Location",
          "position": 8,
          "type": "text",
          "meaning": "Kho trong nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 9,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 10,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Quantity",
          "label": "Delivery Quantity",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "số lượng: Delivery Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Picked Quantity",
          "label": "Picked Quantity",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "số lượng: Picked Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned GI Date",
          "label": "Planned GI Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Planned GI Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Actual GI Date",
          "label": "Actual GI Date",
          "position": 15,
          "type": "raw_date",
          "meaning": "ngày: Actual GI Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Goods Movement Status",
          "label": "Goods Movement Status",
          "position": 16,
          "type": "text",
          "meaning": "trạng thái: Goods Movement Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 17,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 18,
          "type": "text",
          "meaning": "chứng từ: Reference Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference Item",
          "label": "Reference Item",
          "position": 19,
          "type": "text",
          "meaning": "dòng: Reference Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 20,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Delivery nào chưa GI, có batch split hoặc thiếu picking?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Chi tiết outbound delivery và goods issue. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Delivery item batch split item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Goods issue date không tự xác định IFRS15 control transfer; aggregate batch splits trước so với parent. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Delivery + Delivery Item + Batch Split Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Goods issue date không tự xác định IFRS15 control transfer; aggregate batch splits trước so với parent.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Goods issue date không tự xác định IFRS15 control transfer; aggregate batch splits trước so với parent.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD12 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "alias": "delivery",
          "title": "Display Outbound Delivery",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/32da8359c8ee4e8b8e8c5e15cacba5aa/a8a033d4094d4581ac556a629d73e588.html?locale=en-us",
          "source_version": "Cloud; source version not captured",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/32da8359c8ee4e8b8e8c5e15cacba5aa/a8a033d4094d4581ac556a629d73e588.html?locale=en-us",
      "source_edition": "Cloud; source version not captured",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD13",
      "module": "SD",
      "tcode": "VKM1 (legacy candidate)",
      "title": "Credit block và worklist giải phóng đơn",
      "sourceFamily": "credit",
      "kind": "WORKLIST",
      "grain": "Credit blocked document và credit segment",
      "keys": [
        "Sales Document",
        "Credit Segment"
      ],
      "columns": [
        "Sales Document",
        "Sold-to Party",
        "Credit Segment",
        "Credit Limit",
        "Credit Exposure",
        "Currency",
        "Document Value",
        "Risk Class",
        "Credit Status",
        "Block Reason",
        "Check Date",
        "Due Date",
        "Owner",
        "Release Date",
        "Released By",
        "Status",
        "Reference"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sold-to Party. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Credit Segment",
          "label": "Credit Segment",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Credit Segment. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Credit Limit",
          "label": "Credit Limit",
          "position": 4,
          "type": "raw_decimal",
          "meaning": "giới hạn: Credit Limit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Credit Exposure",
          "label": "Credit Exposure",
          "position": 5,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Credit Exposure. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 6,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Value",
          "label": "Document Value",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "giá trị: Document Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Risk Class",
          "label": "Risk Class",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Risk Class. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Credit Status",
          "label": "Credit Status",
          "position": 9,
          "type": "text",
          "meaning": "trạng thái: Credit Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Block Reason",
          "label": "Block Reason",
          "position": 10,
          "type": "text",
          "meaning": "Lý do bị khóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Check Date",
          "label": "Check Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Check Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Due Date",
          "label": "Due Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "Ngày đến hạn",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 13,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Released By",
          "label": "Released By",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Released By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nào bị credit block và exposure thuộc segment nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Credit block và worklist giải phóng đơn. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Credit blocked document và credit segment. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Legacy VKM1 không tự áp cho S/4 FSCM; chỉ read context, không release credit. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Sales Document + Credit Segment cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Legacy VKM1 không tự áp cho S/4 FSCM; chỉ read context, không release credit.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Legacy VKM1 không tự áp cho S/4 FSCM; chỉ read context, không release credit.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD13 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Sales and Distribution Functions in Credit Management",
          "url": "https://help.sap.com/docs/SAP_ERP/b451edee79a640b7aa5306170573c56d/f9adc9535c267114e10000000a174cb4.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn163search9",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/b451edee79a640b7aa5306170573c56d/f9adc9535c267114e10000000a174cb4.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "VKM1 là legacy context; FSCM credit workflow cần kiểm riêng.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD14",
      "module": "SD",
      "tcode": "VA03",
      "title": "Document flow của sales order",
      "sourceFamily": "salesOrder",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Preceding item tới subsequent item edge",
      "keys": [
        "Preceding Document",
        "Preceding Item",
        "Subsequent Document",
        "Subsequent Item"
      ],
      "columns": [
        "Sales Document",
        "Sales Item",
        "Preceding Document",
        "Preceding Item",
        "Subsequent Document",
        "Subsequent Item",
        "Document Category",
        "Document Date",
        "Quantity",
        "Unit",
        "Net Value",
        "Currency",
        "Delivery",
        "Delivery Item",
        "Billing Document",
        "Billing Item",
        "Status"
      ],
      "fields": [
        {
          "key": "Sales Document",
          "label": "Sales Document",
          "position": 1,
          "type": "text",
          "meaning": "Chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Item",
          "label": "Sales Item",
          "position": 2,
          "type": "text",
          "meaning": "Dòng chứng từ bán",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Preceding Document",
          "label": "Preceding Document",
          "position": 3,
          "type": "text",
          "meaning": "chứng từ: Preceding Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Preceding Item",
          "label": "Preceding Item",
          "position": 4,
          "type": "text",
          "meaning": "dòng: Preceding Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Subsequent Document",
          "label": "Subsequent Document",
          "position": 5,
          "type": "text",
          "meaning": "chứng từ: Subsequent Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Subsequent Item",
          "label": "Subsequent Item",
          "position": 6,
          "type": "text",
          "meaning": "dòng: Subsequent Item. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Category",
          "label": "Document Category",
          "position": 7,
          "type": "text",
          "meaning": "loại: Document Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Document Date",
          "label": "Document Date",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Số lượng theo đơn vị kèm theo",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "giá trị: Net Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery",
          "label": "Delivery",
          "position": 13,
          "type": "text",
          "meaning": "Chứng từ giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Delivery Item",
          "label": "Delivery Item",
          "position": 14,
          "type": "text",
          "meaning": "Dòng giao hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Document",
          "label": "Billing Document",
          "position": 15,
          "type": "text",
          "meaning": "Chứng từ billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Billing Item",
          "label": "Billing Item",
          "position": 16,
          "type": "text",
          "meaning": "Dòng billing",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Order nối quotation, delivery, billing và return như thế nào?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Document flow của sales order. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Preceding item tới subsequent item edge. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Không sum parent net value sau join nhiều edge; keep document category và reversal chain. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Preceding Document + Preceding Item + Subsequent Document + Subsequent Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Không sum parent net value sau join nhiều edge; keep document category và reversal chain.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Không sum parent net value sau join nhiều edge; keep document category và reversal chain.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD14 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Sales Orders - VA03",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/0565b65334e6b54ce10000000a174cb4.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "SD15",
      "module": "SD",
      "tcode": "V/LD (candidate)",
      "title": "Điều kiện giá và validity của sales pricing",
      "sourceFamily": "pricing",
      "kind": "MASTER_DISPLAY",
      "grain": "Condition record key và validity",
      "keys": [
        "Condition Record",
        "Condition Type",
        "Valid From"
      ],
      "columns": [
        "Condition Record",
        "Condition Type",
        "Sales Organization",
        "Distribution Channel",
        "Customer",
        "Material",
        "Price List",
        "Valid From",
        "Valid To",
        "Condition Amount",
        "Currency",
        "Price Unit",
        "Unit",
        "Scale Quantity",
        "Scale Value",
        "Calculation Type",
        "Access Sequence",
        "Deletion Flag",
        "Status"
      ],
      "fields": [
        {
          "key": "Condition Record",
          "label": "Condition Record",
          "position": 1,
          "type": "text",
          "meaning": "bản ghi: Condition Record. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Condition Type",
          "label": "Condition Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Condition Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sales Organization. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Distribution Channel",
          "label": "Distribution Channel",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Distribution Channel. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 5,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price List",
          "label": "Price List",
          "position": 7,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Price List. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 8,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 9,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Condition Amount",
          "label": "Condition Amount",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "giá trị tiền: Condition Amount. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 11,
          "type": "text",
          "meaning": "Đơn vị tiền tệ của số tiền liên quan",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Price Unit",
          "label": "Price Unit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Số đơn vị làm mẫu số của đơn giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 13,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Scale Quantity",
          "label": "Scale Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Scale Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Scale Value",
          "label": "Scale Value",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "giá trị: Scale Value. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Calculation Type",
          "label": "Calculation Type",
          "position": 16,
          "type": "text",
          "meaning": "loại nghiệp vụ: Calculation Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Access Sequence",
          "label": "Access Sequence",
          "position": 17,
          "type": "text",
          "meaning": "thứ tự: Access Sequence. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 18,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Giá/discount nào có hiệu lực cho customer-material?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Điều kiện giá và validity của sales pricing. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Condition record key và validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Condition record không phải applied invoice price; giữ scale, unit, calculation type và validity. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Condition Record + Condition Type + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Condition record không phải applied invoice price; giữ scale, unit, calculation type và validity.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Condition record không phải applied invoice price; giữ scale, unit, calculation type và validity.",
      "ifrs": "Diễn giải SAVA theo IFRS15: inquiry/quotation/contract/order/billing/delivery là các sự kiện khác nhau. Revenue phụ thuộc control transfer và nghĩa vụ thực hiện; đối chiếu returns, cancellation, tax và AR/GL theo hợp đồng.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile SD15 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Pricing Reports",
          "url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/958dc95360267214e10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn152search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/04ed152d92884a6da49c778a13aecb21/958dc95360267214e10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Sales Operations / Revenue Accountant",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM04",
      "module": "QM",
      "tcode": "QE51N",
      "title": "Kết quả kiểm định theo characteristic",
      "sourceFamily": "results",
      "kind": "WORKLIST",
      "grain": "Inspection lot operation characteristic sample",
      "keys": [
        "Inspection Lot",
        "Operation",
        "Characteristic",
        "Sample"
      ],
      "columns": [
        "Inspection Lot",
        "Operation",
        "Characteristic",
        "Sample",
        "Material",
        "Plant",
        "Batch",
        "Inspection Type",
        "Result",
        "Result Unit",
        "Lower Limit",
        "Upper Limit",
        "Target Value",
        "Sample Size",
        "Valuation",
        "Recorded By",
        "Recorded Date",
        "Result Status",
        "Status"
      ],
      "fields": [
        {
          "key": "Inspection Lot",
          "label": "Inspection Lot",
          "position": 1,
          "type": "text",
          "meaning": "Lô kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 2,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic",
          "label": "Characteristic",
          "position": 3,
          "type": "text",
          "meaning": "Đặc tính kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sample",
          "label": "Sample",
          "position": 4,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sample. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 5,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 6,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 7,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Type",
          "label": "Inspection Type",
          "position": 8,
          "type": "text",
          "meaning": "loại nghiệp vụ: Inspection Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Result",
          "label": "Result",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Giá trị kết quả đo/đánh giá",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 10,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lower Limit",
          "label": "Lower Limit",
          "position": 11,
          "type": "raw_decimal",
          "meaning": "Giới hạn dưới theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Upper Limit",
          "label": "Upper Limit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giới hạn trên theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Target Value",
          "label": "Target Value",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Mức mục tiêu của characteristic",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Sample Size",
          "label": "Sample Size",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Sample Size. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Valuation",
          "label": "Valuation",
          "position": 15,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recorded By",
          "label": "Recorded By",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Recorded By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recorded Date",
          "label": "Recorded Date",
          "position": 17,
          "type": "raw_date",
          "meaning": "ngày: Recorded Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Result Status",
          "label": "Result Status",
          "position": 18,
          "type": "text",
          "meaning": "trạng thái: Result Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Characteristic nào ngoài giới hạn hoặc thiếu kết quả?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Kết quả kiểm định theo characteristic. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Inspection lot operation characteristic sample. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "QA33 là lot list; result grain cần sample/characteristic, không suy release chỉ từ một result. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Inspection Lot + Operation + Characteristic + Sample cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "QA33 là lot list; result grain cần sample/characteristic, không suy release chỉ từ một result.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "QA33 là lot list; result grain cần sample/characteristic, không suy release chỉ từ một result.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM04 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Inspection Lots",
          "url": "https://help.sap.com/docs/service-asset-manager/sap-service-and-asset-manager-configuration-guide/inspection-lots",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn159search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/service-asset-manager/sap-service-and-asset-manager-configuration-guide/inspection-lots",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM05",
      "module": "QM",
      "tcode": "QA13",
      "title": "Usage decision và phân loại xử lý stock",
      "sourceFamily": "decision",
      "kind": "DOCUMENT_DISPLAY",
      "grain": "Inspection lot decision và stock posting item",
      "keys": [
        "Inspection Lot",
        "Decision ID",
        "Item"
      ],
      "columns": [
        "Inspection Lot",
        "Decision ID",
        "Item",
        "Material",
        "Plant",
        "Batch",
        "Lot Quantity",
        "Unit",
        "Decision Code",
        "Code Group",
        "Decision Date",
        "Decision By",
        "Quality Score",
        "Accepted Quantity",
        "Rejected Quantity",
        "Blocked Quantity",
        "Stock Posting Status",
        "Material Document",
        "Status"
      ],
      "fields": [
        {
          "key": "Inspection Lot",
          "label": "Inspection Lot",
          "position": 1,
          "type": "text",
          "meaning": "Lô kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Decision ID",
          "label": "Decision ID",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Decision ID. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 3,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 6,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lot Quantity",
          "label": "Lot Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Lot Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Decision Code",
          "label": "Decision Code",
          "position": 9,
          "type": "text",
          "meaning": "mã phân loại: Decision Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Code Group",
          "label": "Code Group",
          "position": 10,
          "type": "text",
          "meaning": "nhóm: Code Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Decision Date",
          "label": "Decision Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Decision Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Decision By",
          "label": "Decision By",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Decision By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quality Score",
          "label": "Quality Score",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Điểm chất lượng theo phương pháp cấu hình",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Accepted Quantity",
          "label": "Accepted Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Accepted Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Rejected Quantity",
          "label": "Rejected Quantity",
          "position": 15,
          "type": "raw_decimal",
          "meaning": "số lượng: Rejected Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Blocked Quantity",
          "label": "Blocked Quantity",
          "position": 16,
          "type": "raw_decimal",
          "meaning": "số lượng: Blocked Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Stock Posting Status",
          "label": "Stock Posting Status",
          "position": 17,
          "type": "text",
          "meaning": "trạng thái: Stock Posting Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 18,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Lot được quyết định chấp nhận hay loại và stock đã post chưa?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Usage decision và phân loại xử lý stock. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Inspection lot decision và stock posting item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Usage decision code không tự chứng minh stock movement; tie accepted/rejected theo lot quantity và posting. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Inspection Lot + Decision ID + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Usage decision code không tự chứng minh stock movement; tie accepted/rejected theo lot quantity và posting.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Usage decision code không tự chứng minh stock movement; tie accepted/rejected theo lot quantity và posting.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM05 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Usage Decision - Transaction",
          "url": "https://help.sap.com/docs/SAP_ERP/2ff9f2a003194e3b93e8201a0b44618f/85c2b65334e6b54ce10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/2ff9f2a003194e3b93e8201a0b44618f/85c2b65334e6b54ce10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM06",
      "module": "QM",
      "tcode": "QS26 (candidate)",
      "title": "Danh mục master inspection characteristic",
      "sourceFamily": "characteristics",
      "kind": "MASTER_DISPLAY",
      "grain": "Plant characteristic version validity",
      "keys": [
        "Plant",
        "Characteristic",
        "Version",
        "Valid From"
      ],
      "columns": [
        "Plant",
        "Characteristic",
        "Version",
        "Characteristic Description",
        "Characteristic Type",
        "Result Unit",
        "Lower Limit",
        "Upper Limit",
        "Target Value",
        "Decimal Places",
        "Sampling Procedure",
        "Inspection Method",
        "Control Indicator",
        "Valid From",
        "Valid To",
        "Status",
        "Change Number"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic",
          "label": "Characteristic",
          "position": 2,
          "type": "text",
          "meaning": "Đặc tính kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 3,
          "type": "text",
          "meaning": "Phiên bản kế hoạch hoặc master",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic Description",
          "label": "Characteristic Description",
          "position": 4,
          "type": "text",
          "meaning": "diễn giải: Characteristic Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic Type",
          "label": "Characteristic Type",
          "position": 5,
          "type": "text",
          "meaning": "loại nghiệp vụ: Characteristic Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 6,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lower Limit",
          "label": "Lower Limit",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "Giới hạn dưới theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Upper Limit",
          "label": "Upper Limit",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Giới hạn trên theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Target Value",
          "label": "Target Value",
          "position": 9,
          "type": "raw_decimal",
          "meaning": "Mức mục tiêu của characteristic",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Decimal Places",
          "label": "Decimal Places",
          "position": 10,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Decimal Places. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Sampling Procedure",
          "label": "Sampling Procedure",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sampling Procedure. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Method",
          "label": "Inspection Method",
          "position": 12,
          "type": "text",
          "meaning": "phương pháp: Inspection Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Control Indicator",
          "label": "Control Indicator",
          "position": 13,
          "type": "text",
          "meaning": "cờ chỉ báo: Control Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 17,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Định nghĩa characteristic nào đang được tái dùng trong plans?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục master inspection characteristic. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Plant characteristic version validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Chỉnh master có thể đổi plan dependent; version và history cần capture trước phân tích. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Characteristic + Version + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Chỉnh master có thể đổi plan dependent; version và history cần capture trước phân tích.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Chỉnh master có thể đổi plan dependent; version và history cần capture trước phân tích.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Listing Master Inspection Characteristics",
          "url": "https://help.sap.com/docs/SAP_ERP/90f562dc43f84f5f8ab7e082e47f9a6c/1a23bd534f22b44ce10000000a174cb4.html",
          "source_version": "6.0 EHP8 Latest",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/90f562dc43f84f5f8ab7e082e47f9a6c/1a23bd534f22b44ce10000000a174cb4.html",
      "source_edition": "6.0 EHP8 Latest",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM07",
      "module": "QM",
      "tcode": "QP03",
      "title": "Inspection plan và đặc tính kiểm tra",
      "sourceFamily": "inspectionPlan",
      "kind": "MASTER_DISPLAY",
      "grain": "Task list group counter operation characteristic validity",
      "keys": [
        "Plant",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Characteristic",
        "Valid From"
      ],
      "columns": [
        "Plant",
        "Material",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Characteristic",
        "Work Center",
        "Inspection Type",
        "Sampling Procedure",
        "Inspection Method",
        "Characteristic Type",
        "Lower Limit",
        "Upper Limit",
        "Result Unit",
        "Valid From",
        "Valid To",
        "Change Number",
        "Status"
      ],
      "fields": [
        {
          "key": "Plant",
          "label": "Plant",
          "position": 1,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 2,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 3,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 4,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 5,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic",
          "label": "Characteristic",
          "position": 6,
          "type": "text",
          "meaning": "Đặc tính kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 7,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Type",
          "label": "Inspection Type",
          "position": 8,
          "type": "text",
          "meaning": "loại nghiệp vụ: Inspection Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Sampling Procedure",
          "label": "Sampling Procedure",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Sampling Procedure. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Method",
          "label": "Inspection Method",
          "position": 10,
          "type": "text",
          "meaning": "phương pháp: Inspection Method. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Characteristic Type",
          "label": "Characteristic Type",
          "position": 11,
          "type": "text",
          "meaning": "loại nghiệp vụ: Characteristic Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Lower Limit",
          "label": "Lower Limit",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Giới hạn dưới theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Upper Limit",
          "label": "Upper Limit",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Giới hạn trên theo đơn vị result",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 14,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 16,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Change Number",
          "label": "Change Number",
          "position": 17,
          "type": "text",
          "meaning": "số định danh: Change Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Plan nào áp dụng cho material và operation tại ngày kiểm định?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Inspection plan và đặc tính kiểm tra. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Task list group counter operation characteristic validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Plan master không thay inspection lot snapshot; selection lot size/version phải được lưu. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Plant + Task List Group + Group Counter + Operation + Characteristic + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Plan master không thay inspection lot snapshot; selection lot size/version phải được lưu.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Plan master không thay inspection lot snapshot; selection lot size/version phải được lưu.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Classic Apps for Inspection Planning",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/2bc3ee8d1c83404e8cf62418640004f2/f96e02507e6b46c9a2b83cec20d5cc29.html",
          "source_version": "2025 FPS01 (Feb 2026)",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search5",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/2bc3ee8d1c83404e8cf62418640004f2/f96e02507e6b46c9a2b83cec20d5cc29.html",
      "source_edition": "2025 FPS01 (Feb 2026)",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM08",
      "module": "QM",
      "tcode": "QI03 (legacy candidate)",
      "title": "Quality info record trong procurement",
      "sourceFamily": "qualityInfo",
      "kind": "MASTER_DISPLAY",
      "grain": "Material supplier plant validity",
      "keys": [
        "Material",
        "Supplier",
        "Plant",
        "Valid From"
      ],
      "columns": [
        "Material",
        "Supplier",
        "Plant",
        "Valid From",
        "Valid To",
        "Release Quantity",
        "Consumed Quantity",
        "Unit",
        "Inspection Type",
        "Certificate Required",
        "Quality Agreement",
        "Block Reason",
        "Release Date",
        "Released By",
        "Status",
        "Reference",
        "Deletion Flag"
      ],
      "fields": [
        {
          "key": "Material",
          "label": "Material",
          "position": 1,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 2,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 3,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 4,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 5,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Release Quantity",
          "label": "Release Quantity",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "số lượng: Release Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Consumed Quantity",
          "label": "Consumed Quantity",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "số lượng: Consumed Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 8,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Type",
          "label": "Inspection Type",
          "position": 9,
          "type": "text",
          "meaning": "loại nghiệp vụ: Inspection Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Certificate Required",
          "label": "Certificate Required",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Certificate Required. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Quality Agreement",
          "label": "Quality Agreement",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Quality Agreement. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Block Reason",
          "label": "Block Reason",
          "position": 12,
          "type": "text",
          "meaning": "Lý do bị khóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Release Date",
          "label": "Release Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Release Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Released By",
          "label": "Released By",
          "position": 14,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Released By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 16,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 17,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Supplier-material nào chưa được quality release?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Quality info record trong procurement. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Material supplier plant validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Source Cloud đánh dấu app deprecated; kiểm successor trên target trước dùng, không tự gán QI03 mới nhất. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Material + Supplier + Plant + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Source Cloud đánh dấu app deprecated; kiểm successor trên target trước dùng, không tự gán QI03 mới nhất.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Source Cloud đánh dấu app deprecated; kiểm successor trên target trước dùng, không tự gán QI03 mới nhất.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display Quality Info Record in Procurement (Deprecated)",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/aa7e87579f345c08e10000000a441470.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/aa7e87579f345c08e10000000a441470.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Nguồn đánh dấu app deprecated; phải kiểm successor theo target release.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM09",
      "module": "QM",
      "tcode": "QC55 (candidate)",
      "title": "Incoming quality certificates và liên kết receipt",
      "sourceFamily": "certificates",
      "kind": "WORKLIST",
      "grain": "Certificate và receipt item",
      "keys": [
        "Certificate",
        "Purchase Order",
        "PO Item",
        "Material Document",
        "Item"
      ],
      "columns": [
        "Certificate",
        "Certificate Type",
        "Supplier",
        "Material",
        "Plant",
        "Batch",
        "Purchase Order",
        "PO Item",
        "Material Document",
        "Item",
        "Receipt Date",
        "Received Date",
        "Required Date",
        "Certificate Status",
        "Inspection Lot",
        "Owner",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Certificate",
          "label": "Certificate",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Certificate. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Certificate Type",
          "label": "Certificate Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Certificate Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 3,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 6,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 7,
          "type": "text",
          "meaning": "Đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 8,
          "type": "text",
          "meaning": "Dòng đơn mua",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material Document",
          "label": "Material Document",
          "position": 9,
          "type": "text",
          "meaning": "Chứng từ goods movement",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 10,
          "type": "text",
          "meaning": "Dòng chứng từ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Receipt Date",
          "label": "Receipt Date",
          "position": 11,
          "type": "raw_date",
          "meaning": "ngày: Receipt Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Received Date",
          "label": "Received Date",
          "position": 12,
          "type": "raw_date",
          "meaning": "ngày: Received Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Required Date",
          "label": "Required Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Required Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Certificate Status",
          "label": "Certificate Status",
          "position": 14,
          "type": "text",
          "meaning": "trạng thái: Certificate Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Inspection Lot",
          "label": "Inspection Lot",
          "position": 15,
          "type": "text",
          "meaning": "Lô kiểm định",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Owner",
          "label": "Owner",
          "position": 16,
          "type": "text",
          "meaning": "Người/nhóm chịu trách nhiệm xử lý",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Receipt nào thiếu chứng nhận hoặc certificate đến trễ?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Incoming quality certificates và liên kết receipt. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Certificate và receipt item. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Có certificate không đồng nghĩa lot pass; tên/format QC55 chỉ là candidate, chưa full layout. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Certificate + Purchase Order + PO Item + Material Document + Item cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Có certificate không đồng nghĩa lot pass; tên/format QC55 chỉ là candidate, chưa full layout.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Có certificate không đồng nghĩa lot pass; tên/format QC55 chỉ là candidate, chưa full layout.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM09 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Quality Certificates",
          "url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/dc733e09815e41d3b0591bfd7640f1b9.html?locale=en-US",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn164search7",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/d1e58be39d884a0dbf75a7526a9acbf4/dc733e09815e41d3b0591bfd7640f1b9.html?locale=en-US",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "QM10",
      "module": "QM",
      "tcode": "QM13",
      "title": "Tasks của quality notification và hạn xử lý",
      "sourceFamily": "qualityTasks",
      "kind": "WORKLIST",
      "grain": "Notification task",
      "keys": [
        "Notification",
        "Task"
      ],
      "columns": [
        "Notification",
        "Task",
        "Task Code",
        "Code Group",
        "Task Description",
        "Material",
        "Plant",
        "Batch",
        "Supplier",
        "Customer",
        "Responsible Person",
        "Planned Start",
        "Planned Finish",
        "Completed Date",
        "Task Status",
        "Priority",
        "Cause Code",
        "Reference",
        "Status"
      ],
      "fields": [
        {
          "key": "Notification",
          "label": "Notification",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Notification. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task",
          "label": "Task",
          "position": 2,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Task. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task Code",
          "label": "Task Code",
          "position": 3,
          "type": "text",
          "meaning": "mã phân loại: Task Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Code Group",
          "label": "Code Group",
          "position": 4,
          "type": "text",
          "meaning": "nhóm: Code Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task Description",
          "label": "Task Description",
          "position": 5,
          "type": "text",
          "meaning": "diễn giải: Task Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 6,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Batch",
          "label": "Batch",
          "position": 8,
          "type": "text",
          "meaning": "Lô vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 9,
          "type": "text",
          "meaning": "Mã nhà cung cấp",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 10,
          "type": "text",
          "meaning": "Mã khách hàng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Person",
          "label": "Responsible Person",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Person. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planned Start",
          "label": "Planned Start",
          "position": 12,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Planned Start. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Planned Finish",
          "label": "Planned Finish",
          "position": 13,
          "type": "raw_date",
          "meaning": "Thuộc tính nghiệp vụ: Planned Finish. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Completed Date",
          "label": "Completed Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: Completed Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Task Status",
          "label": "Task Status",
          "position": 15,
          "type": "text",
          "meaning": "trạng thái: Task Status. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Priority",
          "label": "Priority",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Priority. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cause Code",
          "label": "Cause Code",
          "position": 17,
          "type": "text",
          "meaning": "mã phân loại: Cause Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 18,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Task CAPA nào quá hạn hoặc chưa hoàn tất?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Tasks của quality notification và hạn xử lý. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Notification task. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "QM11 notification header khác QM13 task; một notification nhiều task, tránh nhân defect cost. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Notification + Task cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "QM11 notification header khác QM13 task; một notification nhiều task, tránh nhân defect cost.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "QM11 notification header khác QM13 task; một notification nhiều task, tránh nhân defect cost.",
      "ifrs": "Diễn giải SAVA theo IAS2: reject, rework và expiry là tín hiệu thu thập evidence NRV/abnormal loss. Usage decision hoặc quality score không tự sinh provision; policy và GL adjustment cần reviewer.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile QM10 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Display a List of Quality Notification Tasks (optional)",
          "url": "https://help.sap.com/docs/s4hana-cloud-best-practices/quality-management-for-complaints-from-customers-2fa-br/display-list-of-quality-notification-tasks-optional",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn153search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/s4hana-cloud-best-practices/quality-management-for-complaints-from-customers-2fa-br/display-list-of-quality-notification-tasks-optional",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Quality Engineer",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM04",
      "module": "PM",
      "tcode": "IW29",
      "title": "Danh sách maintenance notifications và downtime",
      "sourceFamily": "notifications",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Maintenance notification",
      "keys": [
        "Notification"
      ],
      "columns": [
        "Notification",
        "Notification Type",
        "Equipment",
        "Functional Location",
        "Plant",
        "Work Center",
        "Planner Group",
        "Priority",
        "Reported Date",
        "Malfunction Start",
        "Malfunction End",
        "Breakdown",
        "Duration",
        "Duration Unit",
        "Order",
        "Responsible Person",
        "Damage Code",
        "Cause Code",
        "Status"
      ],
      "fields": [
        {
          "key": "Notification",
          "label": "Notification",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Notification. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Notification Type",
          "label": "Notification Type",
          "position": 2,
          "type": "text",
          "meaning": "loại nghiệp vụ: Notification Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 3,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 4,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 6,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 7,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Priority",
          "label": "Priority",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Priority. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reported Date",
          "label": "Reported Date",
          "position": 9,
          "type": "raw_date",
          "meaning": "ngày: Reported Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Malfunction Start",
          "label": "Malfunction Start",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Malfunction Start. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Malfunction End",
          "label": "Malfunction End",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Malfunction End. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Breakdown",
          "label": "Breakdown",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Breakdown. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Duration",
          "label": "Duration",
          "position": 13,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Duration. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Duration Unit",
          "label": "Duration Unit",
          "position": 14,
          "type": "text",
          "meaning": "đơn vị: Duration Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 15,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Responsible Person",
          "label": "Responsible Person",
          "position": 16,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Responsible Person. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Damage Code",
          "label": "Damage Code",
          "position": 17,
          "type": "text",
          "meaning": "mã phân loại: Damage Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cause Code",
          "label": "Cause Code",
          "position": 18,
          "type": "text",
          "meaning": "mã phân loại: Cause Code. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 19,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Sự cố nào kéo dài, tái diễn hoặc chưa có order?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh sách maintenance notifications và downtime. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Maintenance notification. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Breakdown duration cần overlap/deduplicate trước tính downtime; notification không phải actual maintenance spend. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Notification cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Breakdown duration cần overlap/deduplicate trước tính downtime; notification không phải actual maintenance spend.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Breakdown duration cần overlap/deduplicate trước tính downtime; notification không phải actual maintenance spend.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM04 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Location Analysis Cube",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee6ff9b281d8448f96b4fe6c89f2bdc8/9cebb3d3cfd449dab1c434cf247f5ba3.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search11",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee6ff9b281d8448f96b4fe6c89f2bdc8/9cebb3d3cfd449dab1c434cf247f5ba3.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM05",
      "module": "PM",
      "tcode": "IH08",
      "title": "Danh mục equipment và cấu trúc sử dụng",
      "sourceFamily": "equipment",
      "kind": "MASTER_DISPLAY",
      "grain": "Equipment validity interval",
      "keys": [
        "Equipment",
        "Valid From"
      ],
      "columns": [
        "Equipment",
        "Equipment Description",
        "Equipment Category",
        "Material",
        "Serial Number",
        "Functional Location",
        "Plant",
        "Work Center",
        "Cost Center",
        "Asset",
        "Manufacturer",
        "Model",
        "Acquisition Date",
        "Valid From",
        "Valid To",
        "End of Use Date",
        "Status",
        "Deletion Flag"
      ],
      "fields": [
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 1,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment Description",
          "label": "Equipment Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Equipment Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment Category",
          "label": "Equipment Category",
          "position": 3,
          "type": "text",
          "meaning": "loại: Equipment Category. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 4,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Serial Number",
          "label": "Serial Number",
          "position": 5,
          "type": "text",
          "meaning": "số định danh: Serial Number. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 6,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 7,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 8,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 9,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Asset",
          "label": "Asset",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Asset. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Manufacturer",
          "label": "Manufacturer",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Manufacturer. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Model",
          "label": "Model",
          "position": 12,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Model. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Acquisition Date",
          "label": "Acquisition Date",
          "position": 13,
          "type": "raw_date",
          "meaning": "ngày: Acquisition Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 14,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 15,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "End of Use Date",
          "label": "End of Use Date",
          "position": 16,
          "type": "raw_date",
          "meaning": "ngày: End of Use Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 17,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 18,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Equipment nào thiếu liên kết asset/cost center hoặc đã hết sử dụng?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục equipment và cấu trúc sử dụng. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Equipment validity interval. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Equipment khác FI-AA asset; không giả định1:1 và không tự đưa giá trị equipment vào B/S. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Equipment + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Equipment khác FI-AA asset; không giả định1:1 và không tự đưa giá trị equipment vào B/S.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Equipment khác FI-AA asset; không giả định1:1 và không tự đưa giá trị equipment vào B/S.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM05 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Enterprise Asset Management Part 17",
          "url": "https://help.sap.com/docs/SAP_ERP/930f133a36a843318dc3347afe00a9d6/cf2c451676cf4379a60f8ab11afa95e7.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search6",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP/930f133a36a843318dc3347afe00a9d6/cf2c451676cf4379a60f8ab11afa95e7.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM06",
      "module": "PM",
      "tcode": "IH06",
      "title": "Danh mục functional location và hierarchy",
      "sourceFamily": "locations",
      "kind": "MASTER_DISPLAY",
      "grain": "Functional location validity interval",
      "keys": [
        "Functional Location",
        "Valid From"
      ],
      "columns": [
        "Functional Location",
        "Location Description",
        "Superior Location",
        "Structure Indicator",
        "Plant",
        "Planning Plant",
        "Work Center",
        "Cost Center",
        "Maintenance Strategy",
        "Planner Group",
        "ABC Indicator",
        "Valid From",
        "Valid To",
        "End of Use Date",
        "Status",
        "Deletion Flag",
        "Reference"
      ],
      "fields": [
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 1,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Location Description",
          "label": "Location Description",
          "position": 2,
          "type": "text",
          "meaning": "diễn giải: Location Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Superior Location",
          "label": "Superior Location",
          "position": 3,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Superior Location. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Structure Indicator",
          "label": "Structure Indicator",
          "position": 4,
          "type": "text",
          "meaning": "cờ chỉ báo: Structure Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 5,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planning Plant",
          "label": "Planning Plant",
          "position": 6,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Planning Plant. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 7,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 8,
          "type": "text",
          "meaning": "Trung tâm chi phí",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Maintenance Strategy",
          "label": "Maintenance Strategy",
          "position": 9,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Maintenance Strategy. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 10,
          "type": "text",
          "meaning": "nhóm: Planner Group. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "ABC Indicator",
          "label": "ABC Indicator",
          "position": 11,
          "type": "text",
          "meaning": "cờ chỉ báo: ABC Indicator. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 12,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 13,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "End of Use Date",
          "label": "End of Use Date",
          "position": 14,
          "type": "raw_date",
          "meaning": "ngày: End of Use Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 15,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Deletion Flag",
          "label": "Deletion Flag",
          "position": 16,
          "type": "text",
          "meaning": "Cờ đánh dấu xóa, không tự là dữ liệu đã xóa",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 17,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Cấu trúc vị trí bảo trì và trách nhiệm chi phí có nhất quán?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Danh mục functional location và hierarchy. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Functional location validity interval. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Hierarchy parent không được cộng cùng equipment leaves; giữ alternative labels nếu company dùng. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Functional Location + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Hierarchy parent không được cộng cùng equipment leaves; giữ alternative labels nếu company dùng.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Hierarchy parent không được cộng cùng equipment leaves; giữ alternative labels nếu company dùng.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM06 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "xMAM Backend",
          "url": "https://help.sap.com/docs/SUPPORT_CONTENT/home/3361892247.html?locale=en-US&source=redirect&state=PRODUCTION&version=1.0",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search4",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SUPPORT_CONTENT/home/3361892247.html?locale=en-US&source=redirect&state=PRODUCTION&version=1.0",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM07",
      "module": "PM",
      "tcode": "IK17",
      "title": "Measurement documents và lịch sử counter",
      "sourceFamily": "measurements",
      "kind": "ANALYTICAL_REPORT",
      "grain": "Measuring point measurement document",
      "keys": [
        "Measuring Point",
        "Measurement Document"
      ],
      "columns": [
        "Measuring Point",
        "Measurement Document",
        "Equipment",
        "Functional Location",
        "Measurement Date",
        "Measurement Time",
        "Counter Reading",
        "Counter Difference",
        "Result Unit",
        "Valuation",
        "Recorded By",
        "Order",
        "Reversal Indicator",
        "Reference",
        "Text",
        "Status",
        "Threshold"
      ],
      "fields": [
        {
          "key": "Measuring Point",
          "label": "Measuring Point",
          "position": 1,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Measuring Point. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Measurement Document",
          "label": "Measurement Document",
          "position": 2,
          "type": "text",
          "meaning": "chứng từ: Measurement Document. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 3,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 4,
          "type": "text",
          "meaning": "Vị trí chức năng bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Measurement Date",
          "label": "Measurement Date",
          "position": 5,
          "type": "raw_date",
          "meaning": "ngày: Measurement Date. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Measurement Time",
          "label": "Measurement Time",
          "position": 6,
          "type": "raw_decimal",
          "meaning": "thời gian: Measurement Time. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Counter Reading",
          "label": "Counter Reading",
          "position": 7,
          "type": "raw_decimal",
          "meaning": "Counter tích lũy; không cộng qua thời gian",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Counter Difference",
          "label": "Counter Difference",
          "position": 8,
          "type": "raw_decimal",
          "meaning": "Chênh counter sau reset/reversal handling",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Result Unit",
          "label": "Result Unit",
          "position": 9,
          "type": "text",
          "meaning": "Đơn vị đo kết quả",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valuation",
          "label": "Valuation",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Valuation. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Recorded By",
          "label": "Recorded By",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Recorded By. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 12,
          "type": "text",
          "meaning": "Lệnh chi phí/sản xuất/bảo trì theo phân hệ",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reversal Indicator",
          "label": "Reversal Indicator",
          "position": 13,
          "type": "text",
          "meaning": "Cờ reversal; cần chứng từ/counter gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 14,
          "type": "text",
          "meaning": "Tham chiếu đến chứng từ/hợp đồng gốc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 15,
          "type": "text",
          "meaning": "Diễn giải trên dòng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 16,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Threshold",
          "label": "Threshold",
          "position": 17,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Threshold. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Counter có nhảy bất thường hoặc measurement đã reversal?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Measurement documents và lịch sử counter. Lưu selection variant, layout, language, currency, row limit và extracted_at. Chỉ xem hoặc export list, không thực hiện create/change/release.",
      "reading": "Một dòng: Measuring point measurement document. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Counter cumulative không cộng readings; xử lý reset/rollover/reversal trước lấy differences. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Measuring Point + Measurement Document cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Counter cumulative không cộng readings; xử lý reset/rollover/reversal trước lấy differences.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Counter cumulative không cộng readings; xử lý reset/rollover/reversal trước lấy differences.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM07 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "Collective Entry of Measurement Documents for Order Confirmation",
          "url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search0",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_ERP_SPV/e8497383bec444069418aba9a1f578de/efdaa1b88bac457eb1972e76e94172ae.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Ngày/tuần hoặc kỳ closing theo business owner",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    },
    {
      "id": "PM08",
      "module": "PM",
      "tcode": "IA03",
      "title": "Equipment task list và operation bảo trì",
      "sourceFamily": "taskList",
      "kind": "MASTER_DISPLAY",
      "grain": "Equipment task list group counter operation validity",
      "keys": [
        "Equipment",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Valid From"
      ],
      "columns": [
        "Equipment",
        "Plant",
        "Task List Group",
        "Group Counter",
        "Operation",
        "Operation Description",
        "Work Center",
        "Control Key",
        "Maintenance Activity Type",
        "Maintenance Strategy",
        "Package",
        "Duration",
        "Duration Unit",
        "Activity Quantity",
        "Activity Unit",
        "Material",
        "Component Quantity",
        "Unit",
        "Valid From",
        "Valid To",
        "Status"
      ],
      "fields": [
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 1,
          "type": "text",
          "meaning": "Thiết bị bảo trì",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Plant",
          "label": "Plant",
          "position": 2,
          "type": "text",
          "meaning": "Nhà máy",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Task List Group",
          "label": "Task List Group",
          "position": 3,
          "type": "text",
          "meaning": "Nhóm routing/task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Group Counter",
          "label": "Group Counter",
          "position": 4,
          "type": "text",
          "meaning": "Bộ đếm phương án task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation",
          "label": "Operation",
          "position": 5,
          "type": "text",
          "meaning": "Công đoạn trong lệnh hoặc task list",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Operation Description",
          "label": "Operation Description",
          "position": 6,
          "type": "text",
          "meaning": "diễn giải: Operation Description. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Work Center",
          "label": "Work Center",
          "position": 7,
          "type": "text",
          "meaning": "Trung tâm công việc",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Control Key",
          "label": "Control Key",
          "position": 8,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Control Key. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Maintenance Activity Type",
          "label": "Maintenance Activity Type",
          "position": 9,
          "type": "text",
          "meaning": "loại nghiệp vụ: Maintenance Activity Type. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Maintenance Strategy",
          "label": "Maintenance Strategy",
          "position": 10,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Maintenance Strategy. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Package",
          "label": "Package",
          "position": 11,
          "type": "text",
          "meaning": "Thuộc tính nghiệp vụ: Package. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Duration",
          "label": "Duration",
          "position": 12,
          "type": "raw_decimal",
          "meaning": "Thuộc tính nghiệp vụ: Duration. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Duration Unit",
          "label": "Duration Unit",
          "position": 13,
          "type": "text",
          "meaning": "đơn vị: Duration Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Activity Quantity",
          "label": "Activity Quantity",
          "position": 14,
          "type": "raw_decimal",
          "meaning": "số lượng: Activity Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Activity Unit",
          "label": "Activity Unit",
          "position": 15,
          "type": "text",
          "meaning": "đơn vị: Activity Unit. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 16,
          "type": "text",
          "meaning": "Mã vật tư",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Component Quantity",
          "label": "Component Quantity",
          "position": 17,
          "type": "raw_decimal",
          "meaning": "số lượng: Component Quantity. Đọc tại grain của hồ sơ; nhãn và semantics cần đối chiếu hệ công ty.",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW và locale. Chuẩn hóa dấu, separator, currency/UoM/price unit trước tính. Blank không là0; không cộng tỷ lệ/đơn giá/snapshot."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 18,
          "type": "text",
          "meaning": "Đơn vị đo số lượng",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        },
        {
          "key": "Valid From",
          "label": "Valid From",
          "position": 19,
          "type": "raw_date",
          "meaning": "Ngày bắt đầu hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Valid To",
          "label": "Valid To",
          "position": 20,
          "type": "raw_date",
          "meaning": "Ngày kết thúc hiệu lực",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ chuỗi RAW dd.MM.yyyy; parse rõ format/locale/timezone. Blank là thiếu ngày, không lấy ngày máy."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 21,
          "type": "text",
          "meaning": "Trạng thái tại thời điểm trích xuất",
          "evidence": "SAVA_PROPOSED",
          "technical_name": null,
          "source_label_verified": false,
          "cleaning_rule": "Giữ ID dạng Text và số0 đầu. Trim trên bản CLEAN riêng, giữ raw value và source-row lineage. Không join bằng tên diễn giải."
        }
      ],
      "purpose": "Operation và package bảo trì nào dùng cho equipment?",
      "selection": "Chọn đúng company/plant/CO area, kỳ hoặc key date và scope của Equipment task list và operation bảo trì. Lưu selection variant, layout, language, currency, row limit và extracted_at. Dùng chế độ display; lưu validity/version trước join giao dịch.",
      "reading": "Một dòng: Equipment task list group counter operation validity. Thứ tự cột là đề xuất SAVA để thực hành; chưa xác minh SAP original output. Tách header/selection/detail và giữ số0 đầu. Các dòng demo có ca thiếu giá trị, locale khác và khóa trùng để thử control.",
      "reconciliation": "Master task list planned duration khác actual confirmation; nhiều packages có thể dùng chung operation. Đối chiếu row count và control total với nguồn cùng phạm vi/kỳ. Nối bằng Equipment + Task List Group + Group Counter + Operation + Valid From cùng source_system/client; kiểm cardinality và unmatched. Giữ riêng units/currencies và dòng subtotal; dữ liệu mẫu không có control total từ SAP.",
      "controls": [
        "Master task list planned duration khác actual confirmation; nhiều packages có thể dùng chung operation.",
        "Giữ RAW riêng khỏi CLEAN; preserve reject rows, duplicate keys và source-row IDs.",
        "Không coi field/order/technical name đề xuất là company field catalog."
      ],
      "control": "Master task list planned duration khác actual confirmation; nhiều packages có thể dùng chung operation.",
      "ifrs": "Diễn giải SAVA theo IAS16: bảo trì thường xuyên khác chi phí thay bộ phận/major inspection đủ điều kiện vốn hóa. Equipment master, duration và task plan không phải tài sản ghi sổ; bridge actual order cost về GL/FI-AA.",
      "lineage": "Nguồn công khai xác minh ngữ cảnh → profile PM08 và layout version SAVA → RAW giả định → CLEAN riêng + reject log → control/reconciliation có bằng chứng → mart quản trị.",
      "status": "AUTHORED_PROPOSED_SCHEMA_PENDING_COMPANY_LAYOUT_AND_SME",
      "mapping_status": "SAP_FEATURE_CONTEXT_TARGET_PENDING",
      "fiori_app": null,
      "tcode_identity_status": "CANDIDATE_TARGET_NOT_VERIFIED",
      "tcode_fiori_relation": "NO_EQUIVALENCE_CLAIMED",
      "source_evidence": [
        {
          "title": "PM - Equipment task list",
          "url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/ce832b4e5573481397a96d68a99ced8f.html",
          "source_version": "NOT_CAPTURED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "reference": "turn154search2",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "scope": "FEATURE_OR_TRANSACTION_CONTEXT_ONLY",
          "layout_verified": false,
          "company_release_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/d3a3eb7caa1842858bf0372e17ad3909/ce832b4e5573481397a96d68a99ced8f.html",
      "source_edition": "NOT_CAPTURED",
      "target_release": "UNKNOWN",
      "source_layout_status": "NOT_VERIFIED_SAVA_PROPOSED_ORDER",
      "native_export": false,
      "full_sap_catalog_verified": false,
      "owner": "Maintenance Planner",
      "frequency": "Khi thay đổi master và tại thời điểm trích xuất",
      "limits": [
        "Nguồn chỉ cung cấp ngữ cảnh tính năng, không chứng nhận layout export.",
        "Edition/release công ty chưa biết; năm triển khai2022 không xác định release.",
        "Tên kỹ thuật, cột ẩn và thứ tự export company chưa xác nhận."
      ]
    }
  ],
  "priority_24_reports": [
    {
      "id": "FI31",
      "module": "FI",
      "title": "AP due-date analysis classic",
      "tcode": "S_ALR_87012078",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "AP due-date analysis classic",
      "grain": "Company Code + Supplier + Key Date + Currency",
      "keys": [
        "Company Code",
        "Supplier",
        "Key Date",
        "Currency"
      ],
      "columns": [
        "Company Code",
        "Supplier",
        "Supplier Name",
        "Reconciliation Account",
        "Key Date",
        "Not Due Amount",
        "Overdue 1-30",
        "Overdue 31-60",
        "Overdue 61-90",
        "Overdue Over 90",
        "Open Balance",
        "Currency",
        "Special G/L",
        "Payment Terms",
        "Debit Credit Policy",
        "Report Currency",
        "Exchange Rate Type",
        "Selection Scope"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier Name",
          "label": "Supplier Name",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier Name tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Reconciliation Account",
          "label": "Reconciliation Account",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reconciliation Account tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Key Date",
          "label": "Key Date",
          "position": 5,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Key Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Not Due Amount",
          "label": "Not Due Amount",
          "position": 6,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Not Due Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue 1-30",
          "label": "Overdue 1-30",
          "position": 7,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue 1-30 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue 31-60",
          "label": "Overdue 31-60",
          "position": 8,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue 31-60 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue 61-90",
          "label": "Overdue 61-90",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue 61-90 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Overdue Over 90",
          "label": "Overdue Over 90",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Overdue Over 90 tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Open Balance",
          "label": "Open Balance",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Số dư signed cùngkeydate/currency dùng tie-out.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Special G/L",
          "label": "Special G/L",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Special G/L tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Payment Terms",
          "label": "Payment Terms",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Payment Terms tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Debit Credit Policy",
          "label": "Debit Credit Policy",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Debit Credit Policy tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Report Currency",
          "label": "Report Currency",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Report Currency tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Exchange Rate Type",
          "label": "Exchange Rate Type",
          "position": 17,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Thuộc tính Exchange Rate Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Selection Scope",
          "label": "Selection Scope",
          "position": 18,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Selection Scope tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. S_ALR_87012078",
      "reading": "Một dòng theo Company Code + Supplier + Key Date + Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Tổng các bucket phải bằng số dư open signed cùng ngày chốt và currency. Credits, special GL và chứng từ archived cần bridge riêng.",
      "control": "Tổng các bucket phải bằng số dư open signed cùng ngày chốt và currency. Credits, special GL và chứng từ archived cần bridge riêng.",
      "ifrs": "Mẫu hỗ trợ đối chiếu và kiểm soát, chưa thay policy hoặc nghiệm thu IFRS. Aging/DSO không tự chứng minh ECL; giá trị/khấu hao theo area không tự là giá trị IAS16. Run log không tự là chứng từ đã posted.",
      "lineage": "Nguồn có URL/version → P24-AP-CLASSIC view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "AP due-date analysis / Aging Analysis",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3118280",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3cb1182b4a184bdd93f8d62e3f1f0741/01868854c46ee75ee10000000a44176d.html",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/3eb1567cf97543c08087efb0936964e6/bb2805569162792de10000000a44538d.html"
          ],
          "version": "ECC public KBA preview / S4 1809–2020 context / S4 2025FPS01 app description and configuration",
          "documented": [
            "Company Code",
            "Supplier",
            "Currency",
            "Aging Interval",
            "Payable Amount",
            "Overdue Amount",
            "Not Due Amount",
            "Open on Key Date",
            "Width of Aging Grid",
            "Number of Aging Grid",
            "Display Currency",
            "Exchange Rate Type",
            "Not Overdue Amount"
          ],
          "scope": "REPORT_IDENTITY_AND_AGING_CONTEXT_NOT_EXPORT_COLUMNS",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/1827228",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "FI32",
      "module": "FI",
      "title": "Days Sales Outstanding",
      "tcode": "F1741",
      "fiori_app": "F1741",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Days Sales Outstanding",
      "grain": "Company Code + Calendar Year + Calendar Month + Customer + Display Currency",
      "keys": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Customer",
        "Display Currency"
      ],
      "columns": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Customer",
        "Account Group",
        "Accounting Clerk",
        "Country Key",
        "Customer Classification",
        "Display Currency",
        "Exchange Rate Type",
        "G/L Account",
        "Reconciliation Account",
        "Region",
        "Special G/L",
        "Days Sales Outstanding",
        "Threshold",
        "Definition Version"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Year",
          "label": "Calendar Year",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Month",
          "label": "Calendar Month",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Month tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Customer",
          "label": "Customer",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Customer tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Account Group",
          "label": "Account Group",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Account Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Accounting Clerk",
          "label": "Accounting Clerk",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Accounting Clerk tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Country Key",
          "label": "Country Key",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Country Key tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Customer Classification",
          "label": "Customer Classification",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Customer Classification tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 9,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Exchange Rate Type",
          "label": "Exchange Rate Type",
          "position": 10,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Thuộc tính Exchange Rate Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "G/L Account",
          "label": "G/L Account",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tài khoản GL theo chartofaccounts nguồn, giữ zero đầu.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Reconciliation Account",
          "label": "Reconciliation Account",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reconciliation Account tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Region",
          "label": "Region",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Region tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Special G/L",
          "label": "Special G/L",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Special G/L tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Days Sales Outstanding",
          "label": "Days Sales Outstanding",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "KPIđã báo cáo tổng hợp giả định; không tự suy exact SAP formula.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Threshold",
          "label": "Threshold",
          "position": 16,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Threshold tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Definition Version",
          "label": "Definition Version",
          "position": 17,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Definition Version tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F1741",
      "reading": "Một dòng theo Company Code + Calendar Year + Calendar Month + Customer + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "DSO là KPI giả định đã báo cáo trong mẫu. Chưa xác minh công thức native; không cộng DSO của nhiều tháng hoặc thay bằng tuổi invoice.",
      "control": "DSO là KPI giả định đã báo cáo trong mẫu. Chưa xác minh công thức native; không cộng DSO của nhiều tháng hoặc thay bằng tuổi invoice.",
      "ifrs": "Mẫu hỗ trợ đối chiếu và kiểm soát, chưa thay policy hoặc nghiệm thu IFRS. Aging/DSO không tự chứng minh ECL; giá trị/khấu hao theo area không tự là giá trị IAS16. Run log không tự là chứng từ đã posted.",
      "lineage": "Nguồn có URL/version → P24-DSO view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Days Sales Outstanding",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3307590"
          ],
          "version": "Cloud2602 / S4 1909–2023 KBA context",
          "documented": [
            "Days Sales Outstanding",
            "Account Group",
            "Accounting Clerk",
            "Calendar Month",
            "Calendar Year",
            "Company Code",
            "Country Key",
            "Customer",
            "Customer Classification",
            "Display Currency",
            "Exchange Rate Type",
            "G/L Account",
            "Reconciliation Account",
            "Region",
            "Special G/L"
          ],
          "scope": "DOCUMENTED_KPI_AND_DIMENSIONS_ORDER_NOT_VERIFIED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "CO31",
      "module": "CO",
      "title": "Profit center actual line items classic",
      "tcode": "KE5Z",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Profit center actual line items classic",
      "grain": "Controlling Area + Company Code + Fiscal Year + Document + Line Item",
      "keys": [
        "Controlling Area",
        "Company Code",
        "Fiscal Year",
        "Document",
        "Line Item"
      ],
      "columns": [
        "Controlling Area",
        "Company Code",
        "Profit Center",
        "Partner Profit Center",
        "Document",
        "Fiscal Year",
        "Line Item",
        "Posting Date",
        "Period",
        "G/L Account",
        "Cost Center",
        "Order",
        "Material",
        "Reference Document",
        "Amount",
        "Transaction Currency",
        "Local Amount",
        "Local Currency",
        "Record Type",
        "Version",
        "Text"
      ],
      "fields": [
        {
          "key": "Controlling Area",
          "label": "Controlling Area",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Controlling Area tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Profit Center",
          "label": "Profit Center",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Profit Center tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Partner Profit Center",
          "label": "Partner Profit Center",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Partner Profit Center tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Line Item",
          "label": "Line Item",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Line Item tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 8,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "G/L Account",
          "label": "G/L Account",
          "position": 10,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tài khoản GL theo chartofaccounts nguồn, giữ zero đầu.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Cost Center",
          "label": "Cost Center",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Cost Center tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Order",
          "label": "Order",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Order tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Material tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Reference Document",
          "label": "Reference Document",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reference Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Amount",
          "label": "Amount",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Transaction Currency",
          "label": "Transaction Currency",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Transaction Currency tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Local Amount",
          "label": "Local Amount",
          "position": 17,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Local Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Local Currency",
          "label": "Local Currency",
          "position": 18,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Local Currency tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Record Type",
          "label": "Record Type",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Record Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 20,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Version tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Text",
          "label": "Text",
          "position": 21,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Text tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. KE5Z",
      "reading": "Một dòng theo Controlling Area + Company Code + Fiscal Year + Document + Line Item. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Khóa dòng PCA legacy khác ACDOCA. Cần bridge record type, version, currency và nguồn GL; không join theo document number đơn lẻ.",
      "control": "Khóa dòng PCA legacy khác ACDOCA. Cần bridge record type, version, currency và nguồn GL; không join theo document number đơn lẻ.",
      "ifrs": "Actual/plan, PCA, margin hoặc PM cost cần bridge GL, allocation, ledger, dấu và policy. Chi phí bất thường không tự đủ điều kiện vốn hóa IAS2; TECO không tự là nghiệm thu CAPEX.",
      "lineage": "Nguồn có URL/version → P24-PCA-LINES view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Profit center line items",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1903518"
          ],
          "version": "SAP ERP 4.6C and higher; targetS4 unknown",
          "documented": [],
          "scope": "KE5Z_AND_REPORT_FAMILY_CONTEXT_ONLY",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/1903518",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "CO32",
      "module": "CO",
      "title": "Profitability report defined by form",
      "tcode": "KE30 (company form unknown)",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Profitability report defined by form",
      "grain": "Operating Concern + Form + Report + Record Type + Fiscal Year + Period + Currency + Row Characteristic",
      "keys": [
        "Operating Concern",
        "Form",
        "Report",
        "Record Type",
        "Fiscal Year",
        "Period",
        "Currency",
        "Row Characteristic"
      ],
      "columns": [
        "Operating Concern",
        "Form",
        "Report",
        "Record Type",
        "Fiscal Year",
        "Period",
        "Version",
        "Currency",
        "Row Characteristic",
        "Row Value",
        "Revenue",
        "Discount",
        "Net Revenue",
        "COGS",
        "Gross Margin",
        "Gross Margin Percent",
        "Allocation",
        "Contribution",
        "Column Set"
      ],
      "fields": [
        {
          "key": "Operating Concern",
          "label": "Operating Concern",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Operating Concern tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Form",
          "label": "Form",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Form tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Report",
          "label": "Report",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Report tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Record Type",
          "label": "Record Type",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Record Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Version",
          "label": "Version",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Version tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Row Characteristic",
          "label": "Row Characteristic",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Row Characteristic tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Row Value",
          "label": "Row Value",
          "position": 10,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Row Value tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Revenue",
          "label": "Revenue",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Revenue tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Discount",
          "label": "Discount",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Discount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Revenue",
          "label": "Net Revenue",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Revenue tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "COGS",
          "label": "COGS",
          "position": 14,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính COGS tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Gross Margin",
          "label": "Gross Margin",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Gross Margin tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Gross Margin Percent",
          "label": "Gross Margin Percent",
          "position": 16,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Gross Margin Percent tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Allocation",
          "label": "Allocation",
          "position": 17,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Allocation tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Contribution",
          "label": "Contribution",
          "position": 18,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Contribution tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Column Set",
          "label": "Column Set",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Column Set tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. KE30 (company form unknown)",
      "reading": "Một dòng theo Operating Concern + Form + Report + Record Type + Fiscal Year + Period + Currency + Row Characteristic. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Form SAVA minh họa, không phải universal standard layout KE30. Cần định nghĩa form/report, characteristics và value fields từ công ty.",
      "control": "Form SAVA minh họa, không phải universal standard layout KE30. Cần định nghĩa form/report, characteristics và value fields từ công ty.",
      "ifrs": "Actual/plan, PCA, margin hoặc PM cost cần bridge GL, allocation, ledger, dấu và policy. Chi phí bất thường không tự đủ điều kiện vốn hóa IAS2; TECO không tự là nghiệm thu CAPEX.",
      "lineage": "Nguồn có URL/version → P24-KE30 view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Profitability reports and Market Segments - Actuals",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/2156399",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3784542",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3831134",
            "https://help.sap.com/docs/s4hana-cloud-best-practices/margin-analysis-j55-jp/market-segments-actual-report"
          ],
          "version": "ERP/S4 public KBA / Cloud best practice; exact form unknown",
          "documented": [
            "G/L Account",
            "Cost Center",
            "Account Assignment Type",
            "Profitability Segment"
          ],
          "scope": "KE30_FORM_CONTEXT_AND_F0960_QUERY_DIMENSIONS_NOT_COMPANY_FORM",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/2156399",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "MM31",
      "module": "MM",
      "title": "Purchasing Spend",
      "tcode": "F0905",
      "fiori_app": "F0905",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Purchasing Spend",
      "grain": "Supplier + Purchasing Organization + Material Group + Evaluation Period in Days + Display Currency",
      "keys": [
        "Supplier",
        "Purchasing Organization",
        "Material Group",
        "Evaluation Period in Days",
        "Display Currency"
      ],
      "columns": [
        "Supplier",
        "Supplier Country",
        "Purchasing Organization",
        "Purchasing Group",
        "Material Group",
        "Service Performer",
        "Purchasing Category",
        "Document",
        "Evaluation Period in Days",
        "Display Currency",
        "Comparison Net Amount",
        "Net Amount",
        "Purchasing Spend Ratio"
      ],
      "fields": [
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier Country",
          "label": "Supplier Country",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier Country tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchasing Organization",
          "label": "Purchasing Organization",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchasing Organization tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchasing Group",
          "label": "Purchasing Group",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchasing Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Material Group",
          "label": "Material Group",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Material Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Service Performer",
          "label": "Service Performer",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Service Performer tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchasing Category",
          "label": "Purchasing Category",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchasing Category tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Document",
          "label": "Document",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Evaluation Period in Days",
          "label": "Evaluation Period in Days",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Evaluation Period in Days tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 10,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Comparison Net Amount",
          "label": "Comparison Net Amount",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Comparison Net Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Amount",
          "label": "Net Amount",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Purchasing Spend Ratio",
          "label": "Purchasing Spend Ratio",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "100*comparisonnetamount/netamount trongcùngscope/currency.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F0905",
      "reading": "Một dòng theo Supplier + Purchasing Organization + Material Group + Evaluation Period in Days + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Tỷ lệ=100*comparison net amount/net amount cùng phạm vi và currency. Tổng bằng0 thì tỷ lệ unavailable. Đây không phải quantity evaluation F1661.",
      "control": "Tỷ lệ=100*comparison net amount/net amount cùng phạm vi và currency. Tổng bằng0 thì tỷ lệ unavailable. Đây không phải quantity evaluation F1661.",
      "ifrs": "PO, spend hoặc commitment không tự là liability. Đối chiếu GR/IR, invoice, cutoff và chi phí đủ điều kiện IAS2; giữ scope, currency và UoM.",
      "lineage": "Nguồn có URL/version → P24-SPEND view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Purchasing Spend and implementation F0905",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
            "https://help.sap.com/docs/sap_s4hana_on-premise/af9ef57f504840d2b81be8667206d485/502c0b56614c692de10000000a4450e5.html?source=productlink-webassistant"
          ],
          "version": "Cloud2608 / S4 2025FPS01; target unknown",
          "documented": [
            "Supplier",
            "Supplier Country",
            "Purchasing Group",
            "Purchasing Organization",
            "Material Group",
            "Service Performer",
            "Purchasing Category",
            "Document",
            "Display Currency",
            "Evaluation Period in Days",
            "Comparison Net Amount",
            "Net Amount",
            "Purchasing Spend Ratio"
          ],
          "scope": "DOCUMENTED_DIMENSIONS_AND_RATIO_NOT_OBSERVED_EXPORT",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/4a24b4540de6e331e10000000a4450e5.html?locale=en-US",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "MM32",
      "module": "MM",
      "title": "Supplier invoice header and item detail",
      "tcode": "F0859 (invoice detail) / F1060A (list context)",
      "fiori_app": "F0859",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Supplier invoice header and item detail",
      "grain": "Company Code + Fiscal Year + Invoice + Item",
      "keys": [
        "Company Code",
        "Fiscal Year",
        "Invoice",
        "Item"
      ],
      "columns": [
        "Company Code",
        "Invoice",
        "Fiscal Year",
        "Supplier",
        "Invoice Date",
        "Posting Date",
        "Currency",
        "Gross Amount",
        "Tax Amount",
        "Net Amount",
        "Reference",
        "Assignment",
        "Header Text",
        "Item",
        "Purchase Order",
        "PO Item",
        "Material",
        "Quantity",
        "Unit",
        "Item Amount",
        "Tax Code",
        "Item Text",
        "Payment Block",
        "Status",
        "Accounting Document"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Invoice",
          "label": "Invoice",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Invoice tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Supplier",
          "label": "Supplier",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Supplier tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Invoice Date",
          "label": "Invoice Date",
          "position": 5,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Invoice Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 6,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Gross Amount",
          "label": "Gross Amount",
          "position": 8,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Sốheaderinvoice; lặp lại khiflattenitem nênkhông cộng theoitem.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Tax Amount",
          "label": "Tax Amount",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Tax Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Amount",
          "label": "Net Amount",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Reference",
          "label": "Reference",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Reference tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Assignment",
          "label": "Assignment",
          "position": 12,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Assignment tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Header Text",
          "label": "Header Text",
          "position": 13,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Header Text tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Item",
          "label": "Item",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Item tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Purchase Order",
          "label": "Purchase Order",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Purchase Order tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "PO Item",
          "label": "PO Item",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính PO Item tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Material",
          "label": "Material",
          "position": 17,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Material tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Quantity",
          "label": "Quantity",
          "position": 18,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Quantity tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Unit",
          "label": "Unit",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Unit tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Item Amount",
          "label": "Item Amount",
          "position": 20,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Item Amount tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Tax Code",
          "label": "Tax Code",
          "position": 21,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Tax Code tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Item Text",
          "label": "Item Text",
          "position": 22,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Item Text tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Payment Block",
          "label": "Payment Block",
          "position": 23,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Payment Block tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 24,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Trạng thái tạisnapshot; thànhcông/test không chứngminh posting.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Accounting Document",
          "label": "Accounting Document",
          "position": 25,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Accounting Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F0859 (invoice detail) / F1060A (list context)",
      "reading": "Một dòng theo Company Code + Fiscal Year + Invoice + Item. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Flatten header và item là biến đổi SAVA. Gross amount ở header có thể lặp, không cộng theo item. F0859 detail khác list F1060A.",
      "control": "Flatten header và item là biến đổi SAVA. Gross amount ở header có thể lặp, không cộng theo item. F0859 detail khác list F1060A.",
      "ifrs": "PO, spend hoặc commitment không tự là liability. Đối chiếu GR/IR, invoice, cutoff và chi phí đủ điều kiện IAS2; giữ scope, currency và UoM.",
      "lineage": "Nguồn có URL/version → P24-INVOICE view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Supplier invoice apps and Create Supplier Invoice",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
          ],
          "version": "Cloud2608; target unknown",
          "documented": [
            "Company Code",
            "Invoice Date",
            "Posting Date",
            "Assignment",
            "Item Text",
            "Header Text"
          ],
          "scope": "DOCUMENTED_FORM_FIELDS_NOT_LIST_SCHEMA",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/01060a2e758f4e8a9d4a7cf07b0ce323.html",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "SD16",
      "module": "SD",
      "title": "Sales Volume - Flexible Analysis",
      "tcode": "F1250",
      "fiori_app": "F1250",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Sales Volume - Flexible Analysis",
      "grain": "Company Code + Calendar Year + Calendar Month + Sales Organization + Product + Display Currency",
      "keys": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Display Currency"
      ],
      "columns": [
        "Company Code",
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Product Group",
        "Sold-to Party",
        "Display Currency",
        "Net Value",
        "Sales Volume",
        "Sales Volume Qty",
        "Cancellations",
        "Profit Margin",
        "Credit Memos",
        "Credit Memos Qty",
        "Credit Memo Profit Margin",
        "Net Sales Volume",
        "Net Profit Margin",
        "Net Sales Cost"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Year",
          "label": "Calendar Year",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Month",
          "label": "Calendar Month",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Month tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sales Organization tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product",
          "label": "Product",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product Group",
          "label": "Product Group",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sold-to Party tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 8,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Measure cópopulation xácđịnh bởi view; không mặcđịnh doanhthuIFRS.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Sales Volume",
          "label": "Sales Volume",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Sales Volume tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Sales Volume Qty",
          "label": "Sales Volume Qty",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Sales Volume Qty tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Cancellations",
          "label": "Cancellations",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Cancellations tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Profit Margin",
          "label": "Profit Margin",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Profit Margin tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Credit Memos",
          "label": "Credit Memos",
          "position": 14,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Credit Memos tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Credit Memos Qty",
          "label": "Credit Memos Qty",
          "position": 15,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Credit Memos Qty tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Credit Memo Profit Margin",
          "label": "Credit Memo Profit Margin",
          "position": 16,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Credit Memo Profit Margin tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Sales Volume",
          "label": "Net Sales Volume",
          "position": 17,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Sales Volume tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Profit Margin",
          "label": "Net Profit Margin",
          "position": 18,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Mẫu salesview là sốtiềnmargin, không phải tỷlệ; giữmeasure definition.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Net Sales Cost",
          "label": "Net Sales Cost",
          "position": 19,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Net Sales Cost tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F1250",
      "reading": "Một dòng theo Company Code + Calendar Year + Calendar Month + Sales Organization + Product + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Net sales=volume-credit memos; cancellation population theo nguồn. Số billing/KPI không tự chứng minh recognition theo IFRS15.",
      "control": "Net sales=volume-credit memos; cancellation population theo nguồn. Số billing/KPI không tự chứng minh recognition theo IFRS15.",
      "ifrs": "Sales order hoặc billing KPI không tự là revenue IFRS15. Đối chiếu hợp đồng, performance obligation, cutoff, returns và credit memos.",
      "lineage": "Nguồn có URL/version → P24-SALES-VOLUME view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Sales Volume - Flexible Analysis F1250",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US"
          ],
          "version": "Cloud documentation; release header not captured",
          "documented": [
            "Net Value",
            "Sales Volume",
            "Sales Volume Qty",
            "Cancellations",
            "Profit Margin",
            "Credit Memos",
            "Credit Memos Qty",
            "Credit Memo Profit Margin",
            "Net Sales Volume",
            "Net Profit Margin",
            "Net Sales Cost"
          ],
          "scope": "DOCUMENTED_MEASURES_ORDER_NOT_OBSERVED",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=en-US",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "SD17",
      "module": "SD",
      "title": "Incoming Sales Orders - Flexible Analysis",
      "tcode": "F1249",
      "fiori_app": "F1249",
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Incoming Sales Orders - Flexible Analysis",
      "grain": "Calendar Year + Calendar Month + Sales Organization + Product + Sold-to Party + Display Currency",
      "keys": [
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Sold-to Party",
        "Display Currency"
      ],
      "columns": [
        "Calendar Year",
        "Calendar Month",
        "Sales Organization",
        "Product",
        "Product Group",
        "Sold-to Party",
        "Sales Document Type",
        "Display Currency",
        "Net Value",
        "Incoming Orders",
        "Incoming Orders Quantity",
        "Incoming Items",
        "Cumulative Confirmed Quantity",
        "Order Income Date",
        "Selection Scope"
      ],
      "fields": [
        {
          "key": "Calendar Year",
          "label": "Calendar Year",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Calendar Month",
          "label": "Calendar Month",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Calendar Month tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sales Organization",
          "label": "Sales Organization",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sales Organization tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product",
          "label": "Product",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Product Group",
          "label": "Product Group",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Product Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sold-to Party",
          "label": "Sold-to Party",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sold-to Party tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Sales Document Type",
          "label": "Sales Document Type",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Sales Document Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Display Currency",
          "label": "Display Currency",
          "position": 8,
          "type": "text",
          "role": "filter_or_context",
          "meaning": "Đồng tiền trình bày theo scope vàexchange-rate type.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Net Value",
          "label": "Net Value",
          "position": 9,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Measure cópopulation xácđịnh bởi view; không mặcđịnh doanhthuIFRS.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Incoming Orders",
          "label": "Incoming Orders",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Incoming Orders tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Incoming Orders Quantity",
          "label": "Incoming Orders Quantity",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Incoming Orders Quantity tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Incoming Items",
          "label": "Incoming Items",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Incoming Items tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Cumulative Confirmed Quantity",
          "label": "Cumulative Confirmed Quantity",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Cumulative Confirmed Quantity tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Order Income Date",
          "label": "Order Income Date",
          "position": 14,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Order Income Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Selection Scope",
          "label": "Selection Scope",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Selection Scope tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. F1249",
      "reading": "Một dòng theo Calendar Year + Calendar Month + Sales Organization + Product + Sold-to Party + Display Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Population là order items liên quan billing/delivery trong kỳ income. So VA05 phải có bridge về date và population.",
      "control": "Population là order items liên quan billing/delivery trong kỳ income. So VA05 phải có bridge về date và population.",
      "ifrs": "Sales order hoặc billing KPI không tự là revenue IFRS15. Đối chiếu hợp đồng, performance obligation, cutoff, returns và credit memos.",
      "lineage": "Nguồn có URL/version → P24-INCOMING view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Incoming Sales Orders - Flexible Analysis F1249",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
          ],
          "version": "Cloud2608 / S4 key figures documentation",
          "documented": [
            "Net Value",
            "Incoming Orders",
            "Incoming Orders Quantity",
            "Incoming Items",
            "Cumulative Confirmed Quantity"
          ],
          "scope": "DOCUMENTED_MEASURES_NOT_VA05_EQUIVALENCE",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/0ed035541541bb29e10000000a44538d.html?locale=en-US",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "PM09",
      "module": "PM",
      "title": "PMIS cost analysis",
      "tcode": "MCI8",
      "fiori_app": null,
      "kind": "ANALYTICAL_REPORT",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "PMIS cost analysis",
      "grain": "Maintenance Plant + Fiscal Year + Period + Equipment + Value Category + Currency",
      "keys": [
        "Maintenance Plant",
        "Fiscal Year",
        "Period",
        "Equipment",
        "Value Category",
        "Currency"
      ],
      "columns": [
        "Maintenance Plant",
        "Planning Plant",
        "Fiscal Year",
        "Period",
        "Equipment",
        "Functional Location",
        "Order Type",
        "Planner Group",
        "Value Category",
        "Planned Cost",
        "Actual Cost",
        "Variance",
        "Order Count",
        "Currency",
        "Statistics Update Date",
        "Aggregation Level"
      ],
      "fields": [
        {
          "key": "Maintenance Plant",
          "label": "Maintenance Plant",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Maintenance Plant tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planning Plant",
          "label": "Planning Plant",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Planning Plant tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Equipment",
          "label": "Equipment",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Equipment tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Functional Location",
          "label": "Functional Location",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Functional Location tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Order Type",
          "label": "Order Type",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Order Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planner Group",
          "label": "Planner Group",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Planner Group tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Value Category",
          "label": "Value Category",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Value Category tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planned Cost",
          "label": "Planned Cost",
          "position": 10,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Planned Cost tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Actual Cost",
          "label": "Actual Cost",
          "position": 11,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Actual Cost tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Variance",
          "label": "Variance",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Mẫu SAVA dùng plan-actual; quy ước SAP của nguồn cần xác minh.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Order Count",
          "label": "Order Count",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Order Count tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 14,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Statistics Update Date",
          "label": "Statistics Update Date",
          "position": 15,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Statistics Update Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Aggregation Level",
          "label": "Aggregation Level",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Aggregation Level tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. MCI8",
      "reading": "Một dòng theo Maintenance Plant + Fiscal Year + Period + Equipment + Value Category + Currency. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "PMIS statistical update/currency/scope có thể khác IW39. Giữ statistics timestamp, value category và cấp aggregation để đối chiếu.",
      "control": "PMIS statistical update/currency/scope có thể khác IW39. Giữ statistics timestamp, value category và cấp aggregation để đối chiếu.",
      "ifrs": "Actual/plan, PCA, margin hoặc PM cost cần bridge GL, allocation, ledger, dấu và policy. Chi phí bất thường không tự đủ điều kiện vốn hóa IAS2; TECO không tự là nghiệm thu CAPEX.",
      "lineage": "Nguồn có URL/version → P24-MCI8 view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "PM list editing and PMIS cost analysis",
          "urls": [
            "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2397011"
          ],
          "version": "ECC/S4 onprem/private KBA contexts",
          "documented": [
            "Planned Cost",
            "Actual Cost",
            "Fiscal Year",
            "Currency"
          ],
          "scope": "PMIS_VS_LIST_SCOPE_AND_CURRENCY_NOT_IW39_FIELD_CATALOG",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://userapps.support.sap.com/sap/support/knowledge/en/1945736",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    },
    {
      "id": "AA08",
      "module": "FI-AA",
      "title": "Depreciation posting run log",
      "tcode": "AFAB (log) / F1914 (scheduling context)",
      "fiori_app": null,
      "kind": "RUN_EVIDENCE",
      "status": "AUTHORED_CONTEXT_OR_PROPOSED_PENDING_TARGET_AND_SME",
      "new_profile": true,
      "purpose": "Depreciation posting run log",
      "grain": "Company Code + Fiscal Year + Period + Run ID + Asset Number + Subnumber + Ledger",
      "keys": [
        "Company Code",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Asset Number",
        "Subnumber",
        "Ledger"
      ],
      "columns": [
        "Company Code",
        "Fiscal Year",
        "Period",
        "Run ID",
        "Run Type",
        "Test Run",
        "Ledger",
        "Accounting Principle",
        "Depreciation Area",
        "Asset Number",
        "Subnumber",
        "Planned Depreciation",
        "Posted Depreciation",
        "Difference",
        "Currency",
        "Posting Document",
        "Posting Date",
        "Status",
        "Message ID",
        "Message",
        "Job Name",
        "Spool"
      ],
      "fields": [
        {
          "key": "Company Code",
          "label": "Company Code",
          "position": 1,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Pháp nhân kế toán; đối chiếu riêng từng công ty.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Fiscal Year",
          "label": "Fiscal Year",
          "position": 2,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Fiscal Year tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Period",
          "label": "Period",
          "position": 3,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Period tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Run ID",
          "label": "Run ID",
          "position": 4,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Run ID tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Run Type",
          "label": "Run Type",
          "position": 5,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Run Type tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Test Run",
          "label": "Test Run",
          "position": 6,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Test Run tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Ledger",
          "label": "Ledger",
          "position": 7,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Ledger tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Accounting Principle",
          "label": "Accounting Principle",
          "position": 8,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Accounting Principle tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "DOCUMENTED_SEMANTIC_NOT_OBSERVED_EXPORT_COLUMN",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Depreciation Area",
          "label": "Depreciation Area",
          "position": 9,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Khuvực khấuhao theo cấu hình; area01 khôngmặcđịnhIFRS.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Asset Number",
          "label": "Asset Number",
          "position": 10,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Asset Number tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Subnumber",
          "label": "Subnumber",
          "position": 11,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Subnumber tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Planned Depreciation",
          "label": "Planned Depreciation",
          "position": 12,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Planned Depreciation tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Posted Depreciation",
          "label": "Posted Depreciation",
          "position": 13,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Posted Depreciation tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Difference",
          "label": "Difference",
          "position": 14,
          "type": "raw_decimal",
          "role": "measure",
          "meaning": "Thuộc tính Difference tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW string; parse theo delimiter/locale khai báo trênCLEAN riêng. Blank kháczero. Không tự đổi dấu/currency."
        },
        {
          "key": "Currency",
          "label": "Currency",
          "position": 15,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Tiền tệ của measure tương ứng; không cộng giữa currencies.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Document",
          "label": "Posting Document",
          "position": 16,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Document tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Posting Date",
          "label": "Posting Date",
          "position": 17,
          "type": "raw_date",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Posting Date tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Status",
          "label": "Status",
          "position": 18,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Trạng thái tạisnapshot; thànhcông/test không chứngminh posting.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Message ID",
          "label": "Message ID",
          "position": 19,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Message ID tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Message",
          "label": "Message",
          "position": 20,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Message tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Job Name",
          "label": "Job Name",
          "position": 21,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Job Name tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        },
        {
          "key": "Spool",
          "label": "Spool",
          "position": 22,
          "type": "text",
          "role": "dimension_or_context",
          "meaning": "Thuộc tính Spool tại grain của view; đối chiếu định nghĩa trên hệ nguồn trước mapping.",
          "evidence": "SAVA_PROPOSED_NOT_VERIFIED_EXPORT_FIELD",
          "source_label_verified": false,
          "technical_name": null,
          "source_urls": [],
          "cleaning_rule": "Giữ RAW vàzerođầu. Map bằngposition+layoutversion; không suy technicalname từnhãn."
        }
      ],
      "selection": "Xác nhận edition/release, quyền đọc và view. Chọn company, ledger, kỳ hoặc key date và currency; lưu selection variant, layout, language, row limit và thời điểm xuất. Chỉ xem/export, không thực hiện post, run hoặc change. AFAB (log) / F1914 (scheduling context)",
      "reading": "Một dòng theo Company Code + Fiscal Year + Period + Run ID + Asset Number + Subnumber + Ledger. Fields phân biệt semantics đọc từ tài liệu với trường đề xuất. Thứ tự export và cột ẩn chưa xác minh. Dùng fixture_cases để tách baseline và ca lỗi.",
      "reconciliation": "Chỉ mẫu run log, không chạy/post SAP. Test run hoặc thông báo success không chứng minh giá trị đã vào FI; repeat/rerun theo policy target.",
      "control": "Chỉ mẫu run log, không chạy/post SAP. Test run hoặc thông báo success không chứng minh giá trị đã vào FI; repeat/rerun theo policy target.",
      "ifrs": "Mẫu hỗ trợ đối chiếu và kiểm soát, chưa thay policy hoặc nghiệm thu IFRS. Aging/DSO không tự chứng minh ECL; giá trị/khấu hao theo area không tự là giá trị IAS16. Run log không tự là chứng từ đã posted.",
      "lineage": "Nguồn có URL/version → P24-AFAB view SAVA → RAW tổng hợp giữ nguyên → CLEAN và exception log riêng → CONTROL cùng phạm vi → MART theo policy được review.",
      "source_evidence": [
        {
          "title": "Post Depreciation AFAB / Schedule Asset Accounting Jobs",
          "urls": [
            "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
            "https://userapps.support.sap.com/sap/support/knowledge/en/3464969",
            "https://userapps.support.sap.com/sap/support/knowledge/en/2870963"
          ],
          "version": "S4 2025FPS01 / public KBA",
          "documented": [
            "Company Code",
            "Period",
            "Accounting Principle"
          ],
          "scope": "POSTING_RUN_CONTEXT_NOT_NATIVE_SPOOL_FIELDS",
          "checked_date": "2026-10-13",
          "evidence": "WEB_INDEXED_EXTRACT",
          "rights": "LINK_ONLY_NO_REDISTRIBUTION_LICENSE_ASSERTED",
          "layout_verified": false
        }
      ],
      "source_url": "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
      "target_release": "UNKNOWN",
      "native_export": false,
      "full_sap_catalog_verified": false
    }
  ],
  "priority_24_registry": [
    {
      "input_row": 14,
      "module": "FI",
      "supplied_tcode": "S_ALR_87012078",
      "supplied_fiori_app": "",
      "supplied_title": "Due Date Analysis for Open Items (AP)",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "S_ALR_87012078: Due Date Analysis for Open Items, AP",
      "view_id": "P24-AP-CLASSIC",
      "entrypoint": "S_ALR_87012078",
      "profile_id": "FI31",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/1827228"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 15,
      "module": "FI",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1872",
      "supplied_title": "Aging Analysis (AP)",
      "priority": "Cao",
      "identity_review": "SUPPLIED_IDENTITY_NOT_CONFIRMED",
      "identity_note": "Chưa xác nhận F1872; SAP xác nhận F1733 là Aging Analysis - Payable Amount.",
      "view_id": "P24-AP-FIORI",
      "entrypoint": "F1733",
      "profile_id": "FI31",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3118280"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 21,
      "module": "FI",
      "supplied_tcode": "S_ALR_87012168",
      "supplied_fiori_app": "",
      "supplied_title": "Due Date Analysis for Open Items (AR)",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "S_ALR_87012168: Due Date Analysis for Open Items, AR",
      "view_id": "P24-AR-CLASSIC",
      "entrypoint": "S_ALR_87012168",
      "profile_id": "FI10",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/1613759"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 22,
      "module": "FI",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1733",
      "supplied_title": "Aging Analysis (AR)",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F1733 là aging AP, bảng ghi AR.",
      "view_id": "P24-AR-CARD",
      "entrypoint": "F3242 (AR Aging Analysis card)",
      "profile_id": "FI10",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3118280"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 23,
      "module": "FI",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1748",
      "supplied_title": "Days Sales Outstanding",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F1748: Total Receivables; DSO là F1741.",
      "view_id": "P24-DSO",
      "entrypoint": "F1741",
      "profile_id": "FI32",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3307590",
        "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a9453358fde89244e10000000a4450e5.html"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 32,
      "module": "CO",
      "supplied_tcode": "",
      "supplied_fiori_app": "F3328",
      "supplied_title": "Trial Balance for Cost Centers / Cost Center Plan-Actual",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F3328: My Inbox - Approve Timesheets (SAP-authored blog); W0081 được SAP nêu cho Cost Centers - Plan/Actual.",
      "view_id": "P24-CC-PLAN",
      "entrypoint": "W0081",
      "profile_id": "CO03",
      "existing_reference": false,
      "source_urls": [
        "https://community.sap.com/t5/technology-blog-posts-by-sap/sap-fiori-for-sap-s-4hana-fiori-my-inbox-part-1-activation/ba-p/13326175",
        "https://userapps.support.sap.com/sap/support/knowledge/en/3597411"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 34,
      "module": "CO",
      "supplied_tcode": "KE5Z",
      "supplied_fiori_app": "",
      "supplied_title": "Profit Center Actual line items",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "KE5Z: Profit Center line-item context, SAP ERP.",
      "view_id": "P24-PCA-LINES",
      "entrypoint": "KE5Z",
      "profile_id": "CO31",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/1903518"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 35,
      "module": "CO",
      "supplied_tcode": "S_ALR_87013326",
      "supplied_fiori_app": "",
      "supplied_title": "Profit Center: Plan/Actual/Variance",
      "priority": "Cao",
      "identity_review": "IDENTITY_REPORT_FAMILY_CONTEXT_ONLY",
      "identity_note": "SAP KBA nhắc S_ALR_87013326 trong ngữ cảnh PCA; chưa đủ xác nhận toàn tên/form người dùng cung cấp.",
      "view_id": "P24-PCA-PLAN",
      "entrypoint": "S_ALR_87013326 (form pending) / W0079",
      "profile_id": "CO30",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/1903518"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 37,
      "module": "CO",
      "supplied_tcode": "",
      "supplied_fiori_app": "F0957",
      "supplied_title": "Profit Center – Actuals / Market Segment – Actuals",
      "priority": "Cao",
      "identity_review": "SUPPLIED_IDENTITY_NOT_CONFIRMED",
      "identity_note": "Chưa xác nhận F0957. SAP nêu Profit Center - Actual F0959 cho cấu hình Web Dynpro cụ thể.",
      "view_id": "P24-PCA-ACTUAL",
      "entrypoint": "F0959",
      "profile_id": "CO30",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3597411"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 43,
      "module": "CO",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1780",
      "supplied_title": "Production Cost Analysis",
      "priority": "Cao",
      "identity_review": "EXISTING_SOURCE_REFERENCE_SAMPLE",
      "identity_note": "F1780: Production Cost Analysis; đã có CO11-02 và CO11-03 drilldown.",
      "view_id": "CO11-02",
      "entrypoint": "F1780",
      "profile_id": "CO11",
      "existing_reference": true,
      "source_urls": [
        "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/9905622a5c1f49ba84e9076fc83a9c2c/21d0d1f8e18e41ebbc93d2a8a4c51d97.html"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 49,
      "module": "CO",
      "supplied_tcode": "KE30",
      "supplied_fiori_app": "",
      "supplied_title": "Execute Profitability Report",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "KE30: profitability report context, KBA public preview.",
      "view_id": "P24-KE30",
      "entrypoint": "KE30 (company form unknown)",
      "profile_id": "CO32",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/2156399",
        "https://userapps.support.sap.com/sap/support/knowledge/en/3732516"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 50,
      "module": "CO",
      "supplied_tcode": "",
      "supplied_fiori_app": "F2380",
      "supplied_title": "Product Profitability / Margin Analysis",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F2380: Contact Profiles trong SAP S/4HANA Private 2025 FPS01, không xác nhận là product profitability.",
      "view_id": "P24-MARGIN-PRODUCT",
      "entrypoint": "F0960 (product drilldown)",
      "profile_id": "CO15",
      "existing_reference": false,
      "source_urls": [
        "https://help.sap.com/docs/PRODUCT_ID/f5d3e1005efd4e86acf9a65abf428082/2341dda636e14730a5baf50503f89ab8.html"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 51,
      "module": "CO",
      "supplied_tcode": "",
      "supplied_fiori_app": "F2522",
      "supplied_title": "Customer Profitability / Margin Analysis",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F2522: Processing Days of Open Disputes, không customer profitability.",
      "view_id": "P24-MARGIN-CUSTOMER",
      "entrypoint": "F0960 (customer drilldown)",
      "profile_id": "CO15",
      "existing_reference": false,
      "source_urls": [
        "https://help.sap.com/docs/SAP_S4HANA_CLOUD/918bca53037f408f91a2295d04ac16bc/a5d97ceb8db4404eae16dca25c48915a.html?locale=en-US"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 59,
      "module": "MM",
      "supplied_tcode": "ME2L",
      "supplied_fiori_app": "",
      "supplied_title": "Purchasing documents per supplier",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "ME2L: Purchasing Documents per Vendor.",
      "view_id": "P24-ME2L",
      "entrypoint": "ME2L",
      "profile_id": "MM07",
      "existing_reference": false,
      "source_urls": [
        "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 60,
      "module": "MM",
      "supplied_tcode": "ME2M",
      "supplied_fiori_app": "",
      "supplied_title": "Purchasing documents per material",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "ME2M: Purchasing Documents for Material.",
      "view_id": "P24-ME2M",
      "entrypoint": "ME2M",
      "profile_id": "MM07",
      "existing_reference": false,
      "source_urls": [
        "https://help.sap.com/docs/PRODUCT_ID/349992fb60854a62a264d716ad5c8f54/a1e5e052427c9d36e10000000a44538d.html"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 64,
      "module": "MM",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1661",
      "supplied_title": "Spend Analysis / Purchasing Spend",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F1661: Supplier Evaluation by Quantity; deprecated/removed từ launchpad với S/4HANA2022, successor F1661A.",
      "view_id": "P24-SPEND",
      "entrypoint": "F0905",
      "profile_id": "MM31",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3475364",
        "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/e296651f454c4284ade361292c633d69/21699bbeaed14f12ae302b38a6a97777.html?version=2022.000"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 68,
      "module": "MM",
      "supplied_tcode": "",
      "supplied_fiori_app": "F0859",
      "supplied_title": "Manage Supplier Invoices",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "F0859: Manage Supplier Invoices, ứng dụng giao dịch/detail; list có thể là F1060A tùy release.",
      "view_id": "P24-INVOICE",
      "entrypoint": "F0859 (invoice detail) / F1060A (list context)",
      "profile_id": "MM32",
      "existing_reference": false,
      "source_urls": [
        "https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/2bedd663002149e1b8c03b8667845719.html?locale=en-US&workflow-scenario=ws00800251"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 85,
      "module": "SD",
      "supplied_tcode": "",
      "supplied_fiori_app": "F2228",
      "supplied_title": "Sales Volume / Sales Analysis",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F2228: Schedule Delivery Creation; Sales Volume - Flexible Analysis là F1250.",
      "view_id": "P24-SALES-VOLUME",
      "entrypoint": "F1250",
      "profile_id": "SD16",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3476442",
        "https://help.sap.com/docs/SAP_S4HANA_CLOUD/a376cd9ea00d476b96f18dea1247e6a5/b1853554e448cb7de10000000a44176d.html?locale=pt-"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 86,
      "module": "SD",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1249",
      "supplied_title": "Incoming Sales Orders",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "F1249: Incoming Sales Orders - Flexible Analysis.",
      "view_id": "P24-INCOMING",
      "entrypoint": "F1249",
      "profile_id": "SD17",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3718355",
        "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/7b24a64d9d0941bda1afa753263d9e39/131c099e40544afcbc83529aa8913b38.html"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 97,
      "module": "PM",
      "supplied_tcode": "IW39",
      "supplied_fiori_app": "",
      "supplied_title": "Display PM orders (list)",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "IW39 có trong PM List Editing được SAP liệt kê; hiện PM01 là IW38.",
      "view_id": "P24-IW39",
      "entrypoint": "IW39",
      "profile_id": "PM01",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/1945736"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 99,
      "module": "PM",
      "supplied_tcode": "MCI8",
      "supplied_fiori_app": "",
      "supplied_title": "Cost analysis (PMIS)",
      "priority": "Cao",
      "identity_review": "IDENTITY_CONTEXT_CONFIRMED",
      "identity_note": "MCI8: Cost Analysis (PMIS).",
      "view_id": "P24-MCI8",
      "entrypoint": "MCI8",
      "profile_id": "PM09",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/2983906",
        "https://userapps.support.sap.com/sap/support/knowledge/en/1945736"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 111,
      "module": "FI-AA",
      "supplied_tcode": "AFAB",
      "supplied_fiori_app": "F1297",
      "supplied_title": "Depreciation run log / Schedule Depreciation Run",
      "priority": "Cao",
      "identity_review": "TCODE_CONTEXT_CONFIRMED_APP_PAIR_PENDING",
      "identity_note": "AFAB: Post Depreciation. Chưa xác minh F1297 paired title; SAP xác nhận Schedule Asset Accounting Jobs là F1914.",
      "view_id": "P24-AFAB",
      "entrypoint": "AFAB (log) / F1914 (scheduling context)",
      "profile_id": "AA08",
      "existing_reference": false,
      "source_urls": [
        "https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/67e323b7117e4c91869c258933f47182/f56afb5789641070e10000000a44147b.html",
        "https://userapps.support.sap.com/sap/support/knowledge/en/3464969"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 112,
      "module": "FI-AA",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1615",
      "supplied_title": "Asset Balances (Fiori)",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F1615: Asset History Sheet; Asset Balances là F1617.",
      "view_id": "P24-ASSET-BALANCES",
      "entrypoint": "F1617",
      "profile_id": "AA02",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3194844",
        "https://userapps.support.sap.com/sap/support/knowledge/en/3632034"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    },
    {
      "input_row": 113,
      "module": "FI-AA",
      "supplied_tcode": "",
      "supplied_fiori_app": "F1614",
      "supplied_title": "Asset History Sheet (Fiori)",
      "priority": "Cao",
      "identity_review": "SUPPLIED_APP_NAME_CONTRADICTED",
      "identity_note": "F1614: Asset Transactions; Asset History Sheet là F1615.",
      "view_id": "P24-ASSET-HISTORY",
      "entrypoint": "F1615",
      "profile_id": "AA03",
      "existing_reference": false,
      "source_urls": [
        "https://userapps.support.sap.com/sap/support/knowledge/en/3598498",
        "https://userapps.support.sap.com/sap/support/knowledge/en/3194844"
      ],
      "release_availability": "TARGET_UNKNOWN_NOT_VERIFIED"
    }
  ]
}
