move the whole app in subfolder

This commit is contained in:
Rob committed 2026-06-30 15:34:47 +02:00
1 parent fa3e99dec0
commit 94e245a3a0
27 files changed

No files matched your search

+75
View File
@@ -0,0 +1,75 @@
"""Tätigkeitsnachweis-Generator – Datenmodelle."""
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class EmployeeRecord:
"""Eine Zeile aus einem Monats-Sheet der Input-Datei."""
name: str
antragsnummer: str
qualifikation: str
funktion: str
stellenanteil: str
monat: str # z. B. "01.2025"
taetigkeit: str
id: Optional[int] = None
kommentar: Optional[str] = None
@property
def month_index(self) -> int:
"""Extrahiere den Monatsindex (1–12) aus dem Monatsfeld."""
try:
return int(self.monat.split(".")[0])
except (ValueError, IndexError):
return 0
@property
def year(self) -> int:
"""Extrahiere das Jahr aus dem Monatsfeld."""
try:
return int(self.monat.split(".")[1])
except (ValueError, IndexError):
return 0
@dataclass
class FieldSchema:
"""Definition eines Feldes aus input-fields.json."""
column: str
field_name: str
type: str
required: bool
@dataclass
class OutputMapping:
"""Definition eines Mappings aus output-fields.json."""
source_field: str
format: Optional[str] = None
pdf_field: Optional[str] = None # Name des _Field-Platzhalters im PDF (z.B. "Auftragsnummer_Field")
@dataclass
class AppConfig:
"""Gesamte App-Konfiguration."""
input_dir: str
template_dir: str
output_dir: str
filename_pattern: str
input_schema: list = field(default_factory=list)
output_mapping: list = field(default_factory=list)
month_sheet_pattern: str = "* 20??"
skip_empty_name: bool = True
skip_empty_antragsnummer: bool = True
fontsize: float = 11.0
@dataclass
class ValidationResult:
"""Ergebnis einer Validierung."""
is_valid: bool
errors: list = field(default_factory=list)
warnings: list = field(default_factory=list)
info: dict = field(default_factory=dict)