refactor: rebrand project to HartOMat

This commit is contained in:
2026-04-06 12:45:47 +02:00
parent fa7093307a
commit b795f0e6d6
95 changed files with 608 additions and 497 deletions
+8 -8
View File
@@ -1,7 +1,7 @@
"""Material alias resolution service.
Used from Celery tasks (sync context) to resolve raw material names
(from Excel / user input) to SCHAEFFLER library material names via aliases.
(from Excel / user input) to HARTOMAT library material names via aliases.
Resolution chain:
1. Alias lookup (case-insensitive) → use alias.material.name
@@ -31,7 +31,7 @@ def _get_engine():
def resolve_material_map(raw_map: dict[str, str]) -> dict[str, str]:
"""Resolve raw material names to SCHAEFFLER library names via aliases.
"""Resolve raw material names to HARTOMAT library names via aliases.
For each value in raw_map:
1. Alias lookup (case-insensitive) → return alias.material.name
@@ -66,7 +66,7 @@ def resolve_material_map(raw_map: dict[str, str]) -> dict[str, str]:
raw_lower = raw_material.lower()
# 1. Alias lookup first — aliases explicitly map intermediate/display names
# to the canonical SCHAEFFLER library names
# to the canonical HARTOMAT library names
if raw_lower in alias_lookup:
target = alias_lookup[raw_lower]
logger.info("resolved '%s''%s' (alias match)", raw_material, target)
@@ -147,7 +147,7 @@ async def find_unmapped_materials(
"""Find material names that have no alias or library match.
Returns a list of {"raw_name": str, "suggestions": [...]} for each
unmapped name. Suggestions are the top 5 SCHAEFFLER library materials
unmapped name. Suggestions are the top 5 HARTOMAT library materials
by string similarity.
"""
if not material_names:
@@ -159,8 +159,8 @@ async def find_unmapped_materials(
# Load all materials
mat_rows = (await db.execute(select(Material))).scalars().all()
# Library materials have a schaeffler_code
library_mats = [m for m in mat_rows if m.schaeffler_code is not None]
# Library materials have a hartomat_code
library_mats = [m for m in mat_rows if m.hartomat_code is not None]
# All material names (case-insensitive) for exact-match check
name_lookup: dict[str, Material] = {m.name.lower(): m for m in mat_rows}
@@ -179,7 +179,7 @@ async def find_unmapped_materials(
# 2. Exact name match with a library material → mapped
matched_mat = name_lookup.get(raw_lower)
if matched_mat and matched_mat.schaeffler_code is not None:
if matched_mat and matched_mat.hartomat_code is not None:
continue
# Unmapped — compute suggestions from library materials
@@ -194,7 +194,7 @@ async def find_unmapped_materials(
{
"id": str(m.id),
"name": m.name,
"schaeffler_code": str(m.schaeffler_code),
"hartomat_code": str(m.hartomat_code),
}
for _, m in scored[:5]
]