Skip to content

Commit 13cafbd

Browse files
Merge pull request #263 from masslight/develop
Merge v0.3 Chattahoochee
2 parents 9e25370 + cf810ba commit 13cafbd

File tree

51 files changed

+732
-138
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+732
-138
lines changed

.github/workflows/demo.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Playwright Tests
2+
on:
3+
workflow_dispatch:
4+
inputs:
5+
environment:
6+
description: 'Environment name'
7+
required: true
8+
default: 'Testing'
9+
type: choice
10+
options:
11+
- Testing
12+
- Staging
13+
14+
jobs:
15+
test:
16+
timeout-minutes: 60
17+
runs-on: ubuntu-latest
18+
steps:
19+
- uses: actions/checkout@v4
20+
- uses: actions/setup-node@v4
21+
with:
22+
node-version: lts/*
23+
- name: Install dependencies
24+
run: npm ci
25+
- name: Install Playwright Browsers
26+
run: npx playwright install --with-deps
27+
- name: Run Playwright tests
28+
run: npx playwright test
29+
- uses: actions/upload-artifact@v4
30+
if: always()
31+
with:
32+
name: playwright-report
33+
path: playwright-report/
34+
retention-days: 30

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
44

55
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
66

7-
You may not remove or reduce in prominence any attribution or reference to ZapEHR or MassLight displayed in user interfaces, source code, images, or other materials covered by this license. Any user interfaces or source code derived from material covered by this license must display similar attribution. You may arrange an attribution-free commercial license by contacting <info@zapehr.com>.
7+
You may not remove or reduce in prominence any attribution or reference to Oystehr, ZapEHR, or MassLight displayed in user interfaces, source code, images, or other materials covered by this license. Any user interfaces or source code derived from material covered by this license must display similar attribution. You may arrange an attribution-free commercial license by contacting <info@oystehr.com>.
88

99
You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits or requires.
1010

README.md

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</picture>
77
</p>
88

9-
<p align="center">The production-ready, open-source EHR.</p>
9+
<p align="center">The production-ready, open-source EHR</p>
1010

1111
<p align="center">
1212
<a href="https://www.ottehr.com/"><b>Ottehr.com</b></a>
@@ -28,16 +28,14 @@
2828

2929
This monorepo contains code for [Ottehr telehealth](https://www.ottehr.com/).
3030

31-
Ottehr is a modern, modular EHR that began as a reference implementation for [ZapEHR](https://zapehr.com). It quickly outgrew "sample EHR" status and became the foundation for large-scale production EHR installations. Ottehr uses ZapEHR for back-end service endpoints, and requires a free ZapEHR 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.
31+
Ottehr is a modern, modular EHR that began as a reference implementation for [Oystehr](https://oystehr.com). 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.
3232

3333
## Setup
3434

35-
Ottehr currently has a few components. Two, **Ottehr Scheduled In-Person Intake** and **Ottehr Unscheduled Telemedicine Intake**, are for patients to make appointments. Another is **Ottehr EHR**, for staff to work with appointments. **Ottehr Elements** includes components for building health software.
35+
Ottehr currently has two websites. One is for patients -- **Ottehr Intake** -- and one is for staff -- **Ottehr EHR**.
3636

37-
* **[Ottehr Scheduled In-Person Intake](packages/urgent-care-intake):** A patient-facing registration website for creating appointments, with features including rescheduling, checking in, sending text messages and emails, and listing appointments for an account
38-
* **[Ottehr Unscheduled Telemedicine Intake](packages/telemed-intake):** Another registration website for patients made for telemedicine to help patients join calls with providers
39-
* **[Ottehr EHR](packages/telemed-ehr/):** A staff-facing EHR for managing appointments created through the In-Person or Telemedicine intake websites, 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
40-
* **[Ottehr Elements](packages/ottehr-components/):** A components React library for creating healthcare applications
37+
* **[Ottehr Intake](packages/telemed-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
38+
* **[Ottehr EHR](packages/telemed-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
4139

4240
## First Time Setup
4341

@@ -91,20 +89,20 @@ npm install -g pnpm
9189

9290
Alternatively, you can install `pnpm` using the [official documentation](https://pnpm.io/installation).
9391

94-
### Joining ZapEHR
92+
### Joining Oystehr
9593

96-
You'll need a free ZapEHR account to run Ottehr. Register for access at [zapehr.com](https://zapehr.com). Follow these simple steps:
94+
You'll need a free Oystehr account to run Ottehr. Register for access at [oystehr.com](https://oystehr.com). Follow these simple steps:
9795
98-
1. Visit [zapehr.com](https://zapehr.com).
96+
1. Visit [oystehr.com](https://oystehr.com).
9997
2. Click on **Free Access** to initiate your early access request.
10098
101-
Once your request is received, the ZapEHR team will promptly reach out to you via email, providing the credentials you need to kickstart your ZapEHR journey.
99+
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.
102100
103-
For comprehensive guidance on getting started with ZapEHR, explore our technical documentation available at [https://docs.zapehr.com/docs/welcome](https://docs.zapehr.com/docs/welcome).
101+
For comprehensive guidance on getting started with Oystehr, explore our technical documentation available at [https://docs.oystehr.com](https://docs.oystehr.com).
104102
105103
## Setup Procedure
106104
107-
To proceed with this setup guide, it is assumed that you have access to a ZapEHR project. If you have done so, please follow these steps:
105+
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:
108106
109107
1. **Fork Ottehr:**
110108
Visit [https://github.com/masslight/ottehr/fork](https://github.com/masslight/ottehr/fork) and fork the repository.
@@ -130,28 +128,26 @@ To proceed with this setup guide, it is assumed that you have access to a ZapEHR
130128
code .vscode/Ottehr.code-workspace
131129
```
132130
133-
Before proceeding, ensure that you have [Node.js](#node) v18.x and [pnpm](#installing-pnpm) installed on your machine.
131+
Before proceeding, ensure that you have Node.js v18.x and pnpm installed on your machine.
134132
135133
Once these dependencies are in place, enter the following command from the root directory.
136134
137135
```bash
138-
sh scripts/telemed-setup.sh
136+
sh scripts/ottehr-setup.sh
139137
```
140138
141-
For a sample guide of setting up Ottehr Telemedicine, please check [getting started with ottehr](https://youtu.be/NJzF9Nzhbeo).
142-
143139
The script will prompt you for the following information:
144140
145-
* Your access token: Log in to your [ZapEHR project](https://console.zapehr.com), and copy the access token from the dashboard.
146-
* Your project ID: Find this on the [ZapEHR project details page](https://console.zapehr.com/project).
147-
* Your first provider email: This can be your email address.
141+
* Your access token: Log in to your Oystehr project on the [Oystehr Console](https://console.oystehr.com), and copy the access token from the dashboard
142+
* Your project ID: Listed on the Oystehr Console next to the access token
143+
* Your first provider email: This can be your email address
148144
149145
Once the program finishes running,
150146
151147
1. The Intake and EHR websites will open.
152148
1. 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.
153149
154-
The URL for a test location is http://localhost:3015/location/testing/prebook.
150+
The URL for a test location is http://localhost:3002/location/ak/in-person/prebook.
155151
156152
## Scripts
157153
@@ -165,6 +161,10 @@ If a script is environment specific, use:
165161
pnpm <script name>:<env>
166162
```
167163
164+
### `telemed:start`
165+
166+
Starts Intake and EHR
167+
168168
### `build`
169169
170170
Builds all packages using the [build script](./scripts/build.sh).
@@ -173,12 +173,6 @@ Builds all packages using the [build script](./scripts/build.sh).
173173
174174
Lints all packages using [ESLint](https://eslint.org/).
175175
176-
### `start`
177-
178-
Environment specific: `local`, `dev`, `dev2`, `testing`, `staging`.
179-
180-
Starts all packages. If the env is excluded, [defaults to local](#getting-started).
181-
182176
### `update`
183177
184178
Interactively updates all dependencies to their latest versions, respecting ranges specified in `package.json`.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ottehr",
3-
"version": "0.0.2",
3+
"version": "0.3",
44
"private": true,
55
"scripts": {
66
"test": "pnpm recursive run test",

packages/ehr-utils/lib/helpers/practitioner.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,14 @@ export function allLicensesForPractitioner(practitioner: Practitioner): Practiti
2525
(coding) => coding.system === PRACTITIONER_QUALIFICATION_STATE_SYSTEM,
2626
)?.code;
2727

28+
const statusExtension = qualificationExt.extension?.find((ext) => ext.url === 'status')?.valueCode;
29+
2830
if (qualificationCode && qualificationState)
29-
allLicenses.push({ state: qualificationState, code: qualificationCode });
31+
allLicenses.push({
32+
state: qualificationState,
33+
code: qualificationCode,
34+
active: statusExtension === 'active',
35+
});
3036
}
3137
});
3238
}

packages/ehr-utils/lib/types/practitioner.types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,4 +279,5 @@ export const PractitionerQualificationCodesDisplay = Object.keys(PractitionerQua
279279
export interface PractitionerLicense {
280280
state: string;
281281
code: PractitionerQualificationCode;
282+
active: boolean;
282283
}

packages/ehr-utils/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "ehr-utils",
33
"private": true,
4-
"version": "0.2",
4+
"version": "0.3",
55
"main": "lib/main.ts",
66
"types": "lib/main.ts",
77
"scripts": {

packages/ottehr-components/lib/helpers/form/getFormInput.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import CoalescedDateInput from '../../components/form/CoalescedDateInput';
1818
import { DateFieldMap } from '../../components/form/DateInput';
1919
import { PhotosUpload } from '../../components/form/PhotosUpload';
2020
import { FileURLs } from 'ottehr-utils';
21+
import Markdown from 'react-markdown';
2122

2223
function checkRequire(item: FormInputTypeField, values: FieldValues): boolean {
2324
if (item.required && !item.requireWhen) {
@@ -285,12 +286,18 @@ export const getFormInputField = (
285286
);
286287
case 'Description':
287288
if (formInput.label) {
288-
return <Typography variant="body1">{formInput.label}</Typography>;
289+
return (
290+
<Typography variant="body1">
291+
<Markdown>{formInput.label}</Markdown>
292+
</Typography>
293+
);
289294
} else if (formInput.description) {
290-
return formInput.description;
295+
return <Markdown>{`${formInput.description}`}</Markdown>;
291296
} else {
292297
return <></>;
293298
}
299+
case 'HTML':
300+
return <div dangerouslySetInnerHTML={{ __html: formInput.label ?? '' }} />;
294301
case 'Button':
295302
return (
296303
<Button variant="outlined" type="submit">

packages/ottehr-components/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "ottehr-components",
33
"private": true,
4-
"version": "0.2",
4+
"version": "0.3",
55
"main": "lib/main.ts",
66
"types": "lib/main.ts",
77
"scripts": {

packages/telemed-ehr/app/env/.env.local-template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ VITE_APP_ZAPEHR_APPLICATION_AUDIENCE=https://api.zapehr.com
66
VITE_APP_ZAPEHR_APPLICATION_REDIRECT_URL=http://localhost:4002
77
VITE_APP_ZAPEHR_CONNECTION_NAME=
88
VITE_APP_MUI_X_LICENSE_KEY=
9-
VITE_APP_ORGANIZATION_NAME_LONG=OttEHR
10-
VITE_APP_ORGANIZATION_NAME_SHORT=OttEHR
9+
VITE_APP_ORGANIZATION_NAME_LONG=Ottehr
10+
VITE_APP_ORGANIZATION_NAME_SHORT=Ottehr
1111
VITE_APP_ZAPEHR_APPLICATION_ID=
1212
VITE_APP_FHIR_API_URL=https://fhir-api.zapehr.com
1313
VITE_APP_PROJECT_API_URL=https://project-api.zapehr.com/v1

0 commit comments

Comments
 (0)