ProofedMesh/services/per-diem-calculator
CTO Agent 3f466dfae8
All checks were successful
validate / Rego (opa fmt + opa test) (push) Successful in 11s
validate / JSON Schema (ajv) (push) Successful in 18s
services: add per-diem-calculator Go skeleton (deterministic compute core + 5 unit tests, HTTP wire stubbed); README reflects new layout
2026-10-25 17:07:55 +00:00
..
cmd/calculator services: add per-diem-calculator Go skeleton (deterministic compute core + 5 unit tests, HTTP wire stubbed); README reflects new layout 2026-10-25 17:07:55 +00:00
internal services: add per-diem-calculator Go skeleton (deterministic compute core + 5 unit tests, HTTP wire stubbed); README reflects new layout 2026-10-25 17:07:55 +00:00
go.mod services: add per-diem-calculator Go skeleton (deterministic compute core + 5 unit tests, HTTP wire stubbed); README reflects new layout 2026-10-25 17:07:55 +00:00
README.md services: add per-diem-calculator Go skeleton (deterministic compute core + 5 unit tests, HTTP wire stubbed); README reflects new layout 2026-10-25 17:07:55 +00:00

per-diem-calculator

Deterministic per-diem (Verpflegungsmehraufwand) calculator for ProofedMesh.

Deliberately not an LLM. Pauschalen gehören nicht in Prompts — Reproduzierbarkeit, Nachvollziehbarkeit, Angriffsfläche (siehe docs/architecture/v1.1.md §6.2).

Scope (skeleton)

This directory currently holds the service skeleton — package layout, data types, and a calculation unit with BMF-style fixtures. The HTTP wire layer, Pocket-ID client, Session-Scope-Token acquisition, Receipt-Adapter integration, Signing-Service call, and Trillian attestation submission are stubs or absent. They will be added incrementally in the Phase-2 spike.

Layout

services/per-diem-calculator/
├── README.md
├── go.mod
├── cmd/calculator/main.go              — HTTP entrypoint stub
└── internal/
    ├── calc/
    │   ├── calc.go                     — deterministic calculation core
    │   └── calc_test.go                — table-driven tests with BMF fixtures
    └── rates/
        └── rates.go                    — DataSource client stub (ds:per-diem-rates)

Verträge

  • Input: travel.plan v1.0.0 — start_date, end_date, legs[]{country, from_date, to_date} — zu definieren als schemas/travel/plan/v1.0.0.json beim ersten tatsächlichen Lauf.
  • Rates-Lookup: ds:per-diem-rates /rates mit {country, valid_on} je Reisetag (per Session-Scope-Token). Rückgabe-Schema ds.per_diem.rate v1.0.0.
  • Output: expense.canonical v1.2.0 expense_items[] mit type ∈ {PER_DIEM_ARRIVAL, PER_DIEM_DEPARTURE, PER_DIEM_FULL, PER_DIEM_PARTIAL} und computed_from je Zeile.
  • Attestation: DSSE-signiert durch Signing Service, Operation expense.compute_per_diem, Policy proofedmesh.transformations.per_diem muss allow zurückgeben.

Rundungskonvention

Monetäre Werte als Dezimal-Strings. Beträge aus Rates werden 1:1 übernommen (keine Teilrundung — die BMF-Pauschalen sind Vollsätze). Summenbildung über alle Items passiert erst beim Mapping auf die Senke (siehe agent-sink-mapping).

Lokal bauen (sobald Code vollständig)

go test ./...
go run ./cmd/calculator -help

Noch nicht lauffähig — Dependencies sind leer und main ist Stub.