Skip to content

Commit d1316dd

Browse files
committed
docs(skills): field-types — the record currency mode and its sibling-field naming convention, paid by tightening the currency block
Claude-Session: https://claude.ai/code/session_01Utp6CbfVSc1hXtxLUPHZ2f Co-authored-by: Claude <noreply@anthropic.com>
1 parent 1d9a533 commit d1316dd

1 file changed

Lines changed: 8 additions & 18 deletions

File tree

‎skills/objectstack-data/rules/field-types.md‎

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -172,27 +172,17 @@ Stored as JSON on the parent row — no separate table / FK:
172172
```typescript
173173
{
174174
type: 'currency',
175-
currencyConfig: {
176-
currencyMode: 'fixed', // 'fixed' = the column is pinned to
177-
// defaultCurrency; 'dynamic' = tenant default
178-
defaultCurrency: 'USD', // ISO 4217
179-
},
175+
currencyConfig: { currencyMode: 'fixed', defaultCurrency: 'USD' }, // ISO 4217
180176
}
181177
```
182178

183-
**Currency resolution.** The value is a bare number in both modes (ADR-0104
184-
D1), never `{ value, currency }`. The displayed symbol: under `'fixed'`,
185-
`currencyConfig.defaultCurrency`; under `'dynamic'` (default), the tenant
186-
`localization.currency` setting, not `defaultCurrency`; with neither, a plain
187-
grouped number (never a hardcoded `$`). A measure's own `currency` wins.
188-
189-
**Per-record currency** (`currencyMode: 'record'`): `currencyField` names a
190-
`text` field on the same object with `valueDomain: 'iso_4217_currency'` that
191-
holds each record's code; the amount stays a bare number. Name it
192-
`currency_code`; an amount `price`'s home-currency copy and its rate go in
193-
`price_home` and `price_rate` (`AMOUNT_home`, `AMOUNT_rate`) — a convention,
194-
not a contract. A pointer at a missing, non-`text` or domain-less field is
195-
refused at parse.
179+
**Currency resolution.** The value is a bare number in every mode (ADR-0104
180+
D1), never `{ value, currency }`. Shown: `'fixed'`, `defaultCurrency`;
181+
`'dynamic'` (default), the tenant `localization.currency`, not
182+
`defaultCurrency`, else a plain number (never `$`); `'record'`, each record's
183+
code in the `text` field `currencyField` names, which declares `valueDomain:
184+
'iso_4217_currency'` (names by convention, not contract: `currency_code`,
185+
`AMOUNT_home`, `AMOUNT_rate`). A measure's own `currency` wins.
196186

197187
### Select with Default
198188

0 commit comments

Comments
 (0)