Update readme
This commit is contained in:
@@ -0,0 +1,78 @@
|
|||||||
|
# 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/`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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.
|
||||||
Reference in New Issue
Block a user