{
  "schema_version": 1,
  "diagram_type": "erd",
  "meta": {
    "title": "Từ giao dịch đến tiền thực nhận — ERD logic",
    "locale": "vi",
    "quality_profile": "showcase",
    "output": "docs/ssa-miniapp/archify/settlement-data.html"
  },
  "layout": {
    "mode": "grid",
    "entityW": 280,
    "gapX": 90,
    "gapY": 82
  },
  "entities": [
    {
      "id": "payment_transactions",
      "label": "payment_transactions",
      "row": 0,
      "col": 0,
      "tag": "Giao dịch nguồn",
      "attributes": [
        {
          "name": "id",
          "key": "pk"
        },
        {
          "name": "provider / merchant"
        },
        {
          "name": "provider_transaction_id"
        },
        {
          "name": "amount_vnd / paid_at"
        }
      ]
    },
    {
      "id": "settlement_lines",
      "label": "settlement_lines",
      "row": 0,
      "col": 1,
      "tag": "Đối soát",
      "attributes": [
        {
          "name": "id",
          "key": "pk"
        },
        {
          "name": "batch_id",
          "key": "fk",
          "references": "settlement_batches.id"
        },
        {
          "name": "transaction_id",
          "key": "fk",
          "references": "payment_transactions.id"
        },
        {
          "name": "gross / fee / refund / net"
        },
        {
          "name": "provider_ref / match_status"
        }
      ]
    },
    {
      "id": "settlement_batches",
      "label": "settlement_batches",
      "row": 0,
      "col": 2,
      "tag": "Đối soát",
      "attributes": [
        {
          "name": "id",
          "key": "pk"
        },
        {
          "name": "merchant / period"
        },
        {
          "name": "source_file_hash"
        },
        {
          "name": "net_received / bank_ref"
        },
        {
          "name": "approved_by / locked_at"
        }
      ]
    },
    {
      "id": "reconciliation_cases",
      "label": "reconciliation_cases",
      "row": 1,
      "col": 1,
      "tag": "Ngoại lệ và duyệt",
      "attributes": [
        {
          "name": "id",
          "key": "pk"
        },
        {
          "name": "line_id",
          "key": "fk",
          "references": "settlement_lines.id"
        },
        {
          "name": "owner / discrepancy"
        },
        {
          "name": "evidence_ref / status"
        },
        {
          "name": "resolved_by / reason"
        }
      ]
    },
    {
      "id": "financial_adjustments",
      "label": "financial_adjustments",
      "row": 1,
      "col": 2,
      "tag": "Ngoại lệ và duyệt",
      "attributes": [
        {
          "name": "id",
          "key": "pk"
        },
        {
          "name": "case_id",
          "key": "fk",
          "references": "reconciliation_cases.id"
        },
        {
          "name": "signed_amount_vnd"
        },
        {
          "name": "requester / approver"
        },
        {
          "name": "reason / evidence_ref"
        }
      ]
    }
  ],
  "relationships": [
    {
      "id": "line_transaction",
      "from": "settlement_lines",
      "to": "payment_transactions",
      "fromCardinality": "many",
      "toCardinality": "one",
      "toOptional": true
    },
    {
      "id": "line_batch",
      "from": "settlement_lines",
      "to": "settlement_batches",
      "fromCardinality": "many",
      "toCardinality": "one"
    },
    {
      "id": "case_line",
      "from": "reconciliation_cases",
      "to": "settlement_lines",
      "fromCardinality": "many",
      "toCardinality": "one",
      "toOptional": true
    },
    {
      "id": "adjustment_case",
      "from": "financial_adjustments",
      "to": "reconciliation_cases",
      "fromCardinality": "many",
      "toCardinality": "one"
    }
  ],
  "cards": [
    {
      "dot": "amber",
      "title": "Không đồng nhất paid với thực nhận",
      "items": [
        "Một giao dịch có thể xuất hiện ở nhiều dòng theo kỳ (thu, hoàn, điều chỉnh). Dòng chưa khớp có transaction_id trống; không đoán khớp để đóng kỳ.",
        "Thiếu dòng settlement cũng tạo case; line_id có thể trống và evidence xác định giao dịch/khoản tiền cần tìm."
      ]
    },
    {
      "dot": "emerald",
      "title": "Duyệt kỳ và truy nguyên",
      "items": [
        "Gross − hoàn − phí ± điều chỉnh hợp lệ = net theo kỳ; khoản chuyển kỳ phải có tham chiếu. Đối chiếu thêm net với khoản ngân hàng thực nhận.",
        "File nhập lại không nhân đôi dòng; khóa kỳ sau duyệt. Mở lại hoặc điều chỉnh có actor/time/reason và người duyệt khác người lập."
      ]
    },
    {
      "dot": "slate",
      "title": "Thiết kế logic, chưa triển khai",
      "items": [
        "Nguồn: FEATURES.md §7.4–7.5, bản thiết kế đang làm việc ngày 12/11/2026. Đây là thực thể và trường khóa chọn lọc để trình bày; không phải migration hay schema vật lý đã tồn tại. Kiểu SQL, retention và toàn bộ cột sẽ được chốt khi triển khai."
      ]
    }
  ]
}
