docs← Back to article

Markdown for LLMs

A claim against the obliged person

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# 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.