# CAMT.053 - KONTOAUSZUG-FORMAT (UPGRADE v1.1)
==============================================
 
## Einführung
CAMT.053 ist der ISO 20022 Standard für elektronische Kontoauszüge. In BACH wird dieses Format genutzt, um Banktransaktionen automatisch mit Steuerbelegen abzugleichen.
 
## Feld-Mapping (ISO 20022 -> BACH)
 
| Bereich | XML-Pfad | BACH-Feld |
|---------|----------|-----------|
| IBAN | `Stmt/Acct/Id/IBAN` | `iban` |
| Betrag | `Stmt/Ntry/Amt` | `betrag` |
| Typ | `Stmt/Ntry/CdtDbtInd` | `typ` (CRDT/DBIT) |
| Datum | `Stmt/Ntry/BookgDt/Dt` | `datum` |
| Partner | `Stmt/Ntry/NtryDtls/TxDtls/RltdPties/Dbtr/Nm` | `partner` |
| Zweck | `Stmt/Ntry/NtryDtls/TxDtls/RmtInf/Ustrd` | `zweck` |
 
## Parser-Strategie (Python)
BACH nutzt `xml.etree.ElementTree` für ein performantes Parsing. Das Namespace-Handling erfolgt dynamisch, um verschiedene Bank-Dialekte zu unterstützen.
 
### Besonderheiten
- **Multiple Entries**: Ein Statement (`Stmt`) kann viele Einträge (`Ntry`) enthalten.
- **Multiple Purposses**: Verwendungszwecke können in mehreren `<Ustrd>` Tags oder strukturiert in `<Strd>` vorliegen. Der BACH-Parser (`tools/steuer/camt_parser.py`) konkateniert diese mit einem Pipe-Symbol (` | `).
- **Ultmt-Felder**: Falls der Name des Partners nicht im Standardfeld steht, werden `UltmtDbtr` oder `UltmtCdtr` als Fallback genutzt.
 
## Code-Beispiel (Nutzung in BACH)
```python
from tools.steuer.camt_parser import CamtParser
from pathlib import Path
 
path = Path("data/user/kontoauszug.xml")
parser = CamtParser(path)
transactions = parser.parse()
 
for tx in transactions:
    print(f"{tx['datum']} | {tx['betrag']} {tx['waehrung']} | {tx['partner']}")
```
 
## Testdaten
Mock-Dateien für Tests befinden sich in `data/test/mock_camt053.xml` und `mock_camt053_complex.xml`.
 
---
Dokumentation erstellt im Rahmen von Task #464.
