{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Attendance PDF Generator – Konfiguration", "description": "Konfigurationsschema für config.json", "type": "object", "required": [ "antragsnummer", "ort", "template_pdf", "output_dir", "excel_year_pattern", "excel_name_header", "excel_name_column", "excel_seq_column", "excel_day_start_col", "excel_day_end_col", "month_mapping", "valid_status_codes", "plan_hours_value", "pauschale_value" ], "properties": { "antragsnummer": { "type": "string", "description": "SAB-Antragsnummer (statisch, aus config)" }, "ort": { "type": "string", "description": "Ort für die Unterschrift (statisch, aus config)" }, "template_pdf": { "type": "string", "description": "Relativer Pfad zum PDF-Template" }, "output_dir": { "type": "string", "description": "Ausgabeverzeichnis für generierte PDFs" }, "excel_year_pattern": { "type": "string", "description": "Regex-Muster zur Jahresextraktion aus dem Dateinamen" }, "excel_name_header": { "type": "string", "description": "Text in der Headerzeile der Namensspalte" }, "excel_name_column": { "type": "integer", "description": "0-basierter Spaltenindex der Namensspalte (Spalte B = 1)" }, "excel_seq_column": { "type": "integer", "description": "0-basierter Spaltenindex der lfd. Nummer (Spalte A = 0)" }, "excel_day_start_col": { "type": "integer", "description": "0-basierter Spaltenindex des ersten Tages (Spalte J = 9)" }, "excel_day_end_col": { "type": "integer", "description": "0-basierter Spaltenindex des letzten Tages (Spalte AN = 39)" }, "month_mapping": { "type": "object", "description": "Mapping der deutschen Monatsabkürzungen auf zweistellige Monatsnummern", "additionalProperties": { "type": "string", "pattern": "^(0[1-9]|1[0-2])$" } }, "valid_status_codes": { "type": "array", "items": { "type": "string" }, "description": "Gültige String-Statuscodes in Excel-Zellen (außer numerisch)" }, "plan_hours_value": { "type": "string", "description": "Wert für das plan.N Dropdown (immer '6')" }, "pauschale_value": { "type": "string", "description": "Wert für das pauschale.N Feld wenn anwesend" }, "pdf_use_display_values": { "type": "boolean", "description": "true = Dropdown-Anzeigewerte ins PDF schreiben (z.B. 'X = anwesend'); false = rohe Export-Werte (z.B. 'X')", "default": true }, "pdf_need_appearances": { "type": "boolean", "description": "Steuert AcroForm /NeedAppearances beim Schreiben der PDF. false wird fuer stabile PyMuPDF-Render bevorzugt (Footer/Buttons sichtbar).", "default": false }, "excel_network_source": { "type": "string", "description": "Optionaler SMB- oder Dateipfad zur Excel-Datei, die beim GUI-Start nach input/ kopiert und bei Bedarf aktualisiert wird" } } }