Importeer een verkoopfactuur die je opdrachtgever namens jou heeft gemaakt (self-billing / "factuur uitgereikt door afnemer"). Telt als omzet — net als /factuur — maar je maakt 'm niet zelf en genereert geen PDF; je neemt het bestaande document over met zijn eigen factuurnummer.
Installs into .claude/skills of the current project.
Are you the author of Zelffactuur?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/mathijs-oord-zelffactuur)
---
name: zelffactuur
description: Importeer een verkoopfactuur die je opdrachtgever namens jou heeft gemaakt (self-billing / "factuur uitgereikt door afnemer"). Telt als omzet — net als /factuur — maar je maakt 'm niet zelf en genereert geen PDF; je neemt het bestaande document over met zijn eigen factuurnummer.
allowed-tools:
- Bash(node "${CLAUDE_PLUGIN_ROOT}/lib/admin.mjs" *)
- Bash(mkdir -p facturen/*)
- Bash(cp * facturen/*)
- Read
- Write
---
# Zelffactuur / self-billing importeren
De gebruiker geeft een **verkoopfactuur** op die hij **niet zelf heeft gemaakt** — een
opdrachtgever of intermediair (bv. een detacheerder/bemiddelaar zoals Yacht, Hays, Tentoo)
heeft die namens hem uitgereikt op basis van goedgekeurde uren. Dit is **omzet**
(verkoopfactuur), géén kost.
Belangrijk onderscheid (zie `${CLAUDE_PLUGIN_ROOT}/rules/self-billing.md`):
| | Verkoopfactuur (`/factuur`) | Self-billing (`/zelffactuur`) | Inkoopfactuur (`/bon`) |
|--|--|--|--|
| Richting | uitgaand, ik maak 'm | inkomend, afnemer maakt 'm | inkomend |
| Wat | omzet | **omzet** | kosten |
| BTW | verschuldigd 1a/1b | **verschuldigd 1a/1b** | voorbelasting 5b |
## Stappen
### 1. Lees het document
Lees de PDF/afbeelding en extraheer:
- **Factuurnummer** = dat van de opdrachtgever/intermediair (bv. `IRB172600055`). **Niet** jouw
eigen `YYYY-NNNN`-reeks en **niet** `next-invoice-number` gebruiken.
- **Factuurdatum**, **vervaldatum**.
- **Opdrachtgever** (de afnemer die de factuur uitreikt — bv. Voorbeeld Opdrachtgever B.V.) +
adres + diens **BTW-nummer** (staat meestal onderaan, bv. "Btw-nummer … NL000000000B01").
- **Regels**: omschrijving, aantal, tarief, bedrag (bv. "Normale uren 32,00 × 95,00 = 3.040,00").
- **Subtotaal (excl. BTW)**, **BTW-tarief + bedrag**, **totaal**.
### 2. Bevestig dat het self-billing is
Self-billing als het document tekst bevat als **"factuur uitgereikt door (de) afnemer"**,
"self-billing", "zelffacturering" of "invoice issued by the recipient". Dan `self_billing=true`.
Een gewone verkoopfactuur die je elders maakte en alleen wilt importeren: `self_billing=false`,
`source=imported`. Beide tellen als omzet.
> Let op (wettelijk): bij self-billing mag je **niet** óók zelf een `/factuur` sturen voor dezelfde
> levering. Importeer 'm hier; maak 'm niet met `/factuur`.
### 3. BTW
Vrijwel altijd NL-omzet met verschuldigde BTW: `vat_percentage` van het document (meestal 21,
soms 9), `vat_reverse_charged=false`. Alleen verlegd als het document dat expliciet vermeldt.
### 4. Match/maak de opdrachtgever als klant
Zoek de opdrachtgever in `data/clients.csv` (fuzzy). Niet gevonden → voeg een rij toe met nieuw
`id` (`c_002`, … hoogste +1): naam, adres, postcode, plaats, land, `country_type=nl`, het
BTW-nummer van het document, evt. `attention`.
### 5. Dedup-check
Lees `data/invoices.csv`; staat dit factuurnummer er al in → meld dat en stop (niet dubbel
importeren).
### 6. Preview (compact) → bevestiging
Toon: factuurnummer (van opdrachtgever), opdrachtgever, datum, regels, subtotaal/BTW/totaal,
en "self-billing: ja/nee". Vraag bevestiging.
### 7. Na bevestiging: schrijf weg + bewaar origineel
1. **Bewaar het originele bestand** in het kwartaalmapje `facturen/<YYYY-QN>/` (bewaarplicht),
met `<YYYY-QN>` = kwartaal uit de factuurdatum (Q1=jan–mrt, … Q4=okt–dec). Maak het mapje
eerst aan: `mkdir -p facturen/<YYYY-QN>`. Gebruik de bestandsnaam met het factuurnummer, bv.
`facturen/2026-Q2/IRB172600055.pdf`. Heb je alleen het pad naar het bronbestand van de
gebruiker → kopieer dat hierheen. Zet `pdf_path` op dat volledige pad. (Geen PDF genereren —
die bestaat al.)
2. **invoices.csv:** `node "${CLAUDE_PLUGIN_ROOT}/lib/admin.mjs" append data/invoices.csv '<row>'` met:
`number` (van opdrachtgever)`, date, due_date, client_id, client_name, subtotal,
vat_percentage, vat_amount, total, vat_reverse_charged="false", status="sent",
source="imported", self_billing` (true/false)`, reference, notes, pdf_path, created_at` (vandaag).
3. **invoice_items.csv:** per regel een append met
`invoice_number, line_no, description, quantity, unit, rate, amount, vat_percentage`.
Eenheid: "uren"/"normale uren" → `hours`; anders kies de passende `unit`.
Gebruik exact deze kolomnamen: `append` stopt met een fout (en schrijft niets) als een gevuld veld
geen kolom heeft in het CSV-bestand.
Meld kort: factuurnummer, opdrachtgever, totaal, dat het als omzet is geboekt (rubriek 1a/1b),
en dat het origineel in `facturen/<YYYY-QN>/` staat. Het telt automatisch mee in `/aangifte`.
## Belangrijk
- `status="sent"` (telt mee in de BTW-aangifte). Markeer 'm later op `paid` met `/betaald`
(zet ook de betaaldatum `paid_at`) als hij betaald is.
- De urenspecificatie (vaak pagina 2) hoeft niet als losse regels — neem de factuurregel(s) van
pagina 1 over. Bewaar de volledige PDF (incl. specificatie) voor de bewaarplicht.
- Geen verwijder-actie via de skill — corrigeren doet de gebruiker met de hand in de CSV.