agentsclimarketplace

Generate reports

Skill NOGIT007/holding-accounting/skills/generate-reports

Template for yearly bookkeeping for small holding companies. Country-agnostic (DK example), ERP-agnostic (Ofinda example).

Install
npx -y skills add NOGIT007/holding-accounting --skill generate-reports

Assembled 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

Generate the three PDF bookkeeping reports (kontokort, journal, bilagsoversigt) for the year. Trigger when the user asks to "generate reports", "lav PDF rapporter", "run the reports", "make the kontokort", or after build-workbook completes. Runs scripts/run_reports.py which imports the latest xlsx into SQLite and renders the three PDFs.

SKILL.md

4.0 KB, 989 tokens by cl100k_base, as published. Nobody here has run it

Generate the year's PDF reports

The three PDF reports are the deliverables a human reviews before approving the year. They are deterministic Python scripts — no LLM in the loop — built on top of reportlab.

Reports produced

In regnskab{YYYY}/output/:

  1. {YYYY}_kontokort.pdf — account statement. Per account in the period: opening balance, every line chronologically with running total, closing balance. Only accounts with movement OR non-zero primo. Grouped by account type.
  2. {YYYY}_journal.pdf — bookkeeping journal. All entries chronologically, grouped by Bilag, with per-bilag and grand totals (debet must equal kredit).
  3. {YYYY}_bilagsoversigt.pdf — document-centric pre-posting check. Four sections:
    1. Documents in input/ linked to journal lines.
    2. Documents not yet linked.
    3. Real journal lines without an attached document (orphans — must be resolved).
    4. System-generated entries where no document is expected.

Prerequisites

  • scripts/ is installed (uv pip install -e . from the scripts folder).
  • The latest {YYYY} {Company}-vN.xlsx exists in regnskab{YYYY}/.
  • regnskab{YYYY}/input/ contains the source documents (the bilagsoversigt scans this folder).

Command

cd scripts
python run_reports.py {YYYY}

This:

  1. Imports the highest-versioned workbook into regnskab{YYYY}/ledger.db.
  2. Renders all three PDFs into regnskab{YYYY}/output/.
  3. Prints the path to each PDF on stdout.

For a partial period:

python run_reports.py {YYYY} --from {YYYY}-01-01 --to {YYYY}-06-30

For a different root folder:

HOLDING_ROOT=/path/to/data python run_reports.py {YYYY}
# or:
python run_reports.py {YYYY} --root /path/to/data

When to re-run

  • Every time the workbook version is bumped (-v3-v4).
  • After new files are added to input/ (the bilagsoversigt scan picks them up).
  • Before any approval gate.

Report-specific notes

Kontokort

  • Accounts grouped by Type column (AKTIV, PASSIV, EGENKAPITAL, RESULTAT). The import script reads Type from the Saldobalance sheet.
  • "Konto nr." includes any dimensions (e.g. 6480-MAINBANK-FOLIO). The aggregate parent (e.g. 6480) is not collapsed in this report — that is intentional.

Journal

  • Sorted by date, then by Bilag number. Within a Bilag, lines preserve their input order.
  • Per-bilag totals shown at the end of each Bilag block.
  • Grand totals at the end. Σdebet − Σkredit = 0 is the test.

Bilagsoversigt

  • The control that catches missing documents before the user approves the year.
  • Section 3 (real lines without a document) is the load-bearing list. It must be empty (or every entry must be explicitly system-generated) before approval.
  • The link sources are: explicit Bilag-fil column (preferred), fallback to filename stem == Bilag.

Output for the approval gate

After running, present the user with:

  • The three computer:// links to the PDFs in regnskab{YYYY}/output/.
  • The summary numbers: total bilag, total debet/kredit, number of orphan lines, number of unlinked documents.
  • The reconciliation summary from the workbook's Recon {Bank} sheets.

HARD STOP. Do not proceed to statutory annual report or ERP push until the user explicitly approves.

Customizing the PDF look

Title, colour, font are in scripts/_pdf.py. The company name in the title comes from settings/business.md (first H1) or the COMPANY_NAME environment variable. To change:

  • Branding: edit _pdf.py constants (INK, MUTED, H1, H2).
  • Title text: edit the Paragraph(...) call near the top of each report_*.py.
  • Page size / orientation: each report sets landscape_orientation on doc(...).

Gives 0 of the 12 instructions most pdf office docs skills give in 989 tokens

Counted across 635 of the 690 authors here whose files we hold, read 2026-08-06

  • extract text using pdfplumberin 92 of 635, across 25 files
  • create PDFs using reportlabin 83 of 635, across 16 files
  • read FORMS.md to fill out PDF formsin 80 of 635, across 13 files
  • OCR scanned PDFs using pytesseractin 77 of 635, across 10 files
  • merge or split PDFs using qpdfin 70 of 635, across 3 files
  • use Excel formulas instead of hardcoded calculated valuesin 68 of 635, across 12 files
  • unpack edit xml and repack existing documentsin 63 of 635, across 8 files
  • document sources for hardcoded valuesin 61 of 635, across 9 files
  • write minimal python code without unnecessary commentsin 59 of 635, across 7 files
  • run the recalculation script after adding or modifying formulasin 58 of 635, across 6 files
  • fix all identified formula errors and recalculatein 58 of 635, across 6 files
  • format years as text stringsin 57 of 635, across 5 files

Said here and by no other author read

  • install scripts before running reports
  • render all three PDFs into the output folder
  • re-run reports whenever the workbook version is bumped
  • re-run reports after new files are added to input
  • verify section three is empty before approval
  • present the three PDF links to the user

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.