Compare commits

...

3 commits

25 changed files with 1088 additions and 275 deletions

View file

@ -24,6 +24,7 @@
"zod": "^3.22.4" "zod": "^3.22.4"
}, },
"devDependencies": { "devDependencies": {
"@faker-js/faker": "^8.3.1",
"@playwright/test": "^1.40.1", "@playwright/test": "^1.40.1",
"@sveltejs/adapter-node": "^2.0.0", "@sveltejs/adapter-node": "^2.0.0",
"@sveltejs/kit": "^2.0.0", "@sveltejs/kit": "^2.0.0",
@ -47,6 +48,7 @@
"svelte-check": "^3.6.2", "svelte-check": "^3.6.2",
"tailwindcss": "^3.3.6", "tailwindcss": "^3.3.6",
"tslib": "^2.6.2", "tslib": "^2.6.2",
"tsx": "^4.7.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
"vite": "^5.0.0", "vite": "^5.0.0",
"vitest": "^1.0.0" "vitest": "^1.0.0"

View file

@ -22,6 +22,9 @@ dependencies:
version: 3.22.4 version: 3.22.4
devDependencies: devDependencies:
'@faker-js/faker':
specifier: ^8.3.1
version: 8.3.1
'@playwright/test': '@playwright/test':
specifier: ^1.40.1 specifier: ^1.40.1
version: 1.40.1 version: 1.40.1
@ -91,6 +94,9 @@ devDependencies:
tslib: tslib:
specifier: ^2.6.2 specifier: ^2.6.2
version: 2.6.2 version: 2.6.2
tsx:
specifier: ^4.7.0
version: 4.7.0
typescript: typescript:
specifier: ^5.3.3 specifier: ^5.3.3
version: 5.3.3 version: 5.3.3
@ -396,6 +402,11 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/@faker-js/faker@8.3.1:
resolution: {integrity: sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'}
dev: true
/@humanwhocodes/config-array@0.11.13: /@humanwhocodes/config-array@0.11.13:
resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
engines: {node: '>=10.10.0'} engines: {node: '>=10.10.0'}
@ -1650,6 +1661,12 @@ packages:
engines: {node: '>=16'} engines: {node: '>=16'}
dev: true dev: true
/get-tsconfig@4.7.2:
resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
dependencies:
resolve-pkg-maps: 1.0.0
dev: true
/glob-parent@5.1.2: /glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@ -2440,6 +2457,10 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
dev: true dev: true
/resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
dev: true
/resolve@1.22.8: /resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true hasBin: true
@ -2846,6 +2867,17 @@ packages:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: true dev: true
/tsx@4.7.0:
resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==}
engines: {node: '>=18.0.0'}
hasBin: true
dependencies:
esbuild: 0.19.10
get-tsconfig: 4.7.2
optionalDependencies:
fsevents: 2.3.3
dev: true
/type-check@0.4.0: /type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}

View file

@ -21,7 +21,6 @@ CREATE TABLE "users" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"name" TEXT, "name" TEXT,
"email" TEXT, "email" TEXT,
"emailVerified" TIMESTAMP(3),
CONSTRAINT "users_pkey" PRIMARY KEY ("id") CONSTRAINT "users_pkey" PRIMARY KEY ("id")
); );
@ -38,7 +37,7 @@ CREATE TABLE "stations" (
CREATE TABLE "rooms" ( CREATE TABLE "rooms" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"name" TEXT NOT NULL, "name" TEXT NOT NULL,
"stationId" INTEGER NOT NULL, "station_id" INTEGER NOT NULL,
CONSTRAINT "rooms_pkey" PRIMARY KEY ("id") CONSTRAINT "rooms_pkey" PRIMARY KEY ("id")
); );
@ -46,11 +45,11 @@ CREATE TABLE "rooms" (
-- CreateTable -- CreateTable
CREATE TABLE "patients" ( CREATE TABLE "patients" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"firstName" TEXT NOT NULL, "first_name" TEXT NOT NULL,
"lastName" TEXT NOT NULL, "last_name" TEXT NOT NULL,
"age" INTEGER, "age" INTEGER,
"roomId" INTEGER, "room_id" INTEGER,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "patients_pkey" PRIMARY KEY ("id") CONSTRAINT "patients_pkey" PRIMARY KEY ("id")
); );
@ -68,8 +67,8 @@ CREATE TABLE "categories" (
-- CreateTable -- CreateTable
CREATE TABLE "entries" ( CREATE TABLE "entries" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"patientId" INTEGER NOT NULL, "patient_id" INTEGER NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "entries_pkey" PRIMARY KEY ("id") CONSTRAINT "entries_pkey" PRIMARY KEY ("id")
); );
@ -77,26 +76,26 @@ CREATE TABLE "entries" (
-- CreateTable -- CreateTable
CREATE TABLE "entry_versions" ( CREATE TABLE "entry_versions" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"entryId" INTEGER NOT NULL, "entry_id" INTEGER NOT NULL,
"text" TEXT NOT NULL, "text" TEXT NOT NULL,
"date" TIMESTAMP(3) NOT NULL, "date" TIMESTAMP(3) NOT NULL,
"categoryId" INTEGER, "category_id" INTEGER,
"priority" BOOLEAN NOT NULL, "priority" BOOLEAN NOT NULL,
"authorId" INTEGER NOT NULL, "author_id" INTEGER NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "entry_versions_pkey" PRIMARY KEY ("id") CONSTRAINT "entry_versions_pkey" PRIMARY KEY ("id")
); );
-- CreateTable -- CreateTable
CREATE TABLE "entry_execution" ( CREATE TABLE "entry_executions" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"entryId" INTEGER NOT NULL, "entry_id" INTEGER NOT NULL,
"text" TEXT NOT NULL, "text" TEXT NOT NULL,
"authorId" INTEGER NOT NULL, "author_id" INTEGER NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "entry_execution_pkey" PRIMARY KEY ("id") CONSTRAINT "entry_executions_pkey" PRIMARY KEY ("id")
); );
-- CreateIndex -- CreateIndex
@ -109,25 +108,25 @@ CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
ALTER TABLE "accounts" ADD CONSTRAINT "accounts_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "accounts" ADD CONSTRAINT "accounts_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "rooms" ADD CONSTRAINT "rooms_stationId_fkey" FOREIGN KEY ("stationId") REFERENCES "stations"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "rooms" ADD CONSTRAINT "rooms_station_id_fkey" FOREIGN KEY ("station_id") REFERENCES "stations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "patients" ADD CONSTRAINT "patients_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "rooms"("id") ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE "patients" ADD CONSTRAINT "patients_room_id_fkey" FOREIGN KEY ("room_id") REFERENCES "rooms"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "entries" ADD CONSTRAINT "entries_patientId_fkey" FOREIGN KEY ("patientId") REFERENCES "patients"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "entries" ADD CONSTRAINT "entries_patient_id_fkey" FOREIGN KEY ("patient_id") REFERENCES "patients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "entry_versions" ADD CONSTRAINT "entry_versions_entryId_fkey" FOREIGN KEY ("entryId") REFERENCES "entries"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "entry_versions" ADD CONSTRAINT "entry_versions_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "entry_versions" ADD CONSTRAINT "entry_versions_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "categories"("id") ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE "entry_versions" ADD CONSTRAINT "entry_versions_category_id_fkey" FOREIGN KEY ("category_id") REFERENCES "categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "entry_versions" ADD CONSTRAINT "entry_versions_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "entry_versions" ADD CONSTRAINT "entry_versions_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "entry_execution" ADD CONSTRAINT "entry_execution_entryId_fkey" FOREIGN KEY ("entryId") REFERENCES "entries"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "entry_executions" ADD CONSTRAINT "entry_executions_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "entry_execution" ADD CONSTRAINT "entry_execution_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "entry_executions" ADD CONSTRAINT "entry_executions_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View file

@ -0,0 +1,29 @@
ALTER TABLE entries
ADD COLUMN tsvec tsvector;
CREATE FUNCTION public.update_entry_tsvec () RETURNS TRIGGER LANGUAGE plpgsql AS $function$
declare
v_text text := '';
x_text text := '';
begin
select text into v_text from entry_versions ev where ev.entry_id = new.entry_id order by ev.created_at desc limit 1;
select text into x_text from entry_executions ex where ex.entry_id = new.entry_id order by ex.created_at desc limit 1;
update entries set tsvec =
to_tsvector('german', coalesce(v_text, '')) ||
to_tsvector('german', coalesce(x_text, ''))
where id = new.entry_id;
RETURN NEW;
END
$function$;
CREATE TRIGGER entry_versions_update_tsvec
AFTER INSERT
OR
UPDATE ON entry_versions FOR EACH ROW
EXECUTE PROCEDURE update_entry_tsvec ();
CREATE TRIGGER entry_execution_update_tsvec
AFTER INSERT
OR
UPDATE ON entry_executions FOR EACH ROW
EXECUTE PROCEDURE update_entry_tsvec ();

View file

