Create project structure with core models and logging
This commit is contained in:
1 parent
a84fd04035
commit
e34c491719
11 files changed
+79
-5
No files matched your search
@@ -20,10 +20,10 @@ Projekt vollstaendig umsetzen: aus PS_PW.xlsx und Stellenbeschreibungen.xlsx mon
|
||||
- [ ] Regeln fuer Monatsmarker und Datumsformat
|
||||
|
||||
## Phase 2 - Projektgeruest und Basiskomponenten
|
||||
- [ ] T3: Python-Projektstruktur anlegen
|
||||
- [ ] Modulaufteilung (cli, parser, matcher, validator, writer, model, util)
|
||||
- [ ] Gemeinsame Datenmodelle (z. B. dataclasses) definieren
|
||||
- [ ] Zentrales Logging/Fehlermodell vorbereiten
|
||||
- [x] T3: Python-Projektstruktur anlegen
|
||||
- [x] Modulaufteilung (cli, parser, matcher, validator, writer, model, util)
|
||||
- [x] Gemeinsame Datenmodelle (z. B. dataclasses) definieren
|
||||
- [x] Zentrales Logging/Fehlermodell vorbereiten
|
||||
- [ ] T4: Abhaengigkeiten und Laufzeit vorbereiten
|
||||
- [ ] benoetigte Pakete festlegen (z. B. openpyxl, click)
|
||||
- [ ] requirements-Datei pflegen
|
||||
@@ -111,4 +111,4 @@ Projekt vollstaendig umsetzen: aus PS_PW.xlsx und Stellenbeschreibungen.xlsx mon
|
||||
8. T15 -> T16 -> T17
|
||||
|
||||
## Aktueller Startpunkt
|
||||
- [ ] Naechste aktive Aufgabe: T3 (Python-Projektstruktur anlegen)
|
||||
- [ ] Naechste aktive Aufgabe: T4 (Abhaengigkeiten und Laufzeit vorbereiten)
|
||||
@@ -0,0 +1,7 @@
|
||||
"""SAB Taetigkeitsnachweis generator package."""
|
||||
|
||||
__all__ = [
|
||||
"models",
|
||||
"errors",
|
||||
"logging_utils",
|
||||
]
|
||||
@@ -0,0 +1 @@
|
||||
"""CLI entrypoint and orchestration layer."""
|
||||
@@ -0,0 +1,14 @@
|
||||
class TaetigkeitsnachweisError(Exception):
|
||||
"""Base exception for all domain-specific failures."""
|
||||
|
||||
|
||||
class ConfigurationError(TaetigkeitsnachweisError):
|
||||
"""Raised when configuration is missing or invalid."""
|
||||
|
||||
|
||||
class ValidationError(TaetigkeitsnachweisError):
|
||||
"""Raised when source or business validation fails."""
|
||||
|
||||
|
||||
class MatchingError(TaetigkeitsnachweisError):
|
||||
"""Raised when records cannot be matched uniquely."""
|
||||
@@ -0,0 +1,8 @@
|
||||
import logging
|
||||
|
||||
|
||||
def configure_logging(level: int = logging.INFO) -> None:
|
||||
logging.basicConfig(
|
||||
level=level,
|
||||
format="%(asctime)s | %(levelname)s | %(name)s | %(message)s",
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
"""Record matching logic across allocation and master data."""
|
||||
@@ -0,0 +1,39 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class AllocationRecord:
|
||||
employee_name: str
|
||||
contract_hours_weekly: float
|
||||
project_key: str
|
||||
funded_hours_weekly: float
|
||||
notes: str = ""
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class MasterDataRecord:
|
||||
record_id: str
|
||||
antragsnummer: str
|
||||
name: str
|
||||
qualifikation: str
|
||||
stellenanteil_percent: float
|
||||
funktion: str
|
||||
taetigkeit: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class MatchedAssignment:
|
||||
allocation: AllocationRecord
|
||||
masterdata: MasterDataRecord
|
||||
foerderquote_percent: float
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ValidationIssue:
|
||||
code: str
|
||||
message: str
|
||||
severity: str = "error"
|
||||
context: Optional[str] = None
|
||||
@@ -0,0 +1 @@
|
||||
"""Parsing and normalization for source workbooks."""
|
||||
@@ -0,0 +1 @@
|
||||
"""Shared utility helpers."""
|
||||
@@ -0,0 +1 @@
|
||||
"""Source and business rule validation."""
|
||||
@@ -0,0 +1 @@
|
||||
"""Template-based output workbook writer."""
|
||||
Reference in new issue
Block a user