Medical Records

A complete guide to the Medical Records module — vitals, clinical notes, diagnoses, attachments, and the visit timeline.

Written By Dev010

Last updated 19 days ago

The Medical Records module provides a structured way to document everything that happens during a patient visit — vital signs, clinical notes, diagnoses, and file attachments. Records are organized per patient and can be linked to a specific appointment.

Clinic type note: The Medical Records module appears in the sidebar for general and ophthalmology clinic types. Dental clinics use the Odontograms module instead.

Accessing the Module

Sidebar → Medical Records

Direct URL:

https://yourdomain.com/dashboard/medical-records

Who can access:

Action

Admin

Doctor

Receptionist

Nurse

View records

Create records

Edit records

Delete records

Module Structure

Medical Records is divided into five sub-sections, each accessible from the sidebar under Medical Records:

Section

Purpose

Vitals

Blood pressure, heart rate, temperature, weight, height, BMI

Clinical Notes

Free-text notes written by doctors or nurses

Diagnoses

Formal diagnoses with ICD codes and status

Attachments

Uploaded files — PDFs, images, documents

Visit Timeline

Chronological view of all records per patient


Vitals

Accessing Vitals

Sidebar → Medical Records → Vitals

https://yourdomain.com/dashboard/medical-records/vitals

What Vitals Records

Each vitals entry captures a snapshot of a patient's physical measurements at a point in time:

Field

Description

Patient

Linked patient

Appointment

Optional — link to a specific visit

Recorded By

Staff member who recorded the vitals

Recorded At

Date and time of measurement

Blood Pressure Systolic

mmHg

Blood Pressure Diastolic

mmHg

Heart Rate

Beats per minute

Temperature

°C or °F

Weight

kg

Height

cm

BMI

Calculated automatically from weight and height

Adding Vitals

Click Add Vitals on the vitals page.

Select the patient, optionally link to an appointment, fill in the measurements, and save. Not all fields are required — record only the measurements taken during the visit.

BMI is calculated server-side from weight (kg) and height (cm) when both are provided. You do not need to calculate it manually.

Vitals Table

The vitals list shows all recorded vitals across all patients with the most recent entries first. Each row shows:

  • Patient name

  • Blood pressure (systolic/diastolic)

  • Heart rate

  • Temperature

  • Weight and height

  • BMI

  • Recorded by and recorded at


Clinical Notes

Accessing Clinical Notes

Sidebar → Medical Records → Clinical Notes

https://yourdomain.com/dashboard/medical-records/clinical-notes

What Clinical Notes Record

Clinical notes are free-text entries written by doctors or nurses during or after a patient visit:

Field

Description

Patient

Linked patient

Author

Staff member writing the note

Appointment

Optional — link to a specific visit

Content

Free-text clinical note

Created At

Timestamp of note creation

Adding a Clinical Note

Click Add Clinical Note on the clinical notes page.

Select the patient, optionally link to an appointment, write the note content, and save.

Clinical notes are attributed to the logged-in user automatically as the author. The author cannot be changed after creation.

Clinical Notes Table

The notes list shows all notes across all patients with the most recent first. Each row shows patient name, author, note excerpt, linked appointment, and creation date.


Diagnoses

Accessing Diagnoses

Sidebar → Medical Records → Diagnoses

https://yourdomain.com/dashboard/medical-records/diagnoses

What Diagnoses Record

Diagnoses are formal clinical findings associated with a patient:

Field

Description

Patient

Linked patient

Doctor

Diagnosing doctor

Title

Diagnosis name or description

ICD Code

Optional — international classification code

Status

active or resolved

Diagnosed At

Date of diagnosis

Diagnosis Status

Status

Meaning

active

Condition is current and ongoing

resolved

Condition has been treated or resolved

Status can be updated at any time — for example changing a diagnosis from active to resolved after successful treatment.

Adding a Diagnosis

Click Add Diagnosis on the diagnoses page.

Select the patient and doctor, enter the diagnosis title and optional ICD code, set the status and date, and save.

Diagnoses Table

The diagnoses list shows all diagnoses across all patients. Each row shows patient name, title, ICD code, status badge, doctor, and diagnosis date.


Attachments

Accessing Attachments

Sidebar → Medical Records → Attachments

https://yourdomain.com/dashboard/medical-records/attachments

What Attachments Store

File uploads linked to a patient — lab results, X-rays, referral letters, scan reports, or any supporting documents:

Field

Description

Patient

Linked patient

Appointment

Optional — link to a specific visit

File Name

Display name of the file

File URL

Storage URL in Supabase

File Type

MIME type of the uploaded file

Created At

Upload timestamp

Supported File Types and Limits

Type

Formats

Max Size

Documents

PDF, DOC, DOCX

10MB

Images

JPEG, PNG, GIF, WebP

10MB

Files are stored in the medical-attachments Supabase storage bucket. Confirm this bucket exists and is set to Public before uploading — see the Supabase Setup guide.

