From 400520aebdf5e1a8fb9bc6be97d4a0e92bd3745c Mon Sep 17 00:00:00 2001 From: CCS Admin Date: Tue, 24 Feb 2026 23:09:16 +0000 Subject: [PATCH] fix: auto-detect CSV delimiter (comma, semicolon, tab) German Excel/CRM exports often use semicolons instead of commas. The parser now uses csv.Sniffer to auto-detect the delimiter, fixing the issue where semicolon-delimited CSVs produced 0 rows. Co-Authored-By: Claude Opus 4.6 --- backend/app/services/csv_parser.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/app/services/csv_parser.py b/backend/app/services/csv_parser.py index a121a76..06fbb42 100644 --- a/backend/app/services/csv_parser.py +++ b/backend/app/services/csv_parser.py @@ -76,7 +76,16 @@ def parse_csv(content: bytes, filename: str = "") -> list[ParsedCase]: and logged. """ text = content.decode("utf-8-sig") # Handle BOM - reader = csv.DictReader(io.StringIO(text)) + + # Auto-detect delimiter (comma vs semicolon) from first few lines + try: + dialect = csv.Sniffer().sniff(text[:2048], delimiters=",;\t") + delimiter = dialect.delimiter + except csv.Error: + delimiter = "," + logger.debug("CSV delimiter detected as %r for %s", delimiter, filename) + + reader = csv.DictReader(io.StringIO(text), delimiter=delimiter) cases: list[ParsedCase] = [] errors: list[str] = [] skipped = 0