Projekt aplikacji EMS (Emergency Medical Service)
Wymagania funkcjonalne
System logowania i autoryzacji:
- Dostęp tylko dla członków EMS.
- Logowanie na podstawie konta tabletu.
- Przydzielanie uprawnień na podstawie rangi (np. Stażysta, Ratownik, Lekarz, Dyrektor).
Panel główny:
- Podsumowanie kluczowych informacji:
- Aktualne wezwania.
- Status pacjentów (np. przyjęci, w drodze).
- Ważne ogłoszenia (np. braki sprzętu).
- Podsumowanie kluczowych informacji:
Rejestr pacjentów:
- Dodawanie i aktualizacja danych pacjentów:
- Dane personalne (np. imię, nazwisko, PESEL/ID).
- Historia medyczna (odseparowana jako osobna tabela).
- Aktualny status (np. w leczeniu, wypisany).
- Dodawanie i aktualizacja danych pacjentów:
System zgłoszeń:
- Przyjmowanie zgłoszeń o wypadkach:
- Lokalizacja zdarzenia.
- Szczegóły zgłoszenia (np. liczba poszkodowanych).
- Przypisywanie zgłoszeń do jednostek.
- Przyjmowanie zgłoszeń o wypadkach:
Zarządzanie wyposażeniem:
- Ewidencja sprzętu medycznego (np. bandaże, leki, defibrylatory).
- Rejestrowanie użycia materiałów podczas akcji.
Raporty medyczne:
- Tworzenie raportów z interwencji:
- Miejsce zdarzenia.
- Opis sytuacji i podjęte działania.
- Lista użytych materiałów.
- Tworzenie raportów z interwencji:
Powiadomienia:
- Automatyczne powiadomienia o nowych zgłoszeniach lub zmianach w statusach pacjentów.
- Możliwość ręcznego wysyłania powiadomień przez dowódców EMS.
Architektura aplikacji
Struktura bazy danych
Tabela: tablet_EMSPatients
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
name | VARCHAR(100) | Imię i nazwisko |
dob | DATE | Data urodzenia |
status | VARCHAR(50) | Status (np. W leczeniu) |
last_update | DATETIME | Ostatnia aktualizacja |
Tabela: tablet_EMSMedicalHistory
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
patient_id | INT | ID pacjenta |
description | TEXT | Opis medyczny |
created_at | DATETIME | Data dodania wpisu |
Tabela: tablet_EMSCalls
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
location | VARCHAR(100) | Lokalizacja zgłoszenia |
description | TEXT | Szczegóły zdarzenia |
status | VARCHAR(50) | Status (np. Przyjęte, W drodze) |
assigned_to | INT | ID jednostki przypisanej |
reported_at | DATETIME | Data zgłoszenia |
Tabela: tablet_EMSInventory
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
item_name | VARCHAR(100) | Nazwa sprzętu |
quantity | INT | Ilość |
last_used | DATETIME | Data ostatniego użycia |
Tabela: tablet_EMSReports
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
call_id | INT | ID zgłoszenia |
report_text | TEXT | Treść raportu |
used_items | TEXT | Lista użytych materiałów |
created_at | DATETIME | Data utworzenia |
Backend w Lua
Przykładowe funkcje serwera:
- Dodawanie pacjenta do rejestru:
lua
RegisterServerEvent('ems:addPatient')
AddEventHandler('ems:addPatient', function(name, dob, status)
local query = [[INSERT INTO tablet_EMSPatients (name, dob, status, last_update) VALUES (?, ?, ?, NOW())]]
MySQL.insert.await(query, {name, dob, status})
end)
- Dodawanie wpisu do historii medycznej:
lua
RegisterServerEvent('ems:addMedicalHistory')
AddEventHandler('ems:addMedicalHistory', function(patient_id, description)
local query = [[INSERT INTO tablet_EMSMedicalHistory (patient_id, description, created_at) VALUES (?, ?, NOW())]]
MySQL.insert.await(query, {patient_id, description})
end)
- Przyjmowanie zgłoszenia:
lua
RegisterServerEvent('ems:acceptCall')
AddEventHandler('ems:acceptCall', function(call_id, unit_id)
local query = [[UPDATE tablet_EMSCalls SET status = 'W drodze', assigned_to = ? WHERE id = ?]]
MySQL.update.await(query, {unit_id, call_id})
end)
- Zarządzanie wyposażeniem:
lua
RegisterServerEvent('ems:updateInventory')
AddEventHandler('ems:updateInventory', function(item_name, quantity_used)
local query = [[UPDATE tablet_EMSInventory SET quantity = quantity - ?, last_used = NOW() WHERE item_name = ?]]
MySQL.update.await(query, {quantity_used, item_name})
end)
- Tworzenie raportu medycznego:
lua
RegisterServerEvent('ems:createReport')
AddEventHandler('ems:createReport', function(call_id, report_text, used_items)
local query = [[INSERT INTO tablet_EMSReports (call_id, report_text, used_items, created_at) VALUES (?, ?, ?, NOW())]]
MySQL.insert.await(query, {call_id, report_text, used_items})
end)
Frontend (Vue.js)
Widoki:
- Panel główny:
- Lista aktywnych zgłoszeń i pacjentów.
- Podsumowanie dostępnego wyposażenia.
- Rejestr pacjentów:
- Wyszukiwanie i edycja danych pacjentów.
- Przegląd historii medycznej.
- Zgłoszenia:
- Podgląd zgłoszeń z opcją przypisania do jednostek.
- Zarządzanie wyposażeniem:
- Lista dostępnych materiałów z opcją aktualizacji.
- Raporty medyczne:
- Przegląd raportów z interwencji.
Mechanizmy wymiany danych
Autoryzacja użytkowników:
- Token JWT przesyłany z każdym zapytaniem do API.
Synchronizacja danych:
- Dane pacjentów, zgłoszeń i wyposażenia są synchronizowane na bieżąco w czasie rzeczywistym.
Powiadomienia:
- Automatyczne powiadomienia o nowych zgłoszeniach lub zmianach statusów pacjentów.