Adding an Attachment

Click Add Attachment on the attachments page.

Select the patient, optionally link to an appointment, choose the file from your device, and save. The file uploads to Supabase Storage and a record is created in the medical_attachments table.

Attachments Table

The attachments list shows all uploaded files across all patients. Each row shows patient name, file name, file type, linked appointment, and upload date. Click the file name to open or download the file.


Visit Timeline

Accessing the Visit Timeline

Sidebar → Medical Records → Visit Timeline

https://yourdomain.com/dashboard/medical-records/visit-timeline

What the Visit Timeline Shows

The visit timeline gives a chronological view of all medical activity for a patient across all record types in a single view.

Two layout options are available:

Card View — Each visit is displayed as a card showing the date, linked appointment, doctor, and all records from that visit — vitals, notes, diagnoses, and attachments grouped together.

Gantt View — A horizontal timeline showing the span of active diagnoses and visits across time. Useful for understanding the duration of ongoing conditions.

Searching the Timeline

Use the search bar on the visit timeline page to filter by patient name. The timeline updates to show only records for the selected patient.


Medical Record Visits

In addition to the individual sub-sections, CareNova also has a top-level medical_records table that represents a visit record — a container that links a patient, doctor, and appointment to a specific date.

Field

Description

Patient

Linked patient

Doctor

Attending doctor

Appointment

Optional linked appointment

Visit Date

Date of the visit

Status

open or closed

Vitals, clinical notes, diagnoses, and attachments can all be linked to both a patient and an appointment — they do not strictly require a parent medical record row. The medical_records table provides an optional grouping layer for visit-based workflows.


Database Schema Reference

medical_records

Column

Type

Description

id

uuid

Unique record ID

patient_id

uuid

FK → patients

doctor_id

uuid

FK → users

appointment_id

uuid

FK → appointments

visit_date

timestamptz

Date of visit

status

text

open / closed

created_at

timestamptz

Creation timestamp

medical_record_vitals

Column

Type

Description

patient_id

uuid

FK → patients

appointment_id

uuid

FK → appointments

recorded_by_id

uuid

FK → users

recorded_at

timestamptz

Measurement time

blood_pressure_systolic

integer

mmHg

blood_pressure_diastolic

integer

mmHg

heart_rate

integer

BPM

temperature

numeric

Degrees

weight

numeric

kg

height

numeric

cm

bmi

numeric

Calculated

clinical_notes

Column

Type

Description

patient_id

uuid

FK → patients

author_id

uuid

FK → users

appointment_id

uuid

FK → appointments

content

text

Note content

created_at

timestamptz

Creation timestamp

diagnoses

Column

Type

Description

patient_id

uuid

FK → patients

doctor_id

uuid

FK → users

title

text

Diagnosis title

icd_code

text

ICD classification code

status

enum

active / resolved

diagnosed_at

timestamptz

Date of diagnosis

medical_attachments

Column

Type

Description

patient_id

uuid

FK → patients

appointment_id

uuid

FK → appointments

file_name

text

Display name

file_url

text

Supabase storage URL

file_type

text

MIME type

created_at

timestamptz

Upload timestamp


Workflow Examples

Recording a complete patient visit:

  1. Nurse records vitals — Medical Records → Vitals → Add Vitals

  2. Doctor writes clinical note — Medical Records → Clinical Notes → Add Clinical Note

  3. Doctor adds diagnosis — Medical Records → Diagnoses → Add Diagnosis

  4. Doctor uploads lab result — Medical Records → Attachments → Add Attachment

  5. Review full visit — Medical Records → Visit Timeline

Updating a resolved diagnosis:

  1. Medical Records → Diagnoses

  2. Find the diagnosis row

  3. Edit → change status from active to resolved → Save

Reviewing a patient's complete medical history:

  1. Sidebar → Patients

  2. Find the patient → View Full Profile

  3. Navigate through tabs — appointments, prescriptions, medical records


Troubleshooting

Medical Records not in sidebar:

  • Confirm clinic type is general or ophthalmology — dental clinics show Odontograms instead

  • Confirm your role has medical_records.view permission in Dashboard → Permissions

  • Receptionist does not have medical records access by default

File upload failing:

  • Confirm the medical-attachments bucket exists in Supabase Storage and is set to Public

  • Confirm file is under 10MB

  • Confirm file type is PDF, DOC, DOCX, JPEG, PNG, GIF, or WebP

  • Confirm SUPABASE_SERVICE_ROLE_KEY is correctly set in environment variables

Vitals not showing BMI:

  • BMI is only calculated when both weight (kg) and height (cm) are provided

  • Confirm both fields were filled in when recording vitals

Visit timeline showing no records:

  • Confirm the patient has at least one vitals, clinical note, diagnosis, or attachment record

  • Use the search bar to filter by the specific patient name

Next Step

Continue to the Prescriptions module guide to learn how to create and manage patient prescriptions in CareNova.