gmal-scope-builder/backend/app
DJP a79529470e Fix header detection: distinguish header text from data values
Problem: Header detection picked data rows (with Yes/No/numbers) as headers
because they had more filled cells than the actual header row (which had
merged cells with gaps). Result: data values became column labels, deep
extraction failed.

Fix:
- Header values must be text-like (not numbers, Yes/No, 0/1, ü, x, -)
- Only consecutive header rows count - stop scanning at first data row
- Multi-row headers combined (row 1 + row 2 both contribute)
- Tested against Wella Job Routes 2: correctly identifies row 2 as header
  with "Buckets | Categories | Top 10 deliverables | Tier A | Tier B | Tier C"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 16:15:00 -04:00
..
api Deep extraction: live progress between passes + elapsed timer 2026-04-10 10:03:04 -04:00
middleware Fix 401: send ID token instead of Graph access token 2026-03-30 11:16:44 +01:00
models Client tier mapping + GMAL complexity variant expansion 2026-04-09 15:02:45 -04:00
schemas Client tier mapping + GMAL complexity variant expansion 2026-04-09 15:02:45 -04:00
services Fix header detection: distinguish header text from data values 2026-04-12 16:15:00 -04:00
utils Improve matching, upload UX, collapse fix, full catalog approach 2026-03-27 19:22:08 -04:00
__init__.py Initial commit - GMAL Scope Builder 2026-03-27 17:35:14 -04:00
config.py Initial commit - GMAL Scope Builder 2026-03-27 17:35:14 -04:00
database.py Initial commit - GMAL Scope Builder 2026-03-27 17:35:14 -04:00
main.py P1: Role-specific efficiency profiles + BTG tool efficiencies 2026-04-09 13:48:30 -04:00