Skip to content
Gallucci One Finance

Technology

For the people who want to know what is underneath.

Deliberately unremarkable technology, used carefully. Relational Postgres, a double-entry engine that lives in the database, permissions below the application, and exact decimal money. The interesting part is not the stack — it is that there is no way around any of it.

38 modules and 52 connectors sit on one engine, one permission model and one data layer. Adding another is configuration.

The engine

The life of a transaction

Everything G1 claims about integrity is really a claim about this path. Follow a supplier bill from the moment it turns up to the moment it changes a number on a report — and back again.

Stage 01 / 06

A document turns up

A supplier bill, a customer invoice, an expense claim, a card statement line. It is keyed, imported from a file, or attached from an email — and at this point it has not touched the ledger at all.

  • File imports are staged and validated row by row before anything commits
  • The attachment stays on the record, retrievable from the journal later
  • Nothing about it is an accounting fact yet
BILL-4471 · draftNot posted
nord-components-24118.pdfAttached to the record · 214 KB
SupplierNord Components BV
Document date18 Sep 2025
Total€120,170
ImportedKeyedFrom email

The same path runs for an invoice, a receipt, a depreciation run, a payroll journal and a card statement line. One engine, one audit trail, one set of rules — which is why a subledger and its control account cannot drift apart.

What it is built on

Sophistication, without trying to prove sophistication

No jargon wall. These are the parts of G1 a technical reader will want to check, described the way we would describe them to each other.

  • Modular architecture

    Modules share one engine, one permission model and one data layer. Activating one does not require the others, and adding one does not disturb what already runs.

    • Shared engine, independent modules
    • Activate what the business needs, when it needs it
    • A new module is an addition, not a migration
  • Data layer

    Relational Postgres with an explicit schema. Every business row carries its company, every amount is an exact decimal, and every transaction carries its own currency and rate alongside the base-currency figures.

    • Company on every row, enforced by policy
    • Exact decimal money — no floating point
    • Transaction and base currency stored together
  • Posting engine

    The only thing that can write to the ledger.

    • Balanced debits and credits, validated in base currency
    • Period and postability checked before writing
  • Permissions

    Row-level security and roles, below the application.

    • Row-level security on every table
    • Role-based write policies per company
  • Automation

    Rules and schedules that run without supervision, within limits people set.

    • Schedules that materialise their own entries
    • Matching that suggests rather than silently posts
  • Integrations

    File import with row-level validation and a staged commit, export from every list and report, and a connector library designed to grow. What exists today is stated honestly on the integrations page.

    • Staged imports validated row by row before commit
    • Export from anywhere you can see data
    • Connectors added as content, not as releases
  • Analytics

    Reporting and analysis read the same records the ledger writes. Every figure drills through to the journal line and the source document behind it.

    • One definition per measure
    • Dimension filters throughout
    • Drill-through from any figure to its source
  • AI

    An integrated layer, bound by the same permissions.

    • Scoped to the user's own permissions
    • Answers cite the records they came from
  • Auditability

    Nothing disappears, and nothing can be quietly changed.

    • Immutable posted records
    • Trigger-written change history
  • Scalability

    More companies, more currencies, more sites — as configuration.

    • Multi-company and multi-currency from the first entry
    • Shared chart of accounts and dimension structure
  • APIs

    A permissioned API over the same data model, plus webhooks for business events. Not built yet; it is on the roadmap and listed in the integration library as planned.

    • Same data model as the application
    • Bound by the same row-level security
    • Webhooks for posted, approved and matched events

Engine guarantees

6 things that are true of every module

Not features you switch on. They are properties of the engine, so anything that posts inherits them.

  • Double-entry posting

    Every transaction posts balanced debits and credits, validated against the open period before it touches the ledger.

  • Multi-company

    Separate books per company, with row-level security on every table so people only ever see the companies they belong to.

  • Multi-currency

    Per-transaction FX with realised and unrealised gains, plus revaluation runs at period end.

  • Fiscal calendar

    Period open and close, year-end close, and locks that actually hold — accrual and cash-basis reporting side by side.

  • Maker-checker

    Approvals are enforced by role, and the submitter of a document can never be its own approver.

  • Immutable audit trail

    Posted documents cannot be edited. Corrections flow through reversals and credit notes, and triggers record who changed what.

Ask the hard questions

Technology should adapt to the business. Not the other way around.

If you want to interrogate the data model, the posting rules or the permission model, that is a conversation we enjoy.