← All documents
Tribro-Omics
TBO Pheno Technical-Specification
Version 1.0 · 11 November 2026
info@tribro-omics.com · tribro-omics.com

Patient data collection and phenotype platform — technical specification

Architecture, data model, API design and implementation status. Version 1.0.

1. Purpose and scope

The platform collects structured patient data for clinical genomics and rare-disease work and turns clinical observations into standard, machine-readable phenotype data (Human Phenotype Ontology, HPO). It supports registration, history, family history and pedigree, organ-system phenotyping, examinations, laboratory results, genomic results, phenotype extraction from text, phenotype-driven gene and panel ranking, dashboards and exports.

Central design rule: Clinical observation → standard phenotype annotation → disease / gene association → genomic evidence → clinician review. The observation is the clinical record; HPO codes are versioned annotations attached to it.

2. What is built in this release

Release 1.0 is a single-file browser application. It runs inside the Tribro-Omics CRM (version 9) and as a stand-alone file (TribroPheno) for TribroLIMS sites. Data is encrypted in the browser (AES-GCM, key derived with PBKDF2-SHA256). No patient data is sent to a server.

RequirementStatusNotes
Patient registration and demographicsBuiltAutomatic patient ID and separate research key; adult, paediatric, neonatal, prenatal, deceased; age calculated.
Clinical history (complaints, medical, birth and development)BuiltRepeatable complaints and medications; conditional fields.
Family history and pedigreeBuiltThree-generation drawing, consanguinity, PED and SVG export. Uncertain relatives are listed, not placed.
Organ-system phenotyping (22 systems)BuiltSix explicit statuses plus “not recorded”; evidence source, onset, severity, course, frequency, laterality.
HPO search, browse and annotationBuiltRelease 2025-01-16 embedded (18,387 terms). ID, label, synonym, definition and plain-language search; parents and children; candidate, accepted, rejected and superseded mappings.
Ontology update controlBuiltAnnotations keep their release. A check lists replaced or obsolete IDs; replacement is applied only after review and both annotations are kept.
Clinical examination and laboratory formsBuilt10 examination types with measurements; 16 laboratory categories with units, ranges and automatic flags.
Genomics moduleBuilt (records and references)Tests, variants with HGVS / ACMG fields, file references with checksums. Sequence files are not parsed in the browser.
Text extraction of phenotypesBuilt (rule-based)Dictionary and context rules for negation, uncertainty, family context and onset. Not an LLM. Every suggestion needs human review.
Gene and panel prioritisationBuilt (built-in method)Information-content similarity against HPO gene annotations (5,125 genes) and the 200-panel catalogue. Exomiser / LIRICAL are reached through Phenopacket export, not run inside the tool.
Dashboards, filters, saved queriesBuiltCounts by sex, age group, case type, clinical area, testing and variant status, top HPO terms; small-count masking for the researcher role.
ExportsBuiltPatient JSON, HPO TSV / CSV, Phenopacket v2, FHIR R4-mapped bundle, PED, cohort TSV / CSV, data dictionary, TribroLIMS subject JSON, printable report.
Audit trail, record states, amendmentsBuiltDraft → submitted → verified → amended with reason; every change and export logged.
Consent and withdrawalBuiltSix consent types; withdrawn or declined research consent blocks research exports.
Multi-user server (FastAPI + PostgreSQL), per-user accountsSpecified, not builtThis release is a single-file browser application with one encrypted sign-in. Sections 5–7 define the server edition.
MONDO / ORDO / SNOMED CT / LOINC code lookupsSpecified, not builtFree-text and code fields exist; ontology lookups other than HPO are not embedded. See the resource register.
Image and document file storageSpecified, not builtOnly references, checksums and consent flags are stored; files stay in institutional storage.
Profile-validated FHIR, clinical validation of decision supportNot doneRequires a FHIR validator run and a formal validation study.

3. Architecture

4. Phenotype status model

StatusMeaning
PresentFinding was assessed and is present.
AbsentFinding was explicitly assessed and is not present. Exported as an excluded phenotype.
SuspectedFinding is possible but not confirmed. Kept apart from confirmed findings; left out of ranking unless switched on.
UnknownAsked or looked for, result not known.
Not assessedNot examined or asked.
Not applicableCannot apply to this patient (for example by age or sex).
(no record)Nothing was recorded. Never treated as absent.

5. Data model

Entity-relationship diagram (server edition). The browser edition stores the same entities as one encrypted document per patient.

