Commit 69a34f1
authored
feat: migrate financial_accounting.proto from Money to InstrumentAmount (#2114)
* feat: migrate financial_accounting.proto from google.type.Money to InstrumentAmount
Replace google.type.Money with meridian.quantity.v1.InstrumentAmount for
LedgerPosting.posting_amount and CaptureLedgerPostingRequest.posting_amount.
This enables universal asset support (currencies, energy, commodities, etc.)
instead of being limited to ISO 4217 currency codes.
Changes:
- Replace Money with InstrumentAmount for posting_amount fields (field numbers preserved)
- Update CEL validation rules for string-based positive amount enforcement
- Rename ListLedgerPostingsRequest.currency to instrument_code with expanded validation
- Add fromProtoInstrumentAmount/toProtoInstrumentAmount adapter functions
- Retain toProtoMoney in grpc_mappers.go for event publishing (events proto unchanged)
- Fix all dependent services: current-account, payment-order, mcp-server
- Update all test files across the repository
* chore: regenerate proto files for CI freshness check
* chore: regenerate financial_accounting proto Go bindings
* chore: regenerate financial_accounting proto with buf 1.67.0
Skip gofumpt hook - it reformats .pb.go imports, causing CI proto
freshness check to fail since CI compares raw buf output.
* fix: address review feedback on InstrumentAmount migration
- Add round-trip assertions for PostingAmount fields in serialization test
- Deduplicate cents-to-InstrumentAmount conversion in grpc_lifecycle.go
to use shared buildPostingAmount helper
* fix: set instrument precision in fromProtoInstrumentAmount adapter
The adapter was creating domain.Instrument without Precision, defaulting
to 0. This caused persistence to reject valid decimal amounts (e.g.,
"100.5" GBP) as "fractional cents". For known ISO 4217 currencies, use
CurrencyToInstrument for correct precision. For unknown instrument codes,
infer precision from the amount string's decimal places.
Also fix two test assertions: proto field test expected "100" but fixture
was "100.00000005", and serialization round-trip expected "999.123456789"
but fixture was "999.123".
* fix: use instrument precision in buildPostingAmount instead of hardcoded 2
- Accept precision parameter to support non-standard currencies (JPY, KWD)
and non-currency instruments (KWH, GPU_HOUR)
- Handle negative amounts correctly using absolute value with sign prefix
- Add unit tests covering precision variants, negatives, and zero amounts
- Document intentional struct literal in adapters.go for non-currency path
where proto InstrumentAmount lacks dimension/precision fields
---------
Co-authored-by: Ben Coombs <bjcoombs@users.noreply.github.com>1 parent d429050 commit 69a34f1
24 files changed
Lines changed: 1109 additions & 932 deletions
File tree
- api/proto/meridian/financial_accounting/v1
- frontend/src/api/gen/meridian/financial_accounting/v1
- services
- current-account/service
- financial-accounting
- client
- service
- mcp-server/internal/tools
- payment-order/service
- tests/proto
Lines changed: 535 additions & 523 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 13 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
9 | 8 | | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
138 | | - | |
139 | | - | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
140 | 141 | | |
141 | 142 | | |
142 | 143 | | |
143 | 144 | | |
144 | | - | |
| 145 | + | |
145 | 146 | | |
146 | 147 | | |
147 | 148 | | |
| |||
283 | 284 | | |
284 | 285 | | |
285 | 286 | | |
286 | | - | |
| 287 | + | |
| 288 | + | |
287 | 289 | | |
288 | 290 | | |
289 | 291 | | |
290 | 292 | | |
291 | | - | |
| 293 | + | |
292 | 294 | | |
293 | 295 | | |
294 | 296 | | |
| |||
399 | 401 | | |
400 | 402 | | |
401 | 403 | | |
402 | | - | |
| 404 | + | |
403 | 405 | | |
404 | 406 | | |
405 | 407 | | |
| |||
430 | 432 | | |
431 | 433 | | |
432 | 434 | | |
433 | | - | |
434 | | - | |
435 | | - | |
436 | | - | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
437 | 439 | | |
438 | 440 | | |
439 | 441 | | |
| |||
Lines changed: 45 additions & 45 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
| |||
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
69 | | - | |
70 | | - | |
| 69 | + | |
| 70 | + | |
71 | 71 | | |
72 | | - | |
73 | | - | |
| 72 | + | |
| 73 | + | |
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| |||
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
149 | 149 | | |
150 | 150 | | |
151 | 151 | | |
| |||
347 | 347 | | |
348 | 348 | | |
349 | 349 | | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | | - | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
354 | 354 | | |
355 | 355 | | |
356 | 356 | | |
| |||
365 | 365 | | |
366 | 366 | | |
367 | 367 | | |
368 | | - | |
369 | | - | |
370 | | - | |
371 | | - | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
372 | 372 | | |
373 | 373 | | |
374 | 374 | | |
| |||
383 | 383 | | |
384 | 384 | | |
385 | 385 | | |
386 | | - | |
387 | | - | |
388 | | - | |
389 | | - | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
390 | 390 | | |
391 | 391 | | |
392 | 392 | | |
| |||
402 | 402 | | |
403 | 403 | | |
404 | 404 | | |
405 | | - | |
406 | | - | |
407 | | - | |
408 | | - | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
409 | 409 | | |
410 | 410 | | |
411 | 411 | | |
| |||
492 | 492 | | |
493 | 493 | | |
494 | 494 | | |
495 | | - | |
496 | | - | |
497 | | - | |
498 | | - | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
499 | 499 | | |
500 | 500 | | |
501 | 501 | | |
| |||
537 | 537 | | |
538 | 538 | | |
539 | 539 | | |
540 | | - | |
541 | | - | |
542 | | - | |
543 | | - | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
544 | 544 | | |
545 | 545 | | |
546 | 546 | | |
| |||
556 | 556 | | |
557 | 557 | | |
558 | 558 | | |
559 | | - | |
560 | | - | |
561 | | - | |
562 | | - | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
563 | 563 | | |
564 | 564 | | |
565 | 565 | | |
| |||
572 | 572 | | |
573 | 573 | | |
574 | 574 | | |
575 | | - | |
576 | | - | |
577 | | - | |
578 | | - | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
579 | 579 | | |
580 | 580 | | |
581 | 581 | | |
| |||
0 commit comments