open-standards/openpay/crates/op-revrec/Cargo.toml
Transaction Science 781c331288 ingest batch 5 (salvage): 2 crates from 9-agent dispatch (session-limit hit mid-batch)
OpenPay (1 crate)
  op-revrec      ASC 606 / IFRS 15 revenue recognition (5-step model,
                 multi-element allocation, deferred revenue ledger,
                 variable consideration with constraint, principal vs agent,
                 contract modifications, multi-currency translation)
                 27 tests across 6 FASB worked examples + SaaS lifecycle.

EOC (1 crate)
  eoc-carbon     Carbon intensity → joules → gCO2e accounting.
                 Electricity Maps, WattTime, CO2 Signal adapters; IEA
                 baseline fallback; PUE tables (AWS/GCP/Azure); region-aware
                 scheduling + demand shifting; SCI-for-AI bridge into eoc-eval.
                 21 tests passing.

Seven other crates (op-dispute-evidence, op-ewallets-asia, smart-byte-zk,
smart-byte-atproto, smart-byte-edv, eoc-agent, eoc-rag) were scoped in this
batch but the parallel agents hit session-limit before completing. They are
deferred to a follow-up batch.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-24 09:28:38 -04:00

47 lines
2 KiB
TOML

[package]
name = "op-revrec"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "OpenPay revenue recognition: ASC 606 / IFRS 15 five-step engine — contract + performance-obligation modelling, transaction-price allocation, recognition-schedule generation (straight-line / milestone / output / input / usage), deferred-revenue ledger tied to op-core::Payment state, variable-consideration constraint, contract-modification handling (Type I / II / III), multi-currency translation, and principal-vs-agent presentation."
[dependencies]
op-core = { path = "../op-core" }
# Recognition math must be exact. rust_decimal carries ~28 significant
# digits — well past the precision any GL or audit firm publishes — and
# supports the rounding modes ASC 606 examples use (round-half-up for
# allocation, banker's for translation differences).
rust_decimal = { version = "1", features = ["serde"] }
# Calendar dates for service-period bounds, recognition-date snapshots,
# contract effective dates, modification-date arithmetic. Spec-mandated.
chrono = { version = "0.4", default-features = false, features = ["std", "clock", "serde"] }
# Async trait surface for the DeferredRevenueLedger. Keeps the ledger
# pluggable against a Postgres / S3 / in-memory backend without
# rewriting the recognition engine.
async-trait = "0.1"
# Serde stack.
serde = { workspace = true }
serde_json = { workspace = true }
# Stable IDs for contracts, performance obligations, schedule entries
# and ledger postings. v7 keeps them time-sortable.
uuid = { workspace = true }
thiserror = { workspace = true }
tracing = { workspace = true }
[features]
default = []
# Reserved for live integrations with GL backends (NetSuite, Sage Intacct,
# Workday Financials, QuickBooks Online). The native in-process ledger
# does not depend on this feature.
live = []
[dev-dependencies]
tokio = { workspace = true, features = ["rt", "macros", "test-util"] }