Skip to content
/ ottehr Public
forked from masslight/ottehr

Modular, Production-Ready, Open-Source EHR

License

Notifications You must be signed in to change notification settings

osenco/ottehr

 
 

Repository files navigation

Ottehr Logo.

HaloHealth Telemedicine

Website

Last Commit Code Size Contributors GitHub Issues GitHub Stars GitHub Pull Requests GitHub Pull Requests Closed

Ottehr

This monorepo contains code for Ottehr telehealth.

Ottehr is a modern, modular EHR that began as a reference implementation for Oystehr. It quickly outgrew "sample EHR" status and became the foundation for large-scale production EHR installations. Ottehr uses Oystehr for back-end service endpoints, and requires a free Oystehr account to run as-is, but you are welcome to modify and use a third-party service vendor or build your own service architecture. Ottehr is designed for developers, hopefully making it easy to fork, white-label, and build entire new classes of EHRs and health-tech products with a fraction of the effort of starting from scratch.

Setup

Ottehr currently has two websites. One is for patients -- Ottehr Intake -- and one is for staff -- Ottehr EHR.

  • Ottehr Intake: A patient-facing registration website for creating appointments, with features including rescheduling, checking in, text messages and emails, and listing appointments for an account
  • Ottehr EHR: A staff-facing EHR for managing appointments created, with features including checking appointments, managing patient queues, texting patients, updating a location's slots, setting a location's schedule, joining telemedicine calls, HPI and medical history, exam charting, eRx and Assessment, patient plan, coming soon: RCM and claims submission

First Time Setup

To run Ottehr for the first time, you need to set up the project.

Node Installation

To manage Node.js versions efficiently, we recommend using Node Version Manager (nvm).

  1. Install nvm by following the instructions provided here.

  2. Use nvm to install Node.js version 18 with the following commands:

    nvm install 18
  3. Set Node.js version 18 as the default with:

    nvm alias default 18

After successful installation, verify the setup by executing:

node -v

This command should display the installed Node.js version.

Installing pnpm

npm install -g pnpm@9

Joining Oystehr

You'll need a free Oystehr account to run Ottehr. Register for access at oystehr.com. Follow these simple steps:

  1. Visit oystehr.com.
  2. Click on Free Access to initiate your early access request.

Once your request is received, the Oystehr team will promptly reach out to you via email, providing the credentials you need to kickstart your Oystehr journey.

For comprehensive guidance on getting started with Oystehr, explore our technical documentation available at https://docs.oystehr.com.

Setup Procedure

To proceed with this setup guide, it is assumed that you have access to a Oystehr project. If you have done so, please follow these steps:

  1. Fork Ottehr: Visit https://github.com/masslight/ottehr/fork and fork the repository.

  2. Clone Your Fork: Copy the SSH clone link of your fork and execute the following command in your preferred folder:

    git clone [email protected]:{your_profile}/ottehr.git
  3. (Optional) Add Ottehr as Upstream: If desired, add the original Ottehr repository as an upstream remote:

    git remote add upstream [email protected]:masslight/ottehr.git
  4. Open Repository in Your Editor: Open the repository in your chosen editor; for example, in VSCode:

    code .vscode/Ottehr.code-workspace

Before proceeding, ensure that you have Node.js v18.x and pnpm installed on your machine.

Once these dependencies are in place, enter the following command from the root directory.

sh scripts/ottehr-setup.sh

The script will prompt you for the following information:

  • Your access token: Log in to your Oystehr project on the Oystehr Console, and copy the access token from the dashboard
  • Your project ID: Listed on the Oystehr Console next to the access token
  • Your first provider email: This can be your email address

Once the program finishes running,

  1. The Intake and EHR websites will open.
  2. To log in to the EHR, enter the email you input during the setup program. Click Forgot password? and set a password then log in.

The URL for a test location is http://localhost:3002/location/ak/in-person/prebook.

Scripts

pnpm <script name>

If a script is environment specific, use:

pnpm <script name>:<env>

telemed:start

Starts Intake and EHR

build

Builds all packages using the build script.

lint

Lints all packages using ESLint.

update

Interactively updates all dependencies to their latest versions, respecting ranges specified in package.json.

SendGrid Email Configuration

Required Environment / Secrets

  • SENDGRID_API_KEY
  • TELEMED_SENDGRID_EMAIL_BCC
  • TELEMED_SENDGRID_EMAIL_FROM
  • TELEMED_SENDGRID_EMAIL_FROM_NAME
  • TELEMED_SENDGRID_CONFIRMATION_EMAIL_TEMPLATE_ID
  • TELEMED_SENDGRID_CANCELLATION_EMAIL_TEMPLATE_ID
  • TELEMED_SENDGRID_VIDEO_CHAT_INVITATION_EMAIL_TEMPLATE_ID

