Felicity is the Next Generation LIMS Software for the modern Medical Laboratory.
Find a file
2024-10-27 08:25:31 +02:00
bin removed make 2024-08-08 16:59:54 +02:00
docs replaced magidoc with graphdoc 2024-01-28 15:17:16 +02:00
felicity updated user preferences and tests 2024-10-27 08:25:31 +02:00
public merged backend and frontend 2023-11-10 08:05:15 +02:00
reads update font awesome 2024-03-23 10:25:02 +02:00
services updated sample workflow tests 2024-07-27 21:52:31 +02:00
types merged backend and frontend 2023-11-10 08:05:15 +02:00
webapp updated reflex rule, id-sequencer, auto-publish standardisation 2024-09-22 16:20:00 +02:00
.gitignore removed code editor 2024-09-01 19:26:01 +02:00
.prettierignore perfected patient adding and update 2023-04-10 03:29:10 +02:00
.prettierrc perfected patient adding and update 2023-04-10 03:29:10 +02:00
al_revision.sh updated user preferences and tests 2024-10-27 08:25:31 +02:00
alembic.ini updated user preferences and tests 2024-10-27 08:25:31 +02:00
codegen.yml add instrument,method result entries 2024-01-23 19:13:37 +02:00
docker-compose.dev.yml removed intermidiary states and replaced with process tracker +resid 2024-09-20 10:58:52 +02:00
docker-compose.other.yml removed unecessary volume maping in prod as it leads to errors 2024-09-15 09:10:59 +02:00
docker-compose.yml removed unecessary volume maping in prod as it leads to errors 2024-09-15 09:10:59 +02:00
Dockerfile.dev removed intermidiary states and replaced with process tracker +resid 2024-09-20 10:58:52 +02:00
Dockerfile.prod change gunicorn workers to 1 by default 2024-09-15 14:56:55 +02:00
env.example disabled open telemetry tracing by default 2024-09-14 17:03:32 +02:00
felicity.iml added reflex rules 2022-02-05 21:36:45 +02:00
index.html merged backend and frontend 2023-11-10 08:05:15 +02:00
mypy.ini moved pdf storage to minio object storage 2024-07-31 19:38:20 +02:00
notes.txt updated notes 2024-09-14 16:07:43 +02:00
os-requirements.txt added scripts to run the system 2023-11-10 08:16:33 +02:00
package.json added 0.1.1. 2024-09-06 11:31:42 +02:00
pnpm-lock.yaml added info detail for results, init components 2024-06-29 15:19:21 +02:00
postcss.config.js upgraded all packages 2024-01-22 19:42:18 +02:00
postgres-db-setup.txt updated user password reset, added starter documentation reads 2023-12-30 09:51:11 +02:00
Procfile generated static files 2023-04-10 14:24:32 +02:00
pyproject.toml mypy corrections 2024-09-28 09:29:22 +02:00
pytest.ini restructures backend 2023-04-07 17:52:19 +02:00
README.md updated prod to use felicity-lims cli command 2024-09-01 20:04:48 +02:00
requirements-dev.txt mypy corrections 2024-09-28 09:29:22 +02:00
requirements.txt updated user preferences and tests 2024-10-27 08:25:31 +02:00
runtime.txt moved pdf storage to minio object storage 2024-07-31 19:38:20 +02:00
setup.py added setup.py and felicity-lims command 2024-08-08 16:52:27 +02:00
tailwind.config.js merged backend and frontend 2023-11-10 08:05:15 +02:00
tsconfig.json added info detail for results, init components 2024-06-29 15:19:21 +02:00
vite.config.js added info detail for results, init components 2024-06-29 15:19:21 +02:00

FELICITY LIMS

Screenshot1

The next generation open source laboratory information management system for clinical/medical laboratories.

Description

The Felicity LIMS project aims to create a Laboratory Information Management System (LIMS) that tracks the complete laboratory workflow providing all the functionalities of a Laboratory Information Management System.

Felicity strives to promote an accurate flow of sample and associated experimental data to and through a laboratory to produce information that is used to make conclusions and critical decisions.

Felicity LIMS will ensure that sufficient metadata is captured and clinical laboratory personnel can track the lifecycle of a bio-specimen in the laboratory from receipt to dispatch.

Felicity is the quality of being good, pleasant, or desirable.

FrontEnd

Felicity's frontend is developed using Vite, Vue, URQL, and Tailwind CS, etc.

Backend

Felicity's backend is developed using FastAPI, Strawberry-Graphql and SQLAlchemy

Minio is used as object storage to store pdf reports

Mongodb is used to store audit logs

Postgres is the main db with core tables

Dragonfly is the redis cache to keep track of sample status locks, websocket subscriptions etc

