[FEATURE]: Implement header Normalization + Per-Header Mapping (No Language Detection) #332

Closed
opened 2026-01-07 13:48:20 +01:00 by carla · 0 comments
Owner

Description

Map each header individually to canonical fields (normalized comparison).

Tasks:

  • Create lib/mv/membership/import/header_mapper.ex
  • Implement normalize_header/1
  • Normalize mapping variants once and compare normalized strings
  • Build column_map (canonical field -> column index)
  • Early abort if required headers missing (email)
  • Ignore unknown columns (member fields only)
  • Separate custom field column detection (by name, with normalization)

Acceptance criteria

  • English/German headers map correctly
  • Missing required columns fails fast

External or internal Dependencies

#330

## Description Map each header individually to canonical fields (normalized comparison). **Tasks:** - [ ] Create `lib/mv/membership/import/header_mapper.ex` - [ ] Implement `normalize_header/1` - [ ] Normalize mapping variants once and compare normalized strings - [ ] Build `column_map` (canonical field -> column index) - [ ] **Early abort if required headers missing** (`email`) - [ ] Ignore unknown columns (member fields only) - [ ] **Separate custom field column detection** (by name, with normalization) ## Acceptance criteria - [ ] English/German headers map correctly - [ ] Missing required columns fails fast ## External or internal Dependencies #330
carla added this to the I can import members milestone 2026-01-07 13:48:20 +01:00
carla added the
M
label 2026-01-07 13:48:20 +01:00
carla added a new dependency 2026-01-07 13:48:32 +01:00
carla added this to the Sprint 11: 08.01-29.01 project 2026-01-08 12:54:35 +01:00
carla self-assigned this 2026-01-15 13:39:40 +01:00
carla closed this issue 2026-01-15 17:01:52 +01:00
Sign in to join this conversation.
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference: local-it/mitgliederverwaltung#332
No description provided.