Build workbook
Template for yearly bookkeeping for small holding companies. Country-agnostic (DK example), ERP-agnostic (Ofinda example).
npx -y skills add NOGIT007/holding-accounting --skill build-workbookAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Build the year's bookkeeping workbook (xlsx) from converted markdown inputs. Trigger when the user asks to "build workbook YYYY", "byg bogføring YYYY", "make the xlsx", "create the saldobalance", or "post the year". Reads countries/{country}/rules.md for posting rules, settings/business.md for the company profile, and regnskab{YYYY}/note{YYYY}.md for year-specific adjustments.
SKILL.md
5.3 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
Build the year's workbook
The Excel workbook is the source of truth for the year's bookkeeping. Everything downstream — PDF reports, statutory annual report, ERP push — derives from it.
This skill builds regnskab{YYYY}/{YYYY} {Company}-vN.xlsx. Use the xlsx plugin skill for the actual workbook construction.
Versioning
- First iteration of a year: write
-v1.xlsx. - Each subsequent revision (after user feedback or correction): copy the latest version to
-v{N+1}.xlsxand edit there. Never edit a prior version in place. - The highest
Nis always the active workbook.
This way the user can see exactly what changed between iterations.
Mandatory pre-reads
settings/business.md— company name, registration number, fiscal year.countries/{country}/rules.md— posting rules. Section 1–3 lists which accounts are in active use; section 4 is the line-by-line rules; section 5 is the workbook layout.countries/{country}/chart_of_accounts.md— chart structure and account dimensions.regnskab{YYYY}/note{YYYY}.md— year-specific adjustments.- The previous year's workbook (highest
-vN.xlsx) — opening balances come from its closing balances.
Workbook layout
The exact sheet list comes from countries/{country}/rules.md § 5. For DK that is:
Saldobalance— kontonr., kontonavn, primo, debet, kredit, ultimo.Bogføring(orJournal) — Bilag, Dato, Tekst, Modkonto, Debet, Kredit, Konto.Moms— empty if VAT-exempt.Notes—note{YYYY}.mdcontent + følgenoter.Recon {Bank}— one per external account.Skatteopgørelse— bridge from accounting to taxable result.Årsregnskab— collapsed P&L and balance sheet.
The scripts/import_xlsx_to_sqlite.py reader requires at minimum:
- A sheet called
Journal(orBogføring— both names are accepted) with these column headers in row 1:Bilag,Dato,Tekst,Konto nr.,Konto navn,Debet,Kredit,Note,Bilag-fil. - A sheet called
Saldobalancewith:Type,Konto nr.,Konto navn,Primo …,Debet …,Kredit …,Ultimo ….
Other sheets are not required by the scripts but are required by the country's rules.md.
Posting flow
- Open the previous year's workbook. Read closing balances from the
Saldobalancesheet. - Create the new workbook from
templates/workbook_template.xlsx(if present) or build sheets from scratch. - Write opening balances on
Saldobalance!Primo. - For every line in every input markdown, apply the rules in
rules.md§ 4 to determine debit + credit accounts. If a transaction does not fit any rule, halt and ask the user. - Append the lines to the
Bogføringsheet with sequentialBilagIDs grouped by source document. - Build the year-end adjustments listed in
note{YYYY}.md:- Year-end mark-to-market on portfolios.
- FX translation on foreign-currency cash.
- Crypto valuation.
- Proposed dividend → equity reservation.
- Tax provision (compute on
Skatteopgørelsesheet first, then book onBogføring).
- Update
Saldobalance!Debet/Kredit/Ultimofrom the journal sums. - Build / update the
Recon {Bank}sheets — each must net to zero. - Build the
Årsregnskabsheet: collapse dimensions, group by P&L vs. balance sheet, compute prior-year comparatives.
Posting rules — non-negotiable
From countries/{country}/rules.md § 4. The most common ones across countries:
- Voucher on every line. No journal entry without a
BilagID and a reference inBilag-fil(unless system-generated — see below). - Double-entry. Debit equals credit per entry; trial balance nets to zero.
- Securities at cost on the balance sheet, with year-end mark-to-market through P&L.
- Use only accounts allowed in
rules.md. If a transaction does not fit, halt and ask rather than guess. - Numbers and dates use the country's required format (e.g.
kr. 10.000,00andddmmyyyyfor DK).
System-generated entries (no Bilag-fil required, but flagged as is_system=1 for the bilagsoversigt):
- Primosaldi (opening balances).
- Year-end mark-to-market.
- FX translation at year-end.
- Tax provision.
- Resultatdisponering (year-end appropriation).
Output
regnskab{YYYY}/{YYYY} {Company}-vN.xlsx — the workbook itself.
After building, always invoke scripts/import_xlsx_to_sqlite.py {YYYY} to update regnskab{YYYY}/ledger.db. The reports skill needs that database.
Verification (before handing off to generate-reports)
- Saldobalance nets to zero (
Σdebet = Σkreditandprimo + debet − kredit = ultimoper account). - Every journal line has a
BilagID. - Every non-system journal line has a
Bilag-filreference that points to a real file ininput/. - Each
Recon {Bank}sheet nets to zero. - Tax provision was computed using the country's current rate.
- Proposed dividend from
note{YYYY}.mdis reserved on the correct equity account.