Journaler
Læs de patientjournaler en behandler har frigivet
va_emsmdtSe produktet →
Server-exports. Kaldes fra server_script.
Exportene her er skrevet til Politi Tablet, så en betjent kan se en frigiven journal i sit borgeropslag. Men enhver server-side ressource kan bruge de samme tre.
Fortrolighedsreglerne
Journaler i EMS Tabletten er lukkede som udgangspunkt. Fem regler gælder for alt på denne side, og de håndhæves server-side i va_emsmdt:
Kun frigivne journaler
En behandler skal aktivt frigive den enkelte journal med en begrundelse. Er den ikke frigivet, findes den ikke set udefra — du får ikke at vide, at der er noget du ikke må se.
Kun indsendte journaler
En kladde kan ikke frigives.
Kun journaler om patienten
Stod borgeren som pårørende, vidne eller anmelder, handler journalen ikke om dem, og den følger ikke med.
Frigivelsen tjekkes ved hvert opslag
Tilbagekalder ambulancetjenesten en frigivelse, holder
GetReleasedJournalop med at svare med det samme — også hvis du stadig har sagsnummeret i hånden. Cache derfor ikke journaler i dit eget script.Underskriften følger ikke med
Behandlerens signatur er et stort data-URL uden værdi for tredjeparter og udelades.
Både frigivelse og tilbagekaldelse skrives i tabellen ems_journal_release_log med hvem, hvornår og hvorfor.
IsPoliceSharingEnabled
Er journaldeling slået til på denne server?
returnsbooleanfalse når Config.policeSharing.enabled er slået fra, eller når ingen af ressourcerne i Config.policeSharing.resource kører.
if not exports.va_emsmdt:IsPoliceSharingEnabled() then
return -- vis slet ikke din journal-sektion
endBrug den til at afgøre, om din integration skal vise sig overhovedet. Et tomt faneblad er værre end intet faneblad.
Config.policeSharing.resource
Feltet må være én streng eller en liste af navne — den første der kører, tæller.
resource = { 'va_policemdt', 'va_policemdt_dev' }Det gør, at samme config kan følge både en udviklingsserver og en produktionsserver.
En tom liste springer tjekket over, så delingen står åben. Brug det kun til test, eller hvis du læser exportene fra din egen integration frem for fra Politi Tabletten.
GetReleasedJournals
Alle frigivne journaler om én borger, nyeste først.
Rækkerne er slanke og bevidst uden journalindhold, så et opslag på en borgerprofil er billigt. Indholdet hentes per journal med GetReleasedJournal, når nogen åbner den.
citizenIdentifierstringpåkrævetBorgerens ESX-identifier, fx char1:abc….
returnstable[]Slanke rækker, nyeste først.
local journals = exports.va_emsmdt:GetReleasedJournals('char1:abc…')
for _, j in ipairs(journals) do
print(j.caseNumber, j.title, j.release.reason)
endEn række ser sådan ud:
{
caseNumber = 'JNL-2026-04791',
title = 'Traume, Legion Square',
category = 'Traume',
priority = 'hoej', -- triage: 'lav' | 'mellem' | 'hoej'
location = 'Legion Square',
medic = { name = 'M. Sørensen', rank = 'Para.', callsign = 'Alpha-12' },
createdAt = 1766000000, -- unix
release = {
at = 1766003600, -- unix
by = 'L. Vestergaard',
reason = 'Anmodning i sag S-2043',
},
}Du får en tom tabel når borgeren ikke har frigivne journaler, når identifieren er ukendt, og når delingen er slået fra. De tre kan ikke skelnes fra hinanden — og det er meningen. Skriv aldrig "ingen journaler fundet" på en måde, der afslører forskellen.
GetReleasedJournal
Hele journalen.
caseNumberstringpåkrævetJournalens nummer, fx JNL-2026-04791.
returnstable | nilnil dækker "findes ikke", "er ikke indsendt" og "frigivelsen er tilbagekaldt" under ét.
local journal = exports.va_emsmdt:GetReleasedJournal('JNL-2026-04791')
if not journal then return end
print(journal.state.narrative)
for _, d in ipairs(journal.state.charges) do
print(d.paragraf, d.title, d.penalty) -- diagnosekode, diagnose, behandling
endUd over felterne fra listen indeholder den:
{
officer = { name = …, initials = …, rank = …, callsign = … },
colleagues = { --[[ samme form ]] },
state = {
date = '2026-07-26', time = '14:12',
narrative = '<p>…</p>', -- rich-text HTML
vitals = {
bpSystolic = 96, bpDiastolic = 58, pulse = 122, spo2 = 94,
respRate = nil, temperature = nil, gcs = 14, bloodSugar = nil,
},
charges = { { paragraf = 'TR-03', title = 'Skudlæsion',
penalty = 'Blødningskontrol og hastetransport' } },
medications = { { code = 'MOR-01', name = 'Morfin',
strength = '10 mg/ml', dose = '5 mg i.v.', quantity = 1 } },
involved = { { id = 'char1:abc…', name = 'Kasper Holm', role = 'patient' } },
items = { … }, vehicles = { … }, photos = { … },
signature = nil, -- udelades bevidst
},
release = { at = …, by = …, reason = … },
}Behandleren hedder medic i listen fra GetReleasedJournals, men officer her. Det er to forskellige felter om samme person — byg mod formen på hvert export, ikke mod en fælles antagelse.
Feltnavnene i charges
charges er arvet fra politi-versionen, som denne tablet er bygget videre på. Navnene er juridiske, men betydningen er klinisk:
| Felt | Betyder her |
|---|---|
paragraf | Diagnosekoden, fx TR-03 |
title | Diagnosen, fx Skudlæsion |
penalty | Standardbehandlingen |
maxMonths | Anbefalet observationstid i minutter |
fine | Egenbetalingen i kr |
maxMonths er minutter, ikke måneder. Skriver du feltet ud til en spiller uden at oversætte enheden, kommer der til at stå måneder, hvor der skulle stå minutter.
Et komplet eksempel
En journal-sektion i et andet script — med din egen gate foran.
local EMS = 'va_emsmdt'
local function emsAvailable()
return GetResourceState(EMS) == 'started'
and exports[EMS]:IsPoliceSharingEnabled()
end
RegisterNetEvent('myscript:openCitizen', function(citizenIdentifier)
local src = source
-- Gate det selv: exportet spørger ikke hvem du er.
if not exports.va_policemdt:HasMdtPermission(src, 'strafferegister') then
return
end
if not emsAvailable() then return end
-- pcall: exportet tilhører et andet produkt og kan mangle i ældre
-- versioner. Din feature må ikke dø på det.
local ok, journals = pcall(function()
return exports[EMS]:GetReleasedJournals(citizenIdentifier)
end)
TriggerClientEvent('myscript:emsJournals', src, ok and journals or {})
end)Send listen til klienten, men hent indholdet først når betjenten åbner en enkelt journal. Så er opslaget billigt, og frigivelsen bliver tjekket på det tidspunkt hvor journalen faktisk læses.