# A claim against the obliged person ## Intention I want to name the obliged party and the claim holder in one position. ## Incorrect form and why it stays silent ```text title="Incorrect form" then claim Pay { holder creditor; against debtor; goal achievement { condition paid(debtor, creditor); window [@2026-09-01, @2026-09-10]; } }; ``` claim is deprecated sugar, not a separate modality. On a duty the bearer is the debtor and the beneficiary is the creditor; there is one canonical position. ## Correct form ```law language "law.core" version "0.2"; package recipes.a.r04 version "0.1.0"; namespace "urn:recipe:a-positions:04"; entity Person; relation registered(p: Person); relation done(p: Person); relation contract(debtor: Person, creditor: Person); relation paid(debtor: Person, creditor: Person); rule R strict { for debtor: Person; for creditor: Person; when contract(debtor, creditor); then duty Pay { bearer debtor; beneficiary creditor; goal achievement { condition paid(debtor, creditor); window [@2026-09-01, @2026-09-10]; } }; } ``` ## Frozen execution scene | Facts and snapshot | Question | Answer | |---|---|---| | debtor and creditor; 2026-09-05 | `positions()` | `position_count(Pay, ACTIVE, 1);` / `COMPUTED` | | payment; 2026-09-05 | `positions()` | `position(Pay, SATISFIED);` / `COMPUTED` | ```law test "debtor and creditor bound by one duty" { given { context { legal_time @2026-09-05; decision_time @2026-09-05T09:00:00+05:00; knowledge_time @2026-09-30T09:00:00+05:00; timezone "Asia/Almaty"; } assert contract(entity_ref("urn:recipe:a-positions:04:p"), entity_ref("urn:recipe:a-positions:04:q")); } evaluate positions(); expect position_count(Pay, ACTIVE, 1); expect evaluation_status == COMPUTED; } ``` ```law test "payment satisfies claim-duty" { given { context { legal_time @2026-09-05; decision_time @2026-09-05T09:00:00+05:00; knowledge_time @2026-09-30T09:00:00+05:00; timezone "Asia/Almaty"; } assert contract(entity_ref("urn:recipe:a-positions:04:p"), entity_ref("urn:recipe:a-positions:04:q")); assert paid(entity_ref("urn:recipe:a-positions:04:p"), entity_ref("urn:recipe:a-positions:04:q")); } evaluate positions(); expect position(Pay, SATISFIED); expect evaluation_status == COMPUTED; } ``` ```python >>> import runpy >>> check = runpy.run_path("docs/recipes/a-positions/resources/check.py") >>> check["check_boundary"](https://github.com/arxohq/law/blob/master/docs/recipes/a-positions/4) 'А4: граница проверена' ``` ## Counterfactual Mutation: `then duty Pay { bearer debtor; beneficiary creditor;` → `then claim Pay { against debtor; holder creditor;`; rejection LDC-E1328. Additional counterfactuals are shown as separate scenes. ## Boundary The claim_right kind does not create a second duty. The parties are also checked against the document payload, not only against the presence of a position.