> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kaspert.be/llms.txt
> Use this file to discover all available pages before exploring further.

# Inkomsten en onkosten boeken in het Kaspert-kasboek

> Voeg inkomsten- en uitgavenboekingen toe, bewerk, verwijder en filter ze in je kasboek, met bulksgewijze acties, CSV-export en optionele bonnetje-uploads.

Transacties zijn de individuele financiële records die je kasboek vormen. Elke keer dat er geld de groep in of uit gaat: een kampbijdrage geïnd, een factuur van een leverancier betaald, een sponsorgift ontvangen, boek je hier. Kaspert slaat elke boeking op met een datum, bedrag, type, categorie en een optionele bijlage van een bonnetje, zodat je een volledige en controleerbare financiële geschiedenis hebt voor elk werkjaar.

## Transactietypes

Kaspert herkent drie transactietypes:

| Type              | Label in UI | Beschrijving                                                                                                                                                                            |
| ----------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `income`          | Inkomsten   | Geld ontvangen door de organisatie (bijv. lidgelden, evenemententickets, sponsoring).                                                                                                   |
| `expense`         | Uitgave     | Geld uitgegeven door de organisatie (bijv. kampbenodigdheden, verzekering, vervoer).                                                                                                    |
| `pending_expense` | Uitgave     | Een uitgave die nog niet bevestigd is. In het transactieformulier zet het klikken op **Uitgave** deze interne status; bij opslaan slaat Kaspert de boeking op als een gewone `expense`. |

<Note>
  `pending_expense` is een interne formulierstatus, geen type dat je op opgeslagen boekingen ziet. Alle uitgaven die je via het formulier **Nieuw** invoert, worden opgeslagen als `expense`, ongeacht hoe de knop gelabeld was toen je erop klikte.
</Note>

## Transactiebronnen

Elke transactie heeft een `source`-veld dat bijhoudt hoe ze in je kasboek terechtkwam:

| Bron          | Badge         | Betekenis                                                        |
| ------------- | ------------- | ---------------------------------------------------------------- |
| `manual`      | **Bon**       | Handmatig ingevoerd via het formulier "Nieuw".                   |
| `bank_import` | **Bank**      | Geïmporteerd uit een bank CSV-bestand.                           |
| `reconciled`  | **Bevestigd** | Gematcht met een betalingsverplichting uit de Betalingen-module. |

## Een transactie toevoegen

<Steps>
  <Step title="Open het transactieformulier">
    Op de Kasboek-pagina (`/dashboard`), klik op de knop **Nieuw** rechtsboven. Er opent een dialoogvenster met het transactieformulier.
  </Step>

  <Step title="Voeg een bonnetje toe (optioneel)">
    Klik op het uploadveld bovenaan het formulier om een foto of PDF van een bonnetje bij te voegen. Op **Basic-, Pro- en Premium-abonnementen** scant Kaspert het bonnetje automatisch met AI (OCR) en vult het bedrag, de datum, de omschrijving en de categorie voor je in. Op het Gratis abonnement wordt het bestand opgeslagen als referentie, maar niet gescand.
  </Step>

  <Step title="Kies het transactietype">
    Klik op **Inkomsten** of **Uitgave** om het type in te stellen. Dit bepaalt of het bedrag bij je saldo wordt opgeteld of ervan afgetrokken.
  </Step>

  <Step title="Vul de details in">
    Vul de volgende velden in:

    * **Bedrag (€)** — het transactiebedrag als positief getal (bijv. `45.00`).
    * **Datum** — de datum van de transactie in `YYYY-MM-DD`-formaat (de datumkiezer doet dit voor je).
    * **Categorie** — selecteer een categorie uit de dropdown. Alleen actieve categorieën verschijnen hier.
    * **Omschrijving** — een korte beschrijving van waar de transactie voor was (bijv. "Kampvoedsel augustus").
  </Step>

  <Step title="Opslaan">
    Klik op **Transactie Toevoegen**. De transactie verschijnt meteen in de lijst en de balanssamenvatting wordt in realtime bijgewerkt.
  </Step>
</Steps>

## Een transactie bewerken

Zoek de transactie in de lijst en hover over de rij om de actie-iconen aan de rechterkant te tonen. Klik op het **potlood-icoon** (Bewerken) om het bewerkingsdialoogvenster te openen. Werk een veld bij en klik op **Opslaan** om je wijzigingen op te slaan.

<Note>
  Zowel admins als leden met schrijftoegang kunnen transacties bewerken. Transacties die geïmporteerd zijn via bank CSV (`source: bank_import`) kunnen ook aan een bonnetje **gelinkt** worden door op het link-icoon te klikken dat bij hover verschijnt.
