7.2 KiB
7.2 KiB
Feature Extensions Plan — Feuerwehr Dashboard
Generated 2026-03-16. Features that extend existing functionality.
Selected for Implementation (current sprint)
- #3 Inspection Schedule Export (PDF/CSV)
- #4 Vehicle Availability Calendar
- #8 Atemschutz Recertification Alert
- #19 Events Conflict Detection
- #21 Bulk Member Communication
- #22 Audit Log Alerts
Backlog — Vehicles & Equipment
Maintenance Cost Trend Reports [Medium]
- Aggregate costs from
wartungslogby vehicle/type, with YoY trends - Add new tab or section to
FahrzeugDetail.tsxmaintenance tab - Backend: new
GET /api/vehicles/:id/wartung/statsendpoint - Frontend: bar/line chart using existing chart pattern from
IncidentStatsChart - Data available:
wartungslog.kosten,wartungslog.datum,wartungslog.art
Equipment Move History [Quick Win]
- Track when equipment moves between vehicles/storage via audit_log entries
- Show timeline in
AusruestungDetail.tsxwith location change history - Backend: query audit_log for equipment UPDATE actions where fahrzeug_id changed
- Frontend: simple timeline list component
Equipment Inventory by Category Report [Quick Win]
- Dashboard card showing equipment count by category/status with drill-down
- Use existing
equipmentService.getEquipmentStats()data - Frontend: new
EquipmentCategoryCardin dashboard Status group - Chip counts per category, color-coded by status
Backlog — Personnel & Atemschutz
Member Qualification Matrix Export [Medium]
- CSV/PDF showing all members × qualifications (licenses, certifications, training status)
- Backend: new
GET /api/members/qualifications/exportjoining ausbildung, atemschutz_traeger, fahrgenehmigungen, untersuchungen - Frontend: export button on Mitglieder page
- PDF template: table with member rows × qualification columns
Rank Promotion Timeline [Quick Win]
- Visual timeline of rank changes per member
- Data:
dienstgrad_verlauftable already has full history - Frontend: timeline component in MitgliedDetail "Beförderungen" tab
- Use MUI Timeline component or simple vertical list
Qualifications Expiring Soon Widget [Medium]
- Dashboard widget showing members with soon-to-expire qualifications
- Query: JOIN ausbildung.ablaufdatum, atemschutz.gueltig_bis, untersuchungen.gueltig_bis
- WHERE expiry date BETWEEN now AND now + 90 days
- Backend: new
GET /api/members/expiring-qualifications?days=90 - Frontend: new dashboard card in Status group
Member On-Duty Roster Widget [Quick Win]
- Quick view showing who is on active duty (status=aktiv + specific function)
- Backend: filter members by status and funktion
- Frontend: simple card widget showing avatar + name list
Backlog — Incidents & Operations
Response Time Analytics [Medium]
- Dashboard showing hilfsfrist trends, median times by incident type
- Data:
einsatz_statistikmaterialized view hashilfsfrist_min - Backend: new
GET /api/incidents/response-times?groupBy=einsatz_art - Frontend: line chart or box plot in Einsaetze page analytics section
Personnel Availability During Incident [Medium]
- Incident detail view showing who was on-duty vs. who responded
- Cross-reference einsatz_personal with member status at time of incident
- Backend: extend
getIncidentByIdto include non-responding active members - Frontend: new section in EinsatzDetail with available/responded columns
Vehicle Usage by Incident Type [Quick Win]
- Report: which vehicles deployed per incident type
- Backend: aggregate einsatz_fahrzeuge grouped by einsatz_art
- Simple query on existing data, return as stats
- Frontend: table or chart in Einsaetze page
Incident Debriefing Template [Medium]
- Structured post-incident notes (what went well, improvements, training needs)
- Extend
bericht_textor add new JSON columndebriefwith structured fields - Backend: migration for new column, extend PATCH endpoint
- Frontend: collapsible section in EinsatzDetail with structured fields
Callout Distribution Report [Quick Win]
- Personnel workload analysis: how many callouts per member
- Backend:
SELECT user_id, COUNT(*) FROM einsatz_personal GROUP BY user_id - Frontend: table or chart in admin dashboard or Mitglieder page
Backlog — Training & Events
Training Attendance Statistics [Medium]
- Member participation trends (% events attended, absences, by type)
- Backend: aggregate uebung_teilnahmen by user_id with status counts
- Frontend: new admin tab or member profile tab with charts
- Could show per-member attendance rate badge
Training Requirement Tracking [Significant]
- Mark Übungen as mandatory for certain roles/ranks
- Schema: new
training_requirementstable (role, training_type, frequency) - Backend: CRUD for requirements, validation check for members
- Frontend: admin config page + dashboard alerts for non-compliant members
- Notifications for members missing required training
QR Code Check-In [Medium]
- Mobile-friendly quick check-in for training events
- Generate QR code containing
POST /api/training/:id/attendanceURL - Frontend: QR code display on UebungDetail page
- Scanner: simple camera component or link to URL
Backlog — Notifications & Admin
Customizable Notification Preferences [Medium]
- Per-user opt-in/out of notification types (training, incidents, roster)
- Extend user preferences schema with notification_preferences object
- Backend: check preferences before creating notifications
- Frontend: new section in Settings page with toggle switches per type
Backlog — Reporting & Analytics
Annual Department Report (PDF) [Significant]
- Compile incident stats, training participation, member roster, equipment inventory
- Backend: new
GET /api/reports/annual?year=2025generating comprehensive PDF - Use existing PDF generation pattern from Kalender
- Sections: executive summary, incident stats, training stats, personnel changes, equipment inventory
Member Hours Tracking [Medium]
- Calculate firefighter hours from training events + incidents + on-duty shifts
- Backend: aggregate event duration (datum_von to datum_bis) + incident time (alarm to einrueck)
- Frontend: member profile analytics tab + dashboard card
Equipment Utilization Report [Quick Win]
- Usage by category/vehicle/incident type
- Backend: join ausruestung with einsatz_fahrzeuge to correlate
- Frontend: table in admin dashboard or Ausruestung page
Member Skills Matrix [Medium]
- Export showing member name × all certifications
- Backend: JOIN across ausbildung, atemschutz_traeger, fahrgenehmigungen
- Frontend: exportable table with color-coded validity indicators
- PDF export using existing PDF generation pattern
Backlog — System
Incident Photo/Document Gallery [Medium]
- Upload photos/PDFs to incidents
- Schema: new
einsatz_dokumentetable (einsatz_id, filename, mime_type, storage_path) - Backend: multipart upload endpoint, file storage (local or Nextcloud)
- Frontend: gallery component in EinsatzDetail with drag-and-drop
Incident Stats Year Selector [Quick Win]
- View historical stats for previous years
- Backend: already supports
yearquery parameter - Frontend: add year selector dropdown to IncidentStatsChart
- Simple UI change, no backend work needed