Reusable accounting library: GoBD-compliant double-entry bookkeeping, cash-basis accounting (EÜR), VAT, fixed assets and cost accounting (KLR) — as an embeddable implementation, not an application. Multiple language implementations with an identical API and identical data format, verified against a shared conformance suite.
summae/
├── testsuite/ The compatibility contract: fixtures/ + schema/
│ (authoritative for all implementations)
├── implementations/
│ ├── php/ PHP implementation (core · laravel · cli)
│ └── node/ Node/TypeScript implementation (core · runner)
├── compose.yaml, docker/ Docker toolchain (PHP)
└── Makefile Orchestration
Both implementations run against the same testsuite/ and produce
byte-identical results — that is the heart of the promise.
Embed the core in a project:
# PHP (Composer)
composer require superheld/summae-core
composer require superheld/summae-laravel # optional Laravel adapter
# Node (npm/pnpm)
pnpm add @superheld/summae-coreFull guidance on configuration, initialization and usage: → Handbook.
One product name (summae), each ecosystem's convention — the stem stays the
same, only the registry prefix differs:
| Role | PHP (Composer) | Node (npm) | Python (PyPI) |
|---|---|---|---|
| Core | superheld/summae-core |
@superheld/summae-core |
summae-core |
| CLI | superheld/summae-cli |
@superheld/summae-cli |
summae-cli |
| Framework adapter | superheld/summae-laravel |
@superheld/summae-nestjs |
summae-django |
The language lives in the folder (implementations/<language>/), not in the name.
Only the framework adapter is named per framework; core and CLI stay uniform.
| Path | Status | Docs | |
|---|---|---|---|
| PHP | implementations/php/ |
Reference, complete | README · Developer docs |
| Node | implementations/node/ |
Complete, parity with PHP | README · Developer docs |
Users (embed, configure and use the package) read the Handbook. Contributors start with the respective developer docs.
testsuite/fixtures/**.json + testsuite/schema/ are the normative source:
every implementation must satisfy all fixtures byte-identically and
deterministically. Fixtures are append-only — a behavior change becomes a
new fixture; existing ones are never silently edited.
Maintainer note: The authoring home of the fixtures lives in a separate, internal knowledge base.
bin/sync-testsuite.sh(ormake sync) mirrors them here — a one-way street, for maintainers only. Consumers and CI never need this: the committedtestsuite/is self-contained and authoritative.
# PHP (Docker, no local PHP required)
make build && make install
make check # PHPStan max + PHPUnit
make fixtures # conformance suite against the core
# Node
cd implementations/node && pnpm install
pnpm test # vitest (unit + conformance)
pnpm fixtures --strict # conformance suite, deterministic double runMIT — see LICENSE.