conditional-default-currency-questionnaire-triage

Installation
SKILL.md

Conditional Default Currency — Questionnaire Triage

What This Skill Debugs

Reports that workflow conditional default currency is configured correctly in Workflow Manager but does not show correctly while testing the questionnaire: the currency dropdown stays on the cluster default, only corrects after the user touches the form, or loses { value, type } shape mid-flow so the UI falls back to cluster currency.

This incident class often involves two separable mechanisms; triage should not assume only one.

A — Frontend initialization order (platform)

For conditional default currency, the linked dropdown may receive its first value from Liquid / Specter computation, not from persisted blanks. If the questionnaire plugin’s onValuesChange runs before post-computation values are merged, the currency plugin can see an empty linked slug, return null for contractCurrency, and leave money blanks at the cluster-level default. A later handleValueChange can re-run onValuesChange with computation-filled state — matching the symptom “default currency only set when computation is performed” or only after user interaction.

Code path (Angular): libs/questionnaire/questionnaire-form/src/lib/questionnaire-form.service.ts — #innerInit pipes questionnairePlugins.run("onValuesChange", …) before #getValuesPostComputation(...). Optional hardening discussed in incident: run an additional onValuesChange after #getValuesPostComputation so conditional currency sees linked values produced by computation (guards such as initialDefaultCurrencySet$ / linked-dropdown checks limit double-processing for static paths).

Reference: GitHub PR angular-frontend#15066 — not required to close incidents where the root cause was template times corrupting currency objects (see Resolution record below).

B — Template / Liquid computation corrupting currency objects

Separately, computations that use times (or similar) on currency-typed variables when operands are empty, null, or wrong type can produce null, a bare number (e.g. "0"), or strip type so the object no longer matches the expected money shape. The UI then treats the field as non-currency and defaults to cluster currency (e.g. EUR on EU cluster).

Installs
1
First Seen
Apr 9, 2026