TypeScript libraries for e-invoicing (UBL, Peppol, Factur-X, Stripe, Indian GST), bank statements, Belgian and Slovenian tax filings, and accounting reference data. The packages share one toolchain and release process; each is published to npm on its own.
| Package | Version | Description |
|---|---|---|
@financica/be-biztax |
0.4.0 | Belgian corporate income tax returns for Biztax: build, validate, render and read the be-tax XBRL instance and the .biztax file |
@financica/be-vat-account |
0.3.0 | Belgian VAT current-account statement (Extrait de compte TVA) PDF parser |
@financica/camt053 |
0.4.0 | ISO 20022 CAMT.053 (Bank-to-Customer Statement) XML parser |
@financica/coda |
0.3.0 | Belgian CODA (coded statement of account) bank file parser and serializer |
@financica/ecb-client |
0.2.1 | European Central Bank euro FX reference rates, with historical lookups and last-business-day fallback |
@financica/edavki |
0.1.0 | Slovenian eDavki (FURS): build and serialize the DDV-O VAT return as EDP XML |
@financica/facturx |
0.2.0 | Factur-X / ZUGFeRD (EN 16931 CII) hybrid e-invoices: parse, generate, embed in PDF/A-3 |
@financica/gst-einvoice-qr |
0.1.0 | Decode, verify and reconcile the signed QR code on Indian GST e-invoices (IRP / IRN) |
@financica/iso4217 |
0.2.0 | ISO 4217 currency codes, numeric codes, minor units and entities |
@financica/myminfin |
0.12.1 | Client and document generators for the Belgian SPF Finances MyMinFin and Intervat APIs |
@financica/nace-codes |
3.1.0 | NACE and NACEBEL economic activity classification codes |
@financica/nbb-cbso |
0.8.0 | Belgian annual-accounts filing for the NBB/BNB Central Balance Sheet Office |
@financica/pcmn |
0.4.0 | Belgian PCMN class taxonomy and the statutory charts of accounts (/charts) |
@financica/peppol |
0.9.0 | Peppol network: SML/SMP participant discovery, Directory lookups, EAS schemes |
@financica/react-ubl-renderer |
0.4.0 | Render parsed UBL / Peppol BIS Billing 3.0 invoices as React or standalone HTML |
@financica/scrada-client |
0.5.0 | HTTP client for the Scrada Peppol API |
@financica/stripe-hosted-invoices |
0.1.0 | Read a Stripe invoice, credit note or receipt from its public hosted URL, without an API key |
@financica/stripe-tax-invoices |
0.1.0 | PDF parser for Stripe's monthly tax invoice for its own fees |
@financica/stripe-ubl |
4.1.0 | Convert Stripe invoices and credit notes into Peppol BIS Billing 3.0 UBL |
@financica/ubl |
0.19.0 | UBL invoices: parse, build and serialize Peppol BIS Billing 3.0 |
@financica/xbrl |
0.2.0 | XBRL 2.1 instance document parser and serializer |
bun install
bun run ci # lint, format:check, build, typecheck, testPer-package work uses the same script names everywhere:
bun run --filter '@financica/ubl' test
bun run --filter '@financica/ubl' build| Script | Does |
|---|---|
build |
Bundle to dist/ with tsdown |
clean |
Remove dist/ |
typecheck |
tsc --noEmit |
lint / lint:fix |
oxlint |
format / format:check |
oxfmt |
test / test:watch / test:coverage |
vitest |
ci |
All of the above, in order |
Run at the repository root, build, clean and typecheck fan out across every
package in dependency order; lint, format and test run once over the whole
workspace. A package README lists only the scripts it adds beyond these.
Every package declares engines.node >= 24, and that is what CI runs.
Cross-package rules (error handling, absent values, types, packaging) are in CONVENTIONS.md.
Shared configuration lives at the root:
tsconfig.base.json: every package extends it and overrides only what it must (jsx, DOM libs, extra strictness)..oxlintrc.json,.oxfmtrc.json: one lint and format configuration.vitest.config.ts: a project per package; a package keeps its ownvitest.config.tsonly where its tests need different settings.oxlint,oxfmt,tsdown,typescript,vitestand@types/nodeare root devDependencies. Packages declare only their own runtime and peer dependencies.
Cross-package dependencies are ordinary semver ranges (@financica/ubl: ^0.18.1),
not workspace:*: the manifest that is published is the manifest in the tree, with
no rewrite step. Bun resolves a range to the workspace copy when it matches, so a
change in @financica/ubl is picked up by @financica/stripe-ubl without a
publish, as long as the range is kept current when the dependency bumps.
Package history predates the monorepo; git log --follow packages/<name>/src/index.ts
reaches it.
A package is released by pushing a tag; the Release workflow publishes it
through npm trusted publishing (OIDC, provenance attached, no token):
- Bump
versioninpackage.jsonand add the entry to the package'sCHANGELOG.md. - Update the version in the Packages table above.
- Commit and push, then tag the commit
<name>@<version>(for examplenbb-cbso@0.6.0) and push the tag. The workflow refuses a tag whose version differs from the package'spackage.json.
Each package's README.md is its reference: purpose, contract, API, limits and
the reasoning behind non-obvious choices. Longer reference material goes under
packages/<name>/docs/ and is linked from that README. READMEs describe the package
as it is now; history is in CHANGELOG.md and git. There are no per-package agent
instruction files.
MIT