Settings
Destination & inbound DICOM SCP listener — non-device software (FD&C Act §520(o)(1)(D))
Destination
The de-identified DICOM store-and-forward target. After a study is de-identified it is C-STORE’d
here. Test connection probes the currently-saved downstream (save edits first to test new values).
Retry a failed forward this many times (incl. the first) with exponential backoff before failing the C-STORE upstream.
1 = fire-once (no retry).
Encrypt the De-ID → Research VNA C-STORE with TLS 1.2/1.3 (the egress leg to the research archive).
Turn off only for a self-signed lab peer.
—
Outbound Spool
Every de-identified object is sealed into a durable outbound spool and forwarded asynchronously
(off the C-STORE association), so a downstream outage or a restart never loses an instance. These knobs tune
the drain loop; the per-attempt retry schedule comes from the Destination retry settings above. A
forward whose retry budget is exhausted moves to the dead-letter queue.
/api/health pipeline.ok flips false when the spool backlog exceeds this (a stuck-downstream signal for the pool / SynthGateway).Storage Location
Where the PHI-bearing, SYNTHIMG-sealed queues live on disk. Leave blank to use the default under
the data directory (
outbound / quarantine / deadletter). Set an
absolute path to move a store onto a dedicated data volume (off the OS drive). Restart-gated;
existing files are not auto-migrated — move them while the service is stopped.
Auto-Refresh & Bind Address
Live-poll cadence for the Dashboard + Outbound Queues pages (
0 = off, read-live). The
Admin UI bind host + DICOM external address are restart-gated: bind host controls which
NIC the web UI listens on (0.0.0.0 = all); the DICOM external address is the host peers should
use to reach this node (blank = auto-detect).
In-App Web TLS (HTTPS)
Terminate HTTPS at the app for the admin UI/API when deploying on-prem without a reverse
proxy (the hosted demo terminates TLS at Cloudflare, so this stays off there). All fields are
restart-gated — the listener binds at startup. Provide a PEM certificate + key, or a
PFX/P12 bundle + password. If TLS is enabled but the certificate cannot load, the node logs the
error and falls back to plain HTTP rather than failing to start.
TLS Certificate
Need a certificate for the In-App Web TLS or DICOM-TLS paths above? Generate a self-signed one for
this host with the standalone
Certificate Builder: it writes a PEM
.crt / .key and a PKCS#12 .pfx, plus the SHA-256 fingerprint.
Point the web-TLS / DICOM-TLS certificate path at the generated .pfx (or the
.crt + .key), or drop in your own CA-issued certificate. The private key
is written on the server and never leaves it.
Pseudonym Style
How identity tags are replaced. Hash (default) writes a deterministic one-way token
(
PSN-…). Sequential instead numbers each unique patient
Patient1, Patient2… (Name + MRN) and each study
Study1, Study2… — the same source patient always gets the
same number. The real identifiers are never kept; only an irreversible, encrypted number
map is stored on this host. Sequential mode requires the engine to run single-instance.
Default is hash (existing behavior). Switching to sequential takes effect on the next received instance — no restart.
Per-study matches “10 patients of Clinical Study X”. Global is a longitudinal cross-study key — use only under a data-use agreement.
Tokens
{prefix} and {n}. Must contain {n}. The rendered value must fit 64 chars (PatientName/ID).Study labels land on StudyID (VR SH, max 16 chars). StudyInstanceUID always stays a valid remapped UID.
Tokens
{prefix} and {m}. Must contain {m}. The rendered value must fit 16 chars.
Apply the same Patient<N> to OtherPatientIDs (0010,1000).
Clinical Cohort Export — Coded-Concept Harvest
Optional licensed add-on (
deid_cohort_export). When enabled, on each received object —
before de-identifying it — the engine harvests standards-coded clinical concepts
(SR code triples, BodyPartExamined / anatomic-region / procedure codes) + coarse demographics (sex; age
reduced to a decade band) and POSTs a PHI-free batch — keyed only by the same one-way
pseudonyms the forwarded image carries — to the VNA Research cohort store. No free-text, no direct
identifiers, no pixels. Fail-open: a harvest/ingest error never affects the de-id forward.
Enable the coded-concept harvest. Requires the licensed
add-on AND the §164.514(b)(1) authorization above — the server refuses to enable it otherwise.
Read live; takes effect on the next received instance (no restart).
The VNA Research PHI-free concept-ingest endpoint. HTTPS strongly recommended.
Bearer token for the ingest API. Write-only — never displayed; leave blank to keep the current value.
Internal Impression-Text Retention (Tier 2A)
An internal-search-only extension of the cohort program. When enabled, the engine retains the
de-identified Impression narrative of each report (double-scrubbed here, sealed + belt-scrubbed
at the research host) so a cohort author can search the text internally to assemble a study
cohort. The text never leaves the research host — a cohort export delivers re-pseudonymized
study images only, never text. Higher risk than the coded lane, so it is OFF by default behind a
DISTINCT §164.514(b)(1) Expert-Determination attestation.
Retain de-identified Impression text for internal cohort
search. Requires the harvest lane, the licensed add-on, and the attestation above.
Bearer token for the text-ingest API. Write-only — never displayed; leave blank to keep the current value (falls back to the harvest token if empty).
Retain only these report sections (the Impression heading). Empty → falls back to the NLP section scope; if both empty, ALL sections are retained (discouraged — more text at rest).
Concept Vocabulary — Open-Vocabulary NLP
The NLP lane recognizes controlled-vocabulary concepts in report free text. Load a licensed
SNOMED / RadLex / LOINC pack on the host (set
term_pack_path) to
recognize any concept it names. This card shows the effective vocabulary and lets you test a
sentence against it. Vocabulary changes are restart-gated. Use synthetic text — the test
never stores or echoes your input, only the matched codes.
Loading vocabulary status…
De-Identification Policy
Beyond the named HIPAA Safe-Harbor identifiers, private / proprietary (odd-group) DICOM
elements can carry vendor PHI that the named tag policy and the content gate do not inspect.
On (recommended default) = wipe ALL private elements
(creators + data + private sequences) at every level. Off = KEEP private tags for research value
and accept the PHI risk — your own §164.514(b) determination.
Off (default). On = recognize a de-identified object this
engine already produced (a report re-sent from the on-prem Repository) by its keyed XyDromatics
DeID marker and pass it through WITHOUT re-de-identifying — preserving the pseudonyms /
UIDs and the report↔image link — while re-harvesting under the current vocabulary. Fail-closed:
pass-through requires the verified marker and a clean residual-identifier scan; anything else
is de-identified normally, so identified PHI is never forwarded un-de-identified.
Every date for a patient shifts by ONE deterministic offset within
±this many days (DICOM 113107) — exam intervals + chronological order are preserved exactly while the
absolute date is obscured. The SAME window aligns a study with its HL7 report. Default 365.
HL7 v2 ORU Ingestion
Optional MLLP listener that de-identifies inbound ORU^R01 result messages (from an EMR / reporting
system) — reusing the SAME per-patient pseudonym + interval-preserving date shift as the DICOM path, so a
report lands on its de-identified study's timeline — then forwards them to a downstream HL7 endpoint.
Off by default. Enable / port changes apply on restart.
MLLP-over-TLS (secure HL7) — for a cross-network sender. When
on, each MLLP connection is wrapped in TLS 1.2/1.3 before the first frame; mutual TLS pins the peer's
client-cert thumbprint. Off = plain MLLP (on-prem). Restart-gated.
Write-only — never displayed; blank keeps the current value.
DICOMweb STOW-RS Ingest (mTLS)
Optional secure cross-network raw-PHI ingress for the Synthology-hosted / cloud deployment
(customers STOW studies to
POST /dicom-web/studies). Fail-closed: a caller must
present a pinned client certificate (mTLS) and/or a valid ingest token, else 401. Received objects run
the SAME de-identify + harvest + forward pipeline as C-STORE. Off by default; on-prem deployments use
plain C-STORE and leave this off.
Cannot be enabled without a credential below (fail-closed).
Each sending source's client-certificate SHA-256 thumbprint. Non-secret.
PEM pass-through header when a reverse proxy (e.g. Cloudflare Access) terminates mTLS.
Optional Bearer alternative to mTLS. Write-only — never displayed; blank keeps the current value.
Content Gate
The engine de-identifies DICOM tags. It cannot clean PHI hidden in an encapsulated PDF
blob, an SR free-text narrative, or burned-in pixels. Rather than forward those
partially cleaned, the gate quarantines them (default) for review. Per category:
Quarantine (fail-safe), Forward (accept the residual risk), or Reject (fail the
C-STORE). Quarantined objects are sealed on this host — review them on the
Quarantine page.
When OFF, all content forwards after tag de-id (not recommended).
Clean = for a PDF, rasterize each page, OCR-redact the
detected text (using the pixel-OCR mode + fill below), then rebuild an image-only PDF —
which drops the selectable text layer and all PDF metadata (author/title/producer). For
text/plain, scrub with the free-text scrubber. Fails closed to quarantine for other MIME types
(XML/CDA/RTF) or if a PDF yields no detectable text.
Clean = scrub the SR free-text (TextValue) + pseudonymize person-name
content items + shift dates, then forward — instead of quarantining. Fails closed to quarantine if
a report cannot be cleaned.
Clean = render the image, run local Tesseract OCR, black out the
detected text word-boxes, then forward. Fails closed to quarantine if the image cannot be OCR-cleaned.
Applies when the burned-in or encapsulated-PDF action is Clean. "Redact all"
obscures every word Tesseract finds; "PHI-match" keeps text that isn't a known identifier or a
Safe-Harbor pattern.
How a detected text box is obscured. Every option replaces the pixels
(irreversible) — there is deliberately no blur / pixelate, because blurred or averaged text
can be recovered.
0 = keep until an operator releases or purges (no auto-delete of PHI).
Inbound DICOM SCP Listener
The DICOM C-STORE SCP that receives studies for de-identification. Changes to these
fields require a service restart to take effect (the listener binds at startup).
When on, the engine accepts inbound DICOM associations on the listen port.
TCP 104 is the DICOM well-known port but is often privileged. The De-Identification Engine defaults to 11128.
fo-dicom max PDU.
262144 (256 KB) is the fleet default; 0 = stock 16 KB. The peer clamps during association negotiation.Per-listener cap on concurrent inbound associations.
0 = unlimited (a DoS surface — not recommended outside a lab).
Accept C-STORE only from the calling-AE titles listed below (e.g. the upstream Router). When off, the listener is open-receive.
One calling-AE title per line. Only enforced when Restrict Sources is on.
DICOM-TLS (secure DIMSE) — encrypt the whole C-STORE
association for a source pushing studies across an untrusted network. When on, the listener presents the
server cert (blank cert path reuses the in-app web TLS cert); mutual TLS additionally pins the peer's
client-cert thumbprint. Off = plain DIMSE (on-prem). Restart-gated.
Write-only — never displayed; blank keeps the current value.
HIPAA Audit Retention
The tamper-evident HIPAA audit log is a count-capped ring; a daily pruner
archives before it evicts and never prunes below the 6-year retention floor.
Ring capacity. Oldest entries are archived, then evicted, once the count exceeds this.
HIPAA 6-year floor =
2192 days. The pruner never evicts entries younger than this; values below the floor are clamped up server-side.Analytics & Operational Window
The engine keeps a short local window of PHI-free de-id activity events. Aged events are
archived to the analytics lake (which SynthInSight reads) before they are pruned locally.
This is orthogonal to the HIPAA audit floor above.
Hot-window size for local event storage.
0 or less = keep forever (never prune).
On = archive-then-prune (aged events relocated to the lake, then deleted). Off = retain locally, never hard-delete.
The label this node reports as SynthInSight’s “Application” selector. Empty = hostname.
Authentication & Session
Local admin-console sign-in (PBKDF2 users + RBAC). The session and lockout limits below apply to
the admin GUI. Changing Enabled takes effect on the next service restart.
When on, the admin console requires sign-in. Leave on for any networked deployment.
Logging
Serilog minimum level and output directory for the console + daily-rolling file sinks the shared
Logs viewer reads.
Empty =
<dataDir>/logs. Relative paths resolve under the data dir.SynthGateway Support Agent — Identity
Sets the per-host identity the in-process SupportAgent uses to connect to SynthGateway.
Stored in
…. Changes take effect within one heartbeat
(about a minute); the agent re-reads identity.json each supervisor loop — no restart.
Leave the Gateway URL blank to keep the agent dormant.
—
SynthGateway Support Agent — Remote Support Consent
Controls whether Synthology support engineers may open an engineer-initiated remote
support session to this system — your consent control, in addition to the license
and your signed authorization. Withdrawn blocks new sessions and ends any
session in progress within one heartbeat. No restart. Stored in
….
—
Display Timezone
The IANA timezone every timestamp in this console renders in (via the shared
SynthTz.fmtTs() formatter). Leave blank to follow the host’s local timezone.
Import / Export Configuration
Export this engine’s configuration or import a saved one. Import replaces the full
config and requires the confirm phrase
REPLACE FULL CONFIG. Editing requires
manage_config.
Notifications & Disk Monitoring
Email notifications (SMTP alerts for operational events) and per-volume free-space
monitoring. Watch disk space and alert below a threshold; the same signal feeds
/api/health (SynthIQ pool health) and the SynthGateway agent heartbeat.
Disk Watermark — Keep-Alive Purging
When the data volume crosses the watermark, reclaim disk by deleting oldest-first from a
code-enforced whitelist of PHI-free transient dirs. The PHI queues (outbound / dead-letter /
quarantine), the HIPAA audit archive, the analytics op-window, and key material can never be
space-purged — even if named below. Leave the auto-purge list empty for telemetry only
(the default); usage is still surfaced on the Monitor + SynthGateway.
On = surface usage% + band + the exhausted alarm on /api/health + Monitor + SynthGateway.
Used-space % that flags
critical and (when armed) triggers a purge. Clamped 50–95.Comma-separated dirs to reclaim, oldest-first. Only
logs and .config-backup are ever purgeable; any other name (incl. PHI dirs) is ignored.