# AGENTS.md
## Guidelines
Die Fragende Person/der Nutzer ist Softwareentwickler, Full-Stack Webentwickler und Netzwerkadministrator.
Der Fragende/der Nutzer wird bei allen Software und Netzwerk-Design-Entscheidungen und beim Erstellen von Code durch Nachfrage eingebunden!
Gib mir immer erst Deine Idee oder deinen Plan damit wir diesen gemeinsam abstimmen können!
Gib mir auch immer die technischen Details mit, damit ich alles verstehen kann.
## Ziel der zu entwicklenden Anwendung
Entwicklung einer abgeschlossenen Komponente für das CMS Contao, um Terminbuchungs-Funktionen in der Website des Perspektivwerks (PW) und der Produktionsschule (PS) zu implementieren.
Ziel ist eine nutzerfreundliche und schöne Buchungsoberfläche, die den genannten Terminarten entspricht, mobil nutzbar ist, sicher umgesetzt wird und später mittels ICS Addresse in Kalenderprogramme integriert werden kann.
### Technik
Contao ist ein in PHP geschriebenes CMS, das ansonsten einfach Webtechnologien verwendet.
In dieses soll eine WebComponente integriert werden, die einen Terminbuchungskalender anzeigt.
Termininformationen kommen aus der Datenbank entweder mittels Contao oder direkt als MySQL Query.
Es gibt zwei Kalender (je für PW/PS) und jeder Kalender enthält eigene Termine die von Besuchern gebucht werden können.
### Auslieferungswege der Terminbuchungskomponente
Die Terminbuchungskomponente muss in zwei gleichwertigen Varianten funktionieren:
- **Apache-Vorschau:** als Bestandteil der statischen Seite im Webpfad `public/perspektivwerk/`, erreichbar unter `http://localhost:8080/perspektivwerk/`.
- **Contao-Einbindung:** als einbettbare Komponente in einem Contao-Inhaltselement vom Typ HTML.
Contao verwendet die browsernativen JavaScript- und CSS-Assets aus `public/booking/`: `booking.js` und `booking.css`, eingebunden über `/booking/booking.js` und `/booking/booking.css`. Für die Apache-Vorschau liegen identische, statisch übertragbare Kopien unter `public/perspektivwerk/js/`, die relativ über `js/booking.js` und `js/booking.css` eingebunden werden. Für Contao wird das kombinierte Snippet aus `integration/contao-html-element.html` in ein neues Inhaltselement vom Typ **HTML** eingefügt. Es muss als Roh-HTML im Feld „HTML-Code“ gespeichert werden, nicht als Textinhalt eines TinyMCE-Text-Elements. Ein zweites Kopieren in den Contao-Dateibereich `files/` ist nicht erforderlich.
### Die Oberfläche / UI
- ein Kalender-view aller Tage des aktuellen Monats
- der Monat kann vor und zurück gewechselt werden
- Tage mit freien Terminen werden farblich dargestellt
- wird auf einen Tag geklickt sind alle slots an diesem Tag zu sehen (farblich unterschieden verfügbar/schon belegt)
- wird auf einen freien Slot geklickt kann dieser durch eine E-Mail-Bestätigung (Datenschutzbedingung akzeptiert, Art. 13 DSGVO) verbindlich gebucht werden
- is barrierefrei. Alle Komponenten haben WAI-ARIA tags, sinnvolle Focus-Reihenfolge, Bildbeschreibungen, gute Kontraste, Farbenblindheit ist berücksichtigt
### Besucher der Webseite können
- in der Komponente die verfügbaren Termine sehen (offen / schon belegt)
- einen der verfügbaren Termine für sich buchen (Angabe einer E-Mail Adresse, Bestätigung des Termins via Email)
- Nach der Bestätigung via E-Mail kommt zweite Mail zur Bestätigung. Diese enthält ein *.ics file mit dem Termin (Kalenderintegration des Klienten)
- Nicht bestätigte Buchungen laufen nach 30 Minuten ab, der Slot wird wieder frei
### Mitarbeiter von PS oder PW können
- alle gebuchten Termine mittels einer Kalenderaddresse abonnieren und in ihren eigenen Kalender (Google & Outlook) integrieren
- wann abonnierte Kalender synchronisiert werden unklar, Mitarbeiter müssen im Zweifel bei kurz bevorstehenden Terminen im tool nachsehen
- soweit vorgesehen: Ihre Verfügbarkeit für Termin-Slots im eintragen (via. Contao-Backend)
- soweit vorgesehen: Ihre Verfügbarkeit für Termin-Slots bearbeiten (via. Contao-Backend)
### Fachliche Fragen
1. Sind die buchbaren Zeiten immer gleich (z.B.. Mo. & Mit. 13, 14 und 15Uhr) oder ständig neu (Feiertage, Schließzeiten, etc.)?
1. Wer darf alles die Zeiten anpassen (müssen leicht anzupassen sein),
2. Mit wieviel Vorlaufzeit sind offene Terminslots bekannt?
3. Wie sollen Terminslots geändert werden?
1. per Contao-Backend?
2. ein eigenes Backend des Tools?
3. per Mail an das Tool?
4. per eigenem Kalendereintrag?
2. Dürfen Besucher auch belegte (anonyme) Termine sehen (um über die Terminlage generell informiert zu sein)?
3. Sollen Besucher eine Bestätigungsmail bekommen und in dieser den Termin auch bestätigen?
4. Welche Informationen sollen Besucher der Seite für den Termin eingeben?
1. Name, Telefon, Alter, Nachricht, Ansprechpartner bei AfA/Jobcenter?
2. Wer soll die Informationen bekommen? (eine Koordinierungstelle, die konkreten verschiedenen Sachbarbeitenden, andere?)
5. Wer oder wie viele Menschen/Kontakte werden informiert? Gibt es nur ein Stelle die je für PW/PS involviert , oder müssen wie bei deiner Arztreferenz auch verschiedene Personen/Themen/Schwerpunkte o.ä. koordiniert werden?
6. Gibt es mehrere Räume die z.B. abhängig genutzt und in die Modellierung eingebaut werden müssen?
7. Gibt es irgendwas zu beachten bei Minderjährigen und E-Mails oder Zeitbuchungen?
8. Wenn E-Mail nicht klappt, Fallback auf Telefon (WhatsApp, Signal whatever?)
9. Hinweis: Rücksprache mit Datenschutzbeauftragtem bzgl. E-Mail Validierung!
10. Sollen die Mitarbeiter direkten E-Mail Kontakt zu den Klienten aufnehmen können, z.B. um Termin zu verschieben, stornieren, Rückfragen?
11. Müssen stornierte Termine gespeichert werden? Wegen Kosten oder Rückverfolgung?
12. Soll das tool Klienten einen Tag vor dem Termin noch mal per Mail informieren o.ä.?
### Technische Fragen
1. Die verwendete Contao-Version hat bekannte Sicherheitslücken, wann wird aktualisiert?
2. Zum einbinden der Terminbuchung muss in den Sicherheitseinstellungen von Contao und