feat(11-02): normalizer derives bundesland + backfill migration for existing rows
Replace the Phase-10-deferred `bundesland = null` assignment with bundeslandFromRegion(region) so new ingests are Bundesland-filterable immediately. Add @@index([bundesland]) for filter performance. New handwritten migration 20260721140000_tender_bundesland_backfill backfills the ~1671 pre-existing rows (idempotent UPDATE, only where bundesland IS NULL AND region IS NOT NULL) — applied locally via `docker exec tessera-ctl-db-1 psql`, resolved as applied in _prisma_migrations, and prisma generate re-run. Verified on the local dev DB: 933/1671 rows now have bundesland set across all 16 Länder (738 remain NULL where region itself is NULL). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -89,6 +89,37 @@ describe('TenderNormalizerService', () => {
|
||||
expect(normalized.title).toBeTruthy();
|
||||
});
|
||||
|
||||
it('derives bundesland from region NUTS-1 prefix (FILTER-02, Pitfall 1)', () => {
|
||||
const raw = loadRawNoticePair(NOTICE_WITH_EFORMS_ONLY_DEADLINE);
|
||||
|
||||
const normalized = service.normalize(raw);
|
||||
|
||||
if (normalized.region) {
|
||||
expect(normalized.bundesland).not.toBeNull();
|
||||
} else {
|
||||
expect(normalized.bundesland).toBeNull();
|
||||
}
|
||||
});
|
||||
|
||||
it('bundesland is null when region is null/absent — never crashes', () => {
|
||||
const raw = loadRawNoticePair(NOTICE_WITH_NO_DEADLINE_OR_VALUE);
|
||||
const rawWithoutRegion: RawTenderRecord = {
|
||||
...raw,
|
||||
ocdsPayload: {
|
||||
...(raw.ocdsPayload as Record<string, unknown>),
|
||||
buyer: {
|
||||
...(raw.ocdsPayload as { buyer?: Record<string, unknown> })?.buyer,
|
||||
address: { postalCode: '12345' },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const normalized = service.normalize(rawWithoutRegion);
|
||||
|
||||
expect(normalized.region).toBeNull();
|
||||
expect(normalized.bundesland).toBeNull();
|
||||
});
|
||||
|
||||
it('dedupKey = ocid when present', () => {
|
||||
const raw = loadRawNoticePair(NOTICE_WITH_EFORMS_ONLY_DEADLINE);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user