@@ -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