{
  "checks": {
    "build": {
      "compilerHash": "sha256:9562efcd04e80f616932ae68d7b9026d5bdcb30c147f89ba5b0d730c6f39ee25",
      "evidence": "build.json",
      "outcome": "passed",
      "scope": "Recorded build assertions; not a fresh verification",
      "suites": [
        {
          "path": "tests/late-fee.lawtest",
          "tests": 4
        },
        {
          "path": "tests/tariffs.lawtest",
          "tests": 6
        }
      ],
      "tests": 10
    },
    "formalizationCoverage": {
      "outcome": "not_run",
      "reason": "Requires a pinned article-level report"
    },
    "origin": "derived",
    "performance": {
      "outcome": "not_run",
      "reason": "Measured in separate immutable reports"
    }
  },
  "composition": {
    "nodeCounts": {
      "fragment": 2,
      "function_decl": 4,
      "rule": 19,
      "source_edition": 1,
      "source_work": 1,
      "symbol_decl": 17,
      "type_decl": 3
    },
    "origin": "derived",
    "packageBytes": 38303,
    "sourceBytes": 149243,
    "worldBytes": 160738,
    "worldHash": "sha256:cdb7a4c50614fd6331c6c74e0fcc620671217c4ad0499561116d1cd83526d963"
  },
  "dependencies": {
    "declared": {
      "calc.tiers": "0.1.0",
      "tutorial.city": "0.1.0"
    },
    "locked": [
      {
        "contentHash": "sha256:108852b10e3d62f570f0847586028cd2b636a40f8ea31996bddfb1c492521d2a",
        "features": [
          "core-executable"
        ],
        "name": "calc.tiers",
        "namespace": "urn:law:calc:tiers",
        "registryId": "law-dsl-dev",
        "resolverUri": "registry://law-dsl-dev/calc.tiers/0.1.0",
        "version": "0.1.0"
      },
      {
        "contentHash": "sha256:29e5cff6eeee9c6ca8d17466bb3aca2d2e32515e49d9891a15a1447ab113aa37",
        "features": [
          "core-executable"
        ],
        "name": "tutorial.city",
        "namespace": "urn:law:tutorial:city",
        "registryId": "law-dsl-dev",
        "resolverUri": "registry://law-dsl-dev/tutorial.city/0.1.0",
        "version": "0.1.0"
      }
    ],
    "origin": "derived"
  },
  "description": {
    "info": {
      "examples": [
        "tests/late-fee.lawtest",
        "tests/tariffs.lawtest"
      ],
      "format": "law.package-info/0.1",
      "limitations": [
        "Учебное вымышленное право: тарифы и правила архива служат примерами языка.",
        "Замеры относятся к выбранным тестовым делам и указанным закреплённым зависимостям."
      ],
      "purpose": "Учебный пример подключения пакетов, расчёта архивных тарифов и ограничений пени."
    },
    "metadata": {},
    "origin": "declared"
  },
  "evidence": [
    {
      "hash": "sha256:4574cf7016b53b5610dfd37e2424b9290fcc754a90c06333bebd36e79694fac1",
      "path": "package.lawir.json"
    },
    {
      "hash": "sha256:6af6c607b7625c12cb5cf6c1963ead38d60823a97a859089a28a3019f54c66dc",
      "path": "source.json"
    },
    {
      "hash": "sha256:92556f3be2774dd7465a90dd5f55a66865bf9bc6caae7f07aa3877090fef91cc",
      "path": "build.json"
    },
    {
      "hash": "sha256:9cf1911c7ef50764a09d93f5912a3df29c5dfeae202f1fe0fb2d11e2c7bf2d47",
      "path": "replay.json"
    }
  ],
  "format": "law.package-passport/0.1",
  "interface": {
    "evidence": "package.lawir.json",
    "examples": [
      {
        "hash": "sha256:d3bb51f39d90465c8de37fb241706830f3e4e099be21c2659d1897bae0e9a412",
        "path": "tests/late-fee.lawtest",
        "text": "language \"law.core\" version \"0.2\";\npackage tutorial.archive version \"0.15.0\";\nnamespace \"urn:law:tutorial:archive\";\n\ntest \"три дня просрочки — 600, вся база в первой ступени\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert days_overdue(entity_ref(\"urn:tutorial:ivanova\"), 3) {\n            id \"assert-days\";\n            origin case_input;\n        }\n    }\n    evaluate truth(late_fee(entity_ref(\"urn:tutorial:ivanova\"), 600 KZT));\n    expect truth_status == TRUE_ONLY;\n    expect evaluation_status == COMPUTED;\n}\n\ntest \"пятнадцать дней — база 3000, вторая ступень в половину: 2500\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert days_overdue(entity_ref(\"urn:tutorial:ivanova\"), 15) {\n            id \"assert-days\";\n            origin case_input;\n        }\n    }\n    evaluate truth(late_fee(entity_ref(\"urn:tutorial:ivanova\"), 2500 KZT));\n    expect truth_status == TRUE_ONLY;\n}\n\ntest \"шестьдесят дней — шкала даёт 7000, потолок 2026 года — 5000\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert days_overdue(entity_ref(\"urn:tutorial:ivanova\"), 60) {\n            id \"assert-days\";\n            origin case_input;\n        }\n    }\n    evaluate truth(late_fee(entity_ref(\"urn:tutorial:ivanova\"), 5000 KZT));\n    expect truth_status == TRUE_ONLY;\n}\n\ntest \"та же просрочка на дату права 2025 года — потолок 4000\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2025-12-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert days_overdue(entity_ref(\"urn:tutorial:ivanova\"), 60) {\n            id \"assert-days\";\n            origin case_input;\n        }\n    }\n    evaluate truth(late_fee(entity_ref(\"urn:tutorial:ivanova\"), 4000 KZT));\n    expect truth_status == TRUE_ONLY;\n}\n"
      },
      {
        "hash": "sha256:4b3bb3e794404506c35fd669504f0c2fe04280c53a902df0f7ef16cb3a5a1eb7",
        "path": "tests/tariffs.lawtest",
        "text": "language \"law.core\" version \"0.2\";\npackage tutorial.archive version \"0.15.0\";\nnamespace \"urn:law:tutorial:archive\";\n\ntest \"семь страниц по ставке города — 1050\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert copy_order(entity_ref(\"urn:tutorial:order1\"), entity_ref(\"urn:tutorial:ivanova\"), 7) {\n            id \"assert-order\";\n            origin case_input;\n        }\n    }\n    evaluate truth(copy_fee(entity_ref(\"urn:tutorial:order1\"), 1050 KZT));\n    expect truth_status == TRUE_ONLY;\n    expect evaluation_status == COMPUTED;\n}\n\ntest \"год счёта, на который совет ставки не установил, — платы нет\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2025) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert copy_order(entity_ref(\"urn:tutorial:order1\"), entity_ref(\"urn:tutorial:ivanova\"), 7) {\n            id \"assert-order\";\n            origin case_input;\n        }\n    }\n    evaluate truth(copy_fee(entity_ref(\"urn:tutorial:order1\"), 1050 KZT));\n    expect truth_status == NEITHER;\n}\n\ntest \"исследователь: три четверти тарифа — 787,50\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert copy_order(entity_ref(\"urn:tutorial:order1\"), entity_ref(\"urn:tutorial:ivanova\"), 7) {\n            id \"assert-order\";\n            origin case_input;\n        }\n        assert reader_category(entity_ref(\"urn:tutorial:ivanova\"), Researcher) {\n            id \"assert-category\";\n            origin case_input;\n        }\n    }\n    evaluate truth(reader_fee(entity_ref(\"urn:tutorial:order1\"), 787.50 KZT));\n    expect truth_status == TRUE_ONLY;\n}\n\ntest \"студент: половина тарифа — 525\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert copy_order(entity_ref(\"urn:tutorial:order1\"), entity_ref(\"urn:tutorial:ivanova\"), 7) {\n            id \"assert-order\";\n            origin case_input;\n        }\n        assert reader_category(entity_ref(\"urn:tutorial:ivanova\"), Student) {\n            id \"assert-category\";\n            origin case_input;\n        }\n    }\n    evaluate truth(reader_fee(entity_ref(\"urn:tutorial:order1\"), 525.00 KZT));\n    expect truth_status == TRUE_ONLY;\n}\n\ntest \"прочий читатель: полный тариф\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2026) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert copy_order(entity_ref(\"urn:tutorial:order1\"), entity_ref(\"urn:tutorial:ivanova\"), 7) {\n            id \"assert-order\";\n            origin case_input;\n        }\n        assert reader_category(entity_ref(\"urn:tutorial:ivanova\"), General) {\n            id \"assert-category\";\n            origin case_input;\n        }\n    }\n    evaluate truth(reader_fee(entity_ref(\"urn:tutorial:order1\"), 1050.00 KZT));\n    expect truth_status == TRUE_ONLY;\n}\n\ntest \"год без ставки совета — плата невычислима, и посылка названа\" {\n    given {\n        context {\n            decision_time @2026-04-20T09:00:00+05:00;\n            knowledge_time @2026-04-20T09:00:00+05:00;\n            legal_time @2026-04-20;\n            timezone \"Asia/Almaty\";\n        }\n        assert billing_year(entity_ref(\"urn:tutorial:ivanova\"), 2025) {\n            id \"assert-year\";\n            origin case_input;\n        }\n        assert copy_order(entity_ref(\"urn:tutorial:order1\"), entity_ref(\"urn:tutorial:ivanova\"), 7) {\n            id \"assert-order\";\n            origin case_input;\n        }\n    }\n    evaluate truth(copy_fee_computable(entity_ref(\"urn:tutorial:order1\")));\n    expect truth_status == NEITHER;\n    expect not applied(CopyFeeComputable);\n}\n"
      }
    ],
    "exports": [],
    "factGroups": {},
    "origin": "derived",
    "querySignatures": [
      {
        "id": "urn:law:tutorial:archive#LateFeeCap",
        "name": "LateFeeCap",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#LateFeeCap/arg/legal_time",
            "name": "legal_time",
            "type": {
              "name": "urn:law:std#Date"
            }
          }
        ],
        "returnType": {
          "args": [
            {
              "name": "urn:law:std#Money"
            },
            {
              "name": "urn:law:a3#MissingParameterValue"
            }
          ],
          "name": "urn:law:std#Result"
        },
        "symbolKind": "function"
      },
      {
        "id": "urn:law:tutorial:archive#LateFeeCap/value/urn%3Alaw%3Atutorial%3Aarchive%3Aparam%3Alate-fee-cap%23r-2025",
        "name": "value_urn%3Alaw%3Atutorial%3Aarchive%3Aparam%3Alate-fee-cap%23r-2025",
        "parameters": [],
        "returnType": {
          "args": [
            {
              "name": "urn:law:std#Money"
            },
            {
              "name": "urn:law:a3#MissingParameterValue"
            }
          ],
          "name": "urn:law:std#Result"
        },
        "symbolKind": "function"
      },
      {
        "id": "urn:law:tutorial:archive#LateFeeCap/value/urn%3Alaw%3Atutorial%3Aarchive%3Aparam%3Alate-fee-cap%23r-2026",
        "name": "value_urn%3Alaw%3Atutorial%3Aarchive%3Aparam%3Alate-fee-cap%23r-2026",
        "parameters": [],
        "returnType": {
          "args": [
            {
              "name": "urn:law:std#Money"
            },
            {
              "name": "urn:law:a3#MissingParameterValue"
            }
          ],
          "name": "urn:law:std#Result"
        },
        "symbolKind": "function"
      },
      {
        "id": "urn:law:tutorial:archive#ReaderDiscount",
        "name": "ReaderDiscount",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#ReaderDiscount/arg/category",
            "name": "category",
            "type": {
              "name": "urn:law:tutorial:archive#ReaderCategory"
            }
          }
        ],
        "returnType": {
          "name": "urn:law:std#Decimal"
        },
        "symbolKind": "function"
      },
      {
        "id": "urn:law:tutorial:archive#billing_year",
        "name": "billing_year",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#billing_year/arg/p",
            "name": "p",
            "type": {
              "name": "urn:law:tutorial:archive#Person"
            }
          },
          {
            "id": "urn:law:tutorial:archive#billing_year/arg/year",
            "name": "year",
            "type": {
              "name": "urn:law:std#Integer"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#copy_fee",
        "name": "copy_fee",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#copy_fee/arg/o",
            "name": "o",
            "type": {
              "name": "urn:law:tutorial:archive#CopyOrder"
            }
          },
          {
            "id": "urn:law:tutorial:archive#copy_fee/arg/amount",
            "name": "amount",
            "type": {
              "name": "urn:law:std#Money"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#copy_fee_computable",
        "name": "copy_fee_computable",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#copy_fee_computable/arg/o",
            "name": "o",
            "type": {
              "name": "urn:law:tutorial:archive#CopyOrder"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#copy_order",
        "name": "copy_order",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#copy_order/arg/o",
            "name": "o",
            "type": {
              "name": "urn:law:tutorial:archive#CopyOrder"
            }
          },
          {
            "id": "urn:law:tutorial:archive#copy_order/arg/p",
            "name": "p",
            "type": {
              "name": "urn:law:tutorial:archive#Person"
            }
          },
          {
            "id": "urn:law:tutorial:archive#copy_order/arg/pages",
            "name": "pages",
            "type": {
              "name": "urn:law:std#Integer"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#days_overdue",
        "name": "days_overdue",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#days_overdue/arg/p",
            "name": "p",
            "type": {
              "name": "urn:law:tutorial:archive#Person"
            }
          },
          {
            "id": "urn:law:tutorial:archive#days_overdue/arg/days",
            "name": "days",
            "type": {
              "name": "urn:law:std#Integer"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#late_fee",
        "name": "late_fee",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#late_fee/arg/p",
            "name": "p",
            "type": {
              "name": "urn:law:tutorial:archive#Person"
            }
          },
          {
            "id": "urn:law:tutorial:archive#late_fee/arg/amount",
            "name": "amount",
            "type": {
              "name": "urn:law:std#Money"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#late_fee_base",
        "name": "late_fee_base",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#late_fee_base/arg/p",
            "name": "p",
            "type": {
              "name": "urn:law:tutorial:archive#Person"
            }
          },
          {
            "id": "urn:law:tutorial:archive#late_fee_base/arg/base",
            "name": "base",
            "type": {
              "name": "urn:law:std#Money"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#reader_category",
        "name": "reader_category",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#reader_category/arg/p",
            "name": "p",
            "type": {
              "name": "urn:law:tutorial:archive#Person"
            }
          },
          {
            "id": "urn:law:tutorial:archive#reader_category/arg/category",
            "name": "category",
            "type": {
              "name": "urn:law:tutorial:archive#ReaderCategory"
            }
          }
        ],
        "symbolKind": "relation"
      },
      {
        "id": "urn:law:tutorial:archive#reader_fee",
        "name": "reader_fee",
        "parameters": [
          {
            "id": "urn:law:tutorial:archive#reader_fee/arg/o",
            "name": "o",
            "type": {
              "name": "urn:law:tutorial:archive#CopyOrder"
            }
          },
          {
            "id": "urn:law:tutorial:archive#reader_fee/arg/amount",
            "name": "amount",
            "type": {
              "name": "urn:law:std#Money"
            }
          }
        ],
        "symbolKind": "relation"
      }
    ]
  },
  "semantics": {
    "features": [
      "core-executable",
      "law.params/0.1"
    ],
    "language": "0.2",
    "missingFacts": "See the declared profile and executable examples; no package-wide inference.",
    "origin": "derived",
    "profile": {
      "enabled": [
        "law.params/0.1"
      ],
      "semanticLayer": "L1"
    }
  },
  "sources": {
    "evidence": "package.lawir.json",
    "origin": "derived",
    "verifiedAgainstSource": {
      "origin": "declared",
      "value": null
    },
    "worksAndEditions": [
      {
        "contentHash": "sha256:ad849c78c1f991437ec1668be3c7b5b56a98a62f0d293f515a545d4f3e48141b",
        "id": "urn:law:tutorial:archive#ARCHIVE_RULES",
        "jurisdiction": {
          "id": "urn:law:tutorial:archive#VELIKY_USTIN",
          "kind": "const_ref"
        },
        "kind": "source_work",
        "number": "2026-14",
        "package": "urn:law:tutorial:archive",
        "sourceKind": "urn:law:tutorial:archive#municipal_act"
      },
      {
        "contentHash": "sha256:3775aa89af3c73a53c79fdcfa7ec7d91ce7e3b2639610d3260efee21b51f4445",
        "id": "urn:law:tutorial:archive#ARCHIVE_RULES_2026_RU",
        "kind": "source_edition",
        "language": "ru",
        "lifecycle": [
          {
            "extent": "2026-01-15",
            "status": "adopted"
          },
          {
            "extent": {
              "axis": "legal_time",
              "endInclusive": false,
              "start": "2026-02-01",
              "startInclusive": true
            },
            "status": "in_force"
          }
        ],
        "officiality": "official",
        "package": "urn:law:tutorial:archive",
        "work": "urn:law:tutorial:archive#ARCHIVE_RULES"
      }
    ]
  },
  "subject": {
    "buildHash": "sha256:92556f3be2774dd7465a90dd5f55a66865bf9bc6caae7f07aa3877090fef91cc",
    "contentHash": "sha256:4574cf7016b53b5610dfd37e2424b9290fcc754a90c06333bebd36e79694fac1",
    "name": "tutorial.archive",
    "namespace": "urn:law:tutorial:archive",
    "replayHash": "sha256:9cf1911c7ef50764a09d93f5912a3df29c5dfeae202f1fe0fb2d11e2c7bf2d47",
    "sourceHash": "sha256:6af6c607b7625c12cb5cf6c1963ead38d60823a97a859089a28a3019f54c66dc",
    "version": "0.15.0"
  }
}