| """Data models for address conversion.""" | |
| from dataclasses import dataclass, field | |
| from enum import Enum | |
| class MappingType(str, Enum): | |
| UNCHANGED = "unchanged" | |
| RENAMED = "renamed" | |
| MERGED = "merged" | |
| DIVIDED = "divided" | |
| class ConversionStatus(str, Enum): | |
| SUCCESS = "success" | |
| PARTIAL = "partial" # Only province matched | |
| NOT_FOUND = "not_found" | |
| class AdminUnit: | |
| province: str = "" | |
| district: str = "" | |
| ward: str = "" | |
| street: str = "" | |
| def to_address(self) -> str: | |
| parts = [p for p in (self.street, self.ward, self.district, self.province) if p] | |
| return ", ".join(parts) | |
| class ConversionResult: | |
| original: str = "" | |
| converted: str = "" | |
| status: ConversionStatus = ConversionStatus.NOT_FOUND | |
| mapping_type: MappingType | None = None | |
| old: AdminUnit = field(default_factory=AdminUnit) | |
| new: AdminUnit = field(default_factory=AdminUnit) | |
| note: str = "" | |