DICOM Conformance Statement — DDSALLY
| Product | DDSALLY secure digital workspace for dental offices (ddsally.com) |
| Components covered | DDSALLY API (study ingest, storage, export), DDSALLY Agent for Windows (the uploader installed on an acquisition PC), AllyVue Cloud and AllyVue Web (browser viewers) |
| Manufacturer | DDSALLY LLC, 1601 N. Sepulveda Blvd., #398, Manhattan Beach, CA 90266 |
| Document version | 2.2, 2026-11-01 |
| DICOM standard | PS3 2025 editions as referenced; ANSI/ADA Standard No. 1114 noted where relevant |
| Contact | support@ddsally.com |
This statement follows the structure of DICOM PS3.2 so it can be compared with other vendors' statements, and is written so a dental office or an integrating vendor can tell in a few minutes what DDSALLY will accept, what it keeps, and what it gives back. Everything in it describes the code as deployed; where DDSALLY falls short of a capability a reader might expect, the gap is stated rather than left out (section 7).
AllyVue is not FDA-cleared. AllyVue Cloud and AllyVue Web are available to providers for viewing; the full AllyVue is in use by selected testers. Nothing in this statement is a claim of diagnostic performance.
1. Overview
DDSALLY is a web service plus an optional agent installed in the office. The web service implements no classic DIMSE network services (no C-STORE, C-FIND, C-MOVE); it receives DICOM instances over HTTPS using the DICOMweb STOW-RS service, by file upload from a browser, and from the DDSALLY Agent, which sends STOW-RS on the office's behalf. The DDSALLY Agent for Windows is a Storage SCP and Verification SCP (section 3.7): a modality or imaging program can send a study to it by C-STORE as if to a PACS, and the agent forwards the instances unchanged over STOW-RS. The agent also watches an export folder, which remains the default. It stores the received files unchanged, displays them in a browser, answers QIDO-RS searches and WADO-RS retrieves over the same HTTPS API, and can export the original files as DICOM media and a Structured Report of the measurements made in the viewer.
Table 1-1. Network services
| Service | SOP Class / resource | User of service (SCU / client) | Provider of service (SCP / server) |
|---|---|---|---|
| STOW-RS (Store over the web) | POST /dicomweb/studies[/{StudyInstanceUID}] | DDSALLY Agent for Windows | DDSALLY API |
| QIDO-RS (Search) | GET /dicomweb/studies[/{uid}/series[/{uid}/instances]] | No | DDSALLY API |
| WADO-RS (Retrieve, Retrieve Metadata) | GET /dicomweb/studies/{uid}[/series/{uid}[/instances/{uid}]][/metadata] | No | DDSALLY API |
| WADO-RS frames, rendered, thumbnail, bulkdata | GET …/instances/{uid}/frames/{list}, …/rendered, …/thumbnail, …/bulkdata/7FE00010 | No | DDSALLY API |
| WADO-URI | — | No | No |
| Verification (C-ECHO) | 1.2.840.10008.1.1 | No | DDSALLY Agent for Windows |
| Storage (C-STORE), all Storage SOP Classes | see 3.7 | No | DDSALLY Agent for Windows |
| Query/Retrieve by DIMSE (C-FIND, C-MOVE, C-GET) | — | No | No |
Table 1-2. Objects created by DDSALLY
| IOD | SOP Class UID | Created as |
|---|---|---|
| Comprehensive SR (Measurement Report, TID 1500) | 1.2.840.10008.5.1.4.1.1.88.33 | Export of AllyVue measurements, traced mandibular canals and planned implants, on request |
| Segmentation (binary) | 1.2.840.10008.5.1.4.1.1.66.4 | Export of an AllyVue volumetry region, on request (section 3.8) |
| CT Image (derived, reduced resolution) | as the source | The reduced-resolution display copy for memory-limited devices, with its own UIDs (section 3.9); not offered for exchange |
| Enhanced CT Image | 1.2.840.10008.5.1.4.1.1.2.1 | Single-file export of the study's volume series (section 3.10), on request |
| CT Image (derived, cropped) | 1.2.840.10008.5.1.4.1.1.2 | A volume of interest written as a new study, one classic CT instance per slice, pixel values unchanged (section 3.11), on request |
| Any stored IOD (de-identified copy) | as the source | A de-identified copy of a study under PS3.15 Annex E with stated options; new UIDs; pixel data unchanged and not examined (section 3.12), on request |
| Grayscale Softcopy Presentation State | 1.2.840.10008.5.1.4.1.1.11.1 | The clinician's window and the measurements that lie on acquired slices, drawn in those slices' pixel space (section 3.13), on request |
| Encapsulated PDF | 1.2.840.10008.5.1.4.1.1.104.1 | A signed report's PDF inside the referral's study (section 3.14), on request |
2. Implementation model
2.1 Application data flow
Acquisition PC DDSALLY API (AWS) Browser
┌──────────────────┐ STOW-RS ┌──────────────────────┐ HTTPS ┌────────────────┐
│ Imaging software │ (HTTPS, │ Ingest AE │ (JSON, │ AllyVue Cloud │
│ exports DICOM │ ingest │ parse header only │ signed │ (server MPR) │
│ ↓ │ key) │ store bytes as-is │ URLs) │ AllyVue Web │
│ DDSALLY Agent │ ──────────▶ │ group by Study UID │ ◀────────▶ │ (WebGL 2) │
└──────────────────┘ │ Storage (S3, KMS) │ │ Download of │
│ SR Creator AE │ │ original files│
Browser upload ─────────────────▶ │ (TID 1500 on demand) │ └────────────────┘
(presigned S3 PUT, then finalize) └──────────────────────┘
Three logical Application Entities (AEs) exist, all inside one service:
| AE | Role | Description |
|---|---|---|
| Query/Retrieve AE | QIDO-RS and WADO-RS provider | Answers searches and serves instances from an index of everything DDSALLY holds, scoped to what the signed-in user may see in the app |
| Ingest AE | STOW-RS provider; file receiver | Accepts instances, reads a small set of header attributes, stores the file byte-for-byte, groups instances into an Incoming Study by Study Instance UID |
| Viewer AE | Consumer | Decodes stored instances for display in AllyVue Cloud (server-side rendering) and AllyVue Web (in-browser rendering). Builds derived display caches; never alters the stored original |
| SR Creator AE | Creator | Writes a Comprehensive SR of the measurements a user made in AllyVue |
2.2 Functional definition of each AE
Ingest AE. On a STOW-RS request it splits the multipart/related body, parses each application/dicom part up to but not including Pixel Data, requires Study Instance UID and SOP Instance UID, and writes the part's exact bytes to encrypted object storage under a key derived from the SOP Instance UID. A resent instance overwrites itself, which is how duplicates are collapsed. The response is a DICOM JSON dataset per PS3.18 10.5 listing referenced and failed instances. On a browser upload the same header extraction runs after the upload completes; a file is treated as DICOM if its media type is application/dicom, its extension is .dcm/.dicom, or bytes 128–131 are DICM (so renamed files such as Carestream .rvg are recognised). A ZIP archive is probed for DICOM entries and treated as a series.
Viewer AE. Decodes pixel data from the stored originals, applies Rescale Slope/Intercept, and renders. For large volumes it writes two derived display caches: a gzipped signed 16-bit volume with JSON geometry (not DICOM), and a reduced-resolution DICOM display copy for memory-limited devices (section 3.9). Both are regenerated from the original and are never offered as exchange objects.
Agent Storage AE. (In the DDSALLY Agent, not the web service.) When the office turns the DICOM receiver on, the agent listens on a configurable port under a configurable AE title, accepts associations proposing any Storage SOP Class in any transfer syntax, and writes each received instance to disk exactly as received, with the negotiated File Meta Information, as <SOPInstanceUID>.dcm in a folder per Study Instance UID. A study is considered complete when no instance has arrived for a configurable quiet period (default 30 s) and no association is still storing into it; it is then sent to the Ingest AE over STOW-RS by the same path as an exported folder. A resent SOP Instance replaces the file of the same name.
SR Creator AE. On request, builds a Comprehensive SR conforming to TID 1500 Measurement Report with one TID 1501 group per numeric measurement (length, angle, area, volume), each with the measuring tool, the value with units, an optional SCOORD3D of the points, and the user's note. The SR references the source study's Study Instance UID and Frame of Reference UID when known. Observer context names the signing clinician and the software.
2.3 Sequencing of real-world activities
An office configures the DDSALLY Agent once (sign in, choose the export folder, optionally turn on the DICOM receiver and point the scanner at it). Its imaging software exports a study to that folder or sends it by C-STORE; the agent waits until the study has been quiet, then sends the study's files in STOW-RS requests of at most 256 MB each, retrying up to five times. The study appears in the office's Images inbox, where it can be viewed, attached to a referral, forwarded to another office, or downloaded.
3. AE specifications
3.1 Ingest AE — STOW-RS provider
| Item | Value |
|---|---|
| Resource | POST https://api.ddsally.com/dicomweb/studies and .../studies/{StudyInstanceUID} |
| Authentication | X-Ingest-Key header carrying a per-device key issued by the practice in DDSALLY (Imaging → Devices). TLS 1.2 or later is required |
| Request media type | multipart/related; type="application/dicom"; each part application/dicom. application/dicom+json metadata parts and bulk-data parts are not accepted |
| Limits | 256 MB per request; 2 000 parts per request |
| Accepted SOP Classes | Any. DDSALLY does not restrict by SOP Class or Modality. In practice: CT Image Storage and Enhanced CT Image Storage (CBCT), Digital Intra-Oral X-Ray, Digital X-Ray (panoramic, cephalometric), Secondary Capture, and any other storage SOP Class the sender provides |
| Accepted Transfer Syntaxes for storage | Any. The file is stored as sent; the transfer syntax is not inspected for storage. Which syntaxes can later be displayed is in section 3.2 |
| Required attributes | Study Instance UID (0020,000D) and SOP Instance UID (0008,0018). A part lacking either is refused with Failure Reason C000H |
| Attributes read and kept in the database | SOP Instance UID, SOP Class UID, Study Instance UID, Series Instance UID, Patient's Name, Patient ID, Patient's Birth Date, Accession Number, Study Description, Series Description, Modality, Study Date. Everything else stays in the file only |
| Coercion | None. No attribute of the stored file is changed |
| Duplicate handling | Same SOP Instance UID replaces the earlier copy; the study's instance count does not grow |
| Study already attached to a referral | Further instances refused with Failure Reason 0111H (duplicate SOP) so a referred study cannot change after the fact |
| Storage exhausted | A700H out of resources |
| Response | 200 all stored, 202 some failed, 409 none stored; body is a DICOM JSON dataset with Referenced SOP Sequence (0008,1199), Failed SOP Sequence (0008,1198) and Other Failures (0008,1197) |
3.2 Viewer AE — what can be displayed
| Item | AllyVue Cloud (server-side) | AllyVue Web (in-browser) and file preview |
|---|---|---|
| Decoder | pydicom 3.x with pylibjpeg (libjpeg, openjpeg) | Cornerstone3D 4.x DICOM image loader with dicom-parser; preview uses dicom-parser with a JPEG-lossless decoder |
| Transfer Syntaxes decoded | Implicit VR Little Endian (1.2.840.10008.1.2); Explicit VR Little Endian (…1.2.1); Explicit VR Big Endian (…1.2.2, retired); JPEG Baseline (…1.2.4.50); JPEG Extended (…1.2.4.51); JPEG Lossless (…1.2.4.57, …1.2.4.70); JPEG-LS (…1.2.4.80, …1.2.4.81); JPEG 2000 (…1.2.4.90, …1.2.4.91); RLE Lossless (…1.2.5) | Full viewer: the codecs bundled with the Cornerstone loader — Implicit and Explicit VR Little Endian, Explicit VR Big Endian, JPEG Baseline 8- and 12-bit, JPEG Lossless, JPEG-LS, JPEG 2000, HTJ2K, RLE Lossless. Preview thumbnail: uncompressed and JPEG Lossless only; other syntaxes show a placeholder until the full viewer opens |
| Pixel formats | MONOCHROME2; MONOCHROME1 displayed with an inversion control; 8- and 16-bit Bits Allocated; signed and unsigned; Rescale Slope/Intercept applied; RGB accepted for display without windowing | MONOCHROME1 and MONOCHROME2 for the preview; the full viewer handles single-frame and multi-frame grayscale |
| Geometry | Multi-file series stacked by Image Position (Patient); Enhanced (multi-frame) CT read via the per-frame functional groups; Pixel Spacing, Slice Thickness, Image Orientation (Patient) used for MPR, cross-sections and measurements | Same geometry from the server-built volume; measurements in mm use the same spacing |
| MR and other non-volume series | — | Shown slice by slice as acquired in a 2D stack viewer; never assembled into a volume, MPR or 3D rendering (only CT series of 20 or more slices are offered as a volume). Window from Window Center/Width, else from the slice's own 1st–99th percentile; no HU presets. Two series can be shown side by side with scrolling linked by position along the normal (same orientation only) and a reference line where the other pane's slice plane cuts the image; orientation letters from Image Orientation (Patient); sequence, TE, TR, slice thickness, field strength and slice position from the header; a scale bar only where Pixel Spacing is present (MR_READING_V1) |
| Stack geometry checks | Each series' slice positions along the normal are measured when the volume is packed; uneven spacing or missing slices are recorded, and an in-plane drift (tilted gantry) is corrected by whole-pixel shifts (STACK_SHEAR_V1) | When the volume is built from the files in the browser, spacing and in-plane drift are measured there; uneven spacing, missing slices or an uncorrected tilt put a persistent statement on the 3D/MPR view (STACK_GEOMETRY_CHECK_V1). Not corrected by resampling |
| Not displayed | Encapsulated PDF, waveform, RT, and any object without Pixel Data are stored and downloadable but not rendered | — |
3.3 SR Creator AE
| Item | Value |
|---|---|
| SOP Class | Comprehensive SR Storage, 1.2.840.10008.5.1.4.1.1.88.33 |
| Template | TID 1500 Measurement Report, with TID 1501 Measurement Group per numeric measurement; coded concepts from the DICOM Controlled Terminology (CID 7021 and related) with SCT/UCUM units. SR_FINDINGS_V2 adds, from the reader's saved plan: one group per traced mandibular canal (Finding and Finding Site = SCT 7854005 Mandibular canal with Laterality, NUM Path length (DCM 121211) in mm INFERRED FROM an SCOORD3D POLYLINE of the traced stations) and one group per planned fixture (Finding = SCT 466149006 Screw endosteal dental implant, two-piece, TEXT Comment stating it is planned and not placed, NUM Diameter (SCT 81827009) and Length (SCT 410668003) in mm, the Length INFERRED FROM a two-point SCOORD3D crest→apex, and a private-scheme NUM 99DDSALLY:CLEARANCE for the clearance to the nearest traced canal). All SCOORD3D are in the source study's Frame of Reference; a study without one gets no geometry and the item is listed as skipped |
| Transfer Syntax written | Explicit VR Little Endian |
| Character set | ISO_IR 192 (UTF-8) |
| Identification | Implementation Class UID 1.3.6.1.4.1.67226.1 (DDSALLY LLC's IANA Private Enterprise Number 67226); Implementation Version Name DDSALLY_1; Manufacturer DDSALLY LLC; Manufacturer's Model Name AllyVue (investigational); Software Versions MEASUREMENT_SR_V2 |
| UIDs | SOP, Series and (if the source had none) Study Instance UIDs are issued under DDSALLY's registered root 1.3.6.1.4.1.67226.2. (IANA PEN 67226). Objects created before 15 October 2026 carry the earlier UUID-derived root 2.25.266749473930415871265813823636100784599 (PS3.5 B.2) and keep those UIDs. Series Number 9001 |
| Patient and study module | Copied from the source study (Patient's Name, Patient ID, Birth Date, Study Instance UID, Study Date); Institution Name and Referring Physician's Name from the practice record |
| Observer context | Person observer = the signing clinician; device observer = the software |
| Delivery | POST /files/{id}/measurements/sr creates it; GET /files/{id}/measurements/sr/{history_id} returns the .dcm. It is stored beside the source file and covered by the same access controls and audit |
3.4 Query/Retrieve AE — QIDO-RS and WADO-RS provider
| Item | Value |
|---|---|
| Authentication | Either the bearer token (OAuth 2.0 JWT, with MFA) the DDSALLY app uses, or a practice API key with the DICOMweb scope (API_KEY_SCOPE_V1) sent as Authorization: Bearer ddsi_… or X-Api-Key: ddsi_…. A key is minted by a practice administrator, shown once, stored as a SHA-256 hash, revocable at any time, and reads exactly what the practice may read; its calls are written to the audit log under the key's name. Ingest keys (the device scope) are write-only and are refused here; a DICOMweb key is refused at STOW-RS |
| Scope | A user sees the studies their practice holds (inbox and uploads) and the files of referrals their practice is party to — the same rule as the app. A study outside that scope is 404, never 403 |
| QIDO-RS resources | /studies, /studies/{s}/series, /studies/{s}/instances, /studies/{s}/series/{r}/instances |
| QIDO matching keys | Studies: Patient ID (0010,0020), Patient's Name (0010,0010), Study Date (0008,0020) single or range, Modalities in Study (0008,0061), Study Instance UID (0020,000D, comma list), Accession Number (0008,0050), Study Description (0008,1030). Series: Series Instance UID, Modality. Instances: SOP Instance UID. Wildcards * and ?; name matching is case-insensitive. limit (max 500), offset, includefield=all. fuzzymatching is accepted and ignored |
| QIDO returned attributes | Studies: 0008,0005; 0008,0020; 0008,0030; 0008,0050; 0008,0056 (ONLINE); 0008,0061; 0008,0090; 0008,1030; 0008,1190; 0010,0010; 0010,0020; 0010,0030; 0010,0040; 0020,000D; 0020,0010; 0020,1206; 0020,1208. Series: 0008,0060; 0008,103E; 0008,1190; 0020,000D; 0020,000E; 0020,0011; 0020,1209. Instances: 0002,0010; 0008,0016; 0008,0018; 0008,1190; 0020,0013; 0028,0008; 0028,0010; 0028,0011. With includefield=all, the representative instance header |
| WADO-RS resources | Study, series and instance retrieve as multipart/related; type="application/dicom"; a single instance also as application/dicom when the Accept header asks for it; /metadata on study, series and instance as application/dicom+json (the header without bulk data, plus 0002,0010 and 0008,1190, and Pixel Data as a BulkDataURI) |
| WADO-RS frames | …/instances/{i}/frames/{n,n,…} (1-based): one multipart/related part per frame. A native instance is served as application/octet-stream samples sliced by frame; an encapsulated instance as its stored fragment under the codec's media type (image/jpeg, image/jls, image/jp2, image/dicom-rle) when the Accept header admits it, or decoded to octet-stream when that is all the client accepts — the one transcode offered, to raw samples only |
| WADO-RS rendered and thumbnail | /rendered on instance, frame, series (representative middle instance) and study (first series); /thumbnail on instance, series and study (128 px box). image/jpeg by default, image/png when asked. Parameters: window=center,width[,function] (otherwise the first header Window Center/Width, otherwise the frame's range), viewport=vw,vh (fit, aspect kept, at most 4096), quality=1..100. Rescale Slope/Intercept applied; MONOCHROME1 inverted; RGB and YBR colour converted to RGB |
| WADO-RS bulkdata | …/instances/{i}/bulkdata/7FE00010: the Pixel Data element as stored, in one multipart/related part; no other attribute is served as bulk data |
| Transfer syntax | As stored. transfer-syntax=* or no parameter is honoured; a request naming a transfer syntax other than the stored one is answered 406 (no transcoding) |
| Not provided | WADO-URI; UPS-RS; transcoding between codecs; bulk data other than Pixel Data; /rendered on an instance whose codec the server cannot decode (406) |
| Source of truth | An instance index (one row per instance with its location and header) written at STOW ingest, at upload, and at attach; a one-off backfill covers studies received before the index existed. Instances are streamed from storage as stored — a loose object directly, a member of a study ZIP through ranged reads |
| Audit | Every retrieve and metadata request is written to the audit log with the study and instance count; retrieves that touch a referral file are also written to that file's access log |
| Response codes | 200 with results; 204 for an empty search; 400 malformed UID; 401/403 authentication; 404 nothing visible; 406 transfer syntax not available |
3.5 Download of originals
GET /files/{id}/download-url returns a short-lived signed URL to the exact bytes received. For a study received over STOW-RS, the download is a ZIP of the instance files (one .dcm per SOP Instance UID). The URL is issued only after the malware scan has cleared the file.
3.6 Export as DICOM media (File-set)
GET /files/{id}/dicom-export and GET /practices/me/incoming-studies/{id}/dicom-export return the same study as a DICOM File-set per PS3.10 and PS3.12: a DICOMDIR at the root and the instances beneath it as PTxxxxxx/STxxxxxx/SExxxxxx/IMxxxxxx (8-character names, no extension), in a ZIP. This is the layout an imaging program's "import from CD/folder" reads. The File-set is built from the stored originals on first request and cached; the response is {status: converting} until it is ready, then a short-lived URL. Instances are written with their original transfer syntax and content; pixel data is never decoded; no attribute is added to or removed from an instance. DDSALLY writes only the DICOMDIR. Directory records carry empty or defaulted values where an instance omits a record key (Study ID, Study Time, Series Number, Instance Number), as PS3.3 F.5 allows. IMAGE, SR DOCUMENT and ENCAP DOC record types are produced according to SOP Class; other instances get IMAGE records. Non-DICOM content of the source (a bundled vendor viewer, for example) is not included. A README.txt is placed beside DICOMDIR for the person opening the ZIP. The same gates apply as to the ordinary download.
3.7 Agent Storage AE — C-STORE and C-ECHO provider
Where. The DDSALLY Agent for Windows, inside the office network. Off by default; turned on in the agent window (More → DICOM receiver).
Association policy. Accepts any calling AE title; the called AE title must match the configured one (default DDSALLY, up to 16 characters). Default port 11112. One association at a time per sender is not required; several may be open. Maximum PDU size is unlimited (offered as 0). Timeouts: ACSE 60 s, DIMSE 120 s, network 120 s. No user identity negotiation, no TLS on the DICOM port — the receiver is intended for a private office LAN, and the installer's firewall rule allows it on Private and Domain network profiles only.
Presentation contexts accepted. Every Storage SOP Class defined in PS3.4 Annex B as known to pynetdicom at build time (including CT, Digital Intra-Oral X-Ray for Presentation and for Processing, Digital X-Ray, Secondary Capture, Encapsulated PDF, Comprehensive SR and the enhanced CT/MR families), each with every transfer syntax pynetdicom lists: Implicit and Explicit VR Little Endian, Explicit VR Big Endian, Deflated, all JPEG, JPEG-LS, JPEG 2000, RLE and HTJ2K families. The receiver transcodes nothing: an instance is stored in the transfer syntax it was sent in. Verification (1.2.840.10008.1.1) is accepted so the sender's "test connection" works.
Response behaviour. C-STORE returns Success (0000) once the file is written; C000 (cannot understand) when the dataset carries no Study Instance UID or SOP Instance UID; A700 (refused, out of resources) when the file cannot be written. C-ECHO returns Success.
What happens next. The study folder is handed to the upload path described in 2.3 and 3.1. Instance bytes are not modified between receipt and STOW-RS; the File Meta Information written to disk is the one negotiated on the association.
3.8 Segmentation Creator AE (SEG_EXPORT_V1)
| Item | Value |
|---|---|
| SOP Class | Segmentation Storage, 1.2.840.10008.5.1.4.1.1.66.4; Segmentation Type BINARY; one segment per object |
| Source | A server-side volumetry (seeded region grow or airway) still held in memory for the session; the mask is on the volume's own grid (0.4 mm preview or full resolution, as the viewer reported) |
| Geometry | Rows/Columns of the mask's bounding box; Pixel Measures (Pixel Spacing, Slice Thickness, Spacing Between Slices) and Plane Orientation shared across frames; Plane Position per frame; frames with no voxel set are omitted; Dimension Organization (segment, position). Frame of Reference UID is the source study's |
| Segment | Segment Algorithm Type SEMIAUTOMATIC with the tool named; Segmented Property Category/Type from SCT by kind (airway → Airway structure; lesion → Lesion; sinus → Maxillary sinus; otherwise Anatomical structure); Recommended Display CIELab = the viewer's amber |
| References | Referenced Series Sequence listing the source CT instances, from the DICOMweb index, when the file is indexed; Derivation Image Sequence with Derivation Code DCM 113076 Segmentation |
| Delivery | POST /files/{id}/segment/{job_id}/seg creates it; GET /files/{id}/measurements/sr/{history_id} returns the .dcm; stored beside the source file (work-history type segmentation_seg) under the same access controls and audit |
| Also produced from | A mask computed in the browser (AllyVue Web's airway tool), uploaded packed one bit per voxel with its grid (POST /files/{id}/segmentations/seg, SEG_UPLOAD_V1); the object is identical in form |
| Not produced | Fractional segmentations; multi-segment objects; SEG for a region that hit the voxel cap (refused, 422); SEG for the browser-side contour-interpolated lesion tool |
| Consumed (SEG_IMPORT_V1) | A Segmentation Storage instance uploaded as a file is recognised by SOP Class and drawn as an overlay on the study it references, in both AllyVue Web and AllyVue Cloud. The source study is found by Referenced Series Sequence through the DICOMweb index, then by Study Instance UID among the referral's files. BINARY and FRACTIONAL (threshold 0.5) types are read; frames may be sparse and unordered; several segments are merged into one overlay and listed by label; Recommended Display CIELab Value sets the overlay colour. The mask is drawn on its own grid in AllyVue Web and nearest-neighbour resampled onto the study's volume grid in AllyVue Cloud. Not supported: a SEG whose referenced study is absent (the file is listed and explained, not rendered), per-frame orientation that differs from the shared one, and segmentations of more than 4096 planes |
3.9 Derived display copies (LITE_UIDS_V1)
The reduced-resolution display copy built for memory-limited devices (internally the "lite volume") is a set of derived CT images: Image Type DERIVED\SECONDARY, Derivation Description naming the in-plane block-average factor and slice stride, Derivation Code DCM 113085 Spatial resampling, Source Image Sequence naming the original instance, Related Series Sequence naming the original series, Series Description suffixed "(DDSALLY display copy)", Series Number = original + 800. Each derived instance has its own SOP Instance UID and each derived series its own Series Instance UID, both derived deterministically from the original's under the 2.25 arc (the same original always yields the same derived UID, so a rebuilt copy is the same object, never a second one). Study Instance UID and Frame of Reference UID are the original's, so geometry measured on the display copy places on the original. The copy is a display cache behind authenticated viewer URLs and is not offered for download or exchange.
3.10 Single-file export (MULTIFRAME_EXPORT_V1)
On request (?format=multiframe on the export endpoints), the study's largest consistent volume series is re-encoded as ONE Enhanced CT Image instance: every slice a frame, position order, Explicit VR Little Endian, pixel values unchanged (compressed sources are decompressed, never resampled or rescaled). Geometry is carried in the shared (Pixel Measures, Plane Orientation, Pixel Value Transformation, CT Image Frame Type) and per-frame (Plane Position, Frame Content with In-Stack Position) functional groups, with a dimension organisation over in-stack position. It is a derived object: Image Type DERIVED\PRIMARY\VOLUME\NONE, Derivation Code DCM 113040 Multi-frame conversion, a Source Image Sequence naming every source slice, and SOP/Series Instance UIDs issued deterministically under the DDSALLY root (a rebuilt export is the same object). Study and Frame of Reference UIDs are the source's. Scout views, secondary captures, reports and other series are not included — the DICOMDIR export (3.5) remains the export of everything — and a source with no two aligned slices, or more than 2048, is refused with a stated reason. Enhanced CT is the current multi-frame encoding; software limited to classic single-frame CT should use the DICOMDIR export.
3.11 Cropped volume export (VOI_EXPORT_V1)
On request from the viewer's VOI box (POST /files/{id}/crop and POST /practices/me/incoming-studies/{id}/crop), the part of the study's volume inside a box stated in patient (LPS) millimetres is written as a NEW study beside the source: one classic CT Image instance per slice (also when the source is a single Enhanced CT instance — each frame becomes one instance), Explicit VR Little Endian, pixel values, Rescale Intercept/Slope, Pixel Spacing and slice spacing unchanged; the box is snapped outward to whole voxels, never resampled. Image Position (Patient) is moved to the box corner and Image Orientation (Patient) kept, so the cropped slices place on the original in the same frame of reference. It is a derived object: Image Type DERIVED\SECONDARY, Derivation Description "Cropped by AllyVue on <date> to a volume of interest <size> mm (patient x/y/z extents); pixel values and spacing unchanged; derived from the original study", a Source Image Sequence naming the source instance with purpose DCM 121322 Source image for image processing operation, Series Description = source + " cropped by AllyVue <date>", Series Number = source + 900, Content Date/Time = when it was built. SOP and Series Instance UIDs are issued deterministically under the DDSALLY root from the source UIDs, the box and the date (the same box on the same day is the same object). Patient, study-level attributes and Frame of Reference UID are copied from the source. Filed on a referral, the crop keeps the source's Study Instance UID (it is one more series of that study); filed in a practice's imaging inbox, where studies are keyed by Study Instance UID, it is given a derived Study Instance UID with a Referenced Study Sequence naming the source study and the Study Description suffixed "(cropped)". The crop is taken from the stored study, never from a reduced-resolution display copy (3.9), so it is at the acquisition's full resolution whatever device requested it; the box is set by typed millimetre extents per patient axis or by handles, and moved as a whole, in the viewer. Pixel data is written uncompressed (Explicit VR Little Endian): a source stored with a lossless transfer syntax is reproduced exactly; a source stored with a lossy transfer syntax is written from its decoded pixels, which are what every conforming viewer displays, and the crop cannot restore what that compression discarded. A box thinner than 1 mm, or lying wholly outside the volume, is refused with a stated reason. The crop is an ordinary study afterwards: it can be viewed, sent, exported by 3.5/3.10, and is subject to the same retention and audit (the access log records the source and the box). It is a cropping of the image data, not a de-identification: the patient attributes travel with it.
3.12 De-identified copy (DEID_EXPORT_V1)
On request (GET /files/{id}/deid-export, GET /practices/me/incoming-studies/{id}/deid-export), every instance of a study is rewritten under DICOM PS3.15 Annex E, Basic Application Level Confidentiality Profile, with the Clean Descriptors (113105), Retain Longitudinal Temporal Information with Modified Dates (113107), Retain Device Identity (113109) and Retain Patient Characteristics (113110) options, and says so in De-identification Method and De-identification Method Code Sequence; Patient Identity Removed is YES. Patient's Name becomes DEIDENTIFIED and Patient ID a token derived from the exporting practice and the patient (the same patient exported twice by the same practice gets the same token, so serial studies can be paired; the token cannot be reversed without the practice's identifier); the birth date is removed and Patient's Age computed from it when absent (ages over 89 collapse to 090Y); sex is kept. Every DA and DT value in the study is shifted by one offset of one to two years, the same for every instance and stable for the patient within the practice, so intervals are preserved; TM values are kept. Manufacturer, model and software version are kept; institution, station, device serial, every person name other than the patient's placeholder, accession, study ID, request and comment attributes, and all private attributes are removed; Referring Physician's Name is present and empty. Study and Series Description are kept unless they contain the patient's name or ID. Every instance-level UID (Study, Series, SOP, Frame of Reference, and references to them in sequences) is replaced by one derived from the original and a per-export secret, consistent within the export. Pixel data is written as the source's, decoded to Explicit VR Little Endian where the source was compressed, and is NOT examined: burned-in text survives, Burned In Annotation is left as the source states it, and the zip's README says so. The copy is a download, not a stored object; it is not filed on the referral and the audit log records who downloaded it.
3.13 Presentation state export (GSPS_EXPORT_V1)
On request from the viewer (POST /files/{id}/measurements/gsps), a Grayscale Softcopy Presentation State is created with: a Softcopy VOI LUT holding the window the clinician was reading with (centre/width on the rescaled scale); the Modality LUT copied from the referenced images; a Displayed Area Selection of the whole image, scale to fit; one Graphic Layer, ALLYVUE; and, for every measurement whose points all lie within half the slice spacing of one acquired image, a Graphic Annotation on that image in PIXEL units (PS3.3 C.10.5: the top-left corner of the top-left pixel is 0\0, so a voxel centre sits at +0.5) -- POLYLINE for lengths, paths and polygons, two POLYLINEs for a bidirectional, ELLIPSE for an ellipse, POINT for a probe -- with the value the viewer showed, and the clinician's note, as a Text Object anchored at the first point. The whole series the drawings sit in is referenced, so the window applies throughout. A measurement on a reformatted plane (coronal, sagittal, oblique, panoramic, TMJ) has no acquired image to live on and is not carried; the response names each one left out. Image geometry comes from the instance index (classic images and enhanced multi-frame per-frame positions). The object is stored with the study under the DDSALLY root, listed in the viewer's work history, and downloadable; it is not pushed anywhere. It is a record of what was displayed and drawn, not a measurement object: the numbers in it are text, and the SR (3.3) remains the coded export.
3.14 Encapsulated PDF (ENCAP_PDF_V1)
On request (GET /reports/{id}/encapsulated-pdf), a signed report's PDF is wrapped unchanged (Encapsulated Document, padded to even length) in an Encapsulated PDF Storage instance: Modality DOC, Conversion Type WSD, MIME type application/pdf, Document Title the report's kind, Burned In Annotation YES (the PDF shows the patient's name), Verification Flag VERIFIED with the signing date and time as Content Date and Time, Series Number 995. When the referral carries a DICOM study the instance takes that study's Patient and Study Instance UID, so an importing PACS files it with the images; otherwise it carries its own derived Study Instance UID and the response says it will not join a study. SOP and Series Instance UIDs are derived deterministically from the PDF file, so the same report yields the same instance. Built once and cached beside the PDF; either practice on the referral may fetch it; the download is logged against the PDF.
4. Communication profiles
All traffic between the office and DDSALLY is HTTPS (TLS 1.2+) to api.ddsally.com. The DICOM Upper Layer over TCP is supported only by the DDSALLY Agent's Storage AE (section 3.7), on the office LAN. STOW-RS follows PS3.18 section 10.5; DICOM JSON responses follow PS3.18 Annex F.
5. Extensions, specialisations and privatisations
None. DDSALLY adds no private attributes, private SOP Classes or private transfer syntaxes to any object. The SR contains no private content items.
6. Configuration
| Item | Where |
|---|---|
| Ingest keys | Created and revoked per device in the DDSALLY app (Imaging → Devices). A key is scoped to one practice |
| Agent | Sign in with a DDSALLY account; the agent requests its own key and stores it under %ProgramData%\DDSALLY\Agent. Export folder and quiet period are set in the agent window |
| Agent DICOM receiver | Agent window → More → DICOM receiver: on/off, AE title (default DDSALLY), port (default 11112), quiet period (default 30 s). Stored in ddsally-agent.json under dicom_listener |
| Storage quota, retention | Per practice plan; retention and soft-delete behaviour are in the platform documentation |
7. Known limitations against ANSI/ADA 1114 and common expectations
These are stated so an integrator is not surprised, and because the ADA's 2026 comments to ONC single out exactly these points.
7.1 Retrieval is DICOMweb only, and needs a user's token
QIDO-RS and WADO-RS are provided (section 3.4); C-FIND/C-MOVE are not. A viewer or PMS integration authenticates with a practice API key of the DICOMweb scope (read-only, revocable) or with a user's bearer token.
7.2 Structured findings: what is and is not exported
Measurements, traced canals, planned implants (SR, 3.3), server-side volumetry regions (SEG, 3.8), the display state with measurements on acquired slices (GSPS, 3.13) and signed reports (Encapsulated PDF, 3.14) export. Three-dimensional cephalometric landmarks (CEPH3D_V1) are kept in the work history and copied as text; they are not yet an SR. Not yet: the browser-side contour-interpolated lesion volume (the mask is computed in the browser and only its contours are saved), the 3D trim recipe, TMJ axes and the arch curve. Reduced-resolution display copies now carry their own UIDs (3.9); copies built before LITE_UIDS_V1 keep the original UIDs until they are rebuilt.
7.3 Ingest check is advisory, and 1114 is still a draft
Since 2026-10-13 every received header is checked against the clauses of ANSI/ADA 1114 (AIP review draft, October 2025) that name attributes, and the result is shown on the study card as a "Metadata" chip listing what the modality did not write (patient identity and acquisition date, patient orientation, device identification, exposure factors, laterality and anatomic region for intraoral images, pixel size and slice thickness for CBCT, lossy compression, legacy one-file-per-slice CT, Secondary Capture). The standard is written in clinical terms; the mapping from each clause to DICOM attributes is DDSALLY's own and is kept in app/services/dicom_conformance.py. Nothing is rejected on these grounds: an instance with a Study and SOP Instance UID is stored whatever else it lacks, because the office cannot fix what its unit wrote. For browser uploads the check runs on the header slices probed at upload (up to 25 archive entries), so a large study's count reflects a sample.
7.4 Inbound DIMSE is in the Agent, not the service
A modality can send by C-STORE to the DDSALLY Agent on the office LAN (section 3.7), but not to DDSALLY over the internet: the web service accepts STOW-RS only, and the agent's receiver is unencrypted DICOM intended for a private network. Storage Commitment (N-ACTION) is not provided; the C-STORE success status means the file is on the agent's disk, and the agent's window and log show whether it reached DDSALLY.
7.5 Media
DICOMDIR is written on export (section 3.5) but not read on import: a DICOMDIR inside an uploaded ZIP is ignored and the instances are indexed from their own headers. Physical media are not read or written.
7.6 Registered UID root
Since 2026-10-15 DDSALLY issues UIDs under its IANA Private Enterprise Number arc 1.3.6.1.4.1.67226. Objects issued before then carry the UUID-derived root 2.25.266749473930415871265813823636100784599 (PS3.5 B.2) and keep those UIDs; derived display copies keep deriving theirs from that root so that a regenerated copy is the same object.
8. Security
| Topic | Practice |
|---|---|
| Transport | TLS 1.2+ only |
| Storage | AWS S3 with server-side encryption under a customer-managed KMS key; uploads not encrypted under that key are refused at finalize |
| Access | Every file is scoped to a practice; viewer and download URLs are short-lived and tied to an authenticated user; access is written to an append-only audit log in the same transaction as the action |
| Malware | Objects are scanned on arrival (GuardDuty Malware Protection for S3); download URLs are withheld until the verdict is clean |
| De-identification | DDSALLY does not de-identify DICOM. Files are exchanged as received, under the practices' BAAs |
| Retention | Per plan; deleted files are unreachable at once and physically removed after the bucket's noncurrent-version window |
9. Character sets
Specific Character Set is honoured as present in received files; no transcoding. Objects DDSALLY writes use ISO_IR 192.
10. Codes and controlled terminology
The measurement SR uses DICOM Controlled Terminology (DCM), SNOMED CT (SCT) and UCUM codes from the standard's context groups; no private codes.
Revision history. 2.2 (2026-11-01): sections 3.12 de-identified copy (DEID_EXPORT_V1), 3.13 presentation state (GSPS_EXPORT_V1), 3.14 Encapsulated PDF (ENCAP_PDF_V1); Table 1-2 and 7.2 extended. 2.1 (2026-10-31): 3.11, source resolution, transfer syntax and box placement stated. 2.0 (2026-10-31): section 3.11, cropped volume export as a new study (VOI_EXPORT_V1, VOI_EXPORT_INBOX_V1); Table 1-2 extended. 1.9 (2026-10-21): WADO-RS frames, rendered, thumbnail and bulkdata resources (DICOMWEB_READ_V2, section 3.4); Pixel Data referenced by BulkDataURI in metadata; practice API keys with a DICOMweb scope (API_KEY_SCOPE_V1, 3.4 and 7.1). 1.8 (2026-10-16): registered UID root (IANA PEN 67226, section 3.3 and 7.6); MR and non-volume series display and stack geometry checks (section 3.2). 1.7 (2026-10-14): section 3.10, single-file Enhanced CT export (MULTIFRAME_EXPORT_V1); Table 1-2 extended. 1.6 (2026-10-14): section 3.8, Segmentation objects are also consumed (SEG_IMPORT_V1) and produced from browser-side masks (SEG_UPLOAD_V1). 1.5 (2026-10-13): section 3.8, Segmentation objects for volumetry (SEG_EXPORT_V1); 3.3 extended to canals and planned implants (SR_FINDINGS_V2); 3.9, derived UIDs for reduced-resolution display copies (LITE_UIDS_V1); Table 1-2 and 7.2 rewritten. 1.4 (2026-10-13): section 3.7, Storage SCP and Verification SCP in the DDSALLY Agent (AGENT_CSTORE_V1); 1.1, 2.2, 2.3, 4, 6, 7.1 and 7.4 updated. 1.3 (2026-10-13): section 3.4, QIDO-RS and WADO-RS provider (DICOMWEB_READ_V1); 7.1 rewritten. 1.2 (2026-10-13): section 3.5, export as a DICOM File-set with DICOMDIR (DICOM_EXPORT_V1); 7.5 updated. 1.1 (2026-10-13): section 7.3, advisory ingest check against ANSI/ADA 1114 (DICOM_1114_V1). 1.0 (2026-10-13): first publication. Reflects DDSALLY API with DICOM_UIDS_V1 (fixed Implementation Class UID), INGEST_1 (STOW-RS), MEASUREMENT_SR_V1, and AllyVue Cloud / AllyVue Web as of this date.
