Assessor_2.0/src/importers/generic-table-source-extrac...

38 lines
1.4 KiB
TypeScript

import type { SourceExtractor } from '../domain/source-extraction';
function safeId(value: string): string {
return value.replace(/[^a-zA-Z0-9_-]/g, '-');
}
export const genericTableSourceExtractor: SourceExtractor = {
id: 'generic-table-source-extractor',
version: '1.0.0',
fallback: true,
detect(document) {
const count = document.tables.length;
return count
? { score: 0.1, evidence: [`${count} kompatible Tabellenansicht(en) vorhanden.`] }
: { score: 0, evidence: [] };
},
extract(document) {
const candidates = document.tables.flatMap(table => {
const header = table.headerCandidates[0];
return table.rows
.filter(row => row.index !== header?.rowIndex && row.cells.some(cell => cell.decodedValue.trim()))
.map(row => ({
version: 1 as const,
id: `candidate-${safeId(table.id)}-${row.index}`,
source: { fileName: document.file.name, tableIndex: table.index, rowIndex: row.index },
fields: row.cells.map(cell => ({
key: `column-${cell.source.columnIndex ?? 0}`,
label: header?.headers[cell.source.columnIndex ?? 0] || `Spalte ${(cell.source.columnIndex ?? 0) + 1}`,
originalValue: cell.rawValue,
decodedValue: cell.decodedValue,
source: { ...cell.source, fileName: document.file.name }
}))
}));
});
return { version: 1, candidates, diagnostics: [] };
}
};