Entity-relationship diagram (server edition). The browser edition stores the same entities as one encrypted document per patient.

EntityMain attributesNotes
Patientid, patient_id, research_key, state, created_at, updated_atRoot record. research_key is the only key used in research exports.
PatientDemographicspatient_id →Patient, names, dob, sex, gender, ancestry, contact, cliniciansKept apart so it can be access-restricted.
Encounterid, patient_id, date, type, clinicianGroups examinations, results and follow-up of one visit.
ClinicalHistoryid, patient_id, section, payloadComplaints, medical, birth and developmental history.
FamilyMember / Pedigreeid, patient_id, relationship, sex, vital, affected, phenotype, onset, testedRelationship is stated, never inferred.
PhenotypeObservationid, patient_id, text, system, status, source, onset, resolved, severity, progression, frequency, laterality, location, notes, origin, created_byThe clinical record of a finding. Exists without any ontology code.
HPOAnnotationid, observation_id, hpo_id, label, status, confidence, annotator, date, release, origin, replacesZero or more per observation. Status: candidate, accepted, rejected, superseded.
OntologyReleaseid, ontology, version, loaded_at, checksumEvery annotation points to the release it was made with.
ClinicalExaminationid, patient_id, type, date, examiner, findings, interpretation, measurements[]
LaboratoryResultid, patient_id, category, test, code, value, unit, ref_low, ref_high, flag, sample, collected_at, lab, method
GeneticTestid, patient_id, type, lab, date, status, assembly, panel, result
GenomicVariantid, test_id, gene, gene_id, assembly, chrom, pos, ref, alt, hgvs_c, hgvs_p, zygosity, allele_balance, consequence, inheritance, af, af_source, clinvar, acmg, criteria, evidence_for, evidence_against, analyst, dateLinked to observations for review; a link is not a causal claim.
ClinicalDocumentid, patient_id, type, title, date, author, text
AIExtractionid, document_id, span_start, span_end, text, hpo_id, context, onset, confidence, model, release, extracted_atSuggestion only.
ReviewDecisionextraction_id, decision, reviewer, reviewed_at, observation_idAccepted, modified or rejected.
Consentid, patient_id, type, status, date, version, given_by, witness, withdrawn_at
FollowUpid, patient_id, date, clinician, status, summary, plan, next_date
User / Institutionid, name, role, institution_idRoles: clinician, researcher, data manager, administrator.
AuditLogid, at, user, role, patient_id, action, detailAppend-only.
ExternalKnowledgeSourceid, name, version, licence, retrieved_atProvenance of every external annotation.

6. API design (server edition)

Versioned REST API under /api/v1, JSON bodies, bearer tokens, role checks on every route, all writes audited. The browser edition implements the same operations in-process.

MethodRoutePurpose
POST/api/v1/auth/loginSign in; returns a short-lived token
GET / POST/api/v1/patientsList (filters, paging) / create
GET / PATCH/api/v1/patients/{id}Read / update; PATCH on a verified record requires an amendment reason
POST/api/v1/patients/{id}/stateSubmit, verify, amend
GET / POST/api/v1/patients/{id}/observationsPhenotype observations
POST/api/v1/observations/{id}/annotationsAdd candidate or accepted HPO annotation
PATCH/api/v1/annotations/{id}Accept, reject, supersede
GET/api/v1/hpo/search?q=&root=Term search (ID, label, synonym, definition)
GET/api/v1/hpo/terms/{hpo_id}Term detail with parents and children
POST/api/v1/documents/{id}/extractRun extraction; returns suggestions with spans
POST/api/v1/extractions/{id}/reviewAccept, modify or reject
POST/api/v1/patients/{id}/prioritiseRank genes and panels; stores run with parameters
GET/api/v1/patients/{id}/export?format=json, tsv, csv, phenopacket, fhir, ped
GET/api/v1/cohort/export?format=&deidentified=Cohort exports with consent filter
GET/api/v1/dashboardAggregates with minimum cell size
GET/api/v1/audit?patient=Audit trail (administrator, data manager)
POST/api/v1/ontology/releasesLoad a new release; produces a migration report, changes nothing
POST/api/v1/lims/subjectsTribroLIMS: accept a tribro.lims.subject/1 document

7. Text extraction method

8. Gene and panel ranking method

9. Open decisions

© Tribro-Omics · Patient data collection and phenotype platform — technical specification · Version 1.0 · 11 November 2026