</Note>

## Een transactie verwijderen

Hover over een transactierij en klik op het **prullenbak-icoon** rechts. Er verschijnt een bevestigingsdialoog: klik op **Verwijderen** om te bevestigen. De verwijdering is permanent en kan niet ongedaan worden gemaakt.

<Warning>
  Alleen **admins** kunnen transacties verwijderen. Ledenaccounts hebben alleen-lezentoegang tot het kasboek.

  Als je een `income`-transactie verwijdert die gelinkt is aan een betalingsverplichting (d.w\.z. met `source` gelijk aan `reconciled`), maakt Kaspert de link automatisch **los** en zet de betaalstatus van de verplichting terug. De betalingsverplichting zelf wordt niet verwijderd.
</Warning>

## Bulksgewijs verwijderen

Voor admin-gebruikers verschijnt er een kolom met selectievakjes links van de transactielijst. Selecteer één of meer rijen door hun selectievakjes aan te vinken, en klik vervolgens op **Verwijder (n)** in de bulkactiebalk die boven de lijst verschijnt. Bevestig de verwijdering in het dialoogvenster.

Om in één keer alle rijen op de huidige pagina te selecteren, klik je op het selectievakje in de kop van de bulkactiebalk. Kaspert verwijdert in batches van 100, zodat zelfs grote selecties betrouwbaar worden uitgevoerd.

<Tip>
  Gebruik bulksgewijs verwijderen na een bankimport om snel test- of duplicatie-rijen te verwijderen voordat ze je saldo beïnvloeden.
</Tip>

## Filteren en sorteren

De filterbalk boven de transactielijst geeft je verschillende manieren om het overzicht te verfijnen:

<AccordionGroup>
  <Accordion title="Zoeken op omschrijving">
    Typ in het zoekveld (vergrootglas-icoon) om transacties te filteren op omschrijvingstekst. Het filter wordt toegepast terwijl je typt en is niet hoofdlettergevoelig.
  </Accordion>

  <Accordion title="Filteren op type">
    Gebruik de dropdown **Type** om alleen inkomsten (`Inkomsten`) of alleen onkosten (`Uitgaven`) te tonen. Als je **Alle types** selecteert, wordt het filter verwijderd.
  </Accordion>

  <Accordion title="Filteren op categorie">
    Gebruik de dropdown **Categorie** om alleen transacties met een specifieke categorie te tonen. Alle categorieën die momenteel in het kasboek gebruikt worden, worden getoond, inclusief gearchiveerde.
  </Accordion>

  <Accordion title="Filteren op periode">
    De dropdown **Periode** biedt snelle filters voor **Deze maand** (huidige kalendermaand) of **Dit jaar** (huidig kalenderjaar), naast het werkjaar-filter dat al op paginaniveau is toegepast.
  </Accordion>

  <Accordion title="Sorteren">
    De dropdown **Sorteer** laat je transacties sorteren op datum (nieuwste eerst is de standaard), datum (oudste eerst), bedrag (hoogste eerst) of bedrag (laagste eerst).
  </Accordion>
</AccordionGroup>

Gebruik de werkjaarselector rechtsboven op de pagina om tussen seizoenen te wisselen. Alle filters en de balanssamenvatting worden bijgewerkt voor het geselecteerde werkjaar.

## Exporteren naar CSV

Klik op **Exporteer CSV** (de downloadknop in de filterbalk) om een puntkomma-gescheiden CSV-bestand te downloaden van alle transacties die momenteel zichtbaar zijn na toepassing van je filters. Het bestand bevat een samenvattingsrij onderaan met totale inkomsten, totale onkosten en het nettosaldo.

## Transactiedatastructuur

De volgende TypeScript-interface definieert de vorm van een transactie-object doorheen de applicatie:

```typescript transaction.ts theme={null}
export type TransactionType = "income" | "expense" | "pending_expense";
export type TransactionSource = "manual" | "bank_import" | "reconciled";

export interface Transaction {
  id: string;
  type: TransactionType;
  amount: number;        // altijd een positief getal
  description: string;
  date: string;          // ISO 8601: YYYY-MM-DD
  category: string;
  receiptUrl?: string;   // optionele URL naar het bijgevoegde bonnetje
  source?: TransactionSource;
  linkedTransactionId?: string; // ingesteld wanneer source === "reconciled"
}
```

<Info>
  Het veld `amount` wordt **altijd opgeslagen als een positief getal**. Of een transactie je saldo verhoogt of verlaagt, wordt volledig bepaald door het veld `type`. Dit geldt zowel voor handmatig ingevoerde transacties als voor bankimports.
</Info>
