Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions versions/1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -961,6 +961,18 @@ generates:

Adds a button on the source view; the clone saves through the target's own layer, so numbering, status init and calculated fields fire. An optional `sourceStatus` flips the source record's status once the target exists.

`items` has two mutually-exclusive shapes. As an **object** (above) it **mirrors** each source child row 1:1. As a **list** it builds **computed** synthetic lines whose cells are expressions over the **source** record — use it when a create-from must produce a computed line (e.g. one invoice line carrying a period's rolled-up total) rather than a 1:1 clone. The target's line-items child is resolved automatically (it is never named):

```yaml
items: # computed synthetic lines over the SOURCE record
- name: "Services for {period}" # string: {field} interpolation (or a source-field copy / literal)
quantity: 1 # numeric: an arithmetic expression over the source, rounded to
price: BillableAmount # the target field's scale (a bare literal is a trivial one)
when: "BillableAmount != 0" # optional guard: <SourceField> ==|!= <number>
```

A **numeric** cell is an arithmetic expression evaluated the same way as a calculated field or a posting item amount (source identifiers are the field names; a null reads as 0); a **string** cell interpolates `{field}` placeholders, copies a bare source property, or is a plain literal; a **to-one relation** cell copies the source foreign key; a `when` cell guards the whole line. The list form is not available on a scheduled generate.

### transitions — guarded status flips

A per-record button that flips an entity's `function: EntityStatus` relation on demand — void, cancel, close, reopen — guarded by allowed source statuses and an optional condition. A flip from any other status (or a failing guard) is rejected; a successful flip publishes a `-transitioned` event that `postings` and integrations can observe.
Expand Down