Target Positionering in Sector — Signumi

Genereert een professioneel Word-document dat een Belgisch bedrijf positioneert in zijn sector en aantoont waarom het een interessante overnamedoelstelling is.

Inputs

Verplicht:

Optioneel:

Werkwijze (volg deze stappen in volgorde)

Stap 1: Data ophalen (3 calls)

Signumi:get_company_by_enterprise_number(enterprise_number=...)
Signumi:get_industry(nace_code="XXXXX")
Signumi:search_companies(nace_codes=["XXXXX"], sort_by="ebitda", sort_order="desc", limit=20)

De derde call levert de top 20 bedrijven in de sector op basis van EBITDA.

Als enkel de naam bekend is (geen ondernemingsnummer), gebruik dan eerst:

Signumi:search_companies(query="...", nace_codes=["XXXXX"], limit=3)

en kies het juiste resultaat, daarna get_company(company_id=...).

Stap 2: JSON samenstellen

Bouw het JSON-object op basis van de Signumi-response. Gebruik het schema hieronder. Vul ontbrekende velden in met null — laat nooit een veld weg.

{
  "company": {
    "name": "Sanitair X",
    "city": "X",
    "postalCode": "X",
    "naceCode": "43221",
    "naceLabel": "Sanitaire werkzaamheden",
    "startDate": "1972-10-26",
    "enterpriseNumber": "X",
    "administratorName": "X",
    "administratorAge": 62,
    "ebitda": 758073.2,
    "ebit": 648730.01,
    "profit": 441499.65,
    "equity": 4885863.54,
    "debt": 1490455.72,
    "balanceTotal": 6377318.26,
    "cash": 1525789.71,
    "shortTermDebt": 1490455.72,
    "employeeCount": 20,
    "valuationMultiple": 4.4,
    "enterpriseValue": 3335522.08,
    "equityValue": 7362340.94,
    "ebitdaHistory": [
      { "fiscalYear": 2021, "ebitda": 654662, "ebit": 551710, "profit": 411532, "equity": 3757053, "employeeCount": 21.7 },
      { "fiscalYear": 2022, "ebitda": 518094, "ebit": 402362, "profit": 284392, "equity": 4041446, "employeeCount": 21.1 },
      { "fiscalYear": 2023, "ebitda": 693436, "ebit": 576399, "profit": 402917, "equity": 4444363, "employeeCount": 19.7 },
      { "fiscalYear": 2024, "ebitda": 758073, "ebit": 648730, "profit": 441499, "equity": 4885863, "employeeCount": 20.0 }
    ]
  },
  "sector": {
    "label": "Sanitaire werkzaamheden",
    "naceCode": "43221",
    "companyCount": 867,
    "totalTurnover": 255472436,
    "totalEbitda": 51800000,
    "ebitdaGrowthPct": 4.2,
    "medianEbitda": 59714,
    "medianEbitdaMarginPct": 6.86,
    "profitableCompanyPct": 83.16,
    "medianCompanyAgeYears": 14,
    "medianYoungestAdministratorAge": 44,
    "totalEmployeeCount": 4013.2,
    "medianEmployeeCount": 2.0,
    "topProvinceByEmployee": "West-Vlaanderen",
    "topProvinceEmployeeCount": 987,
    "targetRank": 34,
    "top20Companies": [
      { "name": "X", "city": "X", "ebitda": 758073 },
      { "name": "Installaties De Smet NV", "city": "Gent", "ebitda": 692000 }
    ]
  }
}

Velden mapping:

Stap 3: Script uitvoeren

cd /home/claude/lead-magnet-generator
npm install --prefix . docx 2>/dev/null || npm install -g docx

Sla het JSON-object op als tijdelijk bestand en roep het script aan:

OUTPUT="/mnt/user-data/outputs/<BedrijfsnaamSanitized>_Sectorpositie_Signumi.docx"
echo '<JSON_STRING>' > /tmp/lm_input.json
node scripts/generate_docx.js "$(cat /tmp/lm_input.json)" "$OUTPUT"

Controleer of de output OK:<pad> bevat. Bij fout: bekijk de error en fix de JSON.

Stap 4: Valideren

python /mnt/skills/public/docx/scripts/office/validate.py "$OUTPUT"

Moet eindigen met "All validations PASSED!".

Stap 5: Presenteren

Gebruik present_files met het outputpad.

Geef daarna een korte samenvatting (3–5 bullets) van wat het document bevat en welke key takeaways het betreffende bedrijf zal zien.

Document structuur (6 secties)

  1. Sectoroverzicht — NACE-data
  2. Financieel profiel bedrijf — KPI tiles + historische tabel
  3. Benchmark vs. sector — FTE, EBITDA, solvabiliteit, leeftijd
  4. Diepgaande benchmarks:
    • EBITDA-groei bedrijf vs. sectorgroei (CAGR + laatste jaar)
    • EBITDA per FTE vs. sectormediaan
    • Marktaandeel op basis van EBITDA (bedrijf / totalEbitda sector)
    • Top 20 bedrijven naar EBITDA met rangschikking
  5. Waarom een interessante overnamedoelstelling — 2×2 argumentenmatrix + waarderingsrange

Troubleshooting

| Probleem | Oplossing |

|----------|----------|

| Cannot find module 'docx' | Run npm install -g docx first |

| JSON parse error | Escape single quotes in namen of schrijf naar bestand via create_file |

| Validatie faalt | Check dat geen veld undefined is in de JS — vervang door null in JSON |

| Turnover ontbreekt | Normaal bij verkorte jaarrekening (m81-f model) — null is correct |

| totalEbitda niet beschikbaar | Gebruik null — sectie 4c toont dan "n/b" maar crasht niet |

| top20Companies leeg | Gebruik [] — sectie 4d wordt dan overgeslagen |

| ebitdaGrowthPct ontbreekt | Gebruik null — kolom "sector" toont "n/b" |

Token-efficiëntie

Het script generate_docx.js bevat de volledige documentopmaak. Claude hoeft enkel data op te halen en JSON samen te stellen — geen codegeneratie in context. Dit bespaart ~2000–3000 tokens per run vs. inline codegeneratie.