Darstellung
Knowledge Kalender
Der Knowledge Kalender ermöglicht zeitgebundene Wissens-Eintraege (Kurse, Oeffnungszeiten, Events). Eintraege werden als knowledge_items mit Kalender-Feldern gespeichert und über buildCalendarText() in semantisch durchsuchbaren Text umgewandelt.
Endpoints
Alle Endpoints sind unter /api/knowledge-calendar gemountet und erfordern combinedAuth.
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | / | Alle Kalender-Eintraege des Tenants laden |
| POST | / | Neuen Kalender-Eintrag erstellen |
| PUT | /:id | Bestehenden Eintrag aktualisieren |
| DELETE | /:id | Eintrag löschen |
POST / PUT Request Body
json
{
"title": "Ski-Gruppenkurs",
"description": "Für Anfaenger und Fortgeschrittene",
"calendar_category": "Skischule",
"calendar_valid_from": "2026-01-15",
"calendar_valid_until": "2026-03-31",
"calendar_time_from": "10:00",
"calendar_time_to": "12:00",
"calendar_recurrence": "weekly",
"calendar_days": ["Montag", "Mittwoch", "Freitag"],
"calendar_interval": null,
"calendar_price": "89€ pro Person",
"calendar_booking_url": "https://example.com/buchen"
}Response
json
{
"success": true,
"entry": { ... }
}Kalender-Felder auf knowledge_items
| Spalte | Typ | Beschreibung |
|---|---|---|
| calendar_valid_from | date | Gültig ab |
| calendar_valid_until | date | Gültig bis |
| calendar_time_from | varchar(10) | Uhrzeit von (z.B. "10:00") |
| calendar_time_to | varchar(10) | Uhrzeit bis (z.B. "12:00") |
| calendar_recurrence | varchar(20) | Wiederholungs-Modus |
| calendar_interval | integer | Intervall in Tagen (bei recurrence='interval') |
| calendar_days | jsonb | Wochentage als Array (bei recurrence='weekly') |
| calendar_price | varchar(50) | Preis-Information |
| calendar_booking_url | text | Buchungs-Link |
| calendar_category | varchar(100) | Kategorie des Eintrags |
Recurrence-Werte
| Wert | Anzeige | Beschreibung |
|---|---|---|
daily | Taeglich | Jeden Tag |
interval | Alle N Tage | Nutzt calendar_interval für den Abstand |
weekly | Jeden Mo, Mi, Fr | Nutzt calendar_days für die Wochentage |
monthly | Monatlich | Einmal pro Monat |
none / leer | Einmalig / auf Anfrage | Kein Wiederholungs-Muster |
Datumsformat
Datumswerte werden immer als dd.mm.yyyy in den Vektor-Chunk geschrieben. Die Methode formatDateForChunk() stellt das sicher:
javascript
static formatDateForChunk(dateVal) {
if (!dateVal) return null;
const d = new Date(dateVal);
if (isNaN(d.getTime())) return null;
return `${String(d.getDate()).padStart(2, '0')}.${String(d.getMonth() + 1).padStart(2, '0')}.${d.getFullYear()}`;
}Niemals rohes Date-Objekt
Date-Objekte dürfen nie per String-Interpolation in Chunks landen. Immer formatDateForChunk() verwenden.
buildCalendarText()
Diese Methode erzeugt den Text, der vektorisiert wird. Die Reihenfolge:
- Termin-Titel
- Kategorie
- Uhrzeit (von–bis)
- Wiederholung (menschenlesbar via
recurrenceToHuman()) - Gültig ab / bis (formatiert als dd.mm.yyyy)
- Preis
- Buchungs-URL
- Beschreibung
- Überlappende Feiertage/Ferien (für semantischen Match)
Beispiel-Output
Termin: Ski-Gruppenkurs
Kategorie: Skischule
Uhrzeit: 10:00–12:00
Wann: Jeden Montag, Mittwoch, Freitag
Gültig ab: 15.01.2026
Gültig bis: 31.03.2026
Preis: 89€ pro Person
Buchung: https://example.com/buchen
Beschreibung: Für Anfaenger und Fortgeschrittene
Faellt in: Semesterferien, OsterferienFeiertags-Erkennung
Der Service prueft automatisch, welche oesterreichischen Feiertage und Salzburger Schulferien in den Gültigkeitszeitraum eines Eintrags fallen. Diese werden dem Vektor-Chunk hinzugefuegt, damit semantische Suchen wie "Was gibt es in den Semesterferien?" funktionieren.
Gauss'sche Osterformel
Bewegliche Feiertage (Ostern, Pfingsten, Fronleichnam, Christi Himmelfahrt) werden über die Gauss'sche Osterformel berechnet. Die Formel liefert das Datum des Ostersonntags für ein beliebiges Jahr.
Fixe Feiertage
| Datum | Name |
|---|---|
| 1. Jaenner | Neujahr |
| 6. Jaenner | Heilige Drei Koenige |
| 1. Mai | Staatsfeiertag |
| 15. August | Mariae Himmelfahrt |
| 26. Oktober | Nationalfeiertag |
| 1. November | Allerheiligen |
| 8. Dezember | Mariae Empfaengnis |
| 24. Dezember | Heiligabend |
| 25. Dezember | Weihnachten |
| 26. Dezember | Stefanitag |
| 31. Dezember | Silvester |
Bewegliche Feiertage (Ostern-basiert)
| Offset | Name |
|---|---|
| Ostern -2 | Karfreitag |
| Ostern | Ostersonntag |
| Ostern +1 | Ostermontag |
| Ostern +39 | Christi Himmelfahrt |
| Ostern +49 | Pfingstsonntag |
| Ostern +50 | Pfingstmontag |
| Ostern +60 | Fronleichnam |
Schulferien Salzburg (Näherung)
| Zeitraum | Name |
|---|---|
| 3.–9. Februar | Semesterferien |
| Ostern -8 bis Ostern +1 | Osterferien |
| 5. Juli – 7. September | Sommerferien |
| 27. Oktober – 2. November | Herbstferien |
| 23. Dezember – 6. Jaenner | Weihnachtsferien |
Status-Berechnung
computeStatus() berechnet den Status eines Kalender-Eintrags anhand des heutigen Datums:
| Status | Bedingung |
|---|---|
expired | calendar_valid_until liegt in der Vergangenheit |
upcoming | calendar_valid_from liegt in der Zukunft |
active | Heute liegt im Gültigkeitszeitraum |