Main Features

  • Dashboard - Analytics
  • Patient - Listing, compact, detail, search, Audit Log
  • Sample - Listing, Detail, Audit Log, Reports, search
  • Worksheet - Templates, listing, auto create, multi create, manual create
  • Inventory - Item manager, listing, detail, transactions, adjustments, orders, requests
  • Shipment - Fhir ready (experimental), Listing, detail,
  • Storage - store rooms, locations, containers, templates,
  • Client - listing, detail, contacts
  • User - listing, profiles, RBAC
  • Billing - listing, profiles, RBAC -- incomplete
  • Admin - admin functions
  • Reflex rules

Installation

Our recommended method to get up and running quickly is to use the docker. This method uses Docker and docker compose which handles the details of installing dependencies for you.

We provide 2 methods to run felicity with docker. Choose whichever methods suits you best.

git clone https://github.com/beak-insights/felicity-lims.git
cd felicity-lims
Method 1. FastAPI serve static files generated by the vue frontend.

Docker service presets are: felicity-aio-caddy, felicity-aio-nginx, felicity-aio

  • felicity-aio-caddy - felicity serves static files with caddy as a reverse proxy in front
  • felicity-aio-nginx - felicity serves static files with nginx as a reverse proxy in front
  • felicity-aio - felicity serves static files without a reverse proxy
docker compose -f ./docker-compose.prod.yml up -d your_preset --build
docker compose -f docker-compose.prod.yml exec your_preset bash -c "felicity-lims upgrade"
docker compose -f docker-compose.prod.yml logs your_preset -f -n100
Method 2. Nginx/Caddy serve static files generated by the vue frontend.

Docker service presets are: felicity-static-nginx, felicity-static-caddy

  • felicity-static-nginx - felicity handles the api and nginx serves static files
  • felicity-static-caddy - felicity handles the api and caddy serves static files
docker compose -f ./docker-compose.prod.yml up -d your_preset --build
docker compose -f docker-compose.prod.yml exec your_preset bash -c "felicity-lims upgrade"
docker compose -f docker-compose.prod.yml logs your_preset -f -n100
Alternative deployment method without docker

If you don't want to use docker, as an alternative we recommend supervisor. With this approach you will have to setup databases (postgres, mongo), minio, redis/dragonfly manually by yourself

# install os requirements
sudo apt update && apt install libcairo2-dev pkg-config python3-dev gcc g++

# create and activate a python virtual environment - we recomment using miniconda
conda create -n felicity python=3.11
conda activate felicity

# install felicity lims requirements
pip install -r requirements.txt;

# setup postgres - First create a database and user 
pnpm db:upgrade;

# install webapp dependencies using pnpm - we recommend node v18 +
pnpm i;

# build webapp and setup felicity to serve the static files
pnpm standalone:build

# gunicorn run felicity - Yay you are up and running
pnpm server:gu

# Demonising felicity-lims with supervisor

# Install supervisor
sudo apt install supervisor
    
# check status:
sudo systemctl status supervisor
    
# open supervisor config file:
sudo nano /etc/supervisor/conf.d/felicity_lims.conf
    
# Copy and Paste the following and edit correct accordingly
# command first argument must the python in your virtual environment
# command second argument must the felicity folder inside felicity_lims
[program:felicity_lims]
command=/home/<user>/miniconda3/bin/python <full path to felicity lims root folder>
autostart=true
autorestart=true
stderr_logfile=/var/log/felicity_lims.err.log
stdout_logfile=/var/log/felicity_lims.out.log

# command example could be like:
# command=/home/administrator/miniconda3/bin/python /home/administrator/felicity_lims/felicity

# inform supervisor of our new programs:
sudo supervisorctl reread
    
# tell supervisor to enact any changes:
sudo supervisorctl update
     
##### Supervisor management commands
# check program status:
sudo supervisorctl status
    
# reload 
sudo supervisorctl reload

# reload or restart felicity_lims:
sudo supervisorctl restart felicity_lims

# tail error logs:
sudo supervisorctl tail -f felicity_lims stderr  # or
tail -f /var/log/felicity_lims.err.log
    
# tail output logs:
sudo supervisorctl tail -f felicity_lims stdout  # or
tail -f /var/log/felicity_lims.out.log

Application Monitoring

We have added open telemetry so that you can monitor how the application if performing. Make sure open tracing is enabled if you want to collect metrics - RUN_OPEN_TRACING=True and also run opentelemetry-bootstrap --action=install.

# Install signoz with docker method - easier method
git clone -b main https://github.com/SigNoz/signoz.git
cd signoz/deploy/

# Remove the Sample Application from SigNoz Dashboard
# open Docker Compose file deploy/docker/clickhouse-setup/docker-compose.yaml in a plain-text editor.
# Comment out or remove the services.hotrod and services.load-hotrod sections
docker compose -f docker/clickhouse-setup/docker-compose.yaml up -d

## When you are done installing SigNoz, you can access the UI at: http://localhost:3301

Load testing

Use locust or any method and tell us how it performs. We have done our locust tests and we are extremely happy so far.

Contact