# Learn a person’s duties ## Intent I want to learn a person’s duties. ## Wrong form and why it stays silent Absence of a chosen reading must not be passed off as absence of duties. A group with one alternative is also not a choice. ```text title="Incorrect form" alternatives Yes; ``` ## Correct form ```law language "law.core" version "0.2"; package recipe.m03 version "1.0.0"; namespace "urn:recipe:m-queries:03"; source Act { kind policy; } edition E of Act { language ru; officiality unofficial; materialization_status ABSTRACT_ONLY; in_force [@2026-01-01, infinity); } fragment F in E { kind article; locator "1"; text ru unofficial "Учебная норма имеет два прочтения."; } entity Person; relation registered(p: Person); relation filed(p: Person); relation receipt(p: Person); rule Create strict { for p: Person; when registered(p); then duty Filing { bearer p; achieve filed(p) during [@2026-09-01, @2026-09-30]; }; } rule NoDuty strict { for p: Person; when registered(p); then receipt(p); } interpretation Yes of F { status disputed; include Create; } interpretation No of F { status disputed; include NoDuty; } interpretation_group Meaning { alternatives Yes, No; selection exactly_one; } ``` ## Frozen execution scene | Input / variant | Question | Expectation | |---|---|---| | 1. no choice | `positions()` | `evaluation_status == INTERPRETATION_REQUIRED; not positions_present();` | | 2. there is a duty | `positions()` | `evaluation_status == COMPUTED; position(Filing, ACTIVE);` | | 3. no duty | `positions()` | `evaluation_status == COMPUTED; not positions_present();` | | 4. no ground | `positions()` | `evaluation_status == COMPUTED; not positions_present();` | ```law test "missing reading choice requires interpretation" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; } assert registered(entity_ref("urn:recipe:m-queries:p")); } evaluate positions(); expect evaluation_status == INTERPRETATION_REQUIRED; expect not positions_present(); } ``` ```law test "duty holder reported" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; interpretation Yes; } assert registered(entity_ref("urn:recipe:m-queries:p")); } evaluate positions(); expect evaluation_status == COMPUTED; expect position(Filing, ACTIVE); } ``` ```law test "no duty reports nothing" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; interpretation No; } assert registered(entity_ref("urn:recipe:m-queries:p")); } evaluate positions(); expect evaluation_status == COMPUTED; expect not positions_present(); } ``` ```law test "missing ground reports nothing" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; interpretation Yes; } } evaluate positions(); expect evaluation_status == COMPUTED; expect not positions_present(); } ``` `positions()` returns the positions of the whole presented case. For the single position of scene 2, `holder == "urn:recipe:m-queries:p"` is checked; this is an explicit holder check, not a hidden query filter. An independent question `truth(registered(p))` on the same input without a reading choice returns `TRUE_ONLY / COMPUTED`, although the choice issue remains. An empty list in scene 1 must not be read as proof that a duty is absent. Check of result fields and extra inputs: ```python >>> import runpy >>> checks = runpy.run_path("docs/recipes/m-queries/resources/check.py") >>> checks["positions"](https://github.com/arxohq/law/blob/master/docs/recipes/m-queries/3) True ``` ## Counterfactual The sidecar mutation reproduces `LDC-E0201`. Counterfactual table variants are executed separately; input errors are not passed off as NEITHER. ## Boundary The positions collection and the normative status of a concrete position are different levels. A duty without a performance fact remains ACTIVE inside the window; unknown performance after the window is not examined here. ## Pitfall The choice status belongs to the dependent result — see [Two readings of one norm](/recipes/z-interpretations/choose-reading/).