Keep up with latest product news

Branch: main
This release resolves all issues identified during Open Exchange review and subsequent clean-environment validation. It includes fixes for the FHIR installation race condition, restoration of the runtime installation approach, and ObjectScript syntax compatibility improvements for non-interactive execution.
The original installation process executed:
HS.Util.Installer.Foundation.Install("FHIRSERVER")
followed immediately by:
HS.FHIRServer.Installer.InstallInstance(...)
Although Foundation.Install() starts the namespace/database creation process, it completes asynchronously through background jobs. On clean environments, the FHIR installer could execute before the FHIRSERVER namespace became available.
Fix:
Added an explicit polling loop to wait until the namespace exists before proceeding:
for {
quit:##class(%SYS.Namespace).Exists("FHIRSERVER")
hang 2
}
This guarantees that InstallInstance() only runs after the FHIR infrastructure is fully initialized.
An initial attempt to solve the race condition moved FHIR installation to Docker image build time.
During validation it was discovered that IRIS registers parts of the FHIR web application using the hostname present during image creation (buildkitsandbox). When containers later started with a different hostname, the /fhir/r4 endpoint became inaccessible and returned HTTP 404 responses.
Resolution:
The project returned to the runtime installation model while retaining the namespace readiness polling logic.
Changes:
docker-compose.yml
start.sh
README.md
config/iris/Dockerfile
Validation uncovered <SYNTAX> errors in:
config/iris/setup_fhir_post_install.sh
when ObjectScript was executed through:
iris session IRIS << 'EOF'
The original implementation used multi-line block syntax:
if condition {
...
} else {
...
}
This syntax is not reliably supported when commands are executed through stdin piping.
Fix:
Replaced block-style conditionals with equivalent single-line statements:
set fhirAppExists = ##class(Security.Applications).Exists("/fhir")
if 'fhirAppExists do ##class(Security.Applications).Create("/fhir", .props)
if 'fhirAppExists write "CSP application /fhir created",!
if fhirAppExists do ##class(Security.Applications).Modify("/fhir", .props)
if fhirAppExists write "CSP application /fhir already exists — updated.",!
This ensures compatibility across automated installation environments.
config/iris/install_fhir.txtconfig/iris/setup_fhir_post_install.shdocker-compose.ymlstart.shREADME.mdconfig/iris/DockerfileValidated from a completely clean environment:
docker-compose down -v
./start.sh
Results:
<SYNTAX> errors during installationGET /fhir/r4/metadata returns HTTP 200http://localhost:3000No manual migration steps are required.
For existing installations:
docker-compose down
docker-compose up -d
For a completely clean installation:
docker-compose down -v
./start.sh



