Files
Szpitale-graph/README.md
T
2026-07-08 22:15:48 +02:00

2.3 KiB

szpitale-graph

Graph DB project. Polish hospitals data in Neo4j.

Two-layer architecture. Ingest sources → canonical JSON → load into Neo4j.

Stack

  • Java 21
  • Maven (use ./mvnw wrapper)
  • Spring Boot 3.4.4 + Spring Shell
  • Neo4j 5
  • JUnit 5 + Testcontainers

Key commands

From szpitale-graph/:

./mvnw -q compile       # compile
./mvnw -q test          # all tests
./mvnw -q test -Dtest=ClassName  # single test
./mvnw -q verify        # full verify
java -jar target/szpitale-graph.jar ingest --voivodeship <voiv>   # layer 1
java -jar target/szpitale-graph.jar load   --voivodeship <voiv>   # layer 2

Neo4j:

docker compose up -d                    # start Neo4j (UI :7474, Bolt :7687)
docker compose down -v                  # stop + remove volumes

Architecture

ingest → canonical/*.json → load → Neo4j

Layer 1 (ingest): Source parsing, normalization, deduplication. No Neo4j dependency. Layer 2 (load): Canonical JSON → UNWIND/MERGE into Neo4j. No network dependency.

Canonical output: canonical/<voivodeship>.json or canonical/all.json.

Source data

Input markdown files: research-<voivodeship>.md. Table format:

| Funkcja | Imię i nazwisko | Afiliacja partyjna | Źródło (URL) |

Every cell must have an https://... URL.

Code layout

src/main/java/com/developx/szpitale/

Package Purpose
model/ CanonicalDataset, Hospital, Person, Affiliation, Role, Mandate, RawHospitalRecord
model/enums/ LegalForm, RoleType, MandateType, ConfidenceLevel, RoleStatus, AffiliationType, OrganType, SupervisoryBodyType
ingest/ IngestCommand, CanonicalWriter, IngestResults
ingest/source/ MarkdownRegistrySource, VoivodeshipSource
ingest/normalize/ NameNormalizer, PartyNormalizer, Deduplicator
load/ LoadCommand, CanonicalReader, GraphSchema, GraphLoader, GraphValidator
SzpitaleGraphApplication.java @SpringBootApplication entry point

16 voivodeships

Supported regions: all Polish voivodeships. Start with research-<voiv>.md files, then run ingest + load.

Dev

Test-driven development. TDD cycle: red → green → refactor. Tests mirror main package structure.

Integrations tests use Testcontainers with Neo4j container.