76 lines
1.9 KiB
Python
76 lines
1.9 KiB
Python
"""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)
|