Commit: 9899826
Branch: main
This release addresses all issues reported during the InterSystems Programming Contest reviewer evaluation.
template: map does not contain key "Health"Problem: docker-compose.yml had healthcheck: disable: true, so .State.Health never existed at runtime. The start.sh wait loop used docker inspect --format='{{.State.Health.Status}}', which crashed with a template parse error on every iteration — causing 60 failed attempts before timeout.
Fix:
docker-compose.yml: Added a real healthcheck (iris status IRIS 2>&1 | grep -qi running, interval: 10s, retries: 30, start_period: 90s).start.sh: Replaced the broken template with a conditional Go template {{if .State.Health}}{{.State.Health.Status}}{{else}}no-healthcheck{{end}} that never crashes, plus an HTTP fallback probe against port 52773 — so the loop exits as soon as IRIS is reachable regardless of healthcheck state.Problem: start.sh ran iris session IRIS -U HSSYS — the HSSYS namespace does not exist in IRIS for Health Community Edition. The FHIR installation command silently failed and was never executed.
Additionally, the success check used grep "EndpointExists:1" — a string that never appears in the installation output — so even if the install ran, the script would always report failure.
Fix:
start.sh: Changed namespace flag to -U %SYS (the correct system namespace where FHIR installer classes reside).start.sh: Changed success detection to grep "FHIR Server Installation Complete" (the actual string printed by install_fhir.txt), with an HTTP double-check (curl /fhir/r4/metadata) as a secondary verification.install_fhir.txt: Replaced ObjectScript block-style if { } else { } with single-line syntax (if condition do ...) — block style causes <SYNTAX> errors when the script is fed via stdin pipe.start.sh: Added idempotency check — if /fhir/r4/metadata already returns HTTP 200, the entire installation is skipped without re-running.Problem: start.sh contained an interactive read -r LOAD_DATA prompt asking whether to load sample data. In non-interactive environments (CI, Docker exec, automated runs) this prompt received no input and execution was blocked or skipped, resulting in an empty FHIR database. The AI agent had no patient records to reason about.
Fix:
start.sh: Removed the interactive prompt entirely. Sample data loading is now fully automatic — 8 synthetic patients (3 HIGH, 3 MODERATE, 2 LOW risk) are always created on first start.smart-discharge-backend container with FHIR_BASE_URL=http://iris:52773/fhir/r4, ensuring correct Docker network resolution.setup_fhir_post_install.sh)Problem: Security.Users.Open("SuperUser") is not a valid method — the correct API is Security.Users.%OpenId("SuperUser"). Block-style if $IsObject(user) { ... } and try { ... } catch { ... } statements cause <SYNTAX> errors when ObjectScript is executed line-by-line via stdin pipe.
The RestartHTTPd() call referenced %SYS.HSDFHIR.Utils, a class absent in IRIS for Health Community Edition, causing a <CLASS DOES NOT EXIST> error.
Fix:
Security.Users.Open() → Security.Users.%OpenId().RestartHTTPd() call — confirmed unnecessary, the FHIR endpoint is accessible without it.README.md)docker inspect --format='{{.State.Health.Status}}' with curl -s -o /dev/null -w "%{http_code}" http://localhost:52773/csp/sys/UtilHome.csp.-U %SYS is required and explained why./fhir/r4/metadata is accessible before this step.docker cp path from /app/ to /tmp/; removed the unnecessary pip install requests line.iris session IRIS commands updated to include -U %SYS.docker inspect command with the safe conditional template + HTTP probe.| File | Change |
|---|---|
docker-compose.yml |
Real healthcheck replacing disable: true |
start.sh |
Fixed wait loop, FHIR install namespace, success detection, automatic data loading; removed ~80 lines of orphaned code |
config/iris/install_fhir.txt |
Single-line ObjectScript for piped-mode compatibility |
config/iris/setup_fhir_post_install.sh |
Correct %OpenId(), single-line syntax, removed unavailable class call |
README.md |
All commands corrected to match fixed code; troubleshooting updated |
Initial submission to InterSystems Programming Contest: AI Agents for FHIR 2026 (Task #9 — Hospital Readmission Risk Workbench).
Features:
for contest:
Patient-facing lab explanation engine with deterministic output and grounded educational snippets. It includes a retrieval contract with pluggable vector support, a deterministic local fallback, panel-based FHIR observation retrieval, lab normalization, trend analysis, and a rule-based narrative composer for patient-friendly lab summaries. It also includes synthetic and live demos, quality checks, and generated demo artifacts for A1c, lipids, and CMP panels.

Medication Safety and Interaction Assistant is an AI-enabled, explainable FHIR application built on InterSystems IRIS AI Hub.
It analyzes patient context from standard FHIR resources (including MedicationRequest, MedicationStatement, AllergyIntolerance, Condition, and Observation) and produces clinically useful safety guidance in two tiers: strict warnings first, then conservative warnings with additional context.
Key capabilities include:
Drug interaction and duplicate therapy detection
Allergy and contraindication checks
Risk-category findings (including black-box and population-relevant risks)
Lab-threshold safety checks
QT-risk analysis, including amplification when potassium is low
Anticholinergic burden scoring
Explainable reasoning for every finding (clear “why this was flagged”)
Structured recommended actions with urgency metadata (actionType, priority, slaHours, sourceRisk)
The project includes reproducible synthetic test profiles and consolidated per-patient case artifacts demonstrating input resources and assistant output, enabling transparent validation and easy review for contest judging.
Initial ReleaseSmart Patient Summary Generator is a clinician-focused application that converts fragmented FHIR R4 patient data into clear, role-aware narrative summaries for rapid clinical decision support.
It ingests key clinical resources (Patient, Observation, Condition, MedicationRequest, AllergyIntolerance, Encounter, and CarePlan) and produces concise summaries tailored to different audiences such as ED physicians, care managers, patients, and caregivers. The output emphasizes actionable clinical content rather than technical metadata, helping users quickly identify what matters now.
Core capabilities include:
Role-based narrative generation (ED, care manager, patient, caregiver views).
Deterministic extraction of current issues from structured data.
Detection and highlighting of unusual/abnormal observations (for example low oxygen saturation) using interpretation flags, reference ranges, and rule-based thresholds.
Safety-aware context such as allergy constraints and recent acute utilization.
Clean, shareable narrative output written directly to file (without terminal/session noise).
The project is designed for explainable, practical use in healthcare workflows, where clarity, traceability to FHIR evidence, and immediate clinical relevance are essential.


4.0.31


What's new in v1.0.4
Documentation-only release. No code changes; same 28 tools and 509/509 regression sweep as v1.0.3.
README improvements
UI-label corrections — README operator-facing prose now references the Agent Configuration form's actual labels instead of internal Config.Agent property names:
EnvVarName -> Environment Variable Name
CredentialName -> Ens.Config.Credentials Entry
EndpointUrl -> Endpoint URL (OpenAI-Compatible only)
Enabled -> Enable this agent
SystemPromptOverride -> System Prompt Override (optional)
new: Credential Source radio with Environment Variable / Ens.Config.Credentials options
Bookmark URLs section now lists the Agent Configuration form alongside the MessageViewer and VisualTrace entries (both HealthShare and plain IRIS URL variants).
Low-level SQL verification probes still use the internal table/column names; those are intentionally diagnostic, not form-driven.
Upgrade from v1.0.3
No schema changes. Run zpm "update iris-session-agent" or zpm "load /path/to/iris-session-agent" to refresh the module metadata. No operator configuration changes required.
What's new in v1.0.3
Epic 13: Tool Catalog Expansion — 6 new tools bringing the total to 28 (17 Inspection + 11 Search), with 509/509 regression sweep.
New tools
Session Inspection Agent (4 new tools):
get_rule_source — Read the raw RuleDefinition XML from a compiled Ensemble rule class
get_class_source — Read the full ObjectScript source of any compiled class
get_queue_state — Return the depth and oldest-message age of a named Ensemble queue
get_production_config_item — Read adapter class, pool size, enabled flag, and configured settings of any named production config item
Message Search Agent (1 new tool, plus 1 moved from Inspection):
find_sessions_using_class — Find sessions referencing a given class name in SourceConfigName, TargetConfigName, or MessageBodyClassName (4-layer SQL injection defense; match_field filter; strip-last-segment fallback)
Other changes
README: full tool catalog (all 28 tools described), sample URLs for MessageViewer / VisualTrace / AgentConfig pages, corrected tool counts throughout
FR59 cross-matrix gate updated: 28 tools x 4 providers = 112 combinations
Regression sweep: 509/509/0
Upgrade from v1.0.2
No schema changes. Run zpm "update iris-session-agent" or zpm "load /path/to/iris-session-agent" in your target namespace. No operator configuration changes required.




