# Tagging Fields Hulpprogramma's

## Overzicht

Dit document beschrijft de functionaliteit voor "tagging fields" in het systeem. Deze code biedt een flexibele manier om metadata velden te definiëren, valideren en documenteren voor gebruik in verschillende onderdelen van de applicatie.

## Kernconcept

Tagging fields zijn configureerbare metadata velden die gebruikt worden om verschillende objecten in het systeem te categoriseren, filteren en organiseren. De code biedt een uitgebreide set hulpprogramma's om:

1. Velddefinities te maken en valideren
2. Waarden te controleren op basis van veldbeperkingen
3. Documentatie te genereren in verschillende formaten

## Hoofdklassen

### TaggingField

De `TaggingField` klasse vertegenwoordigt een enkel metadataveld met:

- **type**: Het gegevenstype (`string`, `integer`, `float`, `date`, `enum`, `color`)
- **required**: Geeft aan of het veld verplicht is
- **description**: Beschrijving van het veld
- **allowed_values**: Mogelijke waarden voor enum typen
- **min_value** / **max_value**: Begrenzingen voor numerieke waarden

Interne validatie zorgt ervoor dat:
- Alleen geldige veldtypen worden gebruikt
- Enum velden altijd toegestane waarden hebben
- Numerieke velden geldige grenswaarden hebben

### TaggingFields

De `TaggingFields` klasse beheert een verzameling `TaggingField` objecten, gegroepeerd op naam. Het biedt:

- Conversie van/naar dictionaries met `from_dict()` en `to_dict()`
- Centrale opslag voor alle metadataveld configuraties

### Constraints Klassen

Er zijn verschillende klassen die beperkingen definiëren voor elk type veld:

- **NumericConstraint**: Voor integer/float waarden (min/max grenzen)
- **StringConstraint**: Voor tekstwaarden (lengte, patronen, verboden patronen)
- **DateConstraint**: Voor datumwaarden (min/max datums, formaten)
- **EnumConstraint**: Voor opsommingstypen (toegestane waarden, hoofdlettergevoeligheid)

Elke constraint klasse bevat een `validate()` methode om te controleren of een waarde voldoet aan de beperkingen.

### ArgumentDefinition en ArgumentDefinitions

Deze klassen breiden het concept uit naar functionele argumenten:

- **ArgumentDefinition**: Definieert een enkel argument met type en beperkingen
- **ArgumentDefinitions**: Beheert een verzameling argumenten en biedt validatie

## Documentatie Generatie

De module bevat functies om automatisch documentatie te genereren voor tagging fields:

- `generate_field_documentation()`: Hoofdfunctie die documentatie genereert
- Ondersteunt meerdere uitvoerformaten: Markdown, JSON, YAML
- Biedt twee versieniveaus: basic en extended

```python
# Voorbeeld van gebruik
documentatie = generate_field_documentation(
    tagging_fields=fields_config,
    format="markdown",
    version="extended"
)
```

## Hulpfuncties voor Patroonverwerking

De module bevat ook hulpprogramma's voor het verwerken van regex patronen:

- `patterns_to_json()`: Zet tekstgebied-inhoud om naar JSON patronenlijst
- `json_to_patterns()`: Zet JSON terug naar tekstgebied formaat
- `json_to_pattern_list()`: Converteert JSON naar een Python lijst

## Validatie in Formulieren

In combinatie met webformulieren wordt de `validate_tagging_fields()` functie gebruikt om formulierinvoer te valideren tegen het tagging fields schema. Dit zorgt ervoor dat alleen geldige configuraties worden opgeslagen.

## Voorbeeld Implementatie

```python
# Voorbeeld van tagging fields configuratie
fields_config = {
    "priority": {
        "type": "enum",
        "required": True,
        "description": "Prioriteit van het item",
        "allowed_values": ["laag", "medium", "hoog"]
    },
    "deadline": {
        "type": "date",
        "required": False,
        "description": "Deadline voor voltooiing"
    },
    "tags": {
        "type": "string",
        "required": False,
        "description": "Zoektags voor het item"
    }
}

# Maak een TaggingFields object
fields = TaggingFields.from_dict(fields_config)

# Genereer documentatie
docs = generate_field_documentation(fields_config, format="markdown")
```

## Conclusie

De tagging fields functionaliteit biedt een krachtige en flexibele manier om metadata te beheren in de toepassing. Door gebruik te maken van sterke typering en validatie, zorgt het systeem ervoor dat gegevens consistent en betrouwbaar blijven, terwijl het toch aanpasbaar is aan verschillende gebruikssituaties.
