Changelog
What's new.
Every improvement to the platform, as it ships.
· kamo-internal
Message patients from the chart, consent first; reminders, confirmations and video visits on the schedule
- Messages tab: contact consent card (texts, e-mail, do not contact — when and how, history), a composer that asks the server before sending (consent, and a minimum-necessary prompt for clinical words the writer must confirm), and what was sent with its delivery status; the timeline refreshes - Day schedule and the chart's appointments: reminder outcome in words, confirmation (by text reply, or marked by the desk), and for video visits Start video visit (members-only join route), Send patient link (text / e-mail / their preference) and Copy patient link, with a warning when the practice's meeting settings would keep the patient out - Walk-in video visits get the same controls on the visit - Practice setup: a Reminders view — on/off, up to three lead times, channel, location, reply-C confirmation, quiet hours, the practice's own words with the allowed fill-ins, and a preview - Recalls: Send a text or e-mail, in the practice's suggested words, logged on the recall when it goes
· MediaService
A medical practice's video visit room, created server to server
POST /api/internal/meet/telehealth (X-Internal-Auth = internal.auth.secret, MeetInternalAuth) creates a meeting on the organization's own provider and live domain, hosted by the clinician and scheduled for the visit's start (so guest-link expiry counts from the visit). Guest access and the lobby are on for the room; the answer adds guestsAllowed=false when the org's Kamo Meet settings keep every guest out, so the practice is warned before a patient is sent a link that cannot admit them. Title is only "Video visit": meeting lists are outside the chart's care-relationship gate.
· VOIPService
A practice's patient chart hears a patient's replies, STOP/START and delivery receipts
PatientSmsRelay posts (X-Internal-Auth, off the carrier's thread, bounded queue, never throws) to SecurityService **************** - every inbound text after dedupe and keyword handling, with the keyword and whether it was filed here — so a reply to a reminder number no member owns is no longer lost to the chart, STOP/START reach the patient's consent ledger, and C confirms the reminded visit; - a carrier receipt for a message with no row here (patient texts are recorded by SecurityService). Nothing changes for members' conversations; a text matching no patient is ignored there.
· kamo-internal
E-prescribing — e-Prescribe dialog, e-Prescriptions worklist, setup and pharmacies
- Chart medications: e-Prescribe opens our prerequisite + safety check, then the network's page in a large frame; closing it imports what was sent. Each prescription shows Sent to <pharmacy> / Transmission failed / Printed — only what was confirmed. The local form is now labelled Prescribe on paper. - e-Prescriptions section: failed transmissions, report rows that match no chart (match or dismiss with a reason), recently sent, and the network's RxLog; tab badge. - Setup → e-Prescribing (Manage EHR Settings): go-live checklist, write-only credentials, connection test, outbound addresses, typed confirmation to go live, people with NPI/DEA, pharmacy directory status. - Patient pharmacies: primary + alternate from the directory, free text kept as fallback. - TEST MODE / not-set-up banners on every e-prescribing surface.
· SecurityService
Patients can be texted and e-mailed from the chart — consent first, reminders, video visits, recall messages
- One consent-gated door **************** for chart messages, reminders, video links, recall messages and confirmation replies: the patient's own consent per channel (TCPA/HIPAA, never presumed, tied to the number), the org do-not-contact / do-not-email lists, quiet hours for anything automated. Sent messages land on the patient's timeline only (never fanned to a CRM lead sharing the number) and in ehr_patient_message with carrier status. - Consent ledger endpoints, /check (consent + minimum-necessary clinical-word prompt), /send, /sent. - Appointment reminders: practice settings (lead times, channel, templates whose placeholders cannot reach the reason, type, clinician or specialty; quiet hours never narrower than 9 pm - 8 am), a singleton-locked job that claims each reminder before sending (once per appointment, lead and start), calendar-day leads on the practice clock across DST, skips recorded with reasons. - Inbound relay from VOIPService (internal): STOP/START into the patient ledger, unfiled replies onto the patient timeline, C confirms the reminded visit; carrier receipts update delivery status. - Video visits: a room per video appointment or walk-in through MediaService's provider abstraction, public patient link vs members-only clinician link, send-link-now; desk confirmation. - Recall: send the recall message through the same door and log the outreach automatically.
· SecurityService
Electronic prescribing through Weno Exchange EZ Integration
- ErxTransport vendor seam (UnconfiguredErxTransport default, WenoErxTransport first network) - Practice eRx account (MANAGE_EHR_SETTINGS): network, TEST/LIVE with recorded confirmation, write-only admin password + account key encrypted with the cluster-wide ehr-erx-enc-key, location id, connection test (WenoManage ValidateEncKey), egress addresses, go-live checklist - Prescriber/staff enrollment: NPI checked against NPPES, DEA format + check digit, schedules, expiry, state licences, Weno login (write-only), status and EPCS flag - Pharmacy directory: nightly delta + weekly full replace under the singleton lock, search by name/ZIP/city/phone, patient primary + alternate NCPDP - e-Prescribe: prerequisites with fix-it targets (incl. minors' height/weight and responsible party), our allergy/duplicate review with an honest not-checked list, encrypted ComposeRx URL, compose-for-signature for staff with Document Clinical Notes - RxLog, e-Prescriptions worklist, NewRx sync import every 15 min + on demand: idempotent, matched by our OrgPatientID, unmatched rows kept for review, PHI-audited - Paper print now carries the NPPES-verified NPI and stamps printed_at
· kamo-shared-library
E-prescribing schema — network account, enrollments, pharmacy directory, transmissions
Five new clinical tables (ehr_erx_settings, ehr_erx_enrollment, ehr_erx_pharmacy, ehr_erx_pharmacy_import, ehr_erx_transmission), structured preferred/alternate pharmacy NCPDP on fhir_patient, and printed_at on fhir_medication_request. Ciphertext columns are @JsonIgnore. DDL already applied to production as the owner role.
· kamo-shared-library
Patient outreach entities — contact consent, sent messages, reminder ledger, reminder settings, video visits
- PatientContactConsent (ehr_patient_contact_consent): append-only SMS / EMAIL / do-not-contact ledger - PatientMessage (ehr_patient_message): texts and e-mails sent to a patient, with carrier status - AppointmentReminder (ehr_appointment_reminder): one row per appointment, lead time and start — the idempotency key - PracticeMessagingSettings (ehr_practice_messaging): reminders, lead times, channel, templates, quiet hours - VideoVisit (ehr_video_visit): the meeting a video appointment or walk-in happens in - Appointment: confirmed_at, confirmed_via - Canonical e-mail template ehr.patient_message (frame only) + PatientMessageEmail variables builder
· kamo-internal
Claims office — 837P files for the clearinghouse portal, acknowledgements, 835 review and posting, claim-billing setup
- /patients Claims section (VIEW_CLAIMS / MANAGE_CLAIMS / POST_INSURANCE_PAYMENTS): ready claims → check (problems grouped by where they are fixed, with the button that goes there) → build file → download → "I uploaded it" or set aside; claim-file history with what the clearinghouse said per claim; drag-and-drop upload of 999 / 277CA / 835 with results in plain language; 835 review (will post / needs a person / patients now owe, provider-level adjustments, balance warnings, technical details expander) and post-once. - Setup → Claim billing (MANAGE_EHR_SETTINGS): billing provider, clearinghouses (test/production), billing clinicians, payer plan types. - Chart Billing tab: a ready claim links to sending it in a file; the CLEARINGHOUSE_FILE channel reads as a clearinghouse file.
· kamo-shared-library
Terminology store can hold loaded releases — load state, picker columns, ingredient links, search words
term_code_system_release gains **************** so only a COMPLETE release answers a lookup. term_concept gains concept_class (RxNorm TTY), short_display, billable (ICD-10-CM headers), status (CVX), dea_schedule (RxNorm DCSA) and search_text. New term_concept_relation (resolved drug->ingredient, drug->dose form) and term_concept_token (one row per searchable word: prefix range scans, since Yugabyte has no trigram/GiST). Reference data lives under TerminologyTenancy.REFERENCE (tenant 0). FhirCodeSystems gains the HCPCS URI. DDL applied by hand to production before this push.
· SecurityService
837P claim files for hand upload, 999/277CA acknowledgements and 835 ERA review and posting
No clearinghouse contract exists, so practices upload X12 files to a portal by hand. This builds that path end to end: - 837P (005010X222A1) for one or many ready claims: 1000A/B, 2000A/2010AA with NPI, tax id and a street (never PO box) address with ZIP+4, 2000B/2010BA/BB, 2000C/2010CA for a dependant, 2300 CLM/HI with CLM01 = our claim number, 2310B rendering, 2400 SV1/DTP/REF*6R. Pure writer pinned by golden files. - Validation before building, in plain language naming where to fix it; a file with a known problem is never built and spends no control number. - ISA13/GS06/ST02 from a per-practice atomic counter (REQUIRES_NEW bean). - Batches stored byte for byte with SHA-256; re-download is the identical file; confirming the upload moves claims to SENT via CLEARINGHOUSE_FILE with the file as the reference; a never-uploaded file is set aside, not deleted. - 999 and 277CA imports mark files and claims accepted/rejected with reasons. - 835 import creates one remittance per payment (trace unique), review shows matched/unmatched/patient responsibility, posting is additive (reversals), matched by REF*6R then code+modifiers, PLB and unmatched money stay unapplied, posted once (conditional UPDATE). - Small X12 tokenizer/writer with separators from the ISA; files never logged; builds and downloads audited fail-closed per claim as PAYMENT exports.
· kamo-shared-library
X12 claim-file entities — billing profile, clearinghouses, billing clinicians, payer plan types, control counter, 837 batches, imports
The tables behind hand-uploaded 837P files and 999/277CA/835 imports. RemittanceAdvice.raw835 is now @JsonIgnore (an 835 names every patient it pays and the remittance worklists serialise the entity); claimForPosting claims an unposted remittance in one conditional UPDATE so an ERA is posted once. DDL applied to production Yugabyte before this push.
· kamo-internal
Coded pickers — RxNorm, ICD-10-CM, CVX, HCPCS
One keyboard-accessible combobox (ARIA 1.2: activedescendant, arrows, Home/End, Enter, Escape, Tab) behind four thin pickers. 250ms debounce, two-character minimum, request-numbered answers so a slow reply never replaces a newer one, skeleton rows while searching, a failed state with retry (never "no matches" after an error), and a calm not-loaded notice that hands back the old typed field. Which lists are loaded is asked once per page load and a failed ask is retried, not cached. - Prescribe: RxNorm product required while RxNorm is loaded; rxcui sent; a listed DEA schedule preselects controlled and only stricter schedules. - Outside medication and allergy: RxNorm optional, free text saved and labelled Not coded (foods, environment and drug classes stay typed). - Problem list, visit diagnoses and order reasons: ICD-10-CM picker with a not-billable warning before saving. - Immunization: CVX picker, inactive vaccines only for historical doses. - Claim builder: ICD-10-CM and HCPCS pickers, CPT accepted as typed and labelled format-only, every code looked up for the date of service and the claim blocked on not-found, non-billable or terminated codes. - Safety review names a DRUG_INTERACTION warning as a dangerous combination.
· kamo-internal
One coherent chart — recalls, desk payments, card images, prescription print, video walk-ins
- Chart tabs in clinic order (Summary, Clinical, Visits, Monitoring, Documents, Insurance, Billing, Appointments, Messages, Records), gated per right in both tiers; billing opens for claims or desk-payment access; the open tab scrolls into view on a phone and sits on a pill, not an underline. - Appointments tab: the patient's recalls — create, log a contact attempt, mark done against a visit, close with a reason (booking right). - Billing tab: desk payments with receipt numbers, totals that leave voids out, reprint and void. - Insurance: the newest card front and back as pictures, with upload preset to the side. - Print a paper prescription from the medication list and the summary, not only from its visit. - A walk-in visit can be a video visit. - Stopping a medication on the summary re-reads it in place instead of reloading the chart.
· SecurityService
Billing can read a patient's desk payments and reprint a receipt
Voiding a desk payment needs MANAGE_CLAIMS or POST_INSURANCE_PAYMENTS, but listing them and reading a receipt needed BOOK_APPOINTMENTS — a biller could void a payment they could not find. The patient list and the receipt now open to the booking right OR either billing right.
· kamo-internal
The front desk can open, register, correct and insure a patient
- Chart page: a front-desk view (Summary, Insurance, Appointments, Messages) for members with a registration/scheduling/billing right and no care relationship, with a plain note that clinical details are the care team's; the clinical summary is only requested for the full chart. - Registration: contact phones, e-mail, address, emergency contacts, language/interpreter, preferred contact, PCP, pharmacy, birth sex, gender identity, validated; MRN assigned when blank; duplicate candidates shown by name, birth date and MRN; stale checks discarded; FHIR gender codes. - Corrections edit every field, clear optional ones, and save in place with a visible Saved. - Search by full name, DOB alone or phone; DOB shown formatted; ages through ICU messages. - Insurance: add/edit/end policies, record manual eligibility checks (no electronic check is implied), check history, prior authorizations; readable relationship and claim status labels. - Messages: add a contact point; numbers/e-mails through PhoneNumber/EmailAddress. - Portal: invite pre-filled with the e-mail on file, server message shown, guardian/proxy grant and revoke. - Break-glass: errors shown in the dialog and the 10-character minimum explained with a count.
· kamo-internal
Visits and notes a doctor's office can run on — documents, printouts
Notes (P0 data loss fixed) - A reopened draft re-reads its text before the editor unlocks; if it cannot be read the editor never opens over it. Signed notes render read-only with their text and addenda/amendments in order. - Autosave rewritten as NoteDraftSaver: revision counter, one save in flight, debounced, flushed on blur / tab hide / unload / unmount, base version sent so a draft changed elsewhere is refused not overwritten; visible Saving… / Saved · 2:41 PM / Not saved + Retry. Signing flushes first and signs only the confirmed version. - Note types (incl. history and physical), built-in SOAP / H&P / nurse visit / telephone / procedure templates plus practice-saved templates, cosigner picker (AgentSelector limited to COSIGN_CLINICAL_NOTES), withdraw as entered in error. Visits - Every note per visit, plus a section for notes outside any visit; walk-in visit with a reason; end visit; close chart shows the server's refusal; closed charts say late entries go in an addendum. Status falls back to readable words. - Signing worklist shows note types in words, the patient and the author. Documents tab: drag-drop upload with category / title / document date, image and PDF preview, download, withdraw with reason. Own proxy for multipart and bytes. Printouts: after-visit summary, paper prescription (controlled = NOT VALID FOR DISPENSING, EPCS warning), chart summary — typeset in a print window with the practice logo and the patient's identifiers repeated on every page.
· kamo-internal
Claims on the chart, honest claim sending, emergency-access review, records office that never reads a failure as empty
- Clinical proxy keeps upstream status codes, Prefer, Content-Location, Retry-After and X-Progress, and streams non-JSON bodies: CCD XML and bulk NDJSON downloads no longer 502, and a running export is a 202 again. - ehrApi: CONFLICT / INVALID kinds carry the server's sentence; generic failures are translated (ehrErrorMessage). - Records office: each list loads and fails on its own; every write shows its failure; break-glass review with appropriate / inappropriate / follow-up and a note (never your own); revoke credential, suspend partner, what we sent to a partner, refusals; readable match evidence; no raw codes or dates. - Outside records reads the clinician partner directory (VIEW_CHART). - Chart Billing tab: claims with lines, closed visits to bill, a claim builder (coverage, ranked diagnoses with pointers, CPT/HCPCS lines, modifiers, units, charges, NPIs, place of service, review step). With no clearinghouse a claim is marked ready to send and then recorded as sent by hand. - Pipeline: uncharged procedures bill on the chart; ready/sent claims; record a payment from a paper EOB and apply it straight away. - Chart summary care-gaps card; QualityPanel stale-response guards; merge buttons name given name, date of birth and record number; interactive ConsoleCards are keyboard operable.
· SecurityService
Visits and notes a practice can run on — safe autosave contract, walk-ins, documents, printouts
Notes - Reads return the current text (original after addenda), author/cosigner names and exact id keys; GET /notes/{id} re-reads one note, audited. - Only the author revises a draft; a stale baseVersionId is refused rather than overwritten; blank notes and blank amendments are refused; signing checks the version the signer saw; no new note on a closed chart; unknown note types and self-cosign refused; cosigner can be set on a draft (PUT /notes/{id}/cosigner). - Entered-in-error endpoint with reason, who and when (author or MANAGE_EHR_SETTINGS). - Practice note templates (list/save/retire). Visits - Starting from an appointment needs Document Clinical Notes as well as Manage Encounters; refuses cancelled/no-show/finished appointments and starts more than 12h early; the booked clinician is always granted, the caller only if clinical staff and the appointment is within 12h (the booked clinician may start a past one); every grant is a fail-closed CONFIGURE audit event; a roomed appointment is never moved back. Joining an open visit grants the joiner on the same terms. - Walk-in visits (POST /walk-in) with a required reason, recorded on the visit and the audit row; refused while a visit is already open. - End visit / close chart need Document Clinical Notes; close refuses with no signed note; refusals are ClinicalRefusalException (400 with the message) so a clinician sees why, not "No such record". Documents (new): /documents **************** Stored through ImageService as PATIENT_CHART imgs (CONFIDENTIAL, content-addressed imaging bucket), read back from MinIO by key; PDF/JPEG/PNG/HEIC/TIFF up to 25 MB; SHA-256 recorded; never deleted. Clinical categories need **************** and a care relationship; cards/ID/consent also open to EDIT_PATIENT_DEMOGRAPHICS (audited basis PANEL). Every read audited. Printouts: GET **************** and /prescriptions/{id}/print.
· kamo-internal
A front desk that runs a real clinic day
- Practice clock: every day, 'today' and time is the practice's own zone (no UTC days, no browser dates); turns over at the practice's midnight - Day schedule and waiting room name the patient (MRN, age), clinician, room and visit type - Date navigation, week view, clinician filter and side-by-side clinician columns; counts follow the filter - Front-desk failures shown inline; legal moves only; rooming + starting the visit is one atomic call with a room picker - Cancel asks patient vs practice; reschedule keeps and links the old visit; waitlist offered the freed slot - Checkout: copay on file, desk payment (no card numbers, no processing), printable receipt, void with reason, book a follow-up - Booking: any visit type books, type/reason/video saved, stale slot answers dropped, search errors shown; waitlist panel - Recalls: create, log outreach (logging only), complete against a visit, close with a reason; server-side counts - Visit prep: patient names, payer names, units left, plain eligibility wording - Practice setup: time zone, default visit length, rooms, blocked time (lunch/vacation), slot length and capacity, readable hours
· SecurityService
Front-desk registration tier, contact details, MRN assignment, search, coverage writes
- **************** members holding CREATE_PATIENTS, EDIT_PATIENT_DEMOGRAPHICS, BOOK_APPOINTMENTS or MANAGE_CLAIMS open a patient's REGISTRATION record without a care relationship (basis PANEL, purpose OPERATIONS/PAYMENT, audited); clinical data stays behind the relationship. Neither tier = the same audited 404. - Patient open returns an explicit record view with access CHART|REGISTRATION and registration details: telecom (fhir_contact_point), address (fhir_address), emergency contacts, preferred language and interpreter, preferred contact method, PCP, pharmacy, birth sex, gender identity. The comms spine is synced from telecom through ContactPointRegistrar (mobile/home -> personal, work, e-mail). - Register/correct take the raw body: sent-empty clears, absent leaves alone; validation for phone, e-mail, ZIP; gender normalised to FHIR lower case on write and read. - Blank MRN assigned from a per-practice atomic counter (MrnAllocator, REQUIRES_NEW); duplicate hand-entered MRN refused. - Search: full names both orders, DOB-only, phone number, prefix fallback keeps DOB. - Duplicate check returns names, DOB and MRN (audited). - New PatientCoverageController: policies CRUD/end, manual eligibility verification (EligibilityCheck MANUAL, benefitsAsOf, stamps the next 30 days of visits), prior authorizations; all audited. - Patient appointments endpoint for the front desk; contact points open to the registration tier. - Portal admin: proxy list and login lookup for guardian grants.
· SecurityService
A patient's care gaps carry the measure's name and when it was computed
The chart's care-gap card shows 'Breast Cancer Screening', never a measure id, and keeps the newest result per measure.
· kamo-shared-library
Note author and cosigner ids as text for browsers
Member ids are int64 beyond JavaScript's exact integer range; the transient authorMemberKey / cosignerMemberKey let the chart compare "is this my note" and pre-select the cosigner without rounding.
· kamo-internal
The clinical tab reads like a chart — allergies, problems, medications, vitals, immunizations, orders and results, each with inline add
- ClinicalWorkspace: names the visit writes attach to (the patient's open encounter, the member's own first; picker when several; says so when none) and passes it to every write - AllergySection: add allergy, 'No known drug allergies', mark reviewed today, inactivate/refute/ entered-in-error with reason; 'No known drug allergies' vs 'Not yet reviewed' shown distinctly - ProblemSection: ICD-10 problem list add/resolve/inactivate/error; this visit's diagnoses (add from list or new code, primary star, remove) - MedicationSection: prescriptions with stop (failure shown, dialog stays open), outside medications add/stop, 'Mark reconciled' - VitalsSection: entry with client range checks mirroring the server, unit toggles, computed BMI; latest tiles, flowsheet, trend, mark a reading in error - ClinicalDetailPanel -> Orders and results: enter result against an order, review/acknowledge (critical needs a note), close/cancel; trend fetch guarded against stale responses - ClinicalComposePanel: quantity to dispense, Rx validation, warnings/override cleared on any Rx change; order expected-by (per-kind default) and ICD-10 diagnoses; vaccine CVX, route, site, dose, expiration, VIS edition, given-elsewhere and decoderd records; local-date default, reset - SafetyQueuesPanel: acknowledge critical results and review awaiting results in the queue; close failures surfaced; timestamps in the member's zone; closure status in words - ChartHeader/ChartSummaryPanel: formatted DOB, translated gender, NKDA never counted as an allergy, no raw codes (statuses, flags, adherence, booleans)
· SecurityService
Chart write paths — allergies/NKDA/review, problems, visit diagnoses, vitals, outside meds, results and review; order loop closure fixes
- ChartEntryController/Service: add allergy (reaction, severity, criticality, onset), record NKDA, mark allergy list reviewed (ClinicalListReview), **************** with reason; ICD-10 problem list add/resolve/inactivate; visit diagnoses (EncounterDiagnosis) add/primary/remove; outside medications add/stop + medication reconciliation; LOINC-coded clinic vitals with hard range validation, H/L/HH/LL flags, computed BMI; vitals flowsheet; mark a reading in error; section reads for the clinical tab; the patient's active encounters - ClinicalResultService: manual result entry against an order (report + analytes) -> RESULTED; review/acknowledge (critical needs a note) -> REVIEWED, optional close; order-level review - ClinicalOrderService: closeOrder sets closureStatus CLOSED/CANCELLED (was left OPEN); default expectedBy per category/priority; ICD-10 reason codes on orders; controlledSubstance flag, quantity, DEA refill rules, days-supply bounds; immunization CVX required, route/site/dose, expired-lot and future-date refusal, VIS edition required for doses given here, historical and refused records; every encounter id checked to be this patient's and still open - allergiesEverReviewed now means a recorded review or an active NKDA; NKDA no longer counted as an allergy (exports keep it via findActiveRecord); duplicate check also covers outside medications
· SecurityService
A front desk that runs a real clinic day
- Practice clock (practice time zone, else the organization's): every day window is the practice's, never UTC; settings + rooms endpoints (/schedule/practice) - Schedule rows name the patient (MRN, DOB), clinician, room and visit type, batch-loaded and audited; day view returns clinician columns and filter-aware counts; week range endpoint - Booking: any visit type books (slot length / practice default), type and reason persisted, patient tenant-checked, overbooking judged by the block covering the time, blocked time refused - Appointment state machine enforced server-side with plain sentences (409) - Reschedule keeps and links the old visit; cancel requires patient vs practice and returns the freed slot for the waitlist - Room + start visit in one transaction (calls **************** - Checkout to fulfilled; desk payments recorded (never processed, card numbers refused), receipts, void with reason under a billing right - Recalls: create, complete against a visit, log outreach (logging only), close with a reason, server counts; waitlist add/remove/candidates - Templates: blocked time with labels, slot length and capacity, practice zone by default - Visit-prep lists with patient and payer names
· kamo-shared-library
Chart list reviews, allergy reaction/severity, status reasons, order diagnoses, result review note
- ClinicalListReview (fhir_chart_list_review): a real reviewed-at record for the allergy and medication lists, so 'reviewed' stops meaning 'at least one row exists' - AllergyIntolerance: reaction_text, reaction_severity, status_reason; findActiveForChecking now excludes NKDA assertions (and refuted rows); findActiveNoKnownAllergy / findActiveRecord - Condition.status_reason, Observation.status_reason, ServiceRequest.reason_codes, DiagnosticReport.review_note - EncounterDiagnosisRepository; **************** (vitals flowsheet)
· kamo-shared-library
Schedule entities for the practice's clock, rooms, desk payments and recall outreach
- PracticeSettings (ehr_practice_settings): the practice's time zone and default visit length - PracticeRoom (ehr_practice_room): rooms a patient is put in; retired, never deleted - PatientPayment (ehr_patient_payment): desk payments recorded (never processed), voided with a reason - RecallOutreach (ehr_recall_outreach): logged contact attempts against a recall - Appointment: room_id, rescheduled_from_id / rescheduled_to_id, checked_out_by_member_id - ScheduleBlock: label for blocked time (lunch, meeting, vacation) - PatientRecallRepository: countDue / countOverdue; WaitlistEntryRepository: findCandidatesAnyType (a null UUID in ':x IS NULL' reaches Postgres untyped) - PhiResourceType: PATIENT_RECALL, PATIENT_PAYMENT appended
· kamo-shared-library
Front-desk registration record — contact details, emergency contacts, MRN counter, coverage write fields
Patient gains preferred contact method, primary care member and preferred pharmacy; emergency contacts are FHIR Patient.contact (fhir_patient_contact, retired not deleted); telecom and address use the existing fhir_contact_point / fhir_address tables (new repositories); PatientCommunicationRepository for the preferred language. A per-practice ehr_mrn_counter row allocates MRNs in one atomic upsert. Patient search gains given-name, birth-date-only, prefix-with-birth-date and by-id queries. PriorAuthorization gains a service description and EligibilityCheck a verifier's note. DDL applied to production before this push.
· kamo-shared-library
Chart documents, practice note templates, note read-side text and withdrawal record
- PatientDocument (ehr_patient_document): category, title, document date, content type, size, SHA-256, imaging Img id + storage key, uploader, entered-in-error with who/when/why. Never deleted. - ClinicalNoteTemplate (ehr_note_template): a practice's own note templates. - ClinicalNote: entered_in_error_at/_by/_reason columns; transient current body, version kind, SI flag, author/cosigner/patient names for reads. - ClinicalNoteVersion: transient author name. DDL applied to production by hand (additive).

Your universe is waiting.
Start free in minutes. Add products whenever you are ready — no migration, no new logins.
Free forever — no credit card required