T10: PwzRegistrySource with PwzLookupClient [checkpoint]

This commit is contained in:
Artur Kruszewski
2026-07-08 23:12:00 +02:00
parent 387e2617b8
commit a8bdaf4cae
32 changed files with 227 additions and 60 deletions
+2 -1
View File
@@ -737,7 +737,7 @@ Po ukończeniu zadania agent zmienia jego status w liście poniżej i dopisuje j
- [~] T7 GraphValidator + CSV [NEO4J] (skipped: Docker API too old, jak T6) - [~] T7 GraphValidator + CSV [NEO4J] (skipped: Docker API too old, jak T6)
- [x] T8 Zielony pełny build - [x] T8 Zielony pełny build
- [x] T9 Person: title/pwzNumber - [x] T9 Person: title/pwzNumber
- [ ] T10 PwzRegistrySource - [x] T10 PwzRegistrySource
- [ ] T11 Organization/Company rekordy + round-trip - [ ] T11 Organization/Company rekordy + round-trip
- [ ] T12 GraphLoader: Organization/Company [NEO4J] - [ ] T12 GraphLoader: Organization/Company [NEO4J]
- [ ] T13 GraphValidator: konflikt interesów [NEO4J] - [ ] T13 GraphValidator: konflikt interesów [NEO4J]
@@ -751,6 +751,7 @@ Po ukończeniu zadania agent zmienia jego status w liście poniżej i dopisuje j
- 2026-07-07 — T6/T8 — skip NEO4J tests (Docker API zbyt stary) + pełny build zielony [checkpoint] (commit 59d27b1) - 2026-07-07 — T6/T8 — skip NEO4J tests (Docker API zbyt stary) + pełny build zielony [checkpoint] (commit 59d27b1)
- 2026-07-08 — PLAN.md scalony z PLAN2.md (Person.title/pwzNumber, Organization/Company, kolejka T9T13); dostosowano §11 pod Qwen-3.6-35B-A3B. - 2026-07-08 — PLAN.md scalony z PLAN2.md (Person.title/pwzNumber, Organization/Company, kolejka T9T13); dostosowano §11 pod Qwen-3.6-35B-A3B.
- 2026-07-08 — T9 — Person: title/pwzNumber — dodano dwa pola do record Person, zaktualizowano wszyskie konstruktory (CanonicalWriter, Deduplicator, testy). 7 testow zielonych. - 2026-07-08 — T9 — Person: title/pwzNumber — dodano dwa pola do record Person, zaktualizowano wszyskie konstruktory (CanonicalWriter, Deduplicator, testy). 7 testow zielonych.
- 2026-07-08 — T10 — PwzRegistrySource — PwzLookupClient (functional interface) + PwzRegistrySource(lookupPwz). 4 testy zielone.
--- ---
+5 -5
View File
@@ -4,7 +4,7 @@
"description": "Stan wykonania kolejki zadań lokalnego agenta (PLAN2.md §11-13). Zrodlo prawdy przy konflikcie: git log.", "description": "Stan wykonania kolejki zadań lokalnego agenta (PLAN2.md §11-13). Zrodlo prawdy przy konflikcie: git log.",
"resumeHint": "Wczytaj ten plik, znajdz pierwszy task o statusie todo/in_progress. Jesli in_progress i drzewo git brudne -> git checkout -- . && git clean -fd, ustaw task na todo, zacznij od zera (PLAN2.md §13.1).", "resumeHint": "Wczytaj ten plik, znajdz pierwszy task o statusie todo/in_progress. Jesli in_progress i drzewo git brudne -> git checkout -- . && git clean -fd, ustaw task na todo, zacznij od zera (PLAN2.md §13.1).",
"createdAt": "2026-07-07", "createdAt": "2026-07-07",
"updatedAt": "2026-07-08T23:03:00Z", "updatedAt": "2026-07-08T23:11:00Z",
"tasks": [ "tasks": [
{ {
"id": "T1", "id": "T1",
@@ -91,10 +91,10 @@
"id": "T10", "id": "T10",
"title": "PwzRegistrySource", "title": "PwzRegistrySource",
"tag": null, "tag": null,
"status": "todo", "status": "done",
"startedAt": null, "startedAt": "2026-07-08T23:04:00Z",
"finishedAt": null, "finishedAt": "2026-07-08T23:11:00Z",
"note": "Uzupelnienie pwzNumber z rejestr.nil.org.pl przez wstrzykniety PwzLookupClient (PLAN.md 4.7, T10)." "note": "PwzRegistrySource z PwzLookupClient. 4 testow zielonych: singleMatch, multipleMatches (ambiguity), noMatch, nullClient."
}, },
{ {
"id": "T11", "id": "T11",
@@ -0,0 +1,8 @@
package com.developx.szpitale.ingest.source;
import java.util.List;
@FunctionalInterface
public interface PwzLookupClient {
List<String> query(String fullName);
}
@@ -0,0 +1,31 @@
package com.developx.szpitale.ingest.source;
import java.util.List;
import java.util.Optional;
public class PwzRegistrySource {
private final PwzLookupClient client;
public PwzRegistrySource(PwzLookupClient client) {
this.client = client;
}
public Optional<String> lookupPwz(String fullName) {
if (client == null || fullName == null || fullName.isBlank()) {
return Optional.empty();
}
List<String> results = client.query(fullName);
if (results == null || results.isEmpty()) {
return Optional.empty();
}
if (results.size() == 1) {
return Optional.of(results.get(0));
}
return Optional.empty();
}
}
@@ -0,0 +1,51 @@
package com.developx.szpitale.ingest.source;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
class PwzRegistrySourceTest {
@Test
void lookupPwz_singleMatch_returnsPwzNumber() {
PwzLookupClient client = fullName -> List.of("1234567");
PwzRegistrySource source = new PwzRegistrySource(client);
Optional<String> result = source.lookupPwz("Jan Kowalski");
assertTrue(result.isPresent());
assertEquals("1234567", result.get());
}
@Test
void lookupPwz_multipleMatches_returnsEmpty() {
PwzLookupClient client = fullName -> List.of("1234567", "7654321");
PwzRegistrySource source = new PwzRegistrySource(client);
Optional<String> result = source.lookupPwz("Jan Kowalski");
assertFalse(result.isPresent(), "Multiple matches should return empty (ambiguity)");
}
@Test
void lookupPwz_noMatch_returnsEmpty() {
PwzLookupClient client = fullName -> List.of();
PwzRegistrySource source = new PwzRegistrySource(client);
Optional<String> result = source.lookupPwz("Jan Kowalski");
assertFalse(result.isPresent(), "No match should return empty");
}
@Test
void lookupPwz_nullClient_returnsEmpty() {
PwzRegistrySource source = new PwzRegistrySource(null);
Optional<String> result = source.lookupPwz("Jan Kowalski");
assertFalse(result.isPresent());
}
}
@@ -0,0 +1 @@
["1234567", "7654321"]
@@ -0,0 +1 @@
["1234567"]
@@ -14,6 +14,7 @@ com/developx/szpitale/load/GraphSchema.class
com/developx/szpitale/model/enums/OrganType.class com/developx/szpitale/model/enums/OrganType.class
com/developx/szpitale/model/RawHospitalRecord$RawMandate.class com/developx/szpitale/model/RawHospitalRecord$RawMandate.class
com/developx/szpitale/model/enums/ConfidenceLevel.class com/developx/szpitale/model/enums/ConfidenceLevel.class
com/developx/szpitale/ingest/source/PwzRegistrySource.class
com/developx/szpitale/ingest/normalize/NameNormalizer.class com/developx/szpitale/ingest/normalize/NameNormalizer.class
com/developx/szpitale/model/RawHospitalRecord$RawPersonEntry.class com/developx/szpitale/model/RawHospitalRecord$RawPersonEntry.class
com/developx/szpitale/model/enums/SupervisoryBodyType.class com/developx/szpitale/model/enums/SupervisoryBodyType.class
@@ -22,5 +23,6 @@ com/developx/szpitale/model/RawHospitalRecord.class
com/developx/szpitale/ingest/CanonicalWriter.class com/developx/szpitale/ingest/CanonicalWriter.class
com/developx/szpitale/load/GraphLoader$LoadStats.class com/developx/szpitale/load/GraphLoader$LoadStats.class
com/developx/szpitale/model/enums/RoleType.class com/developx/szpitale/model/enums/RoleType.class
com/developx/szpitale/ingest/source/PwzLookupClient.class
com/developx/szpitale/model/enums/LegalForm.class com/developx/szpitale/model/enums/LegalForm.class
com/developx/szpitale/model/enums/RoleStatus.class com/developx/szpitale/model/enums/RoleStatus.class
@@ -6,6 +6,8 @@
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/NameNormalizer.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/NameNormalizer.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/PartyNormalizer.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/PartyNormalizer.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/source/MarkdownRegistrySource.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/source/MarkdownRegistrySource.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/source/PwzLookupClient.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/source/PwzRegistrySource.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/source/VoivodeshipSource.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/ingest/source/VoivodeshipSource.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/load/CanonicalReader.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/load/CanonicalReader.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/load/GraphLoader.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/main/java/com/developx/szpitale/load/GraphLoader.java
@@ -1,6 +1,7 @@
com/developx/szpitale/ingest/normalize/NameNormalizerTest.class com/developx/szpitale/ingest/normalize/NameNormalizerTest.class
com/developx/szpitale/ingest/normalize/PartyNormalizerTest.class com/developx/szpitale/ingest/normalize/PartyNormalizerTest.class
com/developx/szpitale/model/PersonTest.class com/developx/szpitale/model/PersonTest.class
com/developx/szpitale/ingest/source/PwzRegistrySourceTest.class
com/developx/szpitale/ingest/source/MarkdownRegistrySourceTest.class com/developx/szpitale/ingest/source/MarkdownRegistrySourceTest.class
com/developx/szpitale/ingest/normalize/DeduplicatorTest.class com/developx/szpitale/ingest/normalize/DeduplicatorTest.class
com/developx/szpitale/load/CanonicalRoundTripTest.class com/developx/szpitale/load/CanonicalRoundTripTest.class
@@ -2,5 +2,6 @@
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/NameNormalizerTest.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/NameNormalizerTest.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/PartyNormalizerTest.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/PartyNormalizerTest.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/ingest/source/MarkdownRegistrySourceTest.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/ingest/source/MarkdownRegistrySourceTest.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/ingest/source/PwzRegistrySourceTest.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/load/CanonicalRoundTripTest.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/load/CanonicalRoundTripTest.java
/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/model/PersonTest.java /home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph/src/test/java/com/developx/szpitale/model/PersonTest.java
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Test set: com.developx.szpitale.ingest.normalize.DeduplicatorTest Test set: com.developx.szpitale.ingest.normalize.DeduplicatorTest
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 s -- in com.developx.szpitale.ingest.normalize.DeduplicatorTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s -- in com.developx.szpitale.ingest.normalize.DeduplicatorTest
@@ -1,4 +1,4 @@
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Test set: com.developx.szpitale.ingest.normalize.NameNormalizerTest Test set: com.developx.szpitale.ingest.normalize.NameNormalizerTest
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Tests run: 25, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.081 s -- in com.developx.szpitale.ingest.normalize.NameNormalizerTest Tests run: 25, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.068 s -- in com.developx.szpitale.ingest.normalize.NameNormalizerTest
@@ -1,4 +1,4 @@
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Test set: com.developx.szpitale.ingest.normalize.PartyNormalizerTest Test set: com.developx.szpitale.ingest.normalize.PartyNormalizerTest
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.010 s -- in com.developx.szpitale.ingest.normalize.PartyNormalizerTest Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.021 s -- in com.developx.szpitale.ingest.normalize.PartyNormalizerTest
@@ -1,4 +1,4 @@
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Test set: com.developx.szpitale.ingest.source.MarkdownRegistrySourceTest Test set: com.developx.szpitale.ingest.source.MarkdownRegistrySourceTest
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.101 s -- in com.developx.szpitale.ingest.source.MarkdownRegistrySourceTest Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.097 s -- in com.developx.szpitale.ingest.source.MarkdownRegistrySourceTest
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: com.developx.szpitale.ingest.source.PwzRegistrySourceTest
-------------------------------------------------------------------------------
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 s -- in com.developx.szpitale.ingest.source.PwzRegistrySourceTest
@@ -1,4 +1,4 @@
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Test set: com.developx.szpitale.load.CanonicalRoundTripTest Test set: com.developx.szpitale.load.CanonicalRoundTripTest
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.165 s -- in com.developx.szpitale.load.CanonicalRoundTripTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.193 s -- in com.developx.szpitale.load.CanonicalRoundTripTest
@@ -1,4 +1,4 @@
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Test set: com.developx.szpitale.model.PersonTest Test set: com.developx.szpitale.model.PersonTest
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s -- in com.developx.szpitale.model.PersonTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s -- in com.developx.szpitale.model.PersonTest
@@ -0,0 +1 @@
["1234567", "7654321"]
@@ -0,0 +1 @@
["1234567"]