Skip to content

Improve coding freshness handling#799

Open
jurei733 wants to merge 1 commit into
developfrom
issue-688-coding-freshness
Open

Improve coding freshness handling#799
jurei733 wants to merge 1 commit into
developfrom
issue-688-coding-freshness

Conversation

@jurei733

@jurei733 jurei733 commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Überblick

Dieser PR adressiert Issue #688, ohne das Issue automatisch zu schließen. Ziel ist ein robusterer Korrektheitsfix für den Kodierstand nach Änderungen an .vocs-Dateien.

Änderungen

  • Nach erfolgreichem .vocs-Speichern wird direkt die Aktion „Kodierstand prüfen“ angeboten und mit refreshCodingFreshness=1 geöffnet.
  • Erfolgreiche .vocs-Uploads im Testdateien-Dialog bieten dieselbe Prüfung auch ohne Warnung an.
  • Die Job-Definition-Liste berechnet Planned-Usage-Daten nur noch bei explizitem Opt-in.
  • Unit-Dateien speichern codingSchemeRef-Metadaten in structured_data; bestehende Produktivdaten werden per Liquibase-Backfill ergänzt. Diese Zuordnung dient hier als robustere Quelle für die Freshness-Ermittlung, nicht als belegter Performance-Fix.
  • Die Freshness-Prüfung nutzt structured_data, wenn die Metadaten vorhanden sind, und XML-Regex weiterhin als Fallback für ältere oder nicht angereicherte Daten.

Validierung

  • Regressionstest: .vocs-Overwrite mit Coding-Scheme-Änderung markiert Auto-Coding und manuelle Kodierung als stale/review-required.
  • Regressionstest: Erfolgreiche .vocs-Uploads bieten in der UI direkt „Kodierstand prüfen“ mit refreshCodingFreshness=1 an.
  • Manuelle Gegenprüfung: Nach temporärem .vocs-Upload zeigte die API direkt v1 STALE und v2 MANUAL_REVIEW_REQUIRED; die Kodierübersicht zeigte anschließend „Kodierstand prüfen“.
  • npx nx test backend --runInBand --testFile=apps/backend/src/app/database/services/workspace/workspace-files.service.spec.ts
  • npx nx lint backend
  • npx nx lint frontend
  • npx nx test frontend
  • git diff --check
  • make dev-db-validate-changelog

Hinweis zur Performance

Dieser PR sollte nicht als nachgewiesener Performance-Fix bewertet werden. Die aktuelle Query-Form profitiert bei sehr großen Datenmengen nicht ausreichend von der Denormalisierung, weil der Join zwischen Units und Unit-Dateien weiterhin über normalisierte Dateinamen per Ausdruck erfolgt. Ein echter Performance-Fix sollte die Zuordnung zusätzlich indexierbar machen und die Suche zuerst über den strukturierten Scheme-Ref einschränken.

Refs #688

@jurei733 jurei733 marked this pull request as ready for review June 25, 2026 10:03
@jurei733 jurei733 force-pushed the issue-688-coding-freshness branch from 2e82201 to e760320 Compare June 25, 2026 10:03
@jurei733

Copy link
Copy Markdown
Collaborator Author

Review-Hinweis / Nacharbeitswunsch:

Funktional ist #688 fuer den geprueften .vocs-Upload-Pfad plausibel geloest: Nach einem temporaeren Upload in Workspace test2 lieferte die API direkt v1 STALE: 23 und v2 MANUAL_REVIEW_REQUIRED: 23, und die UI zeigte anschliessend in der Kodieruebersicht Kodierstand pruefen mit den entsprechenden 23 Auto-Coding- und 23 manuellen Faellen.

Die Performance-Begruendung traegt aber in der aktuellen Form nicht. Ich habe den geaenderten Kernpfad getUnitIdsByCodingSchemeRefs synthetisch auf DB-Ebene skaliert. Ergebnis:

  • 20.000 Units / 2.000 Unit-Dateien: develop-Query Timeout nach 60s, PR-Query Timeout nach 60s
  • 100.000 Units / 10.000 Unit-Dateien: develop-Query Timeout nach 90s, PR-Query Timeout nach 90s
  • 1.000.000 Units / 100.000 Unit-Dateien: develop-Query Timeout nach 180s, PR-Query Timeout nach 180s

Eine Kontrollquery, die den strukturierten Scheme-Ref wirklich vorfiltert und die Unit-Datei-Zuordnung indexierbar macht, lag dagegen bei 18 ms fuer 20k Units, 89 ms fuer 100k Units und ca. 945 ms fuer 1M Units.

Damit nutzt der PR die neue Denormalisierung nicht wirksam fuer Performance. Der dominante Kostenpunkt bleibt der Join ueber normalisierte Dateinamen per Ausdruck, insbesondere REGEXP_REPLACE(UPPER(unit_file.file_id), ...) gegen unit.name/unit.alias. structured_data spart hier nur die XML-Regex-Auswertung auf unit_file.data, aber nicht den grossen Join-Scan.

Bitte daher entweder den Performance-Anspruch aus PR-Beschreibung/Begruendung entfernen und die Aenderung klar als Robustheits-/Korrektheitsfix einordnen, oder den Query-/Schema-Teil nachziehen: z. B. normalisierte Unit-Datei-ID bzw. normalisierten CodingSchemeRef indexierbar speichern und getUnitIdsByCodingSchemeRefs so umbauen, dass zuerst ueber den strukturierten Scheme-Ref eingeschraenkt wird. In der aktuellen Form ist die Migration/Denormalisierung fuer sich genommen zu schwergewichtig, wenn sie als Performance-Fix begruendet wird.

@jurei733 jurei733 force-pushed the issue-688-coding-freshness branch from e760320 to 3be8089 Compare June 25, 2026 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant