fix(sync): use frequency-based date column detection for Untersuchungen to find all exam rows
This commit is contained in:
@@ -1032,17 +1032,25 @@ async function scrapeMemberUntersuchungen(
|
|||||||
cells: r.cells.map(c => c.replace(/\u00A0/g, ' ').trim()),
|
cells: r.cells.map(c => c.replace(/\u00A0/g, ' ').trim()),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Find date column
|
// Find date column dynamically: count date matches per column across ALL rows
|
||||||
|
// and pick the column with the MOST matches (avoids picking stray date in nav tables)
|
||||||
const datePattern = /^\d{2}\.\d{2}\.\d{4}$/;
|
const datePattern = /^\d{2}\.\d{2}\.\d{4}$/;
|
||||||
let dateColIdx = -1;
|
const dateCountByCol: Record<number, number> = {};
|
||||||
for (const r of mapped) {
|
for (const r of mapped) {
|
||||||
for (let ci = 0; ci < r.cells.length; ci++) {
|
for (let ci = 0; ci < r.cells.length; ci++) {
|
||||||
if (datePattern.test(r.cells[ci] ?? '')) {
|
if (datePattern.test(r.cells[ci] ?? '')) {
|
||||||
dateColIdx = ci;
|
dateCountByCol[ci] = (dateCountByCol[ci] || 0) + 1;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dateColIdx >= 0) break;
|
}
|
||||||
|
let dateColIdx = -1;
|
||||||
|
let maxCount = 0;
|
||||||
|
for (const [col, count] of Object.entries(dateCountByCol)) {
|
||||||
|
const colNum = Number(col);
|
||||||
|
if (count > maxCount || (count === maxCount && (dateColIdx === -1 || colNum < dateColIdx))) {
|
||||||
|
dateColIdx = colNum;
|
||||||
|
maxCount = count;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const dataRows = dateColIdx >= 0
|
const dataRows = dateColIdx >= 0
|
||||||
|
|||||||
Reference in New Issue
Block a user