{
  "generated_at": "2026-03-22T16:31:00",
  "endpoint": "http://localhost/buh_test/odata/standard.odata/",
  "source_files": [
    "logs/metadata.xml",
    "logs/probe_report.json",
    "logs/sample_links.json",
    "logs/deep_subconto_join_probe.json"
  ],
  "chains": [
    {
      "chain": "A",
      "name": "Document_Реализация -> Posting -> Account -> Subconto",
      "status": "derivable",
      "evidence": [
        "Join proven by Ref_Key + LineNumber <-> Recorder + LineNumber",
        "Account key consistency verified on joined sample",
        "Subconto_Type extracted from linked document lines"
      ]
    },
    {
      "chain": "B",
      "name": "Document_Поступление -> Posting -> Accounts",
      "status": "derivable",
      "evidence": [
        "Document_ПоступлениеТоваровУслуг readable",
        "Recorder bridge to accounting register",
        "AccountDr/AccountCr present"
      ]
    },
    {
      "chain": "C",
      "name": "Counterparty -> Contract -> Documents -> Movements",
      "status": "derivable",
      "evidence": [
        "Catalog_Контрагенты + Catalog_ДоговорыКонтрагентов readable",
        "Owner_Key / Контрагент_Key / ДоговорКонтрагента_Key present",
        "Movement join via recorder derivable"
      ]
    },
    {
      "chain": "D",
      "name": "Bank docs -> BankAccount -> Movements",
      "status": "derivable",
      "evidence": [
        "Document_СписаниеСРасчетногоСчета readable",
        "Document_ПоступлениеНаРасчетныйСчет readable",
        "Bank/account keys + register join available"
      ]
    },
    {
      "chain": "E",
      "name": "Document_ОперацияБух -> AccountingRegister -> Explainability",
      "status": "derivable",
      "evidence": [
        "Document_ОперацияБух readable",
        "AccountingRegister_Хозрасчетный and RecordType readable",
        "Recorder/account fields allow explainability graph base"
      ]
    },
    {
      "chain": "F",
      "name": "ChartOfAccounts -> SubcontoType -> Posting",
      "status": "derivable",
      "evidence": [
        "Posting account keys are directly readable",
        "Subconto_Type is available on linked document line entities",
        "Mapping is data-driven; direct normative chart field mapping is not exposed"
      ]
    }
  ],
  "relations": [
    {
      "relation": "Document->Posting",
      "status": "derivable",
      "evidence": "Recorder bridge in accounting register (+ LineNumber on deep probe)"
    },
    {
      "relation": "Posting->debitAccount",
      "status": "direct",
      "evidence": "AccountDr_Key"
    },
    {
      "relation": "Posting->creditAccount",
      "status": "direct",
      "evidence": "AccountCr_Key"
    },
    {
      "relation": "Posting->Organization",
      "status": "direct",
      "evidence": "Организация_Key"
    },
    {
      "relation": "Document->Counterparty",
      "status": "direct",
      "evidence": "Контрагент_Key in documents"
    },
    {
      "relation": "Document->Contract",
      "status": "direct",
      "evidence": "ДоговорКонтрагента_Key in documents"
    },
    {
      "relation": "Counterparty->Contract",
      "status": "direct",
      "evidence": "Owner_Key in contracts"
    },
    {
      "relation": "Organization->BankAccount",
      "status": "direct",
      "evidence": "ОсновнойБанковскийСчет_Key and СчетОрганизации_Key"
    },
    {
      "relation": "Posting->SubcontoType",
      "status": "derivable",
      "evidence": "Deep join proof in logs/deep_subconto_join_probe.json"
    }
  ],
  "write_guard": {
    "endpoint": "http://localhost/buh_test/odata/standard.odata/$metadata",
    "post_status": 405,
    "patch_status": 405,
    "delete_status": 405,
    "note": "transport-level check; role-level deny should be audited in 1C"
  },
  "hard_gate_2026_03_22": {
    "source": "logs/deep_accounting_mvp_gate.json",
    "document_to_posting_to_accounts": "pass",
    "posting_to_subconto123_to_counterparty_contract_item": "fail",
    "saldo_explainability_from_movements": "pass",
    "verdict": "Not yet sufficient for MVP accounting ontology; deeper access is justified for failed checks."
  },
  "deep_probe_snapshot": {
    "tested_document_key": "b8661088-b0f2-11e4-9980-5404a6c12c2c",
    "posting_rows_for_document": 108,
    "line_rows_for_document": 36,
    "joined_rows": 36,
    "account_match": true
  }
}
