Compliance (NF525)
For each garage, Garage+ keeps a tamper-proof fiscal journal: every invoice, every credit note, every handover of a PDF and every closure is recorded in it, chained to the previous one and signed, in the very transaction that produces it. Day to day, you have nothing to do: closures are automatic. Only the financial year closure is done by hand, once a year. The Settings › Compliance screen is reserved for people with the View compliance permission; closing a financial year and setting its start require Manage compliance. A support session can view, never close.
The screen has five tabs: Summary, Journal, Closures, Archives and Attestation.
Summary and verification
Section titled “Summary and verification”The Summary gives the number of journal entries, the last one (number, date, short signature) and the last verification made from this screen, with its “Chain intact ✓” or “Chain altered ✗” badge. Verify integrity recomputes the whole chain: hash and signature of each entry, chaining, content of each document read again in Garage+; the result shows in a dialog and stays in the summary. One verification per minute at most; Garage+ also verifies every chain each night and warns its team of any anomaly.
The summary also says whether the garage is a demo garage (documents “of no value”) or, for a real garage, since when its invoicing is activated and on which proof (see Invoicing activation), Garage+’s fiscal version and your journal’s signing keys, each with its full SHA-256 fingerprint (see Signing keys).
Fiscal journal
Section titled “Fiscal journal”The Journal lists the entries, most recent first: number, date and time (garage time), kind (document issued, original stored, delivery, closure, archive, key, payment, payment cancellation, payment moved to another invoice, cash movement or cash count…), document concerned (number of the invoice or credit note and, for a delivery, its number; for a payment or its cancellation, the numbers of the documents it settles; for a move, “original document → target document”; for a cash movement, its kind; period of a closure or an archive; link to the work order), author (name of a current member, “System” or “Operator”), start of the hash and short signature. A document issued before the journal went live is marked sealed after the fact. Filter by kind and period; the journal reads in pages of 25 (page bar below the list, page kept in the address) and stays fully viewable. Closures and archives also read in pages of 25. The journal holds no client name or address: only numbers, amounts and hashes.
Closures
Section titled “Closures”Daily closure: every night (at the latest a quarter of an hour after midnight, your garage’s time), Garage+ closes the day that has ended. Days without activity are closed too, at zero: closures follow one another without a gap since the first document issued. A document counts in the day it was issued, according to the garage’s time zone (Settings › Garage); days when the clocks change last 23 or 25 hours.
Monthly closure: as soon as the last day of a month is closed, the month is closed in turn; its totals are the sum of its days (Garage+ checks this and refuses any discrepancy).
Each closure carries:
- the number of invoices, deposit invoices and credit notes, their amounts excluding VAT, VAT and including VAT — a final invoice counts net of the deposits it deducts (the deposit was already counted on the day of its deposit invoice: never twice);
- VAT by rate, credit notes and deposits deducted;
- the period total including VAT (credit notes deducted) and the same total in absolute value;
- payments by method (number of operations and amount) and their total: a payment counts on the day it is received, its cancellation on the day it is made (as a negative); moving a payment from one document to another does not change the total;
- the cash drawer: cash in and cash out (cash payments, opening float, cash out, bank deposits, count adjustments), number of cash counts and cumulated count discrepancy;
- the perpetual grand total: the total of all periods since the first document, carried over from the previous closure (it never goes back to zero), and the perpetual total in absolute value;
- the number of duplicates handed over;
- the range of the fiscal journal it covers (entries No. … to …) and its short signature.
A closure cannot be changed or deleted, by anyone. Once a day is closed, no document can be dated on that day any more: an invoice issued exactly at midnight, during the closure, is refused (“This period is already closed”); issue it again, it will be dated today.
Z report
Section titled “Z report”Each closure prints as a Z report (A4 PDF): garage identity, period, totals by kind of document (invoices net of deducted deposits, deposit invoices, credit notes) and by rate, perpetual grand total, payments by method and their total, cash drawer (cash in, cash out, net movement, counts, cumulated discrepancy), journal range, short signature and Garage+ version. A demo garage’s Z report carries “Demo garage — document has no value” and the watermark “DEMO — no value” on every page, with no compliance notice. The Z report is rendered on demand: opening it counts nothing and changes nothing. A closure made before payments were tracked shows “No payment” and a cash drawer at zero.
Financial year and financial year closure
Section titled “Financial year and financial year closure”The first financial year starts with the first document issued: by default the calendar year. As long as no financial year is closed, you can choose the start month of the financial year (Manage compliance): the current financial year then ends the day before the next 1st of that month after today (so the first financial year may last less than a year): a financial year never ends in the past nor before the first document.
The financial year closure is done in a dialog, from the day after the last day of the financial year and once all its months are closed: summary of the totals, “I confirm the financial year has ended” checkbox, Close the financial year button. It is recorded in the fiscal journal, the next financial year opens, and the financial year start can no longer change. A financial year closure is final.
Archives
Section titled “Archives”Garage+ automatically produces a fiscal archive at each monthly closure and each financial year closure, within the following quarter of an hour. You can also request one for a period of your choice (one year at most, days already closed) with the Manage compliance permission; it is ready a few moments later.
An archive is a ZIP file that can be read without Garage+:
- the period’s invoices, deposit invoices and credit notes, with everything they print (garage, customer, vehicle, lines, deducted deposits, share already paid by a third party, payment terms), as JSON and CSV (amounts in cents);
- every fiscal journal entry of the period, with their hashes and signatures;
- the period’s payments (payments, payment cancellations, payment moves), as JSON and CSV (
payments.json, archive format 2; an older format 1 archive has none and can still be verified); - the period’s cash (opening float, cash in, cash out, bank deposits, cash counts and their discrepancies), as JSON and CSV (
cash.json, archive format 2); - handovers (original, duplicates), closures and their totals, previous archives;
- the public signing keys, an index.html page readable in a browser, a notice in French (
NOTICE-FR.md) and the verification script (verify-archive.mjs); - a manifest listing each file with its hash, signed by Garage+.
Archives are kept by Garage+ outside your storage quota and are never deleted. Each archive is itself recorded in the fiscal journal with its hash: downloading it later gives back exactly the same file, and Garage+ refuses to serve an archive whose file no longer matches that hash (“The stored fiscal archive has been altered”), reporting it to the Garage+ team. Hand the archive to the tax authorities or your accountant when they ask for it.
Verify an archive
Section titled “Verify an archive”In Garage+: Verify an archive, then upload the ZIP file (50 MB at most; it is not kept; a larger archive is verified outside Garage+). Garage+ checks the archive itself (manifest signature, hash of each file, chaining and signature of each entry, content of each document) then compares it with its journal: same entries, same signatures, Garage+’s keys. Result: “Archive intact ✓”, or the first anomaly found (file changed, missing entry, invalid signature, archive of another garage…).
Outside Garage+, on any computer, without an account or a connection:
- Install Node.js (version 20 or later, nodejs.org).
- Open the archive ZIP and copy the
verify-archive.mjsfile next to the ZIP. - Check that this script is Garage+’s: its SHA-256 hash must be
f6431fd79c3e56ac5f10a34ef9ddc3fd294c4d3863e16003fb9ef64ee1fd78df(on Windows:certutil -hashfile verify-archive.mjs SHA256; on macOS or Linux:shasum -a 256 verify-archive.mjs). - Note the fingerprint of Garage+’s signing key (below, Signing keys): it alone proves that the archive was signed by Garage+.
- In a terminal, in that folder:
node verify-archive.mjs --trusted-key <fingerprint> archive-fiscale-….zip(repeat--trusted-keyfor each key, for instance after a key change). - Read the result (the script answers in French):
OK — N entrées (n° … à …), période du … au …: the archive is intact and signed by a trusted key;INTÈGRE, clés NON authentifiées(run without--trusted-key): the archive is consistent, but nothing proves its keys are Garage+’s; run it again with the fingerprint;ARCHIVE ALTÉRÉE — <cause>: the archive has been changed, or signed by an untrusted key (the cause says where).
- Compare the SHA-512 hash shown with the archive’s in Garage+.
Without Node, the attached notice (NOTICE-FR.md) gives the OpenSSL commands to check the manifest signature, the hash of each file and the signature of each entry.
Attestation
Section titled “Attestation”The Attestation tab produces the publisher’s draft individual attestation in your garage’s name, following the tax administration’s template (BOI-LETTRE-000242): part 1 filled in for the publisher and the software (Garage+ major version), part 2 in your garage’s name, to be completed and signed by your legal representative, and as an appendix the fingerprints of your journal’s signing keys. This document is only a draft until it is signed by the publisher’s legal representative; while the publisher’s identity is not completed, the tab shows “Attestation unavailable”. A demo garage has no attestation: its documents have no value. Show the signed attestation in case of a tax audit.
Signing keys
Section titled “Signing keys”Each fiscal journal entry and each archive is signed by a Garage+ key. A key’s fingerprint (full SHA-256 of its public key, 64 hexadecimal characters) is published outside the application, so that an archive forged with another key is recognised: on this page and on the publisher’s individual attestation. Settings › Compliance shows the keys of your journal; the script shows those of the archive.
| Environment | Identifier | SHA-256 fingerprint | In service since |
|---|---|---|---|
| Production | — | No production key published yet: Garage+ does not issue fiscal documents in production yet. | — |