De Chipsoft HiX Subset Module is een Powershell module welke het mogelijk maakt om een gekloonde Chipsoft HiX database te vullen met patiĆ«ntgegevens vanuit een - zelf te specificeren - Chipsoft HiX database. Zo kun je makkelijk en snel verkleinde Chipsoft HiX omgevingen aanmaken zonder dat je hiervoor vele terabytes aan ruimte per omgeving nodig hebt š!
Op dit moment is de module ontwikkeld en getest op basis van Chipsoft HiX 6.3. Naar alle waarschijnlijkheid functioneert de module ook op Chipsoft HiX 6.2 maar dit is nog niet getest.
Important
In de nieuwe release van de Chipsoft HiX Subset Module zijn er een aantal aanpassingen doorgevoerd in hoe patiƫntdata tussen de bron omgeving en de verkleinde (gekloonde) database ingeladen wordt. Deze aanpassingen zijn gedaan om de performance van het inladen te verbeteren. Vanwege deze aanpassingen zijn er echter een aantal aanvullende eisen voor deze module:
- De bron database waaruit de patiƫnt data geladen wordt moet zich binnen dezelfde SQL Server Instance bevinden als de verkleinde (gekloonde) database.
- Er moet een extra database (HixSubsetCache) aangemaakt worden waarin identifiers gecached worden voor het gebruikt van het inladen.
- Maak een nieuwe SQL Server database aan binnen dezelfde SQL Server Instance als de bron en doel database. Gebruik hiervoor het HiXSubsetCacheDB_Creation.sql script die in de HixSubsetCache Database map staat.
- Start een nieuwe Powershell sessie / terminal.
- Identificeer de Powershell Module locatie door het volgende commando uit te voeren:
$Env:PSModulePath
. - Download en kopieer de gehele SubsetHixDatabase map naar een van deze locaties. Indien je wilt dat alle gebruikers op de machine de module kunnen gebruiken gebruik dan het pad C:\Program Files\WindowsPowerShell\Modules (Windows) of /usr/local/microsoft/powershell/7/Modules (Linux/Mac).
- Download de table_list.json en patientIds.txt bestanden en pas deze eventueel aan naar je eigen voorkeuren.
- Importeer de module via het commando
Import-module -Name SubsetHixDatabase
. - Vanaf nu kun je de module gebruiken. Een handig commando om snel een overzicht van de verschillende parameters, als ook voorbeelden te zien, is
Get-Help Start-SubsetHixDatabase -Detailed
.
De module is gericht om patiƫntgegevens uit een gevulde Chipsoft HiX database in te laden naar een gekloonde Chipsoft HiX omgeving. Deze module richt zich alleen op patiƫntgegevens en niet op het importeren van inrichtingen, rechten, etc. met uitzondering van inrichtingstabellen die ziekenhuis specifiek zijn en/of niet door de Chipsoft Clone Content tool meegenomen worden.
Om de inrichting, rechten, etc in een lege Chipsoft HiX database te laden, adviseren we je om gebruik te maken van de Chipsoft Clone Content tool. Deze tool wordt meegeleverd met de Database Updater software en de documentatie is op te vragen bij Chipsoft.
De Chipsoft Clone Content tool vult een lege database met alle inrichtingstabellen en is dus een ideale manier om een Chipsoft HiX omgeving aan te maken die technisch functioneert maar nog geen patiƫntgegevens bevat.
Nadat je de Chipsoft Clone Content tool en de Database Updater uitgevoert hebt om een nieuwe, lege, Chipsoft HiX omgeving aan te maken kun je vervolgens deze module gebruiken om deze lege omgeving te vullen met specifieke patiƫntgegevens.
De module maakt gebruik van cross database query's om data te kopiƫren. Om die reden moeten de verschillende databases (bron, doel en HixSubsetCache) binnen dezelfde SQL Server instance aanwezig zijn.
Bij het uitvoeren van de module wordt er een verbinding opgezet naar de bron database (waarin de patiƫnt data staat) en naar de doel database (waarin de patiƫnt data ingeladen moet worden.) Via SQL commando's wordt vervolgens de data van de bron naar de doel database geladen.
De data die standaard ingeladen wordt, wordt bepaald aan de hand van twee parameters: $Timerange
en $MaxNumberOfPatients
. De $Timerange
parameter bepaald hoe recent de data van een patiƫnt moet zijn (in dagen) om geselecteerd te worden voor de inlaad actie. Bijvoorbeeld: een $Timerange
waarde van 14 selecteert alle unieke patiƫnt nummers die in de afgelopen 14 dagen, of 14 dagen in de toekomst, een afspraak of opname hebben (gehad). Via de $MaxNumberOfPatients
parameter kun je vervolgens het aantal patiƫnten beperken tot een maximum, bijvoorbeeld 100. Met deze voorbeeld instellingen worden 100 willekeurige patiƫnten geselecteerd die in de afgelopen 14 dagen, of 14 dagen in de toekomst, een afspraak of opname hebben (gehad). Voor deze patiƫnten wordt vervolgens de data vanuit de tabellen die in het table import bestand staan ingeladen.
De selectie van patiƫnten kan uitgebreid worden door gebruik te maken van het PatientIds import bestand. Hierin kun je patiƫnt nummers plaatsen die additioneel toegevoegd worden aan de selectie van patiƫnten. Dit is bijvoorbeeld handig als je ook altijd alle gegevens van testpatiƫnten wil inladen.
Voor het gebruik van de module worden er twee aparte bestanden gebruikt die als input dienen voor de uitvoering van het subsetten. Een hiervan is verplicht (het tabel import bestand), een andere optioneel (import bestand met een vaste lijst aan patiƫntnummers).
Het table import bestand (standaard table_list.json) bevat alle tabellen en sleutelkolommen die door de module ingeladen worden bij het uitvoeren van de module. Deze zijn vastgelegd in het volgende formaat:
{
"table_name": "AGENDA_AFSPRAAK",
"hix_module": "AGENDA",
"key_column": "PATIENTNR",
"key_column_class": "patientnr",
"enabled": false
}
- Het table_name element is de naam van de tabel die ingeladen gaat worden.
- Het hix_module element geeft de naam van de Chipsoft HiX module aan waar de tabel onder valt.
- Het key_column element is de sleutelkolom van de tabel waarop gegevens gefilterd worden.
- Het key_column_class element geeft aan wat voor soort sleutel er gebruikt moet worden om filter uit te voeren.
- Het enabled element geeft aan of deze tabel ingeladen moet worden bij het uitvoeren van het commando. Een waarde van
true
zorgt ervoor dat de tabel ingeladen wordt,false
dat deze niet ingeladen gaat worden.
Je kan zelf tabellen toevoegen en verwijderen in het table import bestand. Deze worden dan meegenomen op het moment dat je de module uitvoert. Hierbij is het wel van belang dat je weet wat de sleutelwaarde van de tabel is die je wil importeren. Aan de hand hiervan wordt namelijk de selectie gemaakt van gegevens die geĆÆmporteerd worden.
Vanaf versie 1.1 is het ook mogelijk om volledige tabellen over te kopiƫren zonder dat deze op een sleutelkolom waarde gefilterd worden. Hierbij hoeft er geen key_column waarde opgegeven te worden en kun je de key_column_class configureren met de waarde fulltable.
Voorbeeld:
{
"table_name": "WHATSNEW_AUTOREPLY",
"hix_module": "",
"key_column": "",
"key_column_class": "fulltable",
"enabled": true
}
In veel Chipsoft HiX tabellen is het patiëntnummer het sleutelveld waarop gegevens geïmporteerd worden richting de gekloonde database. In veel tabellen heet deze kolom PATIENTNR en dat is dus ook vaak de waarde van de key_column element in het table import bestand. Indien een patiëntnummer het sleutelveld van een tabel is dan hoort daar een key_column_class van patientnr bij. Door deze elementen zo te configureren weet de module dat deze gegevens in de brontabel moet selecteren op basis van patiëntnummers die gebruikt worden in de filter op de PATIENTNR kolom.
Niet alle tabellen in een Chipsoft HiX database hebben echter het patiƫntnummer als sleutelveld. Een voorbeeld hiervan is de WI_DOCASCII tabel welke een tekstvoorbeeld van een document bevat. Deze tabel heeft als sleutelveld een ID van een document. Om ook deze gegevens te kunnen importeren maken we gebruik van een andere key_column en key_column_class waarde zodat de module weet dat hier andere waarden dan het patiƫntnummer gebruikt moeten worden om de gegevens te filteren. Het onderstaande voorbeeld is hoe de configuratie er voor de WI_DOCASCII eruit ziet in het table import bestand:
{
"table_name": "WI_DOCASCII",
"hix_module": "DOCUMENT",
"key_column": "DOCID",
"key_column_class": "documentid",
"enabled": true
}
In dit geval wordt dus de kolom DOCID gebruikt om documenten te selecteren die geĆÆmporteerd worden naar de gekloonde omgeving. Door als key_column_class de waarde document_id te gebruiken weet de module dat hier de ID's van documenten gebruikt moeten worden om rijen in de WI_DOCASCII tabel te filteren.
Het ophalen van de ID's voor deze sleutelkolom typen is hard-coded in de module en op dit moment worden de volgende ID typen ondersteund:
- Patiƫnt ID's (
patientnr
) - Document ID's (
documentid
) - Afspraak ID's (
afspraakid
) - Microbiologie ID's (
mbid
) - Pathologie ID's (
pathoid
) - Lab ID's (
labid
) - Order ID's (
orderid
) - Document BLOB ID's (
documentblobid
) - Multimedia BLOB ID's (
multimediablobid
) - Opname Plan ID's (
opnameplanid
) - Operatie ID's (
operatieid
) - SEH ID's (
sehid
)
Het PatientIDs import bestand is een .txt bestand welke het mogelijk maakt om de patiƫnt ID's van specifieke patiƫnten te configureren die - afhankelijk van de parameter ImportPatientIds
- meegenomen worden bij het importeren van de data van deze patiƫnten. Een use-cases hiervoor is om ervoor te zorgen dat de data van testpatiƫnten altijd ingeladen worden in de gekloonde Chipsoft HiX database. In dit geval zorg je ervoor dat de patiƫnt ID's van je testpatiƫnten in het PatientIDs import bestand staan.
De module verwacht op elke regelen in het PatientIDs import bestand ƩƩn uniek patiƫntnummer. Bijvoorbeeld:
12345678
87654321
-
$SourceSqlInstance
: Bron SQL Server Instance. De connectie naar de SQL Server Instance wordt opgezet doormiddel van Integrated Security, oftewel, de account waaronder deze functie gestart wordt. -
$SourceDatabase
: Bron database waaruit de patiƫnt gegevens geladen worden. -
$TargetSqlInstance
: Doel SQL Server Instance. De connectie naar de SQL Server Instance wordt opgezet doormiddel van Integrated Security, oftewel, de account waaronder deze functie gestart wordt. -
$TargetDatabase
: Doel database waarin de patiƫnt gegevens geimporteerd worden. -
$CloneInputFile
: Een JSON bestand welke de tabellen en de benodigde informatie bevat die gebruikt wordt op het inladen uit te voeren. -
$Timerange
: Het aantal dagen voor, of na, de huidige datum waarop een patiƫnt een afspraak of opname heeft gehad. Uit deze range van datums worden de dynamische patiƫnt nummers geselecteerd van welke de data gekopieerd wordt naar de doel database. -
$MaxNumberOfPatients
: Het maximaal aantal dynamische patiƫnt nummers die geselecteerd worden uit de datum range die bepaald is door de Timerange parameter. De selectie van deze patiƫnt nummers gebeurt willekeurig indien er meer patiƫnten in de gespecificeerde Timerange aanwezig zijn dan er via de MaxNumberOfPatients parameter ingesteld zijn. -
$TruncateBeforeLoad
: Optionele parameter (standaard false welke ervoor zorgt dat de doel tabel voor het inladen van de patiƫnt data geleegd wordt. -
$ImportPatientIds
: Optionele parameter (standaard false Door deze parameter op true te zetten worden zelf gespecificeerde patiƫnt nummers toegevoegd aan de lijst van patiƫnt nummers van welke de data gekopieerd wordt naar de doel database. Op het moment dat deze parameter op true ingesteld staat dient ook de PatientIdImportFile parameter gebruikt te worden. -
$PatientIdImportFile
: Optionele parameter. Geeft de locatie aan van het patiƫnt nummer import bestand. Elk patiƫnt nummer wat voorkomt in dit import bestand wordt toegevoegd aan de lijst van patiƫnt nummers van welke de data gekopieerd wordt naar de doel database. Elke regel in het patiƫnt nummer import bestand dient een uniek patien nummer te zijn. -
$OnlyUseImportedPatientIds
: Optionele parameter (standaard false Door deze parameter op true te zetten worden er geen dynamisch geselecteerde patiƫnt nummers geimporteerd en alleen de patiƫnt nummers die in het patiƫnt nummer import bestand staan gebruikt voor het inladen van gegevens naar de doel database. Op het moment dat deze parameter op true staat moeten ook de ImportPatientIds op true gezet zijn en de PatientIdImportFile parameter gevuld zijn. -
$Timeout
: Optionele parameter (standaard 0) welke de timeout in seconden aangeeft van elke batch van het kopieer commando. Indien de batch meer tijd dan de timeout in beslag neemt wordt deze automatisch afgebroken. Door de Timeout op 0 te zetten wordt er geen timeout gebruikt. -
$ContinueOnError
: Optionele parameter (standaard false). Door deze parameter op true te zetten gaat het script bij sommige errors - zoals het inladen van data in de doel database - door naar de volgende actie in plaats van af te breken. -
$DebugMode
: Optionele parameter (standaard false). De DebugMode parameter retourneerd een aantal additionele gegevens naar de commandline die bruikbaar kunnen zijn voor het troubleshooten van eventuele fouten.
Toont alle informatie, inclusief parameter omschrijvingen en voorbeelden, over de Chipsoft HiX Subset module.
Get-Help Start-SubsetHixDatabase -Detailed
Kopieert de patientgegevens voor de gespecificeerde tabellen in het clone input bestand (C:\table_list.json) van de HIX_BRON database op de SQL-BRON01 server naar de HIX_CLONE database op de SQL-DOEL01 server. Hierbij wordt de data van maximaal 100 patienten gebruikt die 14 dagen voor, of 14 dagen na, het uitvoeren van dit commando een afspraak of opname hebben gehad.
Start-SubsetHixDatabase -SourceSqlInstance "SQL-BRON01" -SourceDatabase "HIX_BRON" -TargetSqlInstance "SQL-DOEL01" -TargetDatabase "HIX_CLONE" -CloneInputFile "C:\table_list.json" -Timerange 14 -MaxNumberOfPatients 100
Kopieert de patientgegevens voor de gespecificeerde tabellen in het clone input bestand (C:\table_list.json) van de HIX_BRON database op de SQL-BRON01 server naar de HIX_CLONE database op de SQL-DOEL01 server. Hierbij wordt de data van maximaal 100 patienten gebruikt die 14 dagen voor, of 14 dagen na, het uitvoeren van dit commando een afspraak of opname hebben gehad. Daarnaast wordt voor alle patientnummers die in het PatientIdImportFile bestand staan alle gegevens additioneel gekopieerd.
Start-SubsetHixDatabase -SourceSqlInstance "SQL-BRON01" -SourceDatabase "HIX_BRON" -TargetSqlInstance "SQL-DOEL01" -TargetDatabase "HIX_CLONE" -CloneInputFile "C:\table_list.json" -Timerange 14 -MaxNumberOfPatients 100 -ImportPatientIds $true -PatientIdImportFile "C:\patientIds.txt"
Kopieert de patientgegevens voor de gespecificeerde tabellen in het clone input bestand (C:\table_list.json) van de HIX_BRON database op de SQL-BRON01 server naar de HIX_CLONE database op de SQL-DOEL01 server. Door het instellen van de -OnlyUseImportedPatientIds parameter op $true worden alleen patientgegevens voor de patientnummers die in het PatientIdImportFile bestand staan gekopieerd.
Start-SubsetHixDatabase -SourceSqlInstance "SQL-BRON01" -SourceDatabase "HIX_BRON" -TargetSqlInstance "SQL-DOEL01" -TargetDatabase "HIX_CLONE" -CloneInputFile "C:\table_list.json" -Timerange 14 -MaxNumberOfPatients 100 -ImportPatientIds $true -PatientIdImportFile "C:\patientIds.txt" -OnlyUseImportedPatientIds $true
De Chipsoft HiX Subset Module is een opensource initiatief wat we met veel zorg hebben geprobeerd te ontwikkelen en te testen. Toch kan er uiteraard een bug in de code sluipen of een functionaliteit ontbreken. Meld deze vooral aan via de Issues optie op deze GitHub pagina. We proberen dan zo snel mogelijk te reageren.
Mocht je na het gebruik van de Chipsoft HiX Subset Module erachter komen dat er nog gegevens gebruiken en weten in welke tabellen deze te vinden zijn? Maak ook dan een issue aan en dan voegen we de tabellen toe aan de het tabel import bestand!
Bij Privinity helpen we organisaties om veilig te kunnen werken met privacygevoelige gegevens doormiddel van anonimiseren. Hierbij zorgen we ervoor dat je privacygevoelige gegevens bruikbaar blijven terwijl de privacy van de personen over wie de gegevens gaan optimaal beschermd blijven. Zo worden onze oplossingen ingezet om privacygevoelige gegevens in bijvoorbeeld test-, ontwikkel- en analysedatabronnen te beschermen of om veilig gegevens tussen organisaties uit te wisselen.
De Chipsoft HiX Subset Module is een oplossing die ontwikkeld is om een antwoord de geven op de vraag vanuit ziekenhuizen om met een kleinere set van data meerdere Chipsoft HiX omgevingen te kunnen uitrollen en gebruiken voor ontwikkel- en testdoeleinden. De module is niet door Chipsoft ontwikkeld en draagt puur de naam Chipsoft en HiX om duidelijk aan te geven op welk product deze oplossing van toepassing is.
Al het gebruik van de Chipsoft HiX Subset Module is op eigen risico. Zowel Privinity als de originele auteur van de code kan niet aansprakelijk worden gesteld voor enige schade die ontstaat uit het gebruik van de module.
De GNU Affero General Public License Versie 3 (AGPL 3) is van toepassing op dit project. De inhoud van deze licentie is te vinden in de license file.