What problem does it solve? Float-based money fields, hardcoded *100 currency scaling, and ad-hoc division of amounts silently corrupt totals and cause off-by-a-cent bugs that users can never re-derive. This Skill enforces a pure-Dart value-object core where every quantity is stored canonically and converted only at the presentation edge. ## Core Features & Use Cases - Canonical money storage: Money is integer minor units plus a Currency whose minor-per-major scale derives from the real ISO-4217 exponent (0 for JPY, 2 for USD, 3 for KWD), never a hardcoded 100. - Single division primitive: Every split of money (shared items, tax, tip, discounts) routes through one largest-remainder allocate() function so parts always sum exactly to the whole, with verified test vectors. - Deterministic time and parsing: Time-reading classes take an injected package:clock Clock instead of DateTime.now(), and amounts are parsed with package:decimal after ASCII digit normalization. - Use Case: When implementing a bill-splitting feature, use this Skill to model Order, LineItem, and Participant as immutable value types linked by stable ids, then compute per-participant totals through the allocate() pipeline so the finals sum to the grand total exactly. ## Quick Start Ask the AI to apply the value-objects-money-and-units rules when defining a Money type or splitting a bill total across participants in the Dart core.