@ -14,7 +14,7 @@ datasource db {
model Account { model Account {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
userId Int user_id Int @map("userId")
type String type String
provider String provider String
providerAccountId String providerAccountId String
@ -26,17 +26,16 @@ model Account {
id_token String? @db.Text id_token String? @db.Text
session_state String? session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade) user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId]) @@unique([provider, providerAccountId])
@@map("accounts") @@map("accounts")
} }
model User { model User {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
name String? name String?
email String? @unique email String? @unique
emailVerified DateTime?
accounts Account[] accounts Account[]
EntryVersion EntryVersion[] EntryVersion EntryVersion[]
@ -58,25 +57,25 @@ model Station {
// Hospital room // Hospital room
model Room { model Room {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
name String name String
station Station @relation(fields: [stationId], references: [id], onDelete: Cascade) station Station @relation(fields: [station_id], references: [id], onDelete: Cascade)
stationId Int station_id Int
Patient Patient[] Patient Patient[]
@@map("rooms") @@map("rooms")
} }
model Patient { model Patient {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
firstName String first_name String
lastName String last_name String
age Int? age Int?
room Room? @relation(fields: [roomId], references: [id], onDelete: SetNull) room Room? @relation(fields: [room_id], references: [id], onDelete: SetNull)
roomId Int? room_id Int?
Entry Entry[] Entry Entry[]
createdAt DateTime @default(now()) created_at DateTime @default(now())
@@map("patients") @@map("patients")
} }
@ -93,49 +92,49 @@ model Category {
} }
model Entry { model Entry {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
patient Patient @relation(fields: [patientId], references: [id], onDelete: Cascade) patient Patient @relation(fields: [patient_id], references: [id], onDelete: Cascade)
patientId Int patient_id Int
EntryVersion EntryVersion[] EntryVersion EntryVersion[]
EntryExecution EntryExecution[] EntryExecution EntryExecution[]
createdAt DateTime @default(now()) created_at DateTime @default(now())
@@map("entries") @@map("entries")
} }
model EntryVersion { model EntryVersion {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
entry Entry @relation(fields: [entryId], references: [id], onDelete: Cascade) entry Entry @relation(fields: [entry_id], references: [id], onDelete: Cascade)
entryId Int entry_id Int
text String text String
date DateTime date DateTime
category Category? @relation(fields: [categoryId], references: [id], onDelete: SetNull) category Category? @relation(fields: [category_id], references: [id], onDelete: SetNull)
categoryId Int? category_id Int?
priority Boolean priority Boolean
author User @relation(fields: [authorId], references: [id]) author User @relation(fields: [author_id], references: [id])
authorId Int author_id Int
createdAt DateTime @default(now()) created_at DateTime @default(now())
@@map("entry_versions") @@map("entry_versions")
} }
model EntryExecution { model EntryExecution {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
entry Entry @relation(fields: [entryId], references: [id], onDelete: Cascade) entry Entry @relation(fields: [entry_id], references: [id], onDelete: Cascade)
entryId Int entry_id Int
text String text String
author User @relation(fields: [authorId], references: [id]) author User @relation(fields: [author_id], references: [id])
authorId Int author_id Int
createdAt DateTime @default(now()) created_at DateTime @default(now())
@@map("entry_execution") @@map("entry_executions")
} }

4
run/gen-mockdata.ts Normal file
View file

@ -0,0 +1,4 @@
// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
import generateMockdata from "../tests/helpers/generate-mockdata"
await generateMockdata();

View file

@ -7,7 +7,7 @@ function mapUser(user: User): AdapterUser {
id: user.id.toString(), id: user.id.toString(),
name: user.name, name: user.name,
email: user.email!, email: user.email!,
emailVerified: user.emailVerified, emailVerified: null,
}; };
} }
@ -18,7 +18,7 @@ function mapUserOpt(user: User | null | undefined): AdapterUser | null {
function mapAccount(account: Account): AdapterAccount { function mapAccount(account: Account): AdapterAccount {
return { return {
userId: account.userId.toString(), userId: account.user_id.toString(),
type: account.type as "oauth" | "oidc" | "email", type: account.type as "oauth" | "oidc" | "email",
provider: account.provider, provider: account.provider,
providerAccountId: account.providerAccountId, providerAccountId: account.providerAccountId,
@ -39,7 +39,6 @@ export function PrismaAdapter(p: PrismaClient): Adapter {
data: { data: {
name: data.name, name: data.name,
email: data.email, email: data.email,
emailVerified: data.emailVerified,
}, },
}) })
), ),
@ -62,7 +61,7 @@ export function PrismaAdapter(p: PrismaClient): Adapter {
mapAccount( mapAccount(
await p.account.create({ await p.account.create({
data: { data: {
userId: parseInt(data.userId), user_id: parseInt(data.userId),
type: data.type, type: data.type,
provider: data.provider, provider: data.provider,
providerAccountId: data.providerAccountId, providerAccountId: data.providerAccountId,

View file

@ -4,7 +4,7 @@ import { prisma } from "$lib/server/prisma";
export async function newCategory(category: CategoryNew): Promise<number> { export async function newCategory(category: CategoryNew): Promise<number> {
const data = ZCategoryNew.parse(category); const data = ZCategoryNew.parse(category);
const created = await prisma.category.create({ data }); const created = await prisma.category.create({ data, select: { id: true } });
return created.id; return created.id;
} }

View file

@ -12,8 +12,9 @@ import {
ZEntryNew, ZEntryNew,
ZEntryVersionNew, ZEntryVersionNew,
} from "$lib/shared/model/validation"; } from "$lib/shared/model/validation";
import { ErrorConflict } from "$lib/shared/util/error";
import { mapEntry } from "./mapping"; import { mapEntry } from "./mapping";
import { QueryBuilder } from "./util"; import { QueryBuilder, parseSearchQuery } from "./util";
const USER_SELECT = { select: { id: true, name: true } }; const USER_SELECT = { select: { id: true, name: true } };
@ -24,12 +25,12 @@ export async function getEntry(id: number): Promise<Entry> {
patient: { include: { room: { include: { station: true } } } }, patient: { include: { room: { include: { station: true } } } },
EntryVersion: { EntryVersion: {
include: { author: USER_SELECT, category: true }, include: { author: USER_SELECT, category: true },
orderBy: { createdAt: "desc" }, orderBy: { created_at: "desc" },
take: 1, take: 1,
}, },
EntryExecution: { EntryExecution: {
include: { author: USER_SELECT }, include: { author: USER_SELECT },
orderBy: { createdAt: "desc" }, orderBy: { created_at: "desc" },
take: 1, take: 1,
}, },
}, },
@ -38,117 +39,172 @@ export async function getEntry(id: number): Promise<Entry> {
return mapEntry(entry); return mapEntry(entry);
} }
export async function newEntry(authorId: number, entry: EntryNew): Promise<number> { export async function newEntry(author_id: number, entry: EntryNew): Promise<number> {
const data = ZEntryNew.parse(entry); const data = ZEntryNew.parse(entry);
const created = await prisma.entry.create({ const created = await prisma.entry.create({
data: { data: {
patientId: data.patientId, patient_id: data.patient_id,
EntryVersion: { EntryVersion: {
create: { create: {
authorId, author_id,
...data.version, ...data.version,
}, },
}, },
}, },
select: { id: true },
}); });
return created.id; return created.id;
} }
export async function newEntryVersion( export async function newEntryVersion(
authorId: number, author_id: number,
entryId: number, entry_id: number,
version: EntryVersionNew version: EntryVersionNew
): Promise<number> { ): Promise<number> {
const data = ZEntryVersionNew.parse(version); const data = ZEntryVersionNew.parse(version);
const created = await prisma.entryVersion.create({
data: { return prisma.$transaction(async (tx) => {
entryId, const entry = await tx.entry.findUniqueOrThrow({
authorId, where: { id: entry_id },
...data, include: {
}, EntryVersion: {
orderBy: { created_at: "desc" },
take: 1,
},
},
});
const cver = entry.EntryVersion[0];
// Check if the entry has been updated by someone else
if (data.old_version && (!cver || cver.id !== data.old_version)) {
throw new ErrorConflict("old version id does not match");
}
const created = await tx.entryVersion.create({
data: {
// Old version
entry_id,
author_id,
text: data.text || cver.text,
date: data.date || cver.date,
category_id: data.category_id || cver.category_id,
priority: data.priority || cver.priority,
},
select: { id: true },
});
return created.id;
}); });
return created.id;
} }
export async function newEntryExecution( export async function newEntryExecution(
authorId: number, author_id: number,
entryId: number, entry_id: number,
execution: EntryExecutionNew execution: EntryExecutionNew
): Promise<number> { ): Promise<number> {
const data = ZEntryExecutionNew.parse(execution); const data = ZEntryExecutionNew.parse(execution);
const created = await prisma.entryExecution.create({
data: { return prisma.$transaction(async (tx) => {
entryId, const entry = await tx.entry.findUniqueOrThrow({
authorId, where: { id: entry_id },
...data, include: {
}, EntryExecution: {
orderBy: { created_at: "desc" },
take: 1,
},
},
});
const cex = entry.EntryExecution[0];
// Check if the execution has been updated by someone else
if (
(data.old_execution && (!cex || cex.id !== data.old_execution)) ||
(data.old_execution === null && cex)
) {
throw new ErrorConflict("old execution id does not match");
}
const created = await prisma.entryExecution.create({
data: {
entry_id,
author_id,
text: data.text,
},
select: { id: true },
});
return created.id;
}); });
return created.id;
} }
export async function getEntries(req: EntriesRequest): Promise<Pagination<Entry>> { export async function getEntries(req: EntriesRequest): Promise<Pagination<Entry>> {
const qb = new QueryBuilder( const qb = new QueryBuilder(
`select `select
e.id, e.id,
e."createdAt", e.created_at,
ev.text, ev.text,
ev."date", ev.date,
ev.priority, ev.priority,
ev.id as "versionId", ev.id as version_id,
ev."createdAt" as "versionCreatedAt", ev.created_at as version_created_at,
vau.id as "versionAuthorId", vau.id as version_author_id,
vau."name" as "versionAuthorName", vau.name as version_author_name,
c.id as "categoryId", c.id as category_id,
c."name" as "categoryName", c.name as category_name,
c.color as "categoryColor", c.color as category_color,
ex.id as "executionId", ex.id as execution_id,
ex.text as "executionText", ex.text as execution_text,
ex."createdAt" as "executionCreatedAt", ex.created_at as execution_created_at,
xau.id as "executionAuthorId", xau.id as execution_author_id,
xau.name as "executionAuthorName", xau.name as execution_author_name,
p.id as "patientId", p.id as patient_id,
p."firstName" as "patientFirstName", p.first_name as patient_first_name,
p."lastName" as "patientLastName", p.last_name as patient_last_name,
p.age as "patientAge", p.age as patient_age,
p."createdAt" as "patientCreatedAt", p.created_at as patient_created_at,
r.id as "roomId", r.id as room_id,
r."name" as "roomName", r.name as room_name,
s.id as "stationId", s.id as station_id,
s."name" as "stationName"`, s.name as station_name`,
`from entries e `from entries e
join entry_versions ev on join entry_versions ev on
ev."entryId" = e.id ev.entry_id = e.id
and ev.id = ( and ev.id = (
select select
id id
from from
entry_versions ev2 entry_versions ev2
where where
ev2."entryId" = ev."entryId" ev2.entry_id = ev.entry_id
order by order by
ev2."createdAt" desc ev2.created_at desc
limit 1) limit 1)
join users vau on vau.id=ev."authorId" join users vau on vau.id=ev.author_id
left join categories c on c.id=ev."categoryId" left join categories c on c.id=ev.category_id
left join entry_execution ex on left join entry_executions ex on
ex."entryId" = e.id ex.entry_id = e.id
and ex.id = ( and ex.id = (
select select
id id
from from
entry_execution ex2 entry_executions ex2
where where
ex2."entryId" = ex."entryId" ex2.entry_id = ex.entry_id
order by order by
ex2."createdAt" desc ex2.created_at desc
limit 1) limit 1)
left join users xau on xau.id=ex."authorId" left join users xau on xau.id=ex.author_id
join patients p on p.id = e."patientId" join patients p on p.id = e.patient_id
join rooms r on r.id = p."roomId" join rooms r on r.id = p.room_id
join stations s on s.id = r."stationId"` join stations s on s.id = r.station_id`
); );
// qb.addFilterIsNull("ex.id", req.filter?.done); if (req.filter?.search && req.filter.search.length > 0) {
const query = parseSearchQuery(req.filter.search);
qb.addFilterClause(
`to_tsquery('german', ${qb.pvar()}) @@ e.tsvec`,
query.toTsquery()
);
}
if (req.filter?.done === true) { if (req.filter?.done === true) {
qb.addFilterClause("ex.id is not null"); qb.addFilterClause("ex.id is not null");
} else if (req.filter?.done === false) { } else if (req.filter?.done === false) {
@ -168,41 +224,41 @@ join stations s on s.id = r."stationId"`
author = [author]; author = [author];
} }
qb.addFilterClause( qb.addFilterClause(
`${qb.pvar()}::integer[] && (select array_agg(ev2."authorId") from entry_versions ev2 where ev2."entryId"=e.id)`, `${qb.pvar()}::integer[] && (select array_agg(ev2.author_id) from entry_versions ev2 where ev2.entry_id=e.id)`,
author author
); );
} }
qb.setOrderClause(`order by e."createdAt" desc`); qb.setOrderClause(`order by e.created_at desc`);
if (req.pagination) qb.setPagination(req.pagination); if (req.pagination) qb.setPagination(req.pagination);
type RequestItem = { type RequestItem = {
id: number; id: number;
createdAt: Date; created_at: Date;
text: string; text: string;
date: Date; date: Date;
priority: boolean; priority: boolean;
versionId: number; version_id: number;
versionCreatedAt: Date; version_created_at: Date;
versionAuthorId: number; version_author_id: number;
versionAuthorName: string; version_author_name: string;
categoryId: number; category_id: number;
categoryName: string; category_name: string;
categoryColor: string; category_color: string;
executionId: number; execution_id: number;
executionText: string; execution_text: string;
executionCreatedAt: Date; execution_created_at: Date;
executionAuthorId: number; execution_author_id: number;
executionAuthorName: string; execution_author_name: string;
patientId: number; patient_id: number;
patientFirstName: string; patient_first_name: string;
patientLastName: string; patient_last_name: string;
patientAge: number; patient_age: number;
patientCreatedAt: Date; patient_created_at: Date;
roomId: number; room_id: number;
roomName: string; room_name: string;
stationId: number; station_id: number;
stationName: string; station_name: string;
}; };
const [res, countRes] = (await Promise.all([ const [res, countRes] = (await Promise.all([
@ -216,40 +272,40 @@ join stations s on s.id = r."stationId"`
return { return {
id: item.id, id: item.id,
patient: { patient: {
id: item.patientId, id: item.patient_id,
firstName: item.patientFirstName, first_name: item.patient_first_name,
lastName: item.patientLastName, last_name: item.patient_last_name,
createdAt: item.patientCreatedAt, created_at: item.patient_created_at,
age: item.patientAge, age: item.patient_age,
room: { room: {
id: item.roomId, id: item.room_id,
name: item.roomName, name: item.room_name,
station: { id: item.stationId, name: item.stationName }, station: { id: item.station_id, name: item.station_name },
}, },
}, },
createdAt: item.createdAt, created_at: item.created_at,
currentVersion: { current_version: {
id: item.versionId, id: item.version_id,
text: item.text, text: item.text,
date: item.date, date: item.date,
category: item.categoryId category: item.category_id
? { ? {
id: item.categoryId, id: item.category_id,
name: item.categoryName, name: item.category_name,
color: item.categoryColor, color: item.category_color,
description: null, description: null,
} }
: null, : null,
priority: item.priority, priority: item.priority,
author: { id: item.versionAuthorId, name: item.versionAuthorName }, author: { id: item.version_author_id, name: item.version_author_name },
createdAt: item.createdAt, created_at: item.version_created_at,
}, },
execution: item.executionId execution: item.execution_id
? { ? {
id: item.executionId, id: item.execution_id,
author: { id: item.executionAuthorId, name: item.executionAuthorName }, author: { id: item.execution_author_id, name: item.execution_author_name },
text: item.executionText, text: item.execution_text,
createdAt: item.executionCreatedAt, created_at: item.execution_created_at,
} }
: null, : null,
}; };

View file

@ -1,4 +1,5 @@
import type { Entry, Patient, User, UserTag, Room } from "$lib/shared/model"; import type { Entry, Patient, User, UserTag, Room } from "$lib/shared/model";
import { ErrorNotFound } from "$lib/shared/util/error";
import type { import type {
Patient as DbPatient, Patient as DbPatient,
Room as DbRoom, Room as DbRoom,
@ -21,9 +22,9 @@ type DbEntryExecutionLn = DbEntryExecution & { author: UserTag };
export function mapPatient(patient: DbPatientLn): Patient { export function mapPatient(patient: DbPatientLn): Patient {
return { return {
id: patient.id, id: patient.id,
firstName: patient.firstName, first_name: patient.first_name,
lastName: patient.lastName, last_name: patient.last_name,
createdAt: patient.createdAt, created_at: patient.created_at,
age: patient.age, age: patient.age,
room: patient.room room: patient.room
? { ? {
@ -55,27 +56,27 @@ export function mapEntry(
} }
): Entry { ): Entry {
const v = entry.EntryVersion[0]; const v = entry.EntryVersion[0];
if (!v) throw new Error("no version associated with that entry"); if (!v) throw new ErrorNotFound("no version associated with that entry");
const x = entry.EntryExecution[0]; const x = entry.EntryExecution[0];
return { return {
id: entry.id, id: entry.id,
patient: mapPatient(entry.patient), patient: mapPatient(entry.patient),
createdAt: entry.createdAt, created_at: entry.created_at,
currentVersion: { current_version: {
id: v.id, id: v.id,
text: v.text, text: v.text,
date: v.date, date: v.date,
category: v.category, category: v.category,
priority: v.priority, priority: v.priority,
author: v.author, author: v.author,
createdAt: v.createdAt, created_at: v.created_at,
}, },
execution: x execution: x
? { ? {
id: x.id, id: x.id,
author: x.author, author: x.author,
createdAt: x.createdAt, created_at: x.created_at,
text: x.text, text: x.text,
} }
: null, : null,

View file

@ -12,7 +12,7 @@ import { convertFilterList } from "./util";
export async function newPatient(patient: PatientNew): Promise<number> { export async function newPatient(patient: PatientNew): Promise<number> {
const data = ZPatientNew.parse(patient); const data = ZPatientNew.parse(patient);
const created = await prisma.patient.create({ data }); const created = await prisma.patient.create({ data, select: { id: true } });
return created.id; return created.id;
} }
@ -29,9 +29,9 @@ export async function getPatient(id: number): Promise<Patient> {
export async function getPatients(req: PatientsRequest): Promise<Pagination<Patient>> { export async function getPatients(req: PatientsRequest): Promise<Pagination<Patient>> {
const offset = req.pagination?.offset || 0; const offset = req.pagination?.offset || 0;
const where = { const where = {
roomId: convertFilterList(req.filter?.room), room_id: convertFilterList(req.filter?.room),
room: { room: {
stationId: convertFilterList(req.filter?.station), station_id: convertFilterList(req.filter?.station),
}, },
}; };
const [patients, total] = await Promise.all([ const [patients, total] = await Promise.all([
@ -40,7 +40,7 @@ export async function getPatients(req: PatientsRequest): Promise<Pagination<Pati
include: { include: {
room: { include: { station: true } }, room: { include: { station: true } },
}, },
orderBy: { createdAt: "desc" }, orderBy: { created_at: "desc" },
skip: offset, skip: offset,
take: req.pagination?.limit || PAGINATION_LIMIT, take: req.pagination?.limit || PAGINATION_LIMIT,
}), }),

View file

@ -5,7 +5,7 @@ import { mapRoom } from "./mapping";
export async function newStation(station: StationNew): Promise<number> { export async function newStation(station: StationNew): Promise<number> {
const data = ZStationNew.parse(station); const data = ZStationNew.parse(station);
const created = await prisma.station.create({ data }); const created = await prisma.station.create({ data, select: { id: true } });
return created.id; return created.id;
} }
@ -19,7 +19,7 @@ export async function getStations(): Promise<Station[]> {
export async function newRoom(room: RoomNew): Promise<number> { export async function newRoom(room: RoomNew): Promise<number> {
const data = ZRoomNew.parse(room); const data = ZRoomNew.parse(room);
const created = await prisma.room.create({ data }); const created = await prisma.room.create({ data, select: { id: true } });
return created.id; return created.id;
} }

View file

@ -1,5 +1,5 @@
import { expect, test } from "vitest"; import { expect, test } from "vitest";
import { QueryBuilder } from "./util"; import { QueryBuilder, parseSearchQuery } from "./util";
test("query builder", () => { test("query builder", () => {
const qb = new QueryBuilder("select e.id, e.text, e.category", "from entries e"); const qb = new QueryBuilder("select e.id, e.text, e.category", "from entries e");
@ -18,3 +18,40 @@ test("query builder", () => {
expect(params[2]).toBe(20); expect(params[2]).toBe(20);
expect(params[3]).toBe(10); expect(params[3]).toBe(10);
}); });
test("parse search query", () => {
const q = `"hello world" banana -cherry -"b x y" vis`;
const parsed = parseSearchQuery(q);
expect(parsed.components).toMatchObject([
{
negative: false,
typ: 2,
word: "hello world",
},
{
negative: false,
typ: 1,
word: "banana",
},
{
negative: true,
typ: 1,
word: "cherry",
},
{
negative: true,
typ: 2,
word: "b x y",
},
{
negative: false,
typ: 3,
word: "vis",
},
]);
const term = parsed.toTsquery();
expect(term).toBe(
`'hello' <-> 'world' & 'banana' & !'cherry' & !('b' <-> 'x' <-> 'y') & 'vis':*`
);
});

View file

@ -13,6 +13,97 @@ export function convertFilterList<T>(
} }
} }
enum QueryComponentType {
Normal = 1,
Exact,
Trailing,
}
class SearchQueryComponent {
word: string;
typ: QueryComponentType;
negative: boolean;
constructor(word: string, typ: QueryComponentType, negative: boolean) {
this.word = word;
this.typ = typ;
this.negative = negative;
}
private quoted(): string {
return `'${this.word}'`;
}
/**
* Convert the query component to a Postgres Tsquery string
*/
toTsquery(): string {
let tsquery;
let multipleParts = false;
if (this.typ == QueryComponentType.Exact) {
const parts = this.word.split(" ").map((s) => `'${s}'`);
multipleParts = parts.length > 1;
tsquery = parts.join(" <-> ");
} else if (this.typ == QueryComponentType.Trailing) {
tsquery = this.quoted() + ":*";
} else {
tsquery = this.quoted();
}
if (this.negative) {
if (multipleParts) {
tsquery = "!(" + tsquery + ")";
} else {
tsquery = "!" + tsquery;
}
}
return tsquery;
}
}
class SearchQueryComponents {
components: SearchQueryComponent[];
constructor(components: SearchQueryComponent[]) {
this.components = components;
}
toTsquery(): string {
return this.components.map((c) => c.toTsquery()).join(" & ");
}
}
/**
* Split a search query into individual components
*
* Supported search syntax:
* - Negative query `-word`
* - Exact query `"word"`
*/
export function parseSearchQuery(q: string): SearchQueryComponents {
const regexpParts = /(-)?(?:"([^"]*)"|([^"\s]+))(?:\s|$)/g;
const components = Array.from(q.matchAll(regexpParts), (m) => {
const negative = m[1] === "-";
// Exact
if (m[2]) {
return new SearchQueryComponent(m[2], QueryComponentType.Exact, negative);
} else {
return new SearchQueryComponent(m[3], QueryComponentType.Normal, negative);
}
});
if (
components.length > 0 &&
components[components.length - 1].typ === QueryComponentType.Normal
) {
components[components.length - 1].typ = QueryComponentType.Trailing;
}
return new SearchQueryComponents(components);
}
export class QueryBuilder { export class QueryBuilder {
private selectClause; private selectClause;
private fromClause; private fromClause;

View file

@ -34,7 +34,7 @@ export type Room = {
export type RoomNew = { export type RoomNew = {
name: string; name: string;
stationId: number; station_id: number;
}; };
export type Category = { export type Category = {
@ -52,31 +52,31 @@ export type CategoryNew = {
export type Patient = { export type Patient = {
id: number; id: number;
firstName: string; first_name: string;
lastName: string; last_name: string;
age: Option<number>; age: Option<number>;
room: Option<Room>; room: Option<Room>;
createdAt: Date; created_at: Date;
}; };
export type PatientNew = { export type PatientNew = {
firstName: string; first_name: string;
lastName: string; last_name: string;
age: Option<number>; age: Option<number>;
roomId: number; room_id: number;
}; };
export type Entry = { export type Entry = {
id: number; id: number;
patient: Patient; patient: Patient;
createdAt: Date; created_at: Date;
currentVersion: EntryVersion; current_version: EntryVersion;
execution: Option<EntryExecution>; execution: Option<EntryExecution>;
}; };
export type EntryNew = { export type EntryNew = {
patientId: number; patient_id: number;
version: EntryVersionNew; version: EntryVersionNdata;
}; };
export type EntryVersion = { export type EntryVersion = {
@ -86,23 +86,30 @@ export type EntryVersion = {
category: Option<Category>; category: Option<Category>;
priority: boolean; priority: boolean;
author: UserTag; author: UserTag;
createdAt: Date; created_at: Date;
}; };
export type EntryVersionNew = { export type EntryVersionNdata = {
text: string; text: string;
date: Date; date: Date;
categoryId: Option<number>; category_id: Option<number>;
priority: boolean; priority: boolean;
}; };
export type EntryVersionNew = Partial<{
old_version: number;
}> &
Partial<EntryVersionNdata>;
export type EntryExecution = { export type EntryExecution = {
id: number; id: number;
author: UserTag; author: UserTag;
text: string; text: string;
createdAt: Date; created_at: Date;
}; };
export type EntryExecutionNew = { export type EntryExecutionNew = Partial<{
old_execution: number | null;
}> & {
text: string; text: string;
}; };

View file

@ -6,6 +6,7 @@ export type PaginationRequest = {
export type FilterList<T> = T | T[]; export type FilterList<T> = T | T[];
export type EntriesFilter = Partial<{ export type EntriesFilter = Partial<{
search: string;
done: boolean; done: boolean;
author: FilterList<number>; author: FilterList<number>;
executor: FilterList<number>; executor: FilterList<number>;

View file

@ -4,6 +4,7 @@ import type {
CategoryNew, CategoryNew,
EntryExecutionNew, EntryExecutionNew,
EntryNew, EntryNew,
EntryVersionNdata,
EntryVersionNew, EntryVersionNew,
PatientNew, PatientNew,
RoomNew, RoomNew,
@ -18,7 +19,7 @@ export const ZStationNew = implement<StationNew>().with({ name: ZNameString });
export const ZRoomNew = implement<RoomNew>().with({ export const ZRoomNew = implement<RoomNew>().with({
name: ZNameString, name: ZNameString,
stationId: ZEntityId, station_id: ZEntityId,
}); });
export const ZCategoryNew = implement<CategoryNew>().with({ export const ZCategoryNew = implement<CategoryNew>().with({
@ -32,24 +33,31 @@ export const ZCategoryNew = implement<CategoryNew>().with({
}); });
export const ZPatientNew = implement<PatientNew>().with({ export const ZPatientNew = implement<PatientNew>().with({
firstName: ZNameString, first_name: ZNameString,
lastName: ZNameString, last_name: ZNameString,
age: z.number().int().nonnegative().lt(200).nullable(), age: z.number().int().nonnegative().lt(200).nullable(),
roomId: ZEntityId, room_id: ZEntityId,
}); });
export const ZEntryVersionNew = implement<EntryVersionNew>().with({ export const ZEntryVersionNew = implement<EntryVersionNew>().with({
text: ZTextString, old_version: ZEntityId.optional(),
date: z.date(), text: ZTextString.optional(),
categoryId: ZEntityId.nullable(), date: z.date().optional(),
priority: z.boolean(), category_id: ZEntityId.optional().nullable(),
priority: z.boolean().optional(),
}); });
export const ZEntryNew = implement<EntryNew>().with({ export const ZEntryNew = implement<EntryNew>().with({
patientId: ZEntityId, patient_id: ZEntityId,
version: ZEntryVersionNew, version: implement<EntryVersionNdata>().with({
text: ZTextString,
date: z.date(),
category_id: ZEntityId.nullable(),
priority: z.boolean(),
}),
}); });
export const ZEntryExecutionNew = implement<EntryExecutionNew>().with({ export const ZEntryExecutionNew = implement<EntryExecutionNew>().with({
old_execution: ZEntityId.optional().nullable(),
text: ZTextString, text: ZTextString,
}); });

View file

@ -0,0 +1,13 @@
export class ErrorConflict extends Error {
constructor(msg: string) {
super("conflict: " + msg);
Object.setPrototypeOf(this, ErrorConflict.prototype);
}
}
export class ErrorNotFound extends Error {
constructor(msg: string) {
super(msg);
Object.setPrototypeOf(this, ErrorNotFound.prototype);
}
}

View file

@ -0,0 +1,161 @@
import { prisma } from "$lib/server/prisma";
import { faker } from "@faker-js/faker";
import fs from "fs";
import { CATEGORIES, STATIONS } from "./testdata";
import path from "path";
import { fileURLToPath } from "url";
type MockEntry = { category: string; description: string; result: string };
const CATEGORY_IDS: { [id: string]: number } = {
Laborabnahme: 1,
Untersuchungen: 2,
Medikationsumstellung: 3,
"Klinische Visite": 4,
Entlassung: 5,
Sonstiges: 6,
};
const refDate = new Date(2023, 11, 1);
const N_USERS = 10;
const N_ROOMS = 20;
const N_PATIENTS = 50;
export default async () => {
// Reset database
await prisma.$transaction([
prisma.entryExecution.deleteMany(),
prisma.entryVersion.deleteMany(),
prisma.entry.deleteMany(),
prisma.patient.deleteMany(),
prisma.room.deleteMany(),
prisma.station.deleteMany(),
prisma.category.deleteMany(),
prisma.user.deleteMany(),
prisma.category.createMany({ data: CATEGORIES }),
prisma.station.createMany({ data: STATIONS }),
prisma.$executeRawUnsafe("alter sequence entries_id_seq restart with 1"),
prisma.$executeRawUnsafe("alter sequence entry_executions_id_seq restart with 1"),
prisma.$executeRawUnsafe("alter sequence entry_versions_id_seq restart with 1"),
]);
// Make generated data reproducible
faker.seed(42);
const filepath = path.join(
fileURLToPath(import.meta.url),
"../mockdata_entries.jsonl"
);
const file = fs.readFileSync(filepath).toString();
const entryMockdata: MockEntry[] = file
.trim()
.split("\n")
.map((l) => JSON.parse(l));
function randomId(len: number): number {
return faker.number.int({ min: 1, max: len - 1 });
}
for (let i = 1; i <= N_USERS; i++) {
const firstName = faker.person.firstName();
const lastName = faker.person.lastName();
await prisma.user.create({
data: {
id: i,
name: firstName + " " + lastName,
email: faker.internet.email({ firstName, lastName }),
},
});
}
let i = 1;
for (let sId = 1; sId <= 2; sId++) {
for (let rId = 1; rId <= 10; rId++) {
await prisma.room.create({
data: { id: i, name: `R${sId}.${rId}`, station_id: sId },
});
i += 1;
}
}
for (let i = 1; i <= N_PATIENTS; i++) {
await prisma.patient.create({
data: {
id: i,
first_name: faker.person.firstName(),
last_name: faker.person.lastName(),
age: faker.number.int({ min: 16, max: 100 }),
room_id: randomId(N_ROOMS),
},
});
}
for (let i = 0; i < entryMockdata.length; i++) {
const e = entryMockdata[i];
const created_at = faker.date.soon({ refDate, days: 30 });
const todo_date = faker.date.soon({ refDate: created_at, days: 30 });
const priority = faker.datatype.boolean({ probability: 0.05 });
const entry = await prisma.entry.create({
data: {
patient_id: randomId(N_PATIENTS),
created_at,
},
});
await prisma.entryVersion.create({
data: {
entry_id: entry.id,
author_id: randomId(N_USERS),
category_id: CATEGORY_IDS[e.category],
date: todo_date,
priority,
text: e.description,
},
});
// Add additional version(s) with some extra text
for (let n = 0; n < faker.number.int({ min: 0, max: 3 }); n++) {
const extraText = "\n\n> " + faker.lorem.paragraph();
await prisma.entryVersion.create({
data: {
entry_id: entry.id,
author_id: randomId(N_USERS),
category_id: CATEGORY_IDS[e.category],
date: todo_date,
priority,
text: e.description + extraText,
},
});
}
// 30% of entries are done
if (faker.datatype.boolean({ probability: 0.3 })) {
await prisma.entryExecution.create({
data: {
entry_id: entry.id,
author_id: randomId(N_USERS),
text: e.result,
created_at: faker.date.soon({ refDate: todo_date, days: 2 }),
},
});
}
await prisma.$transaction([
prisma.$executeRawUnsafe(
`alter sequence users_id_seq restart with ${N_USERS + 1}`
),
prisma.$executeRawUnsafe(
`alter sequence categories_id_seq restart with ${CATEGORIES.length + 1}`
),
prisma.$executeRawUnsafe(
`alter sequence stations_id_seq restart with ${STATIONS.length + 1}`
),
prisma.$executeRawUnsafe(
`alter sequence rooms_id_seq restart with ${N_ROOMS + 1}`
),
prisma.$executeRawUnsafe(
`alter sequence patients_id_seq restart with ${N_PATIENTS + 1}`
),
]);
}
};

View file

@ -0,0 +1,300 @@
{"category": "Laborabnahme", "description": "Dem Patienten wurde Blut abgenommen, um verschiedene Laborwerte zu überprüfen.", "result": "Die Blutprobe wurde entnommen und zur Analyse an das Labor geschickt. Die Ergebnisse werden in Kürze erwartet."}
{"category": "Medikationsumstellung", "description": "Es wurde eine Anpassung der Medikation vorgenommen, um die Behandlung zu optimieren.", "result": "Die Medikationsumstellung wurde erfolgreich durchgeführt. Der Patient wird engmaschig überwacht, um mögliche Reaktionen auf die neuen Medikamente zu erfassen."}
{"category": "Klinische Visite", "description": "Der Patient wurde klinisch untersucht, um den aktuellen Gesundheitszustand zu beurteilen.", "result": "Bei der klinischen Visite wurden vitale Parameter überprüft, einschließlich Blutdruck, Puls und Temperatur. Der Patient zeigt keine ungewöhnlichen Symptome und befindet sich in stabilem Zustand."}
{"category": "Untersuchungen", "description": "Es ist eine radiologische Untersuchung erforderlich, um genaue Informationen zu erhalten.", "result": "Die radiologische Untersuchung wurde durchgeführt, um detaillierte Bilder der betroffenen Bereiche zu erhalten. Die Ergebnisse werden vom Fachpersonal ausgewertet und mit dem behandelnden Arzt besprochen."}
{"category": "Entlassung", "description": "Der Patient wurde erfolgreich aus der stationären Behandlung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung der vitalen Parameter wurde der Patient in einem stabilen Zustand entlassen. Er wurde über die weiteren Schritte der Nachsorge informiert."}
{"category": "Sonstiges", "description": "Es sind zusätzliche Maßnahmen erforderlich, um die Ursache der Beschwerden zu klären.", "result": "Es wurden weitere diagnostische Maßnahmen eingeleitet, um die genaue Ursache der Beschwerden zu identifizieren. Der Patient wird über die geplanten Untersuchungen informiert."}
{"category": "Klinische Visite", "description": "Der Patient berichtet über Schlafprobleme und Unruhezustände.", "result": "Bei der klinischen Visite wurden psychische und emotionale Aspekte des Patienten angesprochen. Es wurde eine weiterführende Untersuchung der Schlafgewohnheiten und Stressfaktoren empfohlen."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutprobe zur Überprüfung der Leberfunktion entnommen.", "result": "Die Blutabnahme erfolgte ohne Komplikationen. Die Ergebnisse der Leberfunktionstests werden in den nächsten Tagen erwartet."}
{"category": "Medikationsumstellung", "description": "Anpassung der Dosierung aufgrund von Nebenwirkungen.", "result": "Die Medikation wurde aufgrund von auftretenden Nebenwirkungen angepasst. Der Patient wird auf mögliche Verbesserungen oder weitere Reaktionen beobachtet."}
{"category": "Untersuchungen", "description": "Magnetresonanztomographie (MRT) zur detaillierten Darstellung der Gelenke.", "result": "Die MRT-Untersuchung wurde erfolgreich durchgeführt und lieferte detaillierte Bilder der Gelenke. Die Ergebnisse werden vom Radiologen ausgewertet und dem behandelnden Arzt mitgeteilt."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Operation entlassen.", "result": "Nach einer erfolgreichen Operation und Überwachung der postoperativen Phase wurde der Patient in gutem Zustand entlassen. Die weiteren Genesungsschritte wurden besprochen."}
{"category": "Sonstiges", "description": "Empfehlung zur physiotherapeutischen Behandlung", "result": "Nach eingehender Untersuchung wurde eine physiotherapeutische Behandlung empfohlen, um die Beweglichkeit und Muskelkraft des Patienten zu verbessern."}
{"category": "Klinische Visite", "description": "Patient klagt über anhaltende Kopfschmerzen und Schwindelgefühl.", "result": "Die klinische Visite fokussierte sich auf die Symptome von Kopfschmerzen und Schwindel. Weitere neurologische Untersuchungen sind geplant, um die Ursache zu klären."}
{"category": "Laborabnahme", "description": "Blutentnahme zur Überprüfung der Schilddrüsenwerte.", "result": "Die Blutprobe wurde entnommen, um die Schilddrüsenfunktion zu überprüfen. Die Ergebnisse werden mit dem Patienten besprochen, um gegebenenfalls eine Therapie einzuleiten."}
{"category": "Medikationsumstellung", "description": "Wechsel zu einem alternativen Medikament aufgrund von Unverträglichkeiten.", "result": "Die Medikationsumstellung wurde aufgrund von Unverträglichkeiten erfolgreich durchgeführt. Der Patient wird auf mögliche positive Auswirkungen und eventuelle Nebenwirkungen überwacht."}
{"category": "Untersuchungen", "description": "Ultraschalluntersuchung zur Abklärung von Bauchbeschwerden.", "result": "Die Ultraschalluntersuchung des Bauchraums wurde durchgeführt, um mögliche Ursachen für die Bauchbeschwerden zu identifizieren. Die Ergebnisse werden mit dem Patienten besprochen."}
{"category": "Entlassung", "description": "Patient konnte nach erfolgreicher Rehabilitation nach Hause entlassen werden.", "result": "Nach einer erfolgreichen Rehabilitation und Verbesserung des Gesundheitszustands konnte der Patient in die häusliche Umgebung entlassen werden. Empfehlungen für die Nachsorge wurden gegeben."}
{"category": "Sonstiges", "description": "Empfehlung zur Ernährungsberatung aufgrund von Gewichtsproblemen.", "result": "Nach der Untersuchung wurde eine Ernährungsberatung empfohlen, um das Gewicht des Patienten zu stabilisieren und gesunde Essgewohnheiten zu fördern."}
{"category": "Klinische Visite", "description": "Besprechung der aktuellen Symptome und Fortschritte des Patienten.", "result": "Die klinische Visite konzentrierte sich auf die Besprechung der aktuellen Symptome und Fortschritte des Patienten. Anpassungen der Behandlungspläne wurden vorgenommen."}
{"category": "Laborabnahme", "description": "Blutuntersuchung zur Überprüfung der Blutzuckerwerte.", "result": "Die Blutuntersuchung zur Überprüfung der Blutzuckerwerte wurde durchgeführt. Die Ergebnisse werden mit dem Patienten besprochen, um die Diabetesbehandlung zu optimieren."}
{"category": "Medikationsumstellung", "description": "Änderung der Medikation zur besseren Kontrolle von Bluthochdruck.", "result": "Die Medikationsumstellung wurde durchgeführt, um den Bluthochdruck des Patienten besser zu kontrollieren. Überwachung der Blutdruckwerte und Anpassungen bei Bedarf werden fortgesetzt."}
{"category": "Untersuchungen", "description": "EKG zur Überprüfung der Herzfunktion und Rhythmusstörungen.", "result": "Das EKG wurde durchgeführt, um die Herzfunktion und mögliche Rhythmusstörungen zu überprüfen. Die Ergebnisse werden mit dem Kardiologen besprochen, um weitere Schritte zu planen."}
{"category": "Entlassung", "description": "Patient wurde nach erfolgreicher Behandlung und Stabilisierung entlassen.", "result": "Nach erfolgreicher Behandlung und Stabilisierung des Gesundheitszustands konnte der Patient in gutem Zustand entlassen werden. Empfehlungen für die Nachsorge wurden gegeben."}
{"category": "Sonstiges", "description": "Empfehlung zur psychologischen Beratung aufgrund von emotionalen Belastungen.", "result": "Nach eingehender Besprechung der emotionalen Belastungen wurde eine psychologische Beratung empfohlen, um den Patienten bei der Bewältigung seiner psychischen Herausforderungen zu unterstützen."}
{"category": "Klinische Visite", "description": "Patient zeigt Anzeichen von Gelenksteifigkeit und Schmerzen.", "result": "Die klinische Visite konzentrierte sich auf die Bewertung der Gelenkgesundheit. Weitere rheumatologische Untersuchungen sind geplant, um die Ursache der Gelenksteifigkeit zu identifizieren."}
{"category": "Laborabnahme", "description": "Blutentnahme zur Überprüfung der Nierenfunktion.", "result": "Die Blutentnahme zur Überprüfung der Nierenfunktion wurde durchgeführt. Die Ergebnisse werden mit dem Nephrologen besprochen, um die geeignete Therapie festzulegen."}
{"category": "Medikationsumstellung", "description": "Änderung der Medikation aufgrund von unzureichender Wirkung.", "result": "Die Medikationsumstellung wurde vorgenommen, da die bisherige Medikation nicht die gewünschte Wirkung zeigte. Der Patient wird engmaschig überwacht, um die Effektivität der neuen Medikamente zu beurteilen."}
{"category": "Untersuchungen", "description": "Röntgenaufnahme zur Diagnose von Atemwegsproblemen.", "result": "Die Röntgenaufnahme der Atemwege wurde durchgeführt, um mögliche Ursachen von Atemwegsproblemen zu identifizieren. Die Ergebnisse werden mit dem Pneumologen besprochen."}
{"category": "Entlassung", "description": "Patient wurde nach erfolgreicher Operation und Rehabilitationsphase entlassen.", "result": "Nach einer erfolgreichen Operation und abschließender Rehabilitationsphase wurde der Patient in gutem Zustand entlassen. Empfehlungen für die weitere Genesung zu Hause wurden gegeben."}
{"category": "Sonstiges", "description": "Empfehlung zur Ergotherapie aufgrund von motorischen Einschränkungen.", "result": "Nach einer eingehenden Untersuchung wurde eine Ergotherapie empfohlen, um die motorischen Einschränkungen des Patienten zu verbessern und die Lebensqualität zu steigern."}
{"category": "Klinische Visite", "description": "Besprechung der Fortschritte in der Schmerztherapie.", "result": "Die klinische Visite konzentrierte sich auf die Fortschritte in der Schmerztherapie. Anpassungen der Medikation und alternative Therapieansätze wurden erörtert."}
{"category": "Laborabnahme", "description": "Blutuntersuchung zur Überprüfung der Schilddrüsenfunktion.", "result": "Die Blutuntersuchung zur Überprüfung der Schilddrüsenfunktion wurde durchgeführt. Die Ergebnisse werden mit dem Endokrinologen besprochen, um die optimale Behandlung festzulegen."}
{"category": "Medikationsumstellung", "description": "Wechsel zu einem neuen Antidepressivum aufgrund von Unverträglichkeiten.", "result": "Die Medikationsumstellung auf ein neues Antidepressivum wurde durchgeführt, um Unverträglichkeiten zu minimieren. Der Patient wird auf mögliche Verbesserungen und Nebenwirkungen überwacht."}
{"category": "Untersuchungen", "description": "CT-Untersuchung zur Abklärung von neurologischen Symptomen.", "result": "Die CT-Untersuchung des Gehirns wurde durchgeführt, um mögliche neurologische Ursachen der Symptome zu identifizieren. Die Ergebnisse werden mit dem Neurologen besprochen."}
{"category": "Entlassung", "description": "Patient konnte nach intensiver Therapie entlassen werden.", "result": "Nach einer intensiven Therapie und Überwachung konnte der Patient in einem stabilen Zustand entlassen werden. Die weitere Genesung wird ambulant fortgesetzt."}
{"category": "Sonstiges", "description": "Empfehlung zur Schlafanalyse aufgrund von Schlafstörungen.", "result": "Nach eingehender Besprechung der Schlafprobleme wurde eine Schlafanalyse empfohlen, um genaue Informationen über mögliche Schlafstörungen zu erhalten."}
{"category": "Klinische Visite", "description": "Patient berichtet über Magen-Darm-Beschwerden und Verdauungsprobleme.", "result": "Die klinische Visite konzentrierte sich auf die Bewertung von Magen-Darm-Beschwerden. Weitere gastroenterologische Untersuchungen sind geplant, um die Ursache zu klären."}
{"category": "Laborabnahme", "description": "Blutentnahme zur Überprüfung der Eisenspeicher und Blutbild.", "result": "Die Blutentnahme zur Überprüfung der Eisenspeicher und des Blutbilds wurde durchgeführt. Die Ergebnisse werden mit dem Hämatologen besprochen, um eine geeignete Therapie festzulegen."}
{"category": "Medikationsumstellung", "description": "Anpassung der Medikation aufgrund von allergischen Reaktionen.", "result": "Die Medikationsumstellung wurde aufgrund von allergischen Reaktionen erfolgreich durchgeführt. Der Patient wird auf weitere mögliche allergische Reaktionen überwacht."}
{"category": "Untersuchungen", "description": "Doppler-Sonographie zur Überprüfung der Durchblutung in den Beinen.", "result": "Die Doppler-Sonographie wurde durchgeführt, um die Durchblutung in den Beinen zu überprüfen. Die Ergebnisse werden mit dem Angiologen besprochen, um gegebenenfalls weitere Maßnahmen einzuleiten."}
{"category": "Entlassung", "description": "Patient konnte nach erfolgreicher Therapie entlassen werden.", "result": "Nach erfolgreicher Therapie und Überwachung konnte der Patient in gutem Zustand entlassen werden. Empfehlungen für die Nachsorge und Verhaltensmaßnahmen wurden gegeben."}
{"category": "Sonstiges", "description": "Empfehlung zur Physiotherapie aufgrund von Rückenschmerzen.", "result": "Nach der Untersuchung wurde eine Physiotherapie empfohlen, um die Rückenschmerzen zu lindern und die muskuläre Unterstützung zu stärken."}
{"category": "Klinische Visite", "description": "Besprechung der aktuellen Schmerzintensität und Schmerzmanagement.", "result": "Die klinische Visite konzentrierte sich auf die Besprechung der aktuellen Schmerzintensität und die Anpassung des Schmerzmanagements. Alternative Therapieansätze wurden erörtert."}
{"category": "Untersuchungen", "description": "Es wurde eine Ultraschalluntersuchung durchgeführt, um die Organe im Bauchraum zu überprüfen.", "result": "Die Ultraschalluntersuchung zeigte normale Befunde der Bauchorgane. Es wurden keine Anomalien festgestellt."}
{"category": "Laborabnahme", "description": "Zur Überprüfung der Nierenfunktion wurde dem Patienten Blut abgenommen.", "result": "Die Laborergebnisse deuten auf eine normale Nierenfunktion hin. Der Patient wird über mögliche Maßnahmen zur Verbesserung der Nierenfunktion beraten."}
{"category": "Klinische Visite", "description": "Eine routinemäßige klinische Visite wurde durchgeführt, um den Gesundheitszustand des Patienten zu überwachen.", "result": "Bei der klinischen Visite wurden keine besorgniserregenden Symptome festgestellt. Der Patient ist in einem stabilen Zustand."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung und Stabilisierung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung aller vitalen Parameter wurde der Patient in einem verbesserten Zustand entlassen. Er erhält Empfehlungen für die weitere Nachsorge."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um mögliche Nebenwirkungen zu minimieren.", "result": "Die Medikationsumstellung wurde vorgenommen, und der Patient wird sorgfältig überwacht, um eventuelle unerwünschte Reaktionen zu identifizieren."}
{"category": "Sonstiges", "description": "Es wurde eine Beratung zur Lebensstiländerung durchgeführt, um die Gesundheit zu verbessern.", "result": "Der Patient erhielt Ratschläge zur Änderung seines Lebensstils, um die Gesundheit zu fördern. Es werden regelmäßige Follow-up-Termine vereinbart."}
{"category": "Laborabnahme", "description": "Eine Blutuntersuchung wurde durchgeführt, um die Schilddrüsenfunktion zu überprüfen.", "result": "Die Blutwerte deuten auf eine normale Schilddrüsenfunktion hin. Weitere Untersuchungen werden bei Bedarf empfohlen."}
{"category": "Klinische Visite", "description": "Der Patient wurde aufgrund von Beschwerden im Magen-Darm-Bereich untersucht.", "result": "Bei der klinischen Visite wurden keine akuten Probleme festgestellt. Der Patient wird aufgefordert, bei anhaltenden Beschwerden erneut Kontakt aufzunehmen."}
{"category": "Untersuchungen", "description": "Es wurde eine Röntgenaufnahme angefertigt, um mögliche Frakturen auszuschließen.", "result": "Die Röntgenaufnahme zeigt keine Anzeichen von Frakturen. Der Patient wird über weitere Schritte zur Schmerzlinderung informiert."}
{"category": "Entlassung", "description": "Der Patient wurde nach Abschluss der Rehabilitationsmaßnahmen entlassen.", "result": "Nach erfolgreicher Rehabilitation und Überprüfung der Fortschritte wurde der Patient in einem verbesserten Zustand entlassen. Es wurden Empfehlungen für die Fortsetzung der Übungen gegeben."}
{"category": "Sonstiges", "description": "Es wurde eine genetische Untersuchung angeordnet, um mögliche genetische Risikofaktoren zu identifizieren.", "result": "Die genetische Untersuchung wurde in die Wege geleitet, um potenzielle genetische Risikofaktoren zu identifizieren. Die Ergebnisse werden mit dem Patienten besprochen, um entsprechende Maßnahmen zu ergreifen."}
{"category": "Medikationsumstellung", "description": "Die Dosierung eines Medikaments wurde angepasst, um die Wirksamkeit zu erhöhen.", "result": "Die Medikationsanpassung wurde vorgenommen, und der Patient wird auf mögliche Veränderungen in den Symptomen hinsichtlich der Medikationsänderung überwacht."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung durchgeführt, um den Eisengehalt im Blut zu überprüfen.", "result": "Die Ergebnisse der Blutuntersuchung deuten auf einen normalen Eisengehalt hin. Empfehlungen zur Verbesserung der Eisenversorgung werden dem Patienten mitgeteilt."}
{"category": "Klinische Visite", "description": "Der Patient stellte sich aufgrund von Kopfschmerzen und Schwindel vor.", "result": "Die klinische Visite ergab keine akuten neurologischen Auffälligkeiten. Der Patient wird aufgefordert, bei weiteren Beschwerden sofort Kontakt aufzunehmen."}
{"category": "Untersuchungen", "description": "Es wurde eine MRT-Untersuchung des Gehirns durchgeführt, um mögliche Ursachen von neurologischen Symptomen zu identifizieren.", "result": "Die MRT-Untersuchung zeigte keine strukturellen Anomalien im Gehirn. Weitere Untersuchungen werden zur genaueren Abklärung der Beschwerden empfohlen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung und Stabilisierung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung aller vitalen Parameter wurde der Patient in einem verbesserten Zustand entlassen. Er erhält Empfehlungen für die Fortsetzung der Rehabilitation zu Hause."}
{"category": "Sonstiges", "description": "Es wurde eine Beratung zur Stressbewältigung und Entspannungstechniken durchgeführt.", "result": "Der Patient erhielt Tipps zur Stressbewältigung und Entspannungstechniken. Regelmäßige Übungen werden empfohlen, um das Wohlbefinden zu steigern."}
{"category": "Laborabnahme", "description": "Eine Blutprobe wurde genommen, um die Leberfunktion zu überprüfen.", "result": "Die Blutuntersuchung ergab normale Leberwerte. Der Patient wird über gesunde Ernährungsgewohnheiten informiert, um die Lebergesundheit zu unterstützen."}
{"category": "Klinische Visite", "description": "Der Patient wurde zur routinemäßigen Kontrolle der Herzfunktion untersucht.", "result": "Die klinische Visite zeigte keine Anzeichen von Herzproblemen. Der Patient wird ermutigt, regelmäßige kardiovaskuläre Übungen durchzuführen."}
{"category": "Untersuchungen", "description": "Es wurde eine Endoskopie durchgeführt, um mögliche Magen-Darm-Erkrankungen auszuschließen.", "result": "Die Endoskopie zeigte keine Anomalien im Magen-Darm-Trakt. Der Patient wird über mögliche Ursachen der Beschwerden aufgeklärt."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um Nebenwirkungen zu minimieren.", "result": "Die Medikationsanpassung wurde durchgeführt, und der Patient wird auf mögliche Veränderungen in den Symptomen hinsichtlich der Medikationsänderung überwacht."}
{"category": "Sonstiges", "description": "Es wurde eine Ernährungsberatung durchgeführt, um den Cholesterinspiegel zu kontrollieren.", "result": "Der Patient erhielt Ratschläge zur cholesterinbewussten Ernährung. Regelmäßige Kontrollen werden empfohlen, um den Cholesterinspiegel im Auge zu behalten."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung durchgeführt, um den Vitamin-D-Spiegel zu überprüfen.", "result": "Die Blutwerte zeigen einen niedrigen Vitamin-D-Spiegel. Der Patient wird über Maßnahmen zur Verbesserung der Vitamin-D-Versorgung informiert."}
{"category": "Klinische Visite", "description": "Der Patient wurde aufgrund von Muskelschmerzen und -schwäche untersucht.", "result": "Die klinische Untersuchung ergab keine akuten muskuloskelettalen Probleme. Der Patient wird zu physiotherapeutischen Übungen zur Stärkung der Muskulatur angeleitet."}
{"category": "Untersuchungen", "description": "Es wurde eine Spirometrie durchgeführt, um die Lungenfunktion zu testen.", "result": "Die Spirometrie zeigt normale Ergebnisse der Lungenfunktion. Der Patient wird ermutigt, regelmäßig Atemübungen durchzuführen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung und Stabilisierung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung aller vitalen Parameter wurde der Patient in einem stabilen Zustand entlassen. Er erhält Empfehlungen für die Fortsetzung der medikamentösen Therapie."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um die Symptome besser zu kontrollieren.", "result": "Die Medikationsanpassung wurde durchgeführt, und der Patient wird auf mögliche Verbesserungen der Symptome überwacht."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung durchgeführt, um die Schilddrüsenwerte zu überprüfen.", "result": "Die Blutwerte deuten auf eine normale Schilddrüsenfunktion hin. Der Patient wird über die Bedeutung der Schilddrüsenwerte informiert."}
{"category": "Klinische Visite", "description": "Der Patient stellte sich aufgrund von Schlafproblemen und Erschöpfung vor.", "result": "Bei der klinischen Visite wurden keine akuten körperlichen Ursachen für die Schlafprobleme festgestellt. Der Patient wird zu Schlafhygiene-Maßnahmen beraten."}
{"category": "Untersuchungen", "description": "Es wurde eine Colonoskopie durchgeführt, um mögliche Darmprobleme auszuschließen.", "result": "Die Colonoskopie zeigte keine Anzeichen von Darmproblemen. Der Patient wird über gesunde Darmgewohnheiten aufgeklärt."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung und Stabilisierung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung aller vitalen Parameter wurde der Patient in einem verbesserten Zustand entlassen. Er erhält Empfehlungen für die Fortsetzung der physiotherapeutischen Übungen zu Hause."}
{"category": "Sonstiges", "description": "Es wurde eine psychologische Beratung durchgeführt, um den Umgang mit Stress zu verbessern.", "result": "Der Patient erhielt psychologische Unterstützung zur Stressbewältigung. Regelmäßige Sitzungen werden empfohlen, um den emotionalen Wohlbefinden zu fördern."}
{"category": "Medikationsumstellung", "description": "Die Dosierung eines blutdrucksenkenden Medikaments wurde angepasst.", "result": "Die Medikationsanpassung wurde durchgeführt, und der Patient wird auf mögliche Veränderungen im Blutdruck überwacht."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung durchgeführt, um die Blutzuckerwerte zu überprüfen.", "result": "Die Blutwerte deuten auf einen erhöhten Blutzuckerspiegel hin. Der Patient wird über Maßnahmen zur Blutzuckerregulation informiert."}
{"category": "Klinische Visite", "description": "Der Patient wurde zur Nachkontrolle nach einer Operation untersucht.", "result": "Bei der klinischen Visite wurden keine Komplikationen nach der Operation festgestellt. Der Heilungsprozess verläuft zufriedenstellend."}
{"category": "Untersuchungen", "description": "Es wurde eine DEXA-Untersuchung durchgeführt, um die Knochendichte zu messen.", "result": "Die DEXA-Untersuchung ergab normale Knochendichtewerte. Der Patient wird über Maßnahmen zur Erhaltung der Knochengesundheit informiert."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung und Stabilisierung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung aller vitalen Parameter wurde der Patient in einem verbesserten Zustand entlassen. Er erhält Empfehlungen für die Fortsetzung der medikamentösen Therapie und regelmäßige Kontrollen."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung durchgeführt, um die Nierenfunktion zu überprüfen.", "result": "Die Laborergebnisse deuten auf normale Nierenfunktion hin. Der Patient wird über gesunde Ernährungsgewohnheiten informiert, um die Nierenfunktion zu unterstützen."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um Nebenwirkungen zu minimieren.", "result": "Die Medikationsumstellung erfolgte aufgrund von auftretenden Nebenwirkungen. Der Patient wird aufmerksam über mögliche Reaktionen geschult und weiterhin überwacht."}
{"category": "Klinische Visite", "description": "Eine ausführliche klinische Untersuchung wurde durchgeführt.", "result": "Die klinische Visite ergab keine neuen Befunde. Der Patient ist symptomfrei und zeigt eine positive Reaktion auf die laufende Therapie."}
{"category": "Untersuchungen", "description": "Eine MRT-Untersuchung wurde angeordnet, um die genaue Lokalisation eines Problems zu bestimmen.", "result": "Das MRT lieferte detaillierte Bilder und ermöglichte eine präzise Diagnose. Die weiteren Behandlungsschritte werden entsprechend den Ergebnissen geplant."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung entlassen.", "result": "Der Patient wurde in einem stabilen Zustand entlassen. Die Entlassungspapiere und Anweisungen für die Nachsorge wurden ausgehändigt."}
{"category": "Sonstiges", "description": "Zusätzliche Tests wurden angeordnet, um unklare Symptome zu klären.", "result": "Weitere diagnostische Tests wurden in Auftrag gegeben, um die Ursache der unklaren Symptome zu ermitteln. Der Patient wird über den Fortschritt informiert."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung zur Überprüfung der Schilddrüsenwerte durchgeführt.", "result": "Die Blutprobe wurde genommen, und die Ergebnisse deuten auf normale Schilddrüsenfunktion hin. Der Patient wird über mögliche Ursachen von Schilddrüsenproblemen informiert."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde optimiert, um die Wirksamkeit zu steigern.", "result": "Die Anpassung der Medikation wurde erfolgreich umgesetzt. Der Patient wird engmaschig überwacht, um auf mögliche Verbesserungen oder Nebenwirkungen zu reagieren."}
{"category": "Klinische Visite", "description": "Eine regelmäßige klinische Untersuchung wurde durchgeführt.", "result": "Bei der klinischen Visite wurden vitale Parameter überprüft, und der Patient zeigte eine stabile Verfassung. Es wurden keine neuen gesundheitlichen Probleme festgestellt."}
{"category": "Untersuchungen", "description": "Es wurde eine Ultraschalluntersuchung zur Abklärung von Bauchbeschwerden angeordnet.", "result": "Die Ultraschalluntersuchung lieferte Hinweise auf leichte Veränderungen im Bauchraum. Der behandelnde Arzt wird weitere Schritte zur Diagnose planen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Genesung aus der Klinik entlassen.", "result": "Der Patient hat die Therapie erfolgreich abgeschlossen und wurde in einem guten Gesundheitszustand entlassen. Empfehlungen für die Nachsorge wurden gegeben."}
{"category": "Sonstiges", "description": "Es sind zusätzliche Tests erforderlich, um eine genaue Diagnose zu stellen.", "result": "Zusätzliche diagnostische Tests wurden angeordnet, um die genaue Ursache der Beschwerden zu identifizieren. Der Patient wird über die geplanten Untersuchungen informiert."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung zur Überprüfung der Leberfunktion durchgeführt.", "result": "Die Blutprobe wurde genommen, und die Ergebnisse deuten auf normale Leberfunktion hin. Der Patient wird über gesunde Lebensgewohnheiten aufgeklärt, um die Lebergesundheit zu unterstützen."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um auf neue gesundheitliche Entwicklungen zu reagieren.", "result": "Die Anpassung der Medikation erfolgte aufgrund neuer Befunde. Der Patient wird über die Gründe und mögliche Auswirkungen informiert."}
{"category": "Klinische Visite", "description": "Der Patient wurde klinisch untersucht, um die Fortschritte der Therapie zu überprüfen.", "result": "Bei der klinischen Visite wurden positive Fortschritte festgestellt. Der Patient zeigt eine verbesserte körperliche Verfassung, und die Therapie wird entsprechend angepasst."}
{"category": "Untersuchungen", "description": "Es wurde eine Röntgenuntersuchung zur Abklärung von Atembeschwerden angeordnet.", "result": "Die Röntgenuntersuchung ergab keine strukturellen Auffälligkeiten. Der behandelnde Arzt wird weitere Aspekte der Atemprobleme untersuchen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Rehabilitation aus der stationären Behandlung entlassen.", "result": "Der Patient hat die Rehabilitation erfolgreich abgeschlossen und wurde in einem stabilen Zustand entlassen. Empfehlungen für die Fortsetzung der Rehabilitationsmaßnahmen wurden gegeben."}
{"category": "Sonstiges", "description": "Es sind weitere diagnostische Maßnahmen erforderlich, um die Symptome zu klären.", "result": "Weitere diagnostische Maßnahmen wurden eingeleitet, um die Ursache der Symptome zu identifizieren. Der Patient wird über den geplanten Untersuchungsverlauf informiert."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung zur Überprüfung der Blutzuckerwerte durchgeführt.", "result": "Die Blutprobe wurde entnommen, und die Ergebnisse deuten auf einen normalen Blutzuckerspiegel hin. Der Patient wird über gesunde Ernährungsgewohnheiten und regelmäßige Bewegung aufgeklärt."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um mögliche Wechselwirkungen zu vermeiden.", "result": "Die Anpassung der Medikation wurde aufgrund von möglichen Wechselwirkungen erfolgreich umgesetzt. Der Patient wird über die Bedeutung der Einhaltung der vorgeschriebenen Einnahmezeiten informiert."}
{"category": "Klinische Visite", "description": "Eine routinemäßige klinische Untersuchung wurde durchgeführt.", "result": "Bei der klinischen Visite wurden keine neuen gesundheitlichen Probleme festgestellt. Der Patient zeigt eine stabile Verfassung und setzt die empfohlene Therapie fort."}
{"category": "Untersuchungen", "description": "Es wurde eine Endoskopie zur genaueren Untersuchung des Magen-Darm-Trakts angeordnet.", "result": "Die Endoskopie lieferte präzise Bilder des Magen-Darm-Trakts. Der behandelnde Arzt wird die Ergebnisse auswerten und die weitere Vorgehensweise mit dem Patienten besprechen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Operation aus dem Krankenhaus entlassen.", "result": "Nach einer erfolgreichen Operation wurde der Patient in einem stabilen Zustand entlassen. Empfehlungen für die postoperative Pflege wurden gegeben."}
{"category": "Sonstiges", "description": "Es sind zusätzliche Tests erforderlich, um eine genaue Diagnose zu stellen.", "result": "Zusätzliche diagnostische Tests wurden angeordnet, um die genaue Ursache der Beschwerden zu ermitteln. Der Patient wird über den geplanten Untersuchungsverlauf informiert."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung zur Überprüfung der Eisenwerte durchgeführt.", "result": "Die Blutprobe wurde entnommen, und die Ergebnisse deuten auf normale Eisenwerte hin. Der Patient wird über eisenreiche Ernährung informiert, um einen optimalen Eisenspiegel aufrechtzuerhalten."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um auf aktuelle Laborergebnisse zu reagieren.", "result": "Die Anpassung der Medikation erfolgte basierend auf aktuellen Laborergebnissen. Der Patient wird über die Bedeutung der regelmäßigen Kontrolluntersuchungen informiert."}
{"category": "Klinische Visite", "description": "Eine umfassende klinische Untersuchung wurde durchgeführt.", "result": "Die klinische Visite ergab keine neuen gesundheitlichen Probleme. Der Patient zeigt eine positive Reaktion auf die Therapie und wird weiterhin engmaschig überwacht."}
{"category": "Untersuchungen", "description": "Es wurde eine CT-Untersuchung zur Abklärung von Kopfschmerzen angeordnet.", "result": "Die CT-Untersuchung des Kopfes zeigte keine strukturellen Auffälligkeiten. Der behandelnde Arzt wird weitere Aspekte der Kopfschmerzen untersuchen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung aus der Klinik entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung der vitalen Parameter wurde der Patient in einem stabilen Zustand entlassen. Empfehlungen für die Nachsorge wurden gegeben."}
{"category": "Sonstiges", "description": "Es sind weitere diagnostische Maßnahmen erforderlich, um die Ursache der Beschwerden zu klären.", "result": "Weitere diagnostische Maßnahmen wurden eingeleitet, um die genaue Ursache der Beschwerden zu identifizieren. Der Patient wird über den geplanten Untersuchungsverlauf informiert."}
{"category": "Klinische Visite", "description": "Der Patient wurde auf mögliche Infektionen untersucht, um frühzeitig Maßnahmen ergreifen zu können.", "result": "Bei der klinischen Visite wurden Symptome einer Infektion überprüft. Der Patient zeigt keine Anzeichen einer akuten Infektion. Weiterhin werden regelmäßige Kontrollen durchgeführt, um eventuelle Veränderungen frühzeitig zu erkennen."}
{"category": "Medikationsumstellung", "description": "Eine Anpassung der Medikation wurde vorgenommen, um Nebenwirkungen zu minimieren.", "result": "Die Medikationsumstellung erfolgte aufgrund von bisherigen Nebenwirkungen. Der Patient wird über mögliche Veränderungen in den kommenden Tagen informiert. Bei auftretenden Beschwerden sollte umgehend Kontakt aufgenommen werden."}
{"category": "Laborabnahme", "description": "Es wurden verschiedene Blutwerte überprüft, um den Gesundheitszustand zu bewerten.", "result": "Die Blutuntersuchung ergab normale Werte in den meisten Parametern. Einige Werte werden weiter überwacht. Der Patient wird über die Ergebnisse informiert und weitere Schritte werden besprochen."}
{"category": "Untersuchungen", "description": "Es ist eine Ultraschalluntersuchung des Bauchraums geplant.", "result": "Die Ultraschalluntersuchung wurde durchgeführt, um den Zustand der inneren Organe zu beurteilen. Bisher wurden keine Auffälligkeiten festgestellt. Die genauen Ergebnisse werden mit dem Patienten bei der nächsten Visite besprochen."}
{"category": "Sonstiges", "description": "Der Patient benötigt spezielle physiotherapeutische Maßnahmen.", "result": "Physiotherapie wurde verschrieben, um die Genesung zu unterstützen. Der Therapieplan wird individuell angepasst, um auf die Bedürfnisse des Patienten einzugehen."}
{"category": "Klinische Visite", "description": "Es wurden neurologische Tests durchgeführt, um mögliche Veränderungen festzustellen.", "result": "Die neurologische Untersuchung zeigte keine Anzeichen von neurologischen Erkrankungen. Der Patient ist weiterhin stabil. Die Behandlung wird entsprechend fortgesetzt."}
{"category": "Medikationsumstellung", "description": "Änderungen in der Medikation wurden vorgenommen, um die Therapieeffizienz zu steigern.", "result": "Die Medikationsanpassung erfolgte nach eingehender Prüfung. Der Patient wird auf mögliche Nebenwirkungen aufmerksam gemacht. Regelmäßige Kontrollen sind wichtig, um die Wirkung zu überwachen."}
{"category": "Laborabnahme", "description": "Blutproben wurden für eine umfassende Analyse entnommen.", "result": "Die Blutproben wurden dem Labor übergeben, um verschiedene Parameter zu überprüfen. Die Ergebnisse werden in den nächsten Tagen erwartet."}
{"category": "Untersuchungen", "description": "Es ist eine Magnetresonanztomographie (MRT) des Kopfes geplant.", "result": "Die MRT-Untersuchung wurde durchgeführt, um detaillierte Bilder des Gehirns zu erhalten. Die Aufnahmen zeigen keine strukturellen Auffälligkeiten. Die Ergebnisse werden mit dem Patienten besprochen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung der vitalen Parameter wurde der Patient in einem stabilen Zustand entlassen. Er erhielt Empfehlungen für die Nachsorge und mögliche weiterführende Maßnahmen."}
{"category": "Sonstiges", "description": "Es sind weitere bildgebende Untersuchungen erforderlich, um die Diagnose zu präzisieren.", "result": "Zusätzliche bildgebende Untersuchungen wurden angeordnet, um detaillierte Informationen über den Zustand des betroffenen Bereichs zu erhalten. Die Ergebnisse werden mit dem Patienten ausführlich besprochen."}
{"category": "Laborabnahme", "description": "Es wurden Blutproben entnommen, um die Wirksamkeit der aktuellen Therapie zu überprüfen.", "result": "Die Blutabnahme erfolgte zur Bestimmung von Medikamentenspiegeln und anderen relevanten Parametern. Die Ergebnisse werden genutzt, um die Therapie gegebenenfalls anzupassen."}
{"category": "Klinische Visite", "description": "Eine umfassende körperliche Untersuchung wurde durchgeführt.", "result": "Bei der klinischen Visite wurden alle relevanten Körpersysteme überprüft. Es wurden keine Anomalien festgestellt. Der Patient befindet sich in einem guten Allgemeinzustand."}
{"category": "Medikationsumstellung", "description": "Anpassungen in der Medikation wurden vorgenommen, um die Symptome zu lindern.", "result": "Die Medikationsumstellung erfolgte, um die Behandlungseffizienz zu verbessern. Der Patient wird auf mögliche Nebenwirkungen hingewiesen und sollte Veränderungen im Befinden mitteilen."}
{"category": "Untersuchungen", "description": "Es sind weitere diagnostische Tests erforderlich, um die Ursache der Beschwerden zu identifizieren.", "result": "Zusätzliche Untersuchungen wurden angeordnet, um detaillierte Informationen über den Gesundheitszustand des Patienten zu erhalten. Die Ergebnisse werden zur weiteren Behandlungsplanung genutzt."}
{"category": "Entlassung", "description": "Nach erfolgreicher Behandlung wurde der Patient entlassen.", "result": "Der Patient wurde in einem stabilen Zustand entlassen. Er erhielt schriftliche Empfehlungen für die poststationäre Betreuung und wird regelmäßig nachkontrolliert."}
{"category": "Sonstiges", "description": "Es sind genetische Tests geplant, um mögliche genetische Ursachen auszuschließen.", "result": "Genetische Tests wurden empfohlen, um mögliche genetische Ursachen von Beschwerden zu identifizieren. Der Patient wird über den Ablauf der Tests informiert und um Zustimmung gebeten."}
{"category": "Klinische Visite", "description": "Der Patient wurde auf neurologische Symptome untersucht.", "result": "Die klinische Visite konzentrierte sich auf die Überprüfung von neurologischen Funktionen. Bisher wurden keine Auffälligkeiten festgestellt. Der Patient wird weiterhin sorgfältig überwacht."}
{"category": "Medikationsumstellung", "description": "Anpassungen in der Medikation wurden vorgenommen, um die Wirksamkeit zu steigern.", "result": "Die Medikationsumstellung erfolgte nach sorgfältiger Abwägung. Der Patient wird über mögliche Veränderungen in den nächsten Tagen informiert. Bei auftretenden Problemen sollte sofort Kontakt aufgenommen werden."}
{"category": "Laborabnahme", "description": "Es wurden Blutproben entnommen, um die aktuellen Blutwerte zu überprüfen.", "result": "Die Blutuntersuchung ergab normale Werte in den meisten Parametern. Einige Werte werden weiter überwacht. Der Patient wird über die Ergebnisse informiert und weitere Schritte werden besprochen."}
{"category": "Klinische Visite", "description": "Routinemäßige klinische Untersuchung zur Überwachung des Patientenzustands.", "result": "Vitalparameter wurden überprüft, und es wurden keine signifikanten Veränderungen festgestellt. Der Patient zeigt eine positive Resonanz auf die laufende Behandlung."}
{"category": "Medikationsumstellung", "description": "Anpassung der Medikation aufgrund von Nebenwirkungen.", "result": "Die Medikamentendosis wurde angepasst, um unerwünschte Nebenwirkungen zu minimieren. Der Patient wird weiterhin überwacht, um die Wirksamkeit der Änderungen zu bewerten."}
{"category": "Laborabnahme", "description": "Blutentnahme zur Überprüfung der Leberfunktion.", "result": "Die Blutprobe wurde entnommen, um Leberenzyme zu überprüfen. Die Ergebnisse werden in den nächsten Tagen erwartet."}
{"category": "Untersuchungen", "description": "Empfohlene bildgebende Untersuchung zur genaueren Diagnose.", "result": "Die bildgebende Untersuchung wurde durchgeführt, um detaillierte Informationen über den Zustand des betroffenen Organs zu erhalten. Die Ergebnisse werden mit dem Patienten besprochen."}
{"category": "Sonstiges", "description": "Besprechung von Lebensstiländerungen zur Verbesserung der Gesundheit.", "result": "Der Patient wurde über notwendige Lebensstiländerungen informiert, um die Gesundheit zu fördern. Ein individueller Plan wurde erstellt und wird aktiv umgesetzt."}
{"category": "Klinische Visite", "description": "Überprüfung der postoperativen Genesung.", "result": "Nach einer kürzlich durchgeführten Operation wurde der Patient klinisch untersucht. Der Heilungsprozess verläuft zufriedenstellend, und es wurden keine Komplikationen festgestellt."}
{"category": "Entlassung", "description": "Abschluss der stationären Behandlung und Entlassungsplanung.", "result": "Der Patient wurde nach erfolgreicher Behandlung entlassen. Ein umfassender Entlassungsplan wurde erstellt, der die notwendige Nachsorge und Medikation umfasst."}
{"category": "Laborabnahme", "description": "Blutentnahme zur Überprüfung des Cholesterinspiegels.", "result": "Die Blutprobe wurde entnommen, um den Cholesterinspiegel zu überprüfen. Die Ergebnisse werden in Kürze verfügbar sein."}
{"category": "Medikationsumstellung", "description": "Anpassung der Medikation aufgrund von Therapieerfolgen.", "result": "Die Medikation wurde angepasst, da positive Fortschritte in der Behandlung erkennbar sind. Der Patient zeigt eine verbesserte klinische Verfassung."}
{"category": "Sonstiges", "description": "Beratung zu gesundheitsfördernden Maßnahmen.", "result": "Der Patient erhielt eine umfassende Beratung zu gesundheitsfördernden Maßnahmen, einschließlich Ernährung, Bewegung und Stressmanagement."}
{"category": "Klinische Visite", "description": "Überprüfung von Symptomen und Anpassung der Therapie.", "result": "Bei der klinischen Visite wurden aktuelle Symptome besprochen, und die Therapie wurde entsprechend angepasst. Der Patient wird weiterhin überwacht."}
{"category": "Untersuchungen", "description": "Durchführung einer speziellen diagnostischen Untersuchung.", "result": "Die spezielle diagnostische Untersuchung wurde erfolgreich durchgeführt, um genauere Informationen über den Zustand des Patienten zu erhalten. Die Ergebnisse werden analysiert."}
{"category": "Entlassung", "description": "Vorbereitung auf die Entlassung und Abschlussgespräch.", "result": "Der Patient wurde auf die Entlassung vorbereitet, und ein Abschlussgespräch wurde geführt. Der Patient wurde über die wichtigsten Nachsorgemaßnahmen informiert."}
{"category": "Laborabnahme", "description": "Blutentnahme zur Überprüfung der Schilddrüsenfunktion.", "result": "Die Blutprobe wurde entnommen, um die Schilddrüsenfunktion zu überprüfen. Die Ergebnisse werden in den nächsten Tagen erwartet."}
{"category": "Medikationsumstellung", "description": "Anpassung der Medikation aufgrund von Unverträglichkeiten.", "result": "Die Medikation wurde angepasst, um unerwünschte Nebenwirkungen zu minimieren. Der Patient wird auf mögliche allergische Reaktionen überwacht."}
{"category": "Klinische Visite", "description": "Routinemäßige klinische Untersuchung zur Überwachung des Therapieverlaufs.", "result": "Vitalparameter und Symptome wurden überprüft, und der Patient zeigt eine positive Reaktion auf die laufende Therapie."}
{"category": "Untersuchungen", "description": "Empfohlene gastrointestinale Untersuchung zur weiteren Diagnose.", "result": "Die gastrointestinale Untersuchung wurde durchgeführt, um genaue Informationen über den Zustand des Verdauungssystems zu erhalten. Die Ergebnisse werden mit dem Patienten besprochen."}
{"category": "Sonstiges", "description": "Beratung zur Krankheitsprävention und Gesundheitsförderung.", "result": "Der Patient erhielt eine umfassende Beratung zur Krankheitsprävention und Förderung der allgemeinen Gesundheit. Maßnahmen zur Risikoreduktion wurden besprochen."}
{"category": "Klinische Visite", "description": "Überprüfung der postoperativen Wundheilung.", "result": "Nach einer kürzlich durchgeführten Operation wurde die Wundheilung überprüft. Die Wunde verheilt zufriedenstellend, und es wurden keine Anzeichen von Infektionen festgestellt."}
{"category": "Entlassung", "description": "Abschluss der stationären Behandlung und Entlassungsplanung.", "result": "Der Patient wurde nach erfolgreicher Behandlung entlassen. Ein detaillierter Entlassungsplan wurde erstellt, der die Nachsorge und Medikation umfasst."}
{"category": "Laborabnahme", "description": "Blutentnahme zur Überprüfung der Nierenfunktion.", "result": "Die Blutprobe wurde entnommen, um die Nierenfunktion zu überprüfen. Die Ergebnisse werden in Kürze verfügbar sein."}
{"category": "Medikationsumstellung", "description": "Anpassung der Medikation aufgrund von Therapieerfolgen.", "result": "Die Medikation wurde angepasst, da positive Fortschritte in der Behandlung erkennbar sind. Der Patient zeigt eine verbesserte klinische Verfassung."}
{"category": "Medikationsumstellung", "description": "Es wurden Änderungen in der Medikation vorgenommen, um die Therapie anzupassen.", "result": "Die Medikamentendosis wurde angepasst, um eine optimale Wirkung zu erzielen. Der Patient wird auf mögliche Nebenwirkungen überwacht."}
{"category": "Klinische Visite", "description": "Eine umfassende klinische Untersuchung wurde durchgeführt, um den Gesundheitszustand zu überprüfen.", "result": "Während der klinischen Visite wurden alle relevanten Gesundheitsparameter überprüft. Der Patient zeigt positive Fortschritte und es wurden keine Anzeichen von Komplikationen festgestellt."}
{"category": "Untersuchungen", "description": "Eine Blutuntersuchung wurde angeordnet, um spezifische Laborwerte zu überprüfen.", "result": "Die Blutuntersuchung wurde durchgeführt, um spezifische Laborwerte zu überprüfen. Die Ergebnisse werden dem behandelnden Arzt für weitere Bewertungen vorgelegt."}
{"category": "Sonstiges", "description": "Zusätzliche diagnostische Maßnahmen sind erforderlich, um eine genaue Diagnose zu stellen.", "result": "Aufgrund unklarer Symptome wurden zusätzliche diagnostische Maßnahmen eingeleitet, um die genaue Ursache zu identifizieren. Der Patient wird über den weiteren Ablauf informiert."}
{"category": "Laborabnahme", "description": "Eine routinemäßige Blutabnahme wurde durchgeführt, um die allgemeinen Gesundheitswerte zu überprüfen.", "result": "Die routinemäßige Blutabnahme ergab normale Werte, die auf eine stabile Gesundheit hinweisen. Der Patient wird weiterhin überwacht."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung aus der Klinik entlassen.", "result": "Nach Abschluss der Behandlung wurde der Patient in einem guten Zustand entlassen. Er erhielt Anweisungen für die Nachsorge und die Einnahme von Medikamenten."}
{"category": "Klinische Visite", "description": "Die regelmäßige klinische Visite wurde durchgeführt, um den Therapieverlauf zu bewerten.", "result": "Bei der klinischen Visite wurden Fortschritte im Therapieverlauf festgestellt. Der Patient zeigt eine positive Resonanz auf die aktuelle Behandlung."}
{"category": "Medikationsumstellung", "description": "Es wurden Anpassungen in der Medikation vorgenommen, um Nebenwirkungen zu minimieren.", "result": "Die Medikamentendosis wurde angepasst, um mögliche Nebenwirkungen zu minimieren. Der Patient wird auf Veränderungen im Gesundheitszustand überwacht."}
{"category": "Sonstiges", "description": "Weitere diagnostische Tests wurden angeordnet, um spezifische Symptome zu klären.", "result": "Aufgrund von spezifischen Symptomen wurden zusätzliche diagnostische Tests angeordnet. Die Ergebnisse werden für eine genauere Diagnose ausgewertet."}
{"category": "Untersuchungen", "description": "Es wurde eine bildgebende Untersuchung durchgeführt, um innere Organe zu überprüfen.", "result": "Die bildgebende Untersuchung ergab keine Anomalien in den inneren Organen. Der behandelnde Arzt wird die Ergebnisse mit dem Patienten besprechen."}
{"category": "Laborabnahme", "description": "Blutproben wurden genommen, um die Wirksamkeit der laufenden Behandlung zu überwachen.", "result": "Die Blutproben wurden genommen, um die Wirksamkeit der laufenden Behandlung zu überprüfen. Die Ergebnisse werden für die weitere Therapieplanung berücksichtigt."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Genesung aus der stationären Behandlung entlassen.", "result": "Der Patient hat sich vollständig erholt und wurde in einem stabilen Zustand entlassen. Die Einhaltung der empfohlenen Nachsorgemaßnahmen wird empfohlen."}
{"category": "Sonstiges", "description": "Weitere Spezialuntersuchungen wurden empfohlen, um bestimmte Gesundheitsfragen zu klären.", "result": "Aufgrund spezifischer Gesundheitsfragen wurden weitere Spezialuntersuchungen empfohlen. Der Patient wird über die Notwendigkeit und den Ablauf informiert."}
{"category": "Klinische Visite", "description": "Die regelmäßige klinische Visite wurde durchgeführt, um den Therapieverlauf zu überwachen.", "result": "Bei der klinischen Visite wurden keine Auffälligkeiten festgestellt. Der Patient zeigt eine stabile Gesundheitslage und setzt die Therapie erfolgreich fort."}
{"category": "Untersuchungen", "description": "Eine Ultraschalluntersuchung wurde durchgeführt, um strukturelle Veränderungen zu erkennen.", "result": "Die Ultraschalluntersuchung zeigte keine strukturellen Veränderungen. Der Befund deutet auf eine normale Organstruktur hin."}
{"category": "Laborabnahme", "description": "Blutproben wurden entnommen, um spezifische Werte im Zusammenhang mit der Erkrankung zu überprüfen.", "result": "Die Blutproben wurden entnommen und zur Analyse geschickt. Die Ergebnisse werden für eine individualisierte Behandlungsplanung berücksichtigt."}
{"category": "Medikationsumstellung", "description": "Es wurde eine Anpassung der Medikation vorgenommen, um die Symptomkontrolle zu verbessern.", "result": "Die Anpassung der Medikation führte zu einer verbesserten Symptomkontrolle. Der Patient berichtet über eine subjektive Besserung seines Befindens."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung und Stabilisierung aus der Klinik entlassen.", "result": "Nach erfolgreicher Behandlung und Stabilisierung wurde der Patient aus der Klinik entlassen. Er wurde über die Bedeutung der Nachsorge informiert."}
{"category": "Sonstiges", "description": "Weitere diagnostische Maßnahmen wurden eingeleitet, um unklare Beschwerden zu klären.", "result": "Zusätzliche diagnostische Maßnahmen wurden eingeleitet, um die Ursache der unklaren Beschwerden zu identifizieren. Der Patient wird über die geplanten Untersuchungen informiert."}
{"category": "Klinische Visite", "description": "Eine umfassende klinische Untersuchung wurde durchgeführt, um den Therapieverlauf zu bewerten.", "result": "Die klinische Untersuchung ergab keine Auffälligkeiten. Der Patient zeigt positive Fortschritte im Therapieverlauf."}
{"category": "Untersuchungen", "description": "Es wurde eine spezielle Laboruntersuchung angeordnet, um auf bestimmte Krankheitsmarker zu testen.", "result": "Die spezielle Laboruntersuchung wurde durchgeführt, um auf bestimmte Krankheitsmarker zu testen. Die Ergebnisse werden zur weiteren Diagnose herangezogen."}
{"category": "Laborabnahme", "description": "Blutproben wurden entnommen, um die Wirkung der aktuellen Therapie zu überwachen.", "result": "Die Blutproben wurden entnommen und werden auf die Wirkung der aktuellen Therapie überprüft. Anpassungen werden bei Bedarf vorgenommen."}
{"category": "Medikationsumstellung", "description": "Es wurden Änderungen in der Medikation vorgenommen, um Nebenwirkungen zu minimieren.", "result": "Die Medikamentendosis wurde angepasst, um mögliche Nebenwirkungen zu minimieren. Der Patient wird auf Veränderungen im Gesundheitszustand überwacht."}
{"category": "Sonstiges", "description": "Weitere diagnostische Tests wurden angeordnet, um spezifische Symptome zu klären.", "result": "Aufgrund von spezifischen Symptomen wurden weitere diagnostische Tests angeordnet. Die Ergebnisse werden für eine genauere Diagnose ausgewertet."}
{"category": "Klinische Visite", "description": "Die regelmäßige klinische Visite wurde durchgeführt, um den Therapieverlauf zu überwachen.", "result": "Bei der klinischen Visite wurden keine Auffälligkeiten festgestellt. Der Patient zeigt eine stabile Gesundheitslage und setzt die Therapie erfolgreich fort."}
{"category": "Untersuchungen", "description": "Eine Ultraschalluntersuchung wurde durchgeführt, um strukturelle Veränderungen zu erkennen.", "result": "Die Ultraschalluntersuchung zeigte keine strukturellen Veränderungen. Der Befund deutet auf eine normale Organstruktur hin."}
{"category": "Laborabnahme", "description": "Blutproben wurden entnommen, um spezifische Werte im Zusammenhang mit der Erkrankung zu überprüfen.", "result": "Die Blutproben wurden entnommen und zur Analyse geschickt. Die Ergebnisse werden für eine individualisierte Behandlungsplanung berücksichtigt."}
{"category": "Medikationsumstellung", "description": "Es wurde eine Anpassung der Medikation vorgenommen, um die Symptomkontrolle zu verbessern.", "result": "Die Anpassung der Medikation führte zu einer verbesserten Symptomkontrolle. Der Patient berichtet über eine subjektive Besserung seines Befindens."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung und Stabilisierung aus der Klinik entlassen.", "result": "Nach erfolgreicher Behandlung und Stabilisierung wurde der Patient aus der Klinik entlassen. Er wurde über die Bedeutung der Nachsorge informiert."}
{"category": "Sonstiges", "description": "Weitere diagnostische Maßnahmen wurden eingeleitet, um unklare Beschwerden zu klären.", "result": "Zusätzliche diagnostische Maßnahmen wurden eingeleitet, um die Ursache der unklaren Beschwerden zu identifizieren. Der Patient wird über die geplanten Untersuchungen informiert."}
{"category": "Klinische Visite", "description": "Eine umfassende klinische Untersuchung wurde durchgeführt, um den Therapieverlauf zu bewerten.", "result": "Die klinische Untersuchung ergab keine Auffälligkeiten. Der Patient zeigt positive Fortschritte im Therapieverlauf."}
{"category": "Untersuchungen", "description": "Es wurde eine spezielle Laboruntersuchung angeordnet, um auf bestimmte Krankheitsmarker zu testen.", "result": "Die spezielle Laboruntersuchung wurde durchgeführt, um auf bestimmte Krankheitsmarker zu testen. Die Ergebnisse werden zur weiteren Diagnose herangezogen."}
{"category": "Laborabnahme", "description": "Blutproben wurden entnommen, um die Wirkung der aktuellen Therapie zu überwachen.", "result": "Die Blutproben wurden entnommen und werden auf die Wirkung der aktuellen Therapie überprüft. Anpassungen werden bei Bedarf vorgenommen."}
{"category": "Medikationsumstellung", "description": "Es wurden Änderungen in der Medikation vorgenommen, um Nebenwirkungen zu minimieren.", "result": "Die Medikamentendosis wurde angepasst, um mögliche Nebenwirkungen zu minimieren. Der Patient wird auf Veränderungen im Gesundheitszustand überwacht."}
{"category": "Sonstiges", "description": "Weitere diagnostische Tests wurden angeordnet, um spezifische Symptome zu klären.", "result": "Aufgrund von spezifischen Symptomen wurden weitere diagnostische Tests angeordnet. Die Ergebnisse werden für eine genauere Diagnose ausgewertet."}
{"category": "Klinische Visite", "description": "Die regelmäßige klinische Visite wurde durchgeführt, um den Therapieverlauf zu überwachen.", "result": "Bei der klinischen Visite wurden keine Auffälligkeiten festgestellt. Der Patient zeigt eine stabile Gesundheitslage und setzt die Therapie erfolgreich fort."}
{"category": "Untersuchungen", "description": "Eine Ultraschalluntersuchung wurde durchgeführt, um strukturelle Veränderungen zu erkennen.", "result": "Die Ultraschalluntersuchung zeigte keine strukturellen Veränderungen. Der Befund deutet auf eine normale Organstruktur hin."}
{"category": "Untersuchungen", "description": "Es ist eine Ultraschalluntersuchung des Bauchraums notwendig.", "result": "Die Ultraschalluntersuchung wurde durchgeführt, um die inneren Organe im Bauchraum zu überprüfen. Es wurden keine Auffälligkeiten festgestellt."}
{"category": "Medikationsumstellung", "description": "Anpassung der Dosierung eines Blutdruckmedikaments.", "result": "Die Dosierung des Blutdruckmedikaments wurde angepasst, um eine optimale Blutdruckkontrolle zu erreichen. Der Patient wird regelmäßig überwacht, um eventuelle Nebenwirkungen zu erfassen."}
{"category": "Klinische Visite", "description": "Routinekontrolle des postoperativen Zustands.", "result": "Die klinische Visite nach einer Operation ergab, dass der Patient eine normale postoperative Erholung zeigt. Wundheilung und vitale Parameter sind im normalen Bereich."}
{"category": "Laborabnahme", "description": "Bestimmung der Nierenfunktion durch Blutuntersuchung.", "result": "Die Blutabnahme zur Bestimmung der Nierenfunktion wurde durchgeführt. Die Laborergebnisse werden ausgewertet und mit dem Patienten besprochen."}
{"category": "Entlassung", "description": "Der Patient wird nach erfolgreicher Therapie aus der Klinik entlassen.", "result": "Nach Abschluss der geplanten Therapie wurde der Patient in einem stabilen Zustand entlassen. Empfehlungen für die Nachsorge wurden dem Patienten mitgeteilt."}
{"category": "Sonstiges", "description": "Notwendigkeit einer weiteren neurologischen Untersuchung.", "result": "Aufgrund spezifischer Symptome wird eine vertiefende neurologische Untersuchung empfohlen. Die genauen Untersuchungen werden mit dem Patienten besprochen."}
{"category": "Klinische Visite", "description": "Überwachung der vitalen Parameter bei akuten Beschwerden.", "result": "Die klinische Visite erfolgte aufgrund akuter Beschwerden. Die vitalen Parameter wurden überwacht, und entsprechende Maßnahmen wurden eingeleitet, um den Zustand zu stabilisieren."}
{"category": "Medikationsumstellung", "description": "Änderung der Medikation aufgrund neuer Laborergebnisse.", "result": "Die Medikation wurde aufgrund aktueller Laborergebnisse angepasst. Der Patient wird auf mögliche Veränderungen im Behandlungsverlauf überwacht."}
{"category": "Laborabnahme", "description": "Blutuntersuchung zur Überprüfung der Schilddrüsenfunktion.", "result": "Die Blutuntersuchung zur Überprüfung der Schilddrüsenfunktion wurde durchgeführt. Die Ergebnisse werden analysiert, um die weitere Behandlungsstrategie festzulegen."}
{"category": "Untersuchungen", "description": "MRT-Untersuchung zur detaillierten Darstellung des Rückenmarks.", "result": "Die MRT-Untersuchung des Rückenmarks liefert detaillierte Bilder für die genaue Beurteilung. Die Ergebnisse werden mit dem behandelnden Arzt besprochen."}
{"category": "Entlassung", "description": "Patient wird nach erfolgreicher Therapie aus der Rehabilitationsklinik entlassen.", "result": "Der Patient hat die Rehabilitationsmaßnahmen erfolgreich abgeschlossen und wird in einem verbesserten Zustand entlassen. Empfehlungen für die weitere Gesundheitspflege wurden mitgeteilt."}
{"category": "Sonstiges", "description": "Empfehlung für physiotherapeutische Maßnahmen bei muskulären Beschwerden.", "result": "Aufgrund von muskulären Beschwerden wird dem Patienten eine physiotherapeutische Behandlung empfohlen. Der Therapieplan wird individuell angepasst."}
{"category": "Klinische Visite", "description": "Überwachung der postoperativen Wundheilung.", "result": "Die klinische Visite konzentrierte sich auf die Überwachung der postoperativen Wundheilung. Es wurden keine Anzeichen von Infektionen oder Komplikationen festgestellt."}
{"category": "Medikationsumstellung", "description": "Umstellung der Schmerzmedikation aufgrund vermehrter Nebenwirkungen.", "result": "Die Schmerzmedikation wurde aufgrund vermehrter Nebenwirkungen umgestellt. Der Patient wird engmaschig überwacht, um die Verträglichkeit der neuen Medikamente zu überprüfen."}
{"category": "Laborabnahme", "description": "Blutprobe zur Bestimmung des Vitamin-D-Spiegels.", "result": "Die Blutprobe zur Bestimmung des Vitamin-D-Spiegels wurde entnommen. Die Ergebnisse werden genutzt, um eine angemessene Supplementierung zu planen."}
{"category": "Untersuchungen", "description": "Durchführung einer Endoskopie zur Abklärung von Magenbeschwerden.", "result": "Die Endoskopie ermöglichte eine genaue Untersuchung des Magens. Es wurden keine ernsthaften Anomalien festgestellt, und die Beschwerden werden weiter beobachtet."}
{"category": "Entlassung", "description": "Der Patient wird nach Abschluss der Therapie aus der psychiatrischen Station entlassen.", "result": "Der Patient hat die psychiatrische Therapie erfolgreich abgeschlossen und wird in einem stabilen Zustand entlassen. Empfehlungen für die Nachsorge wurden übermittelt."}
{"category": "Sonstiges", "description": "Empfehlung für eine Ernährungsberatung aufgrund von Gewichtsproblemen.", "result": "Aufgrund von Gewichtsproblemen wird dem Patienten eine Ernährungsberatung empfohlen. Die Beratung zielt darauf ab, eine gesunde und ausgewogene Ernährung zu fördern."}
{"category": "Klinische Visite", "description": "Überprüfung der Medikamentenverträglichkeit bei langfristiger Therapie.", "result": "Die klinische Visite diente der Überprüfung der Medikamentenverträglichkeit bei einer langfristigen Therapie. Der Patient zeigt keine Anzeichen von Nebenwirkungen, und die Therapie wird fortgesetzt."}
{"category": "Medikationsumstellung", "description": "Anpassung der Dosierung eines Antidiabetikums aufgrund von Blutzuckerwerten.", "result": "Die Dosierung des Antidiabetikums wurde angepasst, um die Blutzuckerwerte zu stabilisieren. Der Patient wird regelmäßig überwacht, um die Effektivität der Therapie zu überprüfen."}
{"category": "Laborabnahme", "description": "Blutuntersuchung zur Überprüfung der Leberfunktion.", "result": "Die Blutuntersuchung zur Überprüfung der Leberfunktion wurde durchgeführt. Die Ergebnisse werden analysiert, um die weitere Vorgehensweise in der Behandlung zu bestimmen."}
{"category": "Untersuchungen", "description": "Durchführung eines EEGs zur Abklärung von neurologischen Symptomen.", "result": "Das EEG lieferte wichtige Informationen zur Abklärung der neurologischen Symptome. Die Ergebnisse werden mit einem Neurologen besprochen, um die Diagnose zu vervollständigen."}
{"category": "Entlassung", "description": "Der Patient wird nach erfolgreicher Behandlung aus der pädiatrischen Abteilung entlassen.", "result": "Der kleine Patient hat die Behandlung erfolgreich abgeschlossen und wird in einem verbesserten Zustand entlassen. Empfehlungen für die elterliche Nachsorge wurden mitgeteilt."}
{"category": "Sonstiges", "description": "Empfehlung für eine psychologische Beratung aufgrund von Stresssymptomen.", "result": "Aufgrund von Stresssymptomen wird dem Patienten eine psychologische Beratung empfohlen. Die Sitzungen werden darauf abzielen, stressbewältigende Strategien zu entwickeln."}
{"category": "Klinische Visite", "description": "Überwachung der Atmung und Sauerstoffsättigung bei Atembeschwerden.", "result": "Die klinische Visite konzentrierte sich auf die Überwachung der Atmung und Sauerstoffsättigung bei Atembeschwerden. Entsprechende Maßnahmen wurden eingeleitet, um die Atemfunktion zu unterstützen."}
{"category": "Medikationsumstellung", "description": "Anpassung der Schmerzmedikation aufgrund veränderter Schmerzsymptomatik.", "result": "Die Schmerzmedikation wurde aufgrund veränderter Schmerzsymptomatik angepasst. Der Patient wird über mögliche Nebenwirkungen informiert und engmaschig überwacht."}
{"category": "Laborabnahme", "description": "Blutprobe zur Bestimmung des Cholesterinspiegels.", "result": "Die Blutprobe zur Bestimmung des Cholesterinspiegels wurde entnommen. Die Ergebnisse werden genutzt, um das Risiko von Herz-Kreislauf-Erkrankungen zu bewerten."}
{"category": "Untersuchungen", "description": "Durchführung einer Röntgenaufnahme zur Beurteilung von Gelenkproblemen.", "result": "Die Röntgenaufnahme ermöglichte eine detaillierte Beurteilung von Gelenkproblemen. Die Bilder werden mit einem Orthopäden besprochen, um eine geeignete Behandlungsstrategie festzulegen."}
{"category": "Entlassung", "description": "Der Patient wird nach erfolgreicher Chemotherapie aus der Onkologie entlassen.", "result": "Der Patient hat die Chemotherapie erfolgreich abgeschlossen und wird in einem verbesserten Zustand entlassen. Empfehlungen für die langfristige Nachsorge wurden mitgeteilt."}
{"category": "Sonstiges", "description": "Empfehlung für eine Ernährungsanpassung aufgrund von Magen-Darm-Beschwerden.", "result": "Aufgrund von Magen-Darm-Beschwerden wird dem Patienten eine Ernährungsanpassung empfohlen. Ein Ernährungsplan wird in Absprache mit einem Ernährungsspezialisten erstellt."}
{"category": "Klinische Visite", "description": "Überprüfung der Wundheilung nach einer Hautoperation.", "result": "Die klinische Visite konzentrierte sich auf die Überprüfung der Wundheilung nach einer Hautoperation. Die Wunde zeigt eine normale Heilung, und der Verband wird entsprechend angepasst."}
{"category": "Medikationsumstellung", "description": "Anpassung der Antidepressiva-Dosierung aufgrund von Stimmungsschwankungen.", "result": "Die Dosierung der Antidepressiva wurde angepasst, um auf aktuelle Stimmungsschwankungen des Patienten zu reagieren. Eine engmaschige Betreuung wird sicherstellen, dass die Anpassung gut vertragen wird."}
{"category": "Laborabnahme", "description": "Blutuntersuchung zur Überprüfung der Schilddrüsenhormone.", "result": "Die Blutuntersuchung zur Überprüfung der Schilddrüsenhormone wurde durchgeführt. Die Ergebnisse werden genutzt, um die Schilddrüsenfunktion zu bewerten und die Behandlung anzupassen."}
{"category": "Untersuchungen", "description": "Durchführung einer Spirometrie zur Beurteilung der Lungenfunktion.", "result": "Die Spirometrie lieferte detaillierte Informationen zur Beurteilung der Lungenfunktion. Die Ergebnisse werden mit einem Lungenfacharzt besprochen."}
{"category": "Entlassung", "description": "Der Patient wird nach erfolgreicher Physiotherapie aus der orthopädischen Abteilung entlassen.", "result": "Der Patient hat die physiotherapeutischen Maßnahmen erfolgreich abgeschlossen und wird in einem verbesserten Zustand entlassen. Übungen für die Heimtherapie wurden erläutert."}
{"category": "Sonstiges", "description": "Empfehlung für eine Schlafstudie aufgrund von Schlafstörungen.", "result": "Aufgrund von Schlafstörungen wird dem Patienten eine Schlafstudie empfohlen. Die Ergebnisse werden mit einem Schlafspezialisten besprochen, um die Ursache der Schlafprobleme zu klären."}
{"category": "Medikationsumstellung", "description": "Die Dosierung eines Medikaments wurde angepasst, um Nebenwirkungen zu minimieren.", "result": "Die Medikationsanpassung wurde vorgenommen, und der Patient wird auf mögliche Reaktionen überwacht. Bisher gibt es keine ungewöhnlichen Symptome."}
{"category": "Klinische Visite", "description": "Der Patient wurde aufgrund von Fieber und Husten klinisch untersucht.", "result": "Die klinische Visite ergab erhöhte Körpertemperatur und Atemprobleme. Es wurde eine geeignete Behandlung eingeleitet, und der Patient wird intensiv betreut."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutprobe entnommen, um den Hämoglobinspiegel zu überprüfen.", "result": "Die Blutabnahme wurde erfolgreich durchgeführt, und die Ergebnisse werden in Kürze erwartet. Dies dient der Überwachung der Hämoglobinkonzentration im Blut."}
{"category": "Untersuchungen", "description": "Es ist eine Ultraschalluntersuchung des Bauchraums notwendig.", "result": "Die Ultraschalluntersuchung lieferte detaillierte Bilder des Bauchraums. Es wurden keine pathologischen Veränderungen festgestellt. Die Ergebnisse werden mit dem behandelnden Arzt besprochen."}
{"category": "Sonstiges", "description": "Der Patient berichtet über Schlafstörungen und Unruhezustände.", "result": "Weitere Anamnese und Untersuchungen sind erforderlich, um die genaue Ursache der Schlafstörungen zu ermitteln. Ein Schlafprotokoll wird angelegt, um weitere Informationen zu sammeln."}
{"category": "Entlassung", "description": "Nach erfolgreicher Therapie wurde der Patient aus der stationären Behandlung entlassen.", "result": "Die Therapie war erfolgreich, und der Patient befindet sich in einem guten Zustand. Er wurde über die Fortsetzung der Behandlung zu Hause informiert."}
{"category": "Klinische Visite", "description": "Routinekontrolle zur Überwachung des Gesundheitszustands des Patienten.", "result": "Die klinische Visite zeigte keine Auffälligkeiten. Der Patient ist in stabilem Zustand, und die nächsten Kontrolltermine werden vereinbart."}
{"category": "Medikationsumstellung", "description": "Umstellung der Schmerzmedikation aufgrund unzureichender Wirkung.", "result": "Die neue Schmerzmedikation wurde eingeführt. Der Patient wird auf mögliche Nebenwirkungen überwacht, und die Wirksamkeit wird regelmäßig evaluiert."}
{"category": "Laborabnahme", "description": "Routine-Blutuntersuchung zur Überprüfung der allgemeinen Gesundheit.", "result": "Die Blutprobe wurde entnommen und zur Untersuchung ins Labor geschickt. Die Ergebnisse werden genutzt, um den Gesundheitszustand des Patienten zu bewerten."}
{"category": "Untersuchungen", "description": "Es wurde eine Röntgenaufnahme der Lunge durchgeführt.", "result": "Die Röntgenuntersuchung ergab keine Anzeichen von Auffälligkeiten oder Infektionen. Die Lungenfunktion des Patienten scheint normal zu sein."}
{"category": "Sonstiges", "description": "Der Patient beklagt sich über Magenbeschwerden und Verdauungsprobleme.", "result": "Es wurden weitere Untersuchungen eingeleitet, darunter eine gastrointestinale Untersuchung, um die Ursache der Magenbeschwerden zu klären. Der Patient wird entsprechend behandelt."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung der vitalen Parameter wurde der Patient in einem stabilen Zustand entlassen. Er erhielt Anweisungen zur weiteren Nachsorge."}
{"category": "Klinische Visite", "description": "Der Patient berichtet über Kopfschmerzen und Schwindel.", "result": "Bei der klinischen Visite wurden neurologische Tests durchgeführt. Es wurden keine schwerwiegenden Auffälligkeiten festgestellt. Der Patient wird weiterhin überwacht, um mögliche Ursachen zu identifizieren."}
{"category": "Medikationsumstellung", "description": "Aufgrund von Nebenwirkungen wurde die Medikation angepasst.", "result": "Die Medikationsumstellung wurde vorgenommen, um unerwünschte Nebenwirkungen zu minimieren. Der Patient wird auf Veränderungen in seinem Gesundheitszustand überwacht."}
{"category": "Laborabnahme", "description": "Es wurde Blut abgenommen, um den Cholesterinspiegel zu überprüfen.", "result": "Die Blutprobe wurde entnommen, und die Laborergebnisse deuten auf einen erhöhten Cholesterinspiegel hin. Eine Ernährungsberatung wird eingeleitet."}
{"category": "Untersuchungen", "description": "Der Patient hat Beschwerden im Bewegungsapparat; eine orthopädische Untersuchung ist notwendig.", "result": "Die orthopädische Untersuchung zeigte leichte Abnutzungserscheinungen. Der Patient wird physiotherapeutisch behandelt, um die Beschwerden zu lindern."}
{"category": "Sonstiges", "description": "Der Patient benötigt eine spezialisierte Konsultation aufgrund von unklaren Symptomen.", "result": "Eine spezialisierte Konsultation wurde eingeleitet, um die unklaren Symptome des Patienten genauer zu untersuchen. Weitere Untersuchungen werden in Absprache mit den Fachärzten durchgeführt."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Therapie und Stabilisierung entlassen.", "result": "Die Therapie war erfolgreich, und der Patient zeigt eine verbesserte Stabilität. Er wurde umfassend über die Maßnahmen zur weiteren Genesung informiert."}
{"category": "Klinische Visite", "description": "Routinemäßige Überprüfung der Vitalparameter und allgemeinen Gesundheit.", "result": "Die klinische Visite ergab keine besorgniserregenden Veränderungen. Der Patient befindet sich in gutem Zustand, und die medizinische Betreuung wird entsprechend angepasst."}
{"category": "Medikationsumstellung", "description": "Es wurde eine Anpassung der Medikation aufgrund von Unverträglichkeiten vorgenommen.", "result": "Die Medikationsanpassung wurde durchgeführt, um unerwünschte Reaktionen zu vermeiden. Der Patient wird über mögliche alternative Medikamente aufgeklärt."}
{"category": "Laborabnahme", "description": "Routine-Blutuntersuchung zur Überprüfung der Leberfunktion.", "result": "Die Blutprobe wurde entnommen, und die Laborergebnisse deuten auf eine normale Leberfunktion hin. Der Patient wird über gesunde Lebensgewohnheiten beraten."}
{"category": "Untersuchungen", "description": "Es wurde eine MRT-Untersuchung des Kopfes durchgeführt.", "result": "Die MRT-Untersuchung zeigte keine strukturellen Veränderungen im Gehirn. Der Patient wird weiterhin neurologisch betreut, um mögliche Ursachen für seine Symptome zu klären."}
{"category": "Sonstiges", "description": "Der Patient berichtet über Hautausschläge und Juckreiz.", "result": "Eine dermatologische Untersuchung wurde eingeleitet, um die Ursache der Hautprobleme zu klären. Die notwendigen Maßnahmen zur Behandlung werden ergriffen."}
{"category": "Entlassung", "description": "Nach erfolgreicher Therapie und Stabilisierung wurde der Patient entlassen.", "result": "Der Patient zeigt eine deutliche Besserung. Nach Abschluss der Therapie wurde er in einem stabilen Zustand entlassen und erhält Anweisungen zur Nachsorge."}
{"category": "Klinische Visite", "description": "Der Patient kommt zur Nachsorgeuntersuchung nach einer vorangegangenen Operation.", "result": "Die klinische Visite ergab keine postoperativen Komplikationen. Die Wundheilung verläuft zufriedenstellend, und der Patient wird für die weitere Rehabilitation empfohlen."}
{"category": "Medikationsumstellung", "description": "Aufgrund von Nebenwirkungen wurde die Medikation angepasst.", "result": "Die Medikationsumstellung erfolgte, um Nebenwirkungen zu minimieren. Der Patient wird auf Veränderungen in seinem Gesundheitszustand überwacht."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutprobe entnommen, um den Vitamin-D-Spiegel zu überprüfen.", "result": "Die Blutabnahme wurde erfolgreich durchgeführt, und die Laborergebnisse weisen auf einen niedrigen Vitamin-D-Spiegel hin. Eine Supplementierung wird empfohlen."}
{"category": "Untersuchungen", "description": "Es wurde eine Endoskopie des Magen-Darm-Trakts durchgeführt.", "result": "Die Endoskopie lieferte klare Bilder des Magen-Darm-Trakts. Es wurden keine pathologischen Veränderungen festgestellt. Der Patient wird über die Ergebnisse informiert."}
{"category": "Sonstiges", "description": "Der Patient hat Schlafprobleme und wird zur weiteren Abklärung überwiesen.", "result": "Weitere diagnostische Maßnahmen, einschließlich eines Schlaflabors, wurden empfohlen, um die Ursachen der Schlafprobleme zu identifizieren. Der Patient wird zur weiteren Abklärung überwiesen."}
{"category": "Entlassung", "description": "Der Patient wurde nach Abschluss der Behandlung erfolgreich entlassen.", "result": "Nach erfolgreicher Behandlung und Überprüfung der vitalen Parameter wurde der Patient entlassen. Er erhielt klare Anweisungen für die Nachsorge und mögliche Kontrolltermine."}
{"category": "Klinische Visite", "description": "Routinemäßige Überprüfung des Gesundheitszustands und der vitalen Parameter.", "result": "Die klinische Visite zeigte keine signifikanten Veränderungen. Der Patient befindet sich in gutem Zustand, und die medizinische Betreuung wird entsprechend angepasst."}
{"category": "Medikationsumstellung", "description": "Die Dosierung eines blutdrucksenkenden Medikaments wurde angepasst.", "result": "Die Dosieranpassung wurde vorgenommen, um den Blutdruck optimal zu regulieren. Der Patient wird regelmäßig überwacht, um die Wirksamkeit der Therapie zu überprüfen."}
{"category": "Laborabnahme", "description": "Routine-Blutuntersuchung zur Überprüfung der Schilddrüsenfunktion.", "result": "Die Blutprobe wurde entnommen, und die Laborergebnisse deuten auf eine normale Schilddrüsenfunktion hin. Der Patient wird über die Bedeutung regelmäßiger Kontrollen informiert."}
{"category": "Untersuchungen", "description": "Es wurde eine Spirometrie zur Überprüfung der Lungenfunktion durchgeführt.", "result": "Die Spirometrie lieferte normale Werte der Lungenfunktion. Es gibt keine Anzeichen von Atemwegsproblemen. Der Patient wird weiterhin pneumologisch betreut."}
{"category": "Sonstiges", "description": "Der Patient klagt über Sehstörungen, eine augenärztliche Untersuchung ist notwendig.", "result": "Die augenärztliche Untersuchung ergab leichte Sehstörungen, die wahrscheinlich auf eine refraktive Anpassung zurückzuführen sind. Eine Brille wird empfohlen, und der Patient wird entsprechend beraten."}
{"category": "Entlassung", "description": "Nach erfolgreicher Therapie und Stabilisierung wurde der Patient entlassen.", "result": "Der Patient zeigt eine deutliche Verbesserung. Nach Abschluss der Therapie wurde er in einem stabilen Zustand entlassen und erhält Anweisungen zur weiteren Nachsorge."}
{"category": "Klinische Visite", "description": "Der Patient wurde zur Überwachung der postoperativen Wundheilung klinisch untersucht.", "result": "Die postoperative Untersuchung ergab eine zufriedenstellende Wundheilung. Der Patient wird für die weitere Rehabilitation und Nachsorge empfohlen."}
{"category": "Klinische Visite", "description": "Der Patient wurde heute für die regelmäßige klinische Visite vorgestellt.", "result": "Während der Visite wurden die vitalen Parameter überprüft, und es wurden keine auffälligen Veränderungen festgestellt. Der Patient berichtet über eine stabile gesundheitliche Verfassung."}
{"category": "Laborabnahme", "description": "Es ist eine umfassende Blutuntersuchung erforderlich, um spezifische Laborwerte zu überprüfen.", "result": "Die Blutentnahme wurde durchgeführt, und die Proben wurden zur Analyse ins Labor geschickt. Die Ergebnisse werden zeitnah erwartet."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um mögliche Nebenwirkungen zu minimieren.", "result": "Die Anpassung der Medikation erfolgte entsprechend den aktuellen Gesundheitsparametern des Patienten. Die Reaktion wird aufmerksam überwacht, und weitere Anpassungen können bei Bedarf vorgenommen werden."}
{"category": "Untersuchungen", "description": "Es ist eine Ultraschalluntersuchung des Bauchraums geplant.", "result": "Die Ultraschalluntersuchung wurde erfolgreich durchgeführt, um den Bauchraum zu überprüfen. Es wurden keine pathologischen Befunde festgestellt."}
{"category": "Sonstiges", "description": "Zusätzliche Informationen werden benötigt, um eine genaue Diagnose zu stellen.", "result": "Der Patient wird zu weiteren Untersuchungen überwiesen, um zusätzliche Informationen zu sammeln und eine umfassende Diagnose zu erstellen."}
{"category": "Klinische Visite", "description": "Der Patient zeigt leichte Symptome, daher wurde eine zusätzliche klinische Visite anberaumt.", "result": "Während der klinischen Visite wurden die aktuellen Symptome des Patienten besprochen. Es wurden vorläufige Maßnahmen ergriffen, und der Patient wird weiterhin engmaschig überwacht."}
{"category": "Entlassung", "description": "Der Patient hat die stationäre Behandlung erfolgreich abgeschlossen und wird entlassen.", "result": "Nach einer positiven Beurteilung des Gesundheitszustands und einer abschließenden ärztlichen Überprüfung wird der Patient in gutem Zustand entlassen. Er erhält klare Anweisungen für die Nachsorge."}
{"category": "Laborabnahme", "description": "Blutproben wurden genommen, um die Wirksamkeit der laufenden Therapie zu überprüfen.", "result": "Die Blutproben wurden entnommen und zur Überprüfung der Therapieeffektivität analysiert. Die vorläufigen Ergebnisse deuten auf eine positive Entwicklung hin."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde aufgrund von Unverträglichkeiten angepasst.", "result": "Aufgrund von Unverträglichkeiten wurde die Medikation angepasst. Der Patient wird auf mögliche Verbesserungen überwacht, und gegebenenfalls werden weitere Anpassungen vorgenommen."}
{"category": "Untersuchungen", "description": "Es sind weiterführende bildgebende Untersuchungen zur Klärung von Symptomen geplant.", "result": "Aufgrund unklarer Symptome werden zusätzliche bildgebende Untersuchungen durchgeführt. Die Ergebnisse werden mit dem Patienten besprochen, um eine geeignete Behandlungsstrategie zu planen."}
{"category": "Klinische Visite", "description": "Der Patient berichtet über eine Verschlechterung der Symptome, daher wurde eine dringende klinische Visite angeordnet.", "result": "Während der Visite wurden die aktuellen Symptome bewertet. Sofortmaßnahmen wurden ergriffen, und der Patient wird intensiver überwacht, um weitere Komplikationen zu verhindern."}
{"category": "Sonstiges", "description": "Es sind psychologische Beratungsgespräche zur Unterstützung des Patienten geplant.", "result": "Zur Unterstützung des Patienten werden psychologische Beratungsgespräche geplant. Der Fokus liegt darauf, die psychische Gesundheit zu stabilisieren und das Wohlbefinden zu fördern."}
{"category": "Laborabnahme", "description": "Spezifische Blutwerte müssen für die Anpassung der Behandlung überprüft werden.", "result": "Die Blutabnahme erfolgte, um spezifische Werte für die Anpassung der laufenden Behandlung zu erhalten. Die Ergebnisse werden zur weiteren Therapieplanung genutzt."}
{"category": "Medikationsumstellung", "description": "Aufgrund von Nebenwirkungen wurde eine Umstellung der Medikation empfohlen.", "result": "Die Medikationsumstellung wurde durchgeführt, um mögliche Nebenwirkungen zu minimieren. Der Patient wird auf Veränderungen in seinem Befinden überwacht."}
{"category": "Klinische Visite", "description": "Die regelmäßige klinische Visite zeigt weiterhin stabile Gesundheitswerte des Patienten.", "result": "Die klinische Visite bestätigt, dass der Patient in einem stabilen Gesundheitszustand ist. Es wurden keine neuen Symptome oder Probleme festgestellt."}
{"category": "Untersuchungen", "description": "Es sind genetische Untersuchungen zur Klärung von erblichen Faktoren geplant.", "result": "Genetische Untersuchungen wurden eingeleitet, um mögliche erbliche Faktoren zu identifizieren. Die Ergebnisse werden mit dem Patienten und gegebenenfalls mit einem Genetiker besprochen."}
{"category": "Entlassung", "description": "Der Patient wurde nach erfolgreicher Behandlung aus der stationären Aufnahme entlassen.", "result": "Nach Abschluss der erfolgreichen Therapie und Überprüfung der vitalen Parameter wurde der Patient in einem stabilen Zustand entlassen. Er erhält klare Anweisungen für die Nachsorge."}
{"category": "Sonstiges", "description": "Es sind weiterführende Beratungsgespräche mit dem Patienten geplant.", "result": "Zur umfassenden Betreuung des Patienten sind weiterführende Beratungsgespräche geplant. Der Fokus liegt auf der Erklärung der aktuellen Situation und der Unterstützung des Patienten."}
{"category": "Klinische Visite", "description": "Der Patient zeigt eine Verbesserung der Symptome, daher wird die klinische Visite in regelmäßigen Abständen fortgesetzt.", "result": "Die regelmäßige klinische Visite bestätigt eine kontinuierliche Verbesserung der Symptome. Die Behandlung wird entsprechend angepasst, um den Heilungsprozess zu fördern."}
{"category": "Laborabnahme", "description": "Es wurden Blutproben entnommen, um die Auswirkungen der neuen Medikation zu überprüfen.", "result": "Die Blutproben wurden entnommen, um die Auswirkungen der kürzlich durchgeführten Medikationsumstellung zu überprüfen. Die vorläufigen Ergebnisse deuten auf eine positive Verträglichkeit hin."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um auf aktuelle Laborergebnisse zu reagieren.", "result": "Aufgrund neuer Laborergebnisse wurde die Medikation angepasst, um auf spezifische Gesundheitsparameter zu reagieren. Der Patient wird auf mögliche Veränderungen in seinem Befinden überwacht."}
{"category": "Klinische Visite", "description": "Der Patient berichtet über eine Verschlechterung der Schlafqualität, daher wurde eine klinische Visite angeordnet.", "result": "Während der klinischen Visite wurden Schlafmuster und mögliche Ursachen für die Schlafprobleme besprochen. Empfehlungen zur Verbesserung der Schlafqualität wurden gegeben."}
{"category": "Untersuchungen", "description": "Es sind weiterführende neurologische Untersuchungen zur Klärung von Symptomen geplant.", "result": "Neurologische Untersuchungen wurden eingeleitet, um die Ursachen bestimmter Symptome zu klären. Die Ergebnisse werden mit dem Neurologen besprochen, um eine geeignete Behandlungsstrategie zu entwickeln."}
{"category": "Entlassung", "description": "Der Patient hat die stationäre Behandlung erfolgreich abgeschlossen und wird entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung der vitalen Parameter wird der Patient in einem stabilen Zustand entlassen. Er erhält klare Anweisungen für die Nachsorge."}
{"category": "Sonstiges", "description": "Es sind ergänzende physiotherapeutische Maßnahmen zur Unterstützung der Rehabilitation geplant.", "result": "Zur Förderung der Rehabilitation werden ergänzende physiotherapeutische Maßnahmen geplant. Der Fokus liegt auf der Wiederherstellung der körperlichen Funktionen und der Steigerung der Lebensqualität."}
{"category": "Laborabnahme", "description": "Es wurden Blutproben entnommen, um die Wirksamkeit der laufenden Therapie zu überprüfen.", "result": "Die Blutproben wurden entnommen und zur Überprüfung der Therapieeffektivität analysiert. Die vorläufigen Ergebnisse zeigen eine positive Entwicklung."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um auf aktuelle Laborergebnisse zu reagieren.", "result": "Aufgrund neuer Laborergebnisse wurde die Medikation angepasst, um auf spezifische Gesundheitsparameter zu reagieren. Der Patient wird auf mögliche Veränderungen in seinem Befinden überwacht."}
{"category": "Klinische Visite", "description": "Der Patient berichtet über anhaltende Beschwerden, daher wurde eine dringende klinische Visite angeordnet.", "result": "Während der klinischen Visite wurden die aktuellen Beschwerden des Patienten bewertet. Sofortmaßnahmen wurden ergriffen, und der Patient wird intensiver überwacht, um weitere Komplikationen zu verhindern."}
{"category": "Untersuchungen", "description": "Es sind weiterführende bildgebende Untersuchungen zur Klärung von Symptomen geplant.", "result": "Aufgrund unklarer Symptome werden zusätzliche bildgebende Untersuchungen durchgeführt. Die Ergebnisse werden mit dem Patienten besprochen, um eine geeignete Behandlungsstrategie zu planen."}
{"category": "Entlassung", "description": "Der Patient wurde erfolgreich aus der stationären Behandlung entlassen.", "result": "Nach Abschluss der Therapie und Überprüfung der vitalen Parameter wurde der Patient in einem stabilen Zustand entlassen. Er erhält klare Anweisungen für die Nachsorge."}
{"category": "Sonstiges", "description": "Es sind zusätzliche Maßnahmen erforderlich, um die Ursache der Beschwerden zu klären.", "result": "Es wurden weitere diagnostische Maßnahmen eingeleitet, um die genaue Ursache der Beschwerden zu identifizieren. Der Patient wird über die geplanten Untersuchungen informiert."}
{"category": "Klinische Visite", "description": "Der Patient wurde heute für die regelmäßige klinische Visite vorgestellt.", "result": "Während der Visite wurden die vitalen Parameter überprüft, und es wurden keine auffälligen Veränderungen festgestellt. Der Patient berichtet über eine stabile gesundheitliche Verfassung."}
{"category": "Laborabnahme", "description": "Es ist eine umfassende Blutuntersuchung erforderlich, um spezifische Laborwerte zu überprüfen.", "result": "Die Blutentnahme wurde durchgeführt, und die Proben wurden zur Analyse ins Labor geschickt. Die Ergebnisse werden zeitnah erwartet."}
{"category": "Medikationsumstellung", "description": "Die Medikation wurde angepasst, um mögliche Nebenwirkungen zu minimieren.", "result": "Die Anpassung der Medikation erfolgte entsprechend den aktuellen Gesundheitsparametern des Patienten. Die Reaktion wird aufmerksam überwacht, und weitere Anpassungen können bei Bedarf vorgenommen werden."}
{"category": "Untersuchungen", "description": "Es ist eine Ultraschalluntersuchung des Bauchraums geplant.", "result": "Die Ultraschalluntersuchung wurde erfolgreich durchgeführt, um den Bauchraum zu überprüfen. Es wurden keine pathologischen Befunde festgestellt."}
{"category": "Medikationsumstellung", "description": "Es wurde eine Anpassung der Medikation vorgenommen, um die Therapieeffizienz zu steigern.", "result": "Die Medikationsanpassung wurde erfolgreich umgesetzt. Der Patient wird auf mögliche Nebenwirkungen überwacht, und entsprechende Maßnahmen werden ergriffen, um eventuelle Komplikationen zu verhindern."}
{"category": "Klinische Visite", "description": "Der Patient wurde aufgrund akuter Beschwerden klinisch untersucht.", "result": "Bei der klinischen Visite wurden spezifische Symptome des Patienten eingehend untersucht. Der Arzt hat eine vorläufige Diagnose gestellt und weitere diagnostische Maßnahmen veranlasst."}
{"category": "Laborabnahme", "description": "Es wurde eine Blutuntersuchung angeordnet, um spezifische Laborwerte zu überprüfen.", "result": "Die Blutabnahme wurde durchgeführt, und die Proben werden für verschiedene Laboranalysen vorbereitet. Die Ergebnisse werden dem Patienten in Kürze mitgeteilt."}

View file

@ -1,7 +1,5 @@
import { PrismaClient } from "@prisma/client"; import { prisma } from "$lib/server/prisma";
import { CATEGORIES } from "./testdata"; import { CATEGORIES, STATIONS } from "./testdata";
const prisma = new PrismaClient();
export default async () => { export default async () => {
await prisma.$transaction([ await prisma.$transaction([
@ -21,33 +19,32 @@ export default async () => {
], ],
}), }),
prisma.category.createMany({ data: CATEGORIES }), prisma.category.createMany({ data: CATEGORIES }),
prisma.station.createMany({ prisma.station.createMany({ data: STATIONS }),
data: [
{ id: 1, name: "S1" },
{ id: 2, name: "S2" },
],
}),
prisma.room.createMany({ prisma.room.createMany({
data: [ data: [
{ id: 1, name: "R1.1", stationId: 1 }, { id: 1, name: "R1.1", station_id: 1 },
{ id: 2, name: "R1.2", stationId: 1 }, { id: 2, name: "R1.2", station_id: 1 },
{ id: 3, name: "R2.1", stationId: 2 }, { id: 3, name: "R2.1", station_id: 2 },
], ],
}), }),
prisma.patient.createMany({ prisma.patient.createMany({
data: [ data: [
{ id: 1, firstName: "Andreas", lastName: "Bergmann", age: 22, roomId: 1 }, { id: 1, first_name: "Andreas", last_name: "Bergmann", age: 22, room_id: 1 },
{ id: 2, firstName: "Manuela", lastName: "Kortig", age: 41, roomId: 2 }, { id: 2, first_name: "Manuela", last_name: "Kortig", age: 41, room_id: 2 },
{ id: 3, firstName: "Markus", lastName: "Schuster", age: 50, roomId: 3 }, { id: 3, first_name: "Markus", last_name: "Schuster", age: 50, room_id: 3 },
], ],
}), }),
prisma.$executeRaw`alter sequence users_id_seq restart with 3`, prisma.$executeRaw`alter sequence users_id_seq restart with 3`,
prisma.$executeRaw`alter sequence categories_id_seq restart with 7`, prisma.$executeRawUnsafe(
prisma.$executeRaw`alter sequence stations_id_seq restart with 3`, `alter sequence categories_id_seq restart with ${CATEGORIES.length + 1}`
prisma.$executeRaw`alter sequence rooms_id_seq restart with 4`, ),
prisma.$executeRaw`alter sequence patients_id_seq restart with 4`, prisma.$executeRawUnsafe(
prisma.$executeRaw`alter sequence entry_execution_id_seq restart with 1`, `alter sequence stations_id_seq restart with ${STATIONS.length + 1}`
prisma.$executeRaw`alter sequence entry_versions_id_seq restart with 1`, ),
prisma.$executeRaw`alter sequence entries_id_seq restart with 1`, prisma.$executeRawUnsafe(`alter sequence rooms_id_seq restart with 4`),
prisma.$executeRawUnsafe(`alter sequence patients_id_seq restart with 4`),
prisma.$executeRawUnsafe(`alter sequence entry_executions_id_seq restart with 1`),
prisma.$executeRawUnsafe(`alter sequence entry_versions_id_seq restart with 1`),
prisma.$executeRawUnsafe(`alter sequence entries_id_seq restart with 1`),
]); ]);
}; };

View file

@ -3,6 +3,8 @@ import type { Category, Station } from "$lib/shared/model";
export const S1: Station = { id: 1, name: "S1" }; export const S1: Station = { id: 1, name: "S1" };
export const S2: Station = { id: 2, name: "S2" }; export const S2: Station = { id: 2, name: "S2" };
export const STATIONS: Station[] = [S1, S2];
export const CATEGORIES: Category[] = [ export const CATEGORIES: Category[] = [
{ {
id: 1, id: 1,

View file

@ -5,10 +5,11 @@ import {
newEntryExecution, newEntryExecution,
newEntryVersion, newEntryVersion,
} from "$lib/server/query"; } from "$lib/server/query";
import { ErrorConflict } from "$lib/shared/util/error";
import { expect, test } from "vitest"; import { expect, test } from "vitest";
const TEST_VERSION = { const TEST_VERSION = {
categoryId: 1, category_id: 1,
text: "10ml Blut abnehmen", text: "10ml Blut abnehmen",
date: new Date(2024, 1, 1), date: new Date(2024, 1, 1),
priority: false, priority: false,
@ -16,7 +17,7 @@ const TEST_VERSION = {
test("create entry", async () => { test("create entry", async () => {
const eId = await newEntry(1, { const eId = await newEntry(1, {
patientId: 1, patient_id: 1,
version: TEST_VERSION, version: TEST_VERSION,
}); });
expect(eId).gt(0); expect(eId).gt(0);
@ -24,72 +25,140 @@ test("create entry", async () => {
const entry = await getEntry(eId); const entry = await getEntry(eId);
expect(entry.patient.id).toBe(1); expect(entry.patient.id).toBe(1);
expect(entry.execution).toBeNull(); expect(entry.execution).toBeNull();
expect(entry.currentVersion.id).gt(0); expect(entry.current_version.id).gt(0);
expect(entry.currentVersion.category?.id).toBe(TEST_VERSION.categoryId); expect(entry.current_version.category?.id).toBe(TEST_VERSION.category_id);
expect(entry.currentVersion.category?.name).toBe("Laborabnahme"); expect(entry.current_version.category?.name).toBe("Laborabnahme");
expect(entry.currentVersion.text).toBe(TEST_VERSION.text); expect(entry.current_version.text).toBe(TEST_VERSION.text);
expect(entry.currentVersion.date).toStrictEqual(TEST_VERSION.date); expect(entry.current_version.date).toStrictEqual(TEST_VERSION.date);
expect(entry.currentVersion.priority).toBe(TEST_VERSION.priority); expect(entry.current_version.priority).toBe(TEST_VERSION.priority);
}); });
test("create extry version", async () => { test("create entry version", async () => {
const eId = await newEntry(1, { const eId = await newEntry(1, {
patientId: 1, patient_id: 1,
version: TEST_VERSION, version: TEST_VERSION,
}); });
const text = "10ml Blut abnehmen\n\nPS: Nadel nicht vergessen"; const text = "10ml Blut abnehmen\n\nPS: Nadel nicht vergessen";
const date = new Date(2024, 1, 2);
await newEntryVersion(1, eId, { await newEntryVersion(1, eId, {
...TEST_VERSION, date,
text,
category_id: 2,
priority: true,
});
const entry = await getEntry(eId);
expect(entry.current_version).toMatchObject({
author: { id: 1 },
date,
text,
category: { id: 2 },
priority: true,
});
});
test("create entry version (partial)", async () => {
const eId = await newEntry(1, {
patient_id: 1,
version: TEST_VERSION,
});
const oldEntry = await getEntry(eId);
const text = "10ml Blut abnehmen\n\nPS: Nadel nicht vergessen";
await newEntryVersion(2, eId, {
old_version: oldEntry.current_version.id,
text, text,
}); });
const entry = await getEntry(eId); const entry = await getEntry(eId);
expect(entry.currentVersion.text).toBe(text); expect(entry.current_version).toMatchObject({
author: { id: 2 },
date: oldEntry.current_version.date,
text,
category: oldEntry.current_version.category,
priority: oldEntry.current_version.priority,
});
}); });
test("create extry execution", async () => { test("create entry version (wrong old vid)", async () => {
const eId = await newEntry(1, { const eId = await newEntry(1, {
patientId: 1, patient_id: 1,
version: TEST_VERSION,
});
});
test("create entry execution", async () => {
const eId = await newEntry(1, {
patient_id: 1,
version: TEST_VERSION, version: TEST_VERSION,
}); });
const text = "Blutabnahme erledigt."; const text = "Blutabnahme erledigt.";
await newEntryExecution(1, eId, { text }); const xId = await newEntryExecution(1, eId, { old_execution: null, text });
const entry = await getEntry(eId); const entry = await getEntry(eId);
expect(entry.execution?.id).toBe(xId);
expect(entry.execution?.author.id).toBe(1); expect(entry.execution?.author.id).toBe(1);
expect(entry.execution?.text).toBe(text); expect(entry.execution?.text).toBe(text);
}); });
test("create entry execution (update)", async () => {
const eId = await newEntry(1, {
patient_id: 1,
version: TEST_VERSION,
});
const x1 = await newEntryExecution(1, eId, { old_execution: null, text: "x1" });
const x2 = await newEntryExecution(2, eId, { old_execution: x1, text: "x2" });
const entry = await getEntry(eId);
expect(entry.execution?.id).toBe(x2);
expect(entry.execution?.text).toBe("x2");
expect(entry.execution?.author.id).toBe(2);
});
test("create entry execution (wrong old xid)", async () => {
const eId = await newEntry(1, {
patient_id: 1,
version: TEST_VERSION,
});
const x1 = await newEntryExecution(1, eId, { old_execution: null, text: "x1" });
expect(async () =>
newEntryExecution(1, eId, { old_execution: x1 + 1, text: "x2" })
).rejects.toThrowError(new ErrorConflict("old execution id does not match"));
});
async function insertTestEntries() { async function insertTestEntries() {
// Create some entries // Create some entries
const eId1 = await newEntry(1, { const eId1 = await newEntry(1, {
patientId: 1, patient_id: 1,
version: TEST_VERSION, version: TEST_VERSION,
}); });
const eId2 = await newEntry(1, { const eId2 = await newEntry(1, {
patientId: 2, patient_id: 2,
version: { version: {
text: "Carrot cake jelly-o bonbon toffee chocolate.", text: "Carrot cake jelly-o bonbon toffee chocolate.",
date: new Date(2024, 1, 5), date: new Date(2024, 1, 5),
priority: false, priority: false,
categoryId: null, category_id: null,
}, },
}); });
const eId3 = await newEntry(1, { const eId3 = await newEntry(1, {
patientId: 1, patient_id: 1,
version: { version: {
text: "Cheesecake danish donut oat cake caramels.", text: "Cheesecake danish donut oat cake caramels.",
date: new Date(2024, 1, 6), date: new Date(2024, 1, 6),
priority: false, priority: false,
categoryId: null, category_id: null,
}, },
}); });
// Update an entry // Update an entry
await newEntryVersion(2, eId1, { await newEntryVersion(2, eId1, {
categoryId: 3, category_id: 3,
text: "Hello World", text: TEST_VERSION.text + "\n\n> Hello World",
date: new Date(2024, 1, 1), date: new Date(2024, 1, 1),
priority: true, priority: true,
}); });
@ -159,4 +228,10 @@ test("get entries", async () => {
expect(entriesPrio.items).length(1); expect(entriesPrio.items).length(1);
expect(entriesPrio.total).toBe(1); expect(entriesPrio.total).toBe(1);
expect(entriesPrio.items[0].id).toBe(eId1); expect(entriesPrio.items[0].id).toBe(eId1);
// Search
const entriesSearch = await getEntries({ filter: { search: "Blu" } });
expect(entriesSearch.items).length(1);
expect(entriesSearch.total).toBe(1);
expect(entriesSearch.items[0].id).toBe(eId1);
}); });

View file

@ -5,16 +5,16 @@ import { S1, S2 } from "../../helpers/testdata";
test("create patient", async () => { test("create patient", async () => {
const pId = await newPatient({ const pId = await newPatient({
firstName: "Max", first_name: "Max",
lastName: "Müller", last_name: "Müller",
age: 31, age: 31,
roomId: 1, room_id: 1,
}); });
const patient = await getPatient(pId); const patient = await getPatient(pId);
expect(patient).toMatchObject({ expect(patient).toMatchObject({
id: pId, id: pId,
firstName: "Max", first_name: "Max",
lastName: "Müller", last_name: "Müller",
age: 31, age: 31,
room: { id: 1, name: "R1.1", station: S1 }, room: { id: 1, name: "R1.1", station: S1 },
}); });
@ -26,22 +26,22 @@ test("get patients", async () => {
items: [ items: [
{ {
id: 1, id: 1,
firstName: "Andreas", first_name: "Andreas",
lastName: "Bergmann", last_name: "Bergmann",
age: 22, age: 22,
room: { id: 1, name: "R1.1", station: S1 }, room: { id: 1, name: "R1.1", station: S1 },
}, },
{ {
id: 2, id: 2,
firstName: "Manuela", first_name: "Manuela",
lastName: "Kortig", last_name: "Kortig",
age: 41, age: 41,
room: { id: 2, name: "R1.2", station: S1 }, room: { id: 2, name: "R1.2", station: S1 },
}, },
{ {
id: 3, id: 3,
firstName: "Markus", first_name: "Markus",
lastName: "Schuster", last_name: "Schuster",
age: 50, age: 50,
room: { id: 3, name: "R2.1", station: S2 }, room: { id: 3, name: "R2.1", station: S2 },
}, },

View file

@ -23,7 +23,7 @@ test("get stations", async () => {
}); });
test("create room", async () => { test("create room", async () => {
const rId = await newRoom({ name: "A1", stationId: 1 }); const rId = await newRoom({ name: "A1", station_id: 1 });
const room = await getRoom(rId); const room = await getRoom(rId);
expect(room).toStrictEqual({ expect(room).toStrictEqual({
id: rId, id: rId,