a conceptual gambit in collaboration with chatGPT4 /// POC v0.10.11
Built from first principles and drawing upon 30 years experience scaling laboratory process. Constructed with as few object model shortcuts as I could manage ( I believe these shortcuts are among the main reasons LIMS nearly universally dissapoint ). Supporting both arbitrary and prescribed interacting objects. Intended for use: by small to factory scale laboratories, in regulated environments, for both research & operations usecases. Bloom can handle multiple areas LIS tend to touch: acessioning, lab processes, specimen/sample management, equipment, regulatory and compliance.
bloom early peeks
and flexible whitelisting, etc...
bloom natively will support arbitrarily defined labware, a 96w plate is just one example. Anything that nested arrays of arrays can describe can be configured as a type of labware with next to no effort!
Pacage receipt -> kits registration (multiple) -> specimen registration (multiple) -> requisition capture & association -> adding specimens to assay queues. Fedex tracking details fetched, barcode printing available.
managing all object relationships, tracking all details, printing labels, etc.
see build test badges above for all supported platforms
- Mac (14+)
brew install coreutils
is required for thegtimeout
command for some rclone functionality. runalias timeout=gtimeout
to use the gtimeout w/zsh.
- Ubuntu 22+
- Centos 9
-
Conda (you may swap in mamba if you prefer). Installing conda:
- be sure
wget
is available to you.
linux a pinned version: https://repo.anaconda.com/miniconda/Miniconda3-py312_24.5.0-0-Linux-x86_64.sh
x86_64:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
arm64:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
macOS
intel:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
ARM:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
- Then execute the Miniconda.sh script, follow the prompts, when installation completed, follow these last 2 steps:
- be sure
~/miniconda3/bin/conda init
bash # newly created shells should not auto load the conda (base) env.
assumes you have completed the prerequisites
# Clone the repository
git clone git@github.com:Daylily-Informatics/bloom_lims.git
cd bloom_lims
# This will attempt to build the conda env, install postgres, the database, build the schema and start postgres
source bloom_lims/env/install_postgres.sh
# conda activate BLOOM if is has not happened already.
# Start the Bloom LIMS UI
source run_bloomui.sh
# RUN TESTS
pytest
# START THE UIs (on localhost:8080)
source bloom_lims/env/install_pgadmin.sh
If they have APIs, integration to fetch things like physician or patient identifiers/metadata is straight forward.
- In place, and works See detailed docs here.
- Uses zebra_day.
- In place, no docs yet, but will work if you create the config
yaml
file for this library: fedex_tracking_day.
- with
simple_salesforce
orsalesforce
python packages, would be very straight forward.
- Using a UUID on children objects for convenience will lead to a mess as the need to know details about each object is next to impossible when a UUID is assigned to multiple objects.
- Keeping metadata out of the UUID formula is a fundamental requirement in building flexible and scalable systems. FUNDAMENTAL.
- ...
- ...
- there are few/no compelling reasons to use CSV's over TSV's & so many reasons not to use CSV's.
- It is! Fully (though with some safeguards still not in place).
- soft deletes need to be reviewed more closely
- Requiring as little code changes as possible.
- Simple
- Scalable
- Secure
- Flexible & Extensible
- Open Source
- Operationally Robust
- Free
- Sustainable
All other relationships are subsets of this, and designing parts of the LIMS which disallow many to many will result in an inflexible system.
Objects may all be: root (singleton, parent & able to become a child at some point), child(singleton, parent and possibly terminal) of one another
You may deploy bloom wherever it will run. This does mean you are responsible for all aspects of the deployment, including security, backups (AND recovery), performance optimization, monitoring, etc. This need not be daunting. I am available for consulting on there topics.
- with pytest
conda activate BLOOM
pytest
- There is no reason bloom can not be used in a CLIA regulated environment.
- Bloom can satisfy all relevant CAP checklist items which apply to it. But, as it is s/w you will be running yourself, most checklist items will be concerned with the environment you are using bloom in.
- If installed in an already HIPAA compliant environment, bloom should not need much or any work to be compliant.
- no promises, please file issues to log a bug or request a feature.
- John Major:li aka iamh2o:gh
- Josh Durham
- Adam Tracy
- MIT
- chatGPT4 for helping me build this.
- All the folks I've built systems for to date and were patient with my tools and offered helpful feedback.
- snakemake :: inspiration.
- multiqc :: inspiration.
- ga4cgh :: inspiration.
- the human genome project :: where I learned I dug LIS.
- cytoscape :: incredible graph visualization tools!
- The OSS world.
- Semantic Mediawiki :: inspiration.
- Datomic :: inspiration.
note: all commands below are expected to be run from a shell with conda activated.
conda activate BLOOM
Drop The Entire Database(loose all data!) > Rebuild The Database / Re-seed With All Accessible json Templates
The steps are wrapped in a script, please see clear_and_rebuild_postgres.sh.
It is executed as follows:
source clear_and_rebuild_postgres.sh
source bloom_lims/bin/stop_bloom_db.sh
rm -rf bloom_lims/database/*
source bloom_lims/env/install_postgres.sh skip
the skip will skip building the conda env. This will start pgsql in the env, and build the schema.
Similar to pytest
, but more extensive. Largely useful in development work. The following will auto-gen 'n=2' passes of the lims schema
python tx.py 2
.
source run_bloomui.sh
source bloom_lims/env/install_pgadmin.sh
python bloom_shell.py
echo "test" >test.log
echo "TEST" >TEST.LOG
more test.log
TEST
more TEST.log
TEST
- This still shocks me & is worth a reminder.
echo "test" > test.log
echo "TEST" > TEST.LOG
more test.log
test
TEST.LOG
TEST
- Given we can not be certain where files will be reconstituted, we must assume that files might be created in a cases insensitive file system when allowing download.
A widely adopted UUID spec (and used by postgres), rfc4122, treates uc and lc as the same character. Bloom EUIDs only contain uc characters in a prefix followed by integers.