Example Confirmation Template:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <h2>You're confirmed!</h2>
    <p>Thanks for choosing Ottehr!</p><br>
    <p>Your check-in time for {{ firstName }} at {{ locationName }} is on {{ startTime }}.</p><br>
    <p>Please complete your paperwork in advance to save time at check-in. <a href="{{ paperworkUrl }}">Click here to complete paperwork</a></p><br>
    {{#notEquals appointmentType "walkin"}}
        <p><a href="{{ checkInUrl }}">Click here to modify/cancel your check-in</a></p><br>
    {{/notEquals}}
    <hr>
    <p>Thank you for choosing Ottehr. We look forward to partnering with you and your family.</p><br>
    <small>For questions or feedback, please <a target="_blank" href="https://www.ottehr.com/">Check out Ottehr</a></small>
</body>
</html>

Example Cancellation Template:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <h2>Sorry to have you go!</h2>
    <p>Your appointment for {{firstName}} at {{locationName}} on {{startTime}} has been cancelled.</p><br>
    <p><a href="{{ locationUrl }}">Click here to book again</a></p><br>
    <hr>
    <p>Thank you for choosing Ottehr. We look forward to partnering with you and your family.</p><br>
    <small>For questions or feedback, please <a target="_blank" href="https://www.ottehr.com/">Check out Ottehr</a></small>
</body>
</html>

Example Invitation Template:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <h2>You're Invited!</h2>
    <p>You have been invited to join an Ottehr visit with {{patientName}}.</p><br>
    <p><a href="{{ inviteUrl }}">Click here to join</a></p><br>
    <hr>
    <p>Thank you for choosing Ottehr. We look forward to partnering with you and your family.</p><br>
    <small>For questions or feedback, please <a target="_blank" href="https://www.ottehr.com/">Check out Ottehr</a></small>
</body>
</html>

SendGrid Email Configuration

Required Environment / Secrets

  • SENDGRID_API_KEY
  • TELEMED_SENDGRID_EMAIL_BCC
  • TELEMED_SENDGRID_EMAIL_FROM
  • TELEMED_SENDGRID_EMAIL_FROM_NAME
  • TELEMED_SENDGRID_CONFIRMATION_EMAIL_TEMPLATE_ID
  • TELEMED_SENDGRID_CANCELLATION_EMAIL_TEMPLATE_ID
  • TELEMED_SENDGRID_VIDEO_CHAT_INVITATION_EMAIL_TEMPLATE_ID

Example Confirmation Template:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <h2>You're confirmed!</h2>
    <p>Thanks for choosing Ottehr!</p><br>
    <p>Your check-in time for {{ firstName }} at {{ locationName }} is on {{ startTime }}.</p><br>
    <p>Please complete your paperwork in advance to save time at check-in. <a href="{{ paperworkUrl }}">Click here to complete paperwork</a></p><br>
    {{#notEquals appointmentType "walkin"}}
        <p><a href="{{ checkInUrl }}">Click here to modify/cancel your check-in</a></p><br>
    {{/notEquals}}
    <hr>
    <p>Thank you for choosing Ottehr. We look forward to partnering with you and your family.</p><br>
    <small>For questions or feedback, please <a target="_blank" href="https://www.ottehr.com/">Check out Ottehr</a></small>
</body>
</html>

Example Cancellation Template:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <h2>Sorry to have you go!</h2>
    <p>Your appointment for {{firstName}} at {{locationName}} on {{startTime}} has been cancelled.</p><br>
    <p><a href="{{ locationUrl }}">Click here to book again</a></p><br>
    <hr>
    <p>Thank you for choosing Ottehr. We look forward to partnering with you and your family.</p><br>
    <small>For questions or feedback, please <a target="_blank" href="https://www.ottehr.com/">Check out Ottehr</a></small>
</body>
</html>

Example Invitation Template:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <h2>You're Invited!</h2>
    <p>You have been invited to join an Ottehr visit with {{patientName}}.</p><br>
    <p><a href="{{ inviteUrl }}">Click here to join</a></p><br>
    <hr>
    <p>Thank you for choosing Ottehr. We look forward to partnering with you and your family.</p><br>
    <small>For questions or feedback, please <a target="_blank" href="https://www.ottehr.com/">Check out Ottehr</a></small>
</body>
</html>

Contribute to Ottehr

We love it when you contribute to Ottehr! By submitting to this project, you agree to adopt the Developer Certificate of Origin (DCO) for your contributions.

About

Modular, Production-Ready, Open-Source EHR

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 98.9%
  • Other 1.1%