Globinours/migrations/029_care_rounds.sql

57 lines
2.6 KiB
SQL

PRAGMA foreign_keys = ON;
ALTER TABLE animals ADD COLUMN care_box_key TEXT;
ALTER TABLE treatments ADD COLUMN give_morning INTEGER NOT NULL DEFAULT 0;
ALTER TABLE treatments ADD COLUMN give_evening INTEGER NOT NULL DEFAULT 0;
ALTER TABLE treatments ADD COLUMN give_as_needed INTEGER NOT NULL DEFAULT 0;
CREATE TABLE IF NOT EXISTS care_room_layouts (
room TEXT PRIMARY KEY CHECK(room IN ('care','quarantine')),
top_layout TEXT NOT NULL DEFAULT 'split' CHECK(top_layout IN ('split','merged')),
bottom_layout TEXT NOT NULL DEFAULT 'split' CHECK(bottom_layout IN ('split','left2','right2','merged')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
INSERT OR IGNORE INTO care_room_layouts(room) VALUES('care'),('quarantine');
CREATE TABLE IF NOT EXISTS care_rounds (
id INTEGER PRIMARY KEY AUTOINCREMENT,
round_date TEXT NOT NULL,
period TEXT NOT NULL CHECK(period IN ('morning','evening')),
performed_by TEXT,
started_at TEXT NOT NULL DEFAULT (datetime('now')),
completed_at TEXT,
UNIQUE(round_date, period)
);
CREATE TABLE IF NOT EXISTS care_round_observations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
round_id INTEGER NOT NULL,
animal_id INTEGER NOT NULL,
food TEXT NOT NULL DEFAULT 'normal' CHECK(food IN ('normal','little','refused')),
water TEXT NOT NULL DEFAULT 'normal' CHECK(water IN ('normal','renewed','abnormal')),
urine TEXT NOT NULL DEFAULT 'normal' CHECK(urine IN ('normal','absent','abnormal')),
stool TEXT NOT NULL DEFAULT 'normal' CHECK(stool IN ('normal','absent','abnormal')),
general_state TEXT NOT NULL DEFAULT 'good' CHECK(general_state IN ('good','watch','alert')),
comment TEXT,
checked_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(round_id, animal_id),
FOREIGN KEY(round_id) REFERENCES care_rounds(id) ON DELETE CASCADE,
FOREIGN KEY(animal_id) REFERENCES animals(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS treatment_administrations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
round_id INTEGER NOT NULL,
treatment_id INTEGER NOT NULL,
animal_id INTEGER NOT NULL,
status TEXT NOT NULL CHECK(status IN ('given','skipped')),
comment TEXT,
administered_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(round_id, treatment_id),
FOREIGN KEY(round_id) REFERENCES care_rounds(id) ON DELETE CASCADE,
FOREIGN KEY(treatment_id) REFERENCES treatments(id) ON DELETE CASCADE,
FOREIGN KEY(animal_id) REFERENCES animals(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_care_observations_round ON care_round_observations(round_id);
CREATE INDEX IF NOT EXISTS idx_treatment_admin_round ON treatment_administrations(round_id);