@zh-xx/antu 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +11 -0
- package/THIRD-PARTY-NOTICES.md +739 -0
- package/assets/viewer.html +1503 -0
- package/bin/antu-mcp.mjs +1549 -0
- package/bin/antu.mjs +1494 -0
- package/examples/agent/fact/1-minimal.en.json +57 -0
- package/examples/agent/fact/1-minimal.zh-CN.json +29 -0
- package/examples/agent/fact/2-single-actor.en.json +66 -0
- package/examples/agent/fact/2-single-actor.zh-CN.json +28 -0
- package/examples/agent/fact/3-groups.en.json +34 -0
- package/examples/agent/fact/3-groups.zh-CN.json +34 -0
- package/examples/agent/fact/4-views.en.json +44 -0
- package/examples/agent/fact/4-views.zh-CN.json +44 -0
- package/examples/agent/fact/5-duration.en.json +28 -0
- package/examples/agent/fact/5-duration.zh-CN.json +28 -0
- package/examples/agent/fact/6-sources.en.json +30 -0
- package/examples/agent/fact/6-sources.zh-CN.json +30 -0
- package/examples/agent/fact/7-undated.en.json +34 -0
- package/examples/agent/fact/7-undated.zh-CN.json +34 -0
- package/examples/agent/justification/1-minimal.en.json +83 -0
- package/examples/agent/justification/1-minimal.zh-CN.json +83 -0
- package/examples/agent/justification/2-against-and-rejected.en.json +82 -0
- package/examples/agent/justification/2-against-and-rejected.zh-CN.json +82 -0
- package/examples/agent/justification/3-issues.en.json +107 -0
- package/examples/agent/justification/3-issues.zh-CN.json +107 -0
- package/examples/agent/justification/4-shared-fact.en.json +111 -0
- package/examples/agent/justification/4-shared-fact.zh-CN.json +111 -0
- package/examples/agent/justification/5-sources.en.json +97 -0
- package/examples/agent/justification/5-sources.zh-CN.json +97 -0
- package/examples/agent/justification/6-all-or-any.en.json +98 -0
- package/examples/agent/justification/6-all-or-any.zh-CN.json +98 -0
- package/examples/agent/procedure/1-minimal.en.json +15 -0
- package/examples/agent/procedure/1-minimal.zh-CN.json +15 -0
- package/examples/agent/procedure/2-decision.en.json +17 -0
- package/examples/agent/procedure/2-decision.zh-CN.json +17 -0
- package/examples/agent/procedure/3-branches.en.json +22 -0
- package/examples/agent/procedure/3-branches.zh-CN.json +22 -0
- package/examples/agent/procedure/4-stages.en.json +34 -0
- package/examples/agent/procedure/4-stages.zh-CN.json +34 -0
- package/examples/agent/procedure/5-inferred-spine.en.json +21 -0
- package/examples/agent/procedure/5-inferred-spine.zh-CN.json +21 -0
- package/examples/agent/procedure/6-merged-edges.en.json +19 -0
- package/examples/agent/procedure/6-merged-edges.zh-CN.json +19 -0
- package/examples/agent/procedure/7-rules.en.json +30 -0
- package/examples/agent/procedure/7-rules.zh-CN.json +30 -0
- package/examples/agent/relationship/1-minimal.en.json +28 -0
- package/examples/agent/relationship/1-minimal.zh-CN.json +28 -0
- package/examples/agent/relationship/2-equity.en.json +59 -0
- package/examples/agent/relationship/2-equity.zh-CN.json +59 -0
- package/examples/agent/relationship/3-guarantee.en.json +51 -0
- package/examples/agent/relationship/3-guarantee.zh-CN.json +51 -0
- package/examples/agent/relationship/4-groups.en.json +68 -0
- package/examples/agent/relationship/4-groups.zh-CN.json +68 -0
- package/examples/agent/relationship/5-kinship.en.json +69 -0
- package/examples/agent/relationship/5-kinship.zh-CN.json +69 -0
- package/examples/fact/fang-yuan-loan-and-conflict.en.json +330 -0
- package/examples/fact/fang-yuan-loan-and-conflict.zh-CN.json +237 -0
- package/examples/fact/gym-membership-face-scan.en.json +181 -0
- package/examples/fact/gym-membership-face-scan.zh-CN.json +181 -0
- package/examples/fact/lin-fang-v-zhao-lei-private-lending.en.json +122 -0
- package/examples/fact/lin-fang-v-zhao-lei-private-lending.zh-CN.json +122 -0
- package/examples/fact/marketplace-platform-liability.en.json +192 -0
- package/examples/fact/marketplace-platform-liability.zh-CN.json +192 -0
- package/examples/fact/neighbour-corridor-charging.en.json +201 -0
- package/examples/fact/neighbour-corridor-charging.zh-CN.json +201 -0
- package/examples/fact/sample-construction-payment.en.json +220 -0
- package/examples/fact/sample-construction-payment.zh-CN.json +139 -0
- package/examples/fact/sample-four-parties-four-slots.en.json +202 -0
- package/examples/fact/sample-four-parties-four-slots.zh-CN.json +121 -0
- package/examples/fact/sample-no-groups.en.json +100 -0
- package/examples/fact/sample-no-groups.zh-CN.json +100 -0
- package/examples/fact/sample-three-slots.en.json +102 -0
- package/examples/fact/sample-three-slots.zh-CN.json +102 -0
- package/examples/fact/sample-two-actors-one-side.en.json +143 -0
- package/examples/fact/sample-two-actors-one-side.zh-CN.json +143 -0
- package/examples/fact/sample-two-parties-each-side.en.json +183 -0
- package/examples/fact/sample-two-parties-each-side.zh-CN.json +183 -0
- package/examples/justification/fang-yuan-defense-excess.en.json +636 -0
- package/examples/justification/fang-yuan-defense-excess.zh-CN.json +636 -0
- package/examples/justification/neighbour-corridor-liability.en.json +571 -0
- package/examples/justification/neighbour-corridor-liability.zh-CN.json +571 -0
- package/examples/procedure/01-software-development-contract.en.json +290 -0
- package/examples/procedure/01-software-development-contract.zh-CN.json +290 -0
- package/examples/procedure/02-purchase-contract.en.json +46 -0
- package/examples/procedure/02-purchase-contract.zh-CN.json +46 -0
- package/examples/procedure/03-labour-outsourcing-contract.en.json +251 -0
- package/examples/procedure/03-labour-outsourcing-contract.zh-CN.json +251 -0
- package/examples/procedure/04-non-disclosure-agreement.en.json +79 -0
- package/examples/procedure/04-non-disclosure-agreement.zh-CN.json +79 -0
- package/examples/procedure/05-premises-lease.en.json +344 -0
- package/examples/procedure/05-premises-lease.zh-CN.json +344 -0
- package/examples/procedure/06-epc-general-contract.en.json +375 -0
- package/examples/procedure/06-epc-general-contract.zh-CN.json +375 -0
- package/examples/procedure/07-share-acquisition-agreement.en.json +368 -0
- package/examples/procedure/07-share-acquisition-agreement.zh-CN.json +368 -0
- package/examples/raw//351/207/207/350/264/255/345/220/210/345/220/214-PO-2026-088.md +31 -0
- package/examples/raw//357/274/2102031/357/274/211/347/244/272/345/210/221/345/210/2353/345/217/267-/350/231/232/346/236/204/347/275/221/347/273/234/345/225/206/345/237/216/346/241/210-/344/270/200/345/256/241.md +36 -0
- package/examples/raw//357/274/2102031/357/274/211/347/244/272/346/260/221/345/210/2351/345/217/267-/346/260/221/351/227/264/345/200/237/350/264/267/346/241/210-/344/270/200/345/256/241.md +31 -0
- package/examples/raw//357/274/2102031/357/274/211/347/244/272/346/260/221/345/210/2352/345/217/267-/345/201/245/350/272/253/346/210/277/345/210/267/350/204/270/345/205/245/345/234/272/346/241/210-/344/270/200/345/256/241.md +40 -0
- package/examples/raw//357/274/2102031/357/274/211/347/244/272/346/260/221/347/273/2101/345/217/267-/346/245/274/351/201/223/345/205/205/347/224/265/345/212/235/351/230/273/346/241/210-/344/272/214/345/256/241.md +38 -0
- package/examples/raw//357/274/2102032/357/274/211/347/244/272/345/210/221/347/273/2101/345/217/267-/346/226/271/350/277/234/346/241/210-/344/272/214/345/256/241.md +49 -0
- package/examples/relationship/fang-yuan-parties.en.json +226 -0
- package/examples/relationship/fang-yuan-parties.zh-CN.json +226 -0
- package/examples/relationship/lin-fang-v-zhao-lei-parties.en.json +140 -0
- package/examples/relationship/lin-fang-v-zhao-lei-parties.zh-CN.json +140 -0
- package/examples/relationship/marketplace-parties.en.json +259 -0
- package/examples/relationship/marketplace-parties.zh-CN.json +259 -0
- package/examples/relationship/sample-group-guarantee.en.json +138 -0
- package/examples/relationship/sample-group-guarantee.zh-CN.json +138 -0
- package/examples/relationship/sample-loan-guarantee.en.json +122 -0
- package/examples/relationship/sample-loan-guarantee.zh-CN.json +122 -0
- package/package.json +35 -0
- package/server.json +20 -0
- package/spec/agent/fact/guide.md +114 -0
- package/spec/agent/justification/guide.md +100 -0
- package/spec/agent/procedure/guide.md +109 -0
- package/spec/agent/relationship/guide.md +92 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Mechanism notes for an agent
|
|
2
|
+
|
|
3
|
+
> This is an **operating note**, not the specification. The field list is served by
|
|
4
|
+
> `antu_schema`, examples by `antu_examples`, and the design rationale lives in
|
|
5
|
+
> `spec/justification/schema-draft.md` (you do not need it to write JSON).
|
|
6
|
+
>
|
|
7
|
+
> **This file is English on purpose.** It goes into a model's context, the same as
|
|
8
|
+
> the field table and the validation errors. See the header of `src/core/i18n.js`.
|
|
9
|
+
|
|
10
|
+
## In one sentence
|
|
11
|
+
|
|
12
|
+
A justification JSON describes **one side's reasoning: how norms and facts lead, step by step, to a
|
|
13
|
+
conclusion**. The engine draws a tree: the conclusion first, what supports it below, and at the
|
|
14
|
+
bottom the facts and the norms.
|
|
15
|
+
|
|
16
|
+
## Three things, three places
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
nodes the statements conclusion, norm, element, fact, inference, judgement
|
|
20
|
+
links who supports whom from (the support) -> to (the supported), with a stance
|
|
21
|
+
groups the issues "Issue 1: was it defensive?" (optional, one box each)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Draw **one side's** reasoning (say, the court's reasons). Do not put the other side's tree in the same
|
|
25
|
+
diagram.
|
|
26
|
+
|
|
27
|
+
## The six kinds of node
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
conclusion what is decided; the end of the diagram, or the summing-up of one issue
|
|
31
|
+
norm a statute, interpretation or precedent (a leaf); sourceIds -> a statute / case source
|
|
32
|
+
element one constituent requirement a norm breaks into ("time: the attack is under way")
|
|
33
|
+
fact what the court found happened (a leaf); date, sourceIds
|
|
34
|
+
inference a statement drawn from facts ("the lights were visible, so he should have known")
|
|
35
|
+
judgement a value call on a body of facts ("the attack was not urgent")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Keep **fact, inference and judgement apart**; they are questioned differently (evidence, logic, value
|
|
39
|
+
call). A fact says what happened, with a time. An inference says what may therefore be taken to be so.
|
|
40
|
+
When unsure: does the sentence say what happened, or what follows from it?
|
|
41
|
+
|
|
42
|
+
## Links and their stance
|
|
43
|
+
|
|
44
|
+
A link runs from the supporting node to the supported one: fact -> element, element -> conclusion.
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
for (default) from supports to
|
|
48
|
+
against from opposes to (a judgement saying an element is not met)
|
|
49
|
+
basis from is the norm to rests on (only from a norm)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## holds: upheld, or rejected
|
|
53
|
+
|
|
54
|
+
`holds: "yes"` on an element, inference, judgement or conclusion says the reasoning upholds it;
|
|
55
|
+
`holds: "no"` says the reasoning rejects it. **Draw the rejected side too**: a conclusion "it was
|
|
56
|
+
special defence" with `holds: "no"`, and the reasons it fails pointing `against` it. A fact and a norm
|
|
57
|
+
have no `holds`. Leave it out when the reasoning does not say.
|
|
58
|
+
|
|
59
|
+
## and / or: `combine`
|
|
60
|
+
|
|
61
|
+
When a node rests on several things, say whether all are needed or one is enough: `combine: "all"` (every
|
|
62
|
+
`for` link into it is needed: the five conditions of lawful defence) or `combine: "any"` (one is enough).
|
|
63
|
+
Leave it out when the reasoning does not say. Only `for` links count, and it belongs only on a conclusion,
|
|
64
|
+
element, inference or judgement. Keep it consistent with `holds`: an `"all"` node that holds cannot rest on a
|
|
65
|
+
rejected node.
|
|
66
|
+
|
|
67
|
+
## Issues
|
|
68
|
+
|
|
69
|
+
`groups` is one box per issue. A node is in at most one group. Put a norm in the issue it settles (a
|
|
70
|
+
norm used in two issues is two `norm` nodes with the same `sourceIds`). Nodes in no group (the end
|
|
71
|
+
conclusion) stand above the issues. **A fact that supports things in several issues is written once**: link it to each
|
|
72
|
+
element it supports, and the engine draws it in each of those issues (a copy says "same as"). Do not write
|
|
73
|
+
it twice.
|
|
74
|
+
|
|
75
|
+
## Big diagrams
|
|
76
|
+
|
|
77
|
+
A reader can fold each issue up to its conclusion (its box title is a button; the dock has "Fold issues"), so a
|
|
78
|
+
diagram of several issues can be read at a glance. Nothing to write for it: it is not in the JSON. Still split a
|
|
79
|
+
diagram that grows past about 60 nodes.
|
|
80
|
+
|
|
81
|
+
## After writing
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
antu_validate each problem with its path and id: links[3] (f-9 -> e-9): `to` refers to ...
|
|
85
|
+
on a pass it can still add notes (a fact with no source, nothing supports a conclusion)
|
|
86
|
+
antu_layout counts, layers, size per orientation; no rendering
|
|
87
|
+
antu_preview a screenshot: is each issue clear, do the lines cross badly, is anything cut off
|
|
88
|
+
antu_render the self-contained HTML
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Passing validation is only the pass mark.** Always look with `antu_preview` before delivering. A big diagram
|
|
92
|
+
(past about 40 nodes) is small on one screen: split it, one diagram per issue.
|
|
93
|
+
|
|
94
|
+
## Also easy to get wrong
|
|
95
|
+
|
|
96
|
+
- **Referenced ids must exist**: `from` / `to`, `groupId`, `sourceIds`.
|
|
97
|
+
- **A fact or a norm is a leaf**: nothing supports it (an evidence layer is not part of v0).
|
|
98
|
+
- **`holds` is not for facts and norms; `date` is only for facts** (`2032-04-14` or `2032-04-14T22:22`).
|
|
99
|
+
- **At least one conclusion has no outgoing link**: the conclusion the whole reasoning leads to.
|
|
100
|
+
- **Do not invent a date**: leave `date` out when the source does not give one.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Mechanism notes for an agent
|
|
2
|
+
|
|
3
|
+
> This is an **operating note**, not the specification. The field list is served by
|
|
4
|
+
> `antu_schema`, examples by `antu_examples`, and the design rationale lives in the
|
|
5
|
+
> human-facing documents under `spec/` (you do not need them to write JSON).
|
|
6
|
+
>
|
|
7
|
+
> **This file is English on purpose.** It goes into a model's context, the same as
|
|
8
|
+
> the field table and the validation errors. See the header of `src/core/i18n.js`.
|
|
9
|
+
|
|
10
|
+
## In one sentence
|
|
11
|
+
|
|
12
|
+
A procedure JSON describes: **what happens in what order, where the path splits, and what
|
|
13
|
+
may happen at any time along the way**. The engine draws a flowchart: steps are nodes,
|
|
14
|
+
the order is edges, contingent clauses are a table under the flow.
|
|
15
|
+
|
|
16
|
+
## Three things, three places
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
nodes steps, decisions, outcomes "Seller delivers", "Goods pass inspection?"
|
|
20
|
+
edges the order between them n-2 -> n-3, with a condition on a branch
|
|
21
|
+
rules what may happen at any time "if the seller is late: 0.1% per day"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**The most common mistake is writing a rule as nodes and edges.** A breach, a delay
|
|
25
|
+
penalty, a right to terminate is not a step after another step: it can fire at any moment
|
|
26
|
+
of a stage. As a branch off one step it claims a moment it does not have, and has to be
|
|
27
|
+
repeated per stage. Write it once in `rules`:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{ "id": "r-1", "when": "Seller delivers late",
|
|
31
|
+
"then": "Seller pays 0.1% of the price per day, capped at 5%",
|
|
32
|
+
"outcome": "negative", "stageIds": ["st-1"], "sourceIds": ["s-1"] }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `when`: one trigger, or an array of them (any one fires the rule);
|
|
36
|
+
- `stageIds`: the stages it applies in; omit for "throughout";
|
|
37
|
+
- `endId`: only when the rule ends the procedure (termination). It must be a node of kind
|
|
38
|
+
`end`, and that node may have no incoming edge.
|
|
39
|
+
|
|
40
|
+
Rule of thumb: **if the same branch would leave several steps, or it leads nowhere, it is
|
|
41
|
+
a rule.**
|
|
42
|
+
|
|
43
|
+
## A node's look: two fields, never mixed
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
kind shape: start pill, where the flow begins
|
|
47
|
+
step box, something someone does
|
|
48
|
+
decision diamond, a question the path splits on
|
|
49
|
+
end double-bordered pill, where the flow stops
|
|
50
|
+
document box with a wavy bottom, a paper produced
|
|
51
|
+
note folded sheet, an explanation outside the flow
|
|
52
|
+
outcome paint: positive (heavier line) / negative (dashed line) / neutral (plain, default); the theme adds colour
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`outcome` is what the result means ("contract performed" positive, "terminated" negative).
|
|
56
|
+
|
|
57
|
+
## Edges
|
|
58
|
+
|
|
59
|
+
- **The main line** is the path when everything goes as agreed. Mark its edges
|
|
60
|
+
`"main": true`, one chain from the start to an end. Unmarked, the engine guesses (the
|
|
61
|
+
first unconditional edge out of each node): mark it.
|
|
62
|
+
- **A decision** needs two or more outgoing edges, **each with a `condition`**. One way
|
|
63
|
+
out means it is a `step`. On the main line, mark which answer continues it.
|
|
64
|
+
- **A loop is an ordinary edge back** ("rectify" -> "inspect again"). Do not copy nodes
|
|
65
|
+
to avoid it; it is drawn dashed.
|
|
66
|
+
- Edges may rejoin one node; two edges between the same pair need different conditions.
|
|
67
|
+
|
|
68
|
+
**Every node must lead somewhere**: all but `end` and `note` need an outgoing edge, and all
|
|
69
|
+
must be reachable from the start. A step that leads nowhere is almost always a
|
|
70
|
+
consequence that belongs in `rules` (the error says so). Only a `start` may have no
|
|
71
|
+
incoming edge (a `note`, and a rule's `endId`, aside): any other node without one is an
|
|
72
|
+
error, since nothing leads to it. Several `start` nodes are allowed, with a hint.
|
|
73
|
+
|
|
74
|
+
## Stages
|
|
75
|
+
|
|
76
|
+
`stages` is an ordered list; a node joins one with `stageId`. Each stage is drawn as a
|
|
77
|
+
framed box holding its nodes; the stages stand side by side as columns, the flow running down
|
|
78
|
+
each (a stage much taller than the rest is folded into two columns). Keep a stage's nodes
|
|
79
|
+
consecutive along the flow: an edge into an earlier stage draws backwards (fine for a loop, a
|
|
80
|
+
hint otherwise). Put every node in a stage, or none: with stages on only some nodes, the whole
|
|
81
|
+
diagram falls back to one long column.
|
|
82
|
+
|
|
83
|
+
Orientation and link style (curved / straight) are the reader's choice in the interface;
|
|
84
|
+
they are not in the data.
|
|
85
|
+
|
|
86
|
+
## After writing
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
antu_validate each problem with its path and node id: nodes (n-4): kind is "decision" but ...
|
|
90
|
+
antu_layout counts, layers, loops, rules, size per orientation; no rendering
|
|
91
|
+
antu_preview a screenshot: is the main line obvious, are the branches readable
|
|
92
|
+
antu_render the self-contained HTML
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Passing validation is only the pass mark.** Always look with `antu_preview` before
|
|
96
|
+
delivering.
|
|
97
|
+
|
|
98
|
+
## Also easy to get wrong
|
|
99
|
+
|
|
100
|
+
- **Referenced ids must exist**: `stageId`, `actorIds`, `sourceIds`, an edge's `from` /
|
|
101
|
+
`to`, a rule's `stageIds` / `endId`.
|
|
102
|
+
- **Keep labels short.** A node shows about three lines of `label`; put the rest in
|
|
103
|
+
`detail` (its first line shows under the label, all of it on click).
|
|
104
|
+
|
|
105
|
+
## Another way to look at it
|
|
106
|
+
|
|
107
|
+
The reader can switch to the **route map**: the main line as one line, with rework loops and early endings
|
|
108
|
+
hanging below it. It needs a clear main line, so **mark `main` along the whole line from start to end**
|
|
109
|
+
(or on none, and the engine infers it). `kind: "route"` on antu_layout / antu_preview / antu_render shows it.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Mechanism notes for an agent
|
|
2
|
+
|
|
3
|
+
> This is an **operating note**, not the specification. The field list is served by
|
|
4
|
+
> `antu_schema`, examples by `antu_examples`, and the design rationale lives in
|
|
5
|
+
> `spec/relationship/schema-draft.md` (you do not need it to write JSON).
|
|
6
|
+
>
|
|
7
|
+
> **This file is English on purpose.** It goes into a model's context, the same as
|
|
8
|
+
> the field table and the validation errors. See the header of `src/core/i18n.js`.
|
|
9
|
+
|
|
10
|
+
## In one sentence
|
|
11
|
+
|
|
12
|
+
A relationship JSON describes **who stands in what relation to whom, at one point in time**.
|
|
13
|
+
The engine draws a graph: parties are boxes, relations are lines between them, and camps are
|
|
14
|
+
boxes around parties.
|
|
15
|
+
|
|
16
|
+
The reader can also switch to a **focus view**: one party in the middle (by default the one with most
|
|
17
|
+
relations; the reader clicks another), the parties tied to it around it, the others further out. It
|
|
18
|
+
suits a case with many parties, where the graph is too busy. The **guarantee chain** shows one block per
|
|
19
|
+
claim (a `debt`) with its guarantors beside it and what stands behind each; for a loan or guarantee
|
|
20
|
+
dispute. **Write `secures` on every guarantee**: without it the chain ties a guarantee to a claim only when
|
|
21
|
+
its creditor has exactly one, and puts it apart otherwise. The **matrix** puts the parties down and across and names the relations in each cell: for "is there any
|
|
22
|
+
relation between A and B". The **equity tree** draws the `equity` relations in levels with the `share` on each
|
|
23
|
+
line, so **write `share` on every equity relation**. The **authority chart** draws `control`, `employment` and `agency` as an organisation chart; the **related-party
|
|
24
|
+
list** is a table of one party's relations (to paste into a brief); the **path** draws the shortest chains between
|
|
25
|
+
two parties; the **summary** draws each camp (`groupId`) as one block. The same JSON draws in all nine;
|
|
26
|
+
`kind: "focus"`, `"chain"`, `"matrix"`, `"equity"`, `"authority"`, `"related"`, `"path"` or `"summary"` on antu_layout / antu_preview / antu_render shows it.
|
|
27
|
+
|
|
28
|
+
## Three things, three places
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
entities the parties "Zhang San", "Xinghe Trading Co."
|
|
32
|
+
relations what is between them from -> to, with a kind: debt, equity, guarantee ...
|
|
33
|
+
groups the camps "creditor side", "debtor side" (optional)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
It is a cross-section: write the relations as they stand on one date (`asOf`, optional). Do not
|
|
37
|
+
write a history. If the relations changed, write two diagrams.
|
|
38
|
+
|
|
39
|
+
## The kind of a relation, and its direction
|
|
40
|
+
|
|
41
|
+
The direction runs from `from` to `to`. Write it the way the kind says:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
equity holder -> the entity held share: 60
|
|
45
|
+
control controller -> controlled (control without a shareholding)
|
|
46
|
+
debt creditor -> debtor amount: "CNY 500,000"
|
|
47
|
+
guarantee guarantor -> creditor secures: "r-1"
|
|
48
|
+
contract either way, no arrowhead amount: "CNY 80,000"
|
|
49
|
+
kinship either way, no arrowhead spouses, parents and children
|
|
50
|
+
employment employer -> employee
|
|
51
|
+
agency principal -> agent
|
|
52
|
+
other anything else
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`directed: true/false` overrides the kind's default arrowhead. A loan usually needs **two**
|
|
56
|
+
relations on the same pair: the `contract` (what was agreed) and the `debt` (who owes whom).
|
|
57
|
+
|
|
58
|
+
## A guarantee says which claim it secures
|
|
59
|
+
|
|
60
|
+
A guarantee secures **one particular claim**, not the debtor in general. Put the id of the `debt`
|
|
61
|
+
(or `contract`) relation in `secures`. Without it the validator gives a hint, and a reader cannot
|
|
62
|
+
tell which of two loans the guarantee is for.
|
|
63
|
+
|
|
64
|
+
## Entities
|
|
65
|
+
|
|
66
|
+
`kind` is `person` / `company` / `organization` / `government` / `other` and fixes the shape only.
|
|
67
|
+
`label` is the name; `role` is the role **in this case** on one short line ("Lender", "Guarantor").
|
|
68
|
+
Keep labels short; put registered capital and the like in `detail` (its full text shows on click).
|
|
69
|
+
|
|
70
|
+
## Groups
|
|
71
|
+
|
|
72
|
+
`groups` boxes together the parties a reader should see as one camp. An entity is in at most one
|
|
73
|
+
group (`groupId`); groups do not nest. Leave a party out of every group and it stands outside the boxes.
|
|
74
|
+
|
|
75
|
+
## After writing
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
antu_validate each problem with its path and id: relations (r-2): `secures` points at ...
|
|
79
|
+
on a pass it can still add notes (an entity nothing relates to, shares over 100%)
|
|
80
|
+
antu_layout counts, layers, size per orientation; no rendering
|
|
81
|
+
antu_preview a screenshot: are the camps clear, do the lines cross badly
|
|
82
|
+
antu_render the self-contained HTML
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Passing validation is only the pass mark.** Always look with `antu_preview` before delivering.
|
|
86
|
+
|
|
87
|
+
## Also easy to get wrong
|
|
88
|
+
|
|
89
|
+
- **Referenced ids must exist**: `from` / `to`, `groupId`, `sourceIds`, `secures`.
|
|
90
|
+
- **`share` is only for `equity`, `amount` only for `debt` and `contract`, `secures` only for `guarantee`.**
|
|
91
|
+
- **An entity nothing relates to floats beside the diagram** (a hint): relate it or leave it out.
|
|
92
|
+
- **`amount` is a string**, written the way it should be read, with the currency.
|