Release notes¶
0.5.3¶
Official FHIR terminology: DICOM codes are resolved from the pinned official
fhir.dicompackage, while all 73 ADA 1100 image types are resolved from the CodeSystems atterminology.open-ortho.org.Offline terminology lock: source IDs and versions are recorded in the committed
dicom4ortho/_generated_codes.pymodule. Normal builds and runtime use do not access the network.Retired terminology CSV files:
codes.csvandimage_types.csvare no longer packaged.views.csvremains the local view-layout source.Correct CID 4070 events: treatment progress now uses
PatientRegistration(184047000),OrthodonticTreatmentStarted(1332161000), andOrthodonticTreatmentStopped(1340210007).Date-based treatment progress:
set_treatment_progress_from_date(event_type, event_date)calculates the TID 3465 offset from the photograph acquisition date. Constructor metadata acceptstreatment_event_datewithacquisition_datetime.Acquisition-time precedence: an explicit
acquisition_datetimeoverrides EXIF. If it is omitted, EXIFDateTimeOriginalis loaded before treatment progress is calculated and used as the fallback acquisition time.Compatibility: the days-based API and the old
OrthodonticTreatmentandPosttreatmentevent names remain available withDeprecationWarninguntil version 2.Resource maintenance:
make update_resourcesexplicitly fetches FHIR terminology and regenerates the lock without committing it. Updatingviews.csvremains a separatemake fetch_resourcesoperation.Practice personnel:
dental_provider_firstnameanddental_provider_lastnamenow encode the orthodontist or dentist responsible for treatment as DICOM Physicians of Record. Explicit operator metadata encodes the clinical staff member as Operators’ Name, while an actual referring physician is copied from MWL without conflating it with the requesting physician.MWL conversion: the controller’s image-plus-worklist conversion now copies valid worklist attributes and returns the generated photograph.
JPEG 2000 preserved as received: the source codestream is encapsulated unchanged instead of being decoded and re-encoded, and the Transfer Syntax and
LossyImageCompressionfollow its wavelet transform. A JP2 container is unwrapped to itsjp2ccodestream first.
0.5.2¶
CP-1570 / TID 3465 compliance:
OrthodonticPhotographnow buildsAcquisitionContextSequencefrom typedOrthoViewfields mapping directly to TID 3465 rows (OrthognathicFunctionalCondition, FindingByInspection, ObservableEntity, DentalOcclusion, and optional LongitudinalTemporalEventType + Offset viaset_treatment_progress()).Build-time code generation: replaced runtime CSV parsing with a code-generation pipeline (
tools/generate_codes.py). Readscodes.csvandviews.csvand emitsdicom4ortho/_generated_codes.py— a committed lock file of typed Python constants (DicomCode,OrthoView). No network I/O at runtime.Typed data layer: two new frozen dataclasses in
m_dent_oip.py—DicomCode(withto_dataset()/to_sequence()) andOrthoView(all 73 view definitions with typed fields for every DICOM attribute).Incomplete-view enforcement: views with a variable
ViewCodeSequence(IV28, IV30, EV40) now raiseTypeErrorimmediately at construction unlessview_code_keywordis supplied.set_view_code()fills the slot and auto-attaches any predefinedViewModifierCodeSequence.codes.csv / views.csv corrections:
OrthognathicFunctionalConditionsconcept-name code corrected (ZZZZZZ→130325, DCM, per CP-1570);closeupkeyword mismatch fixed; IV29 givenprojection_frontalas its fixed ViewCode.CLI fix:
dicom4ortho list-image-typesnow works correctly (fixedTypeError: 'PosixPath' object is not iterableinprint_image_types()); help text updated to show the full command.CLI cleanup: removed
--url-codes/--url-viewsflags (broken since the refactor; resource updates are now a build-time operation viamake update_resources).Dev environment:
flake.nixrewritten to use pip/pyproject.toml as the single source of truth for Python deps;dciodvfyanddcmtkadded to the Nix shell.Makefile:
make update_resourcesnow only regenerates_generated_codes.pyfrom committed CSVs; newmake fetch_resourcestarget does the upstream curl downloads separately. Newmake helpdefault target.Tests: 29 new tests in
test/test_generated_codes.pycovering CSV consistency, all 73 view attribute correctness, and theview_code_keyword/set_view_code()API.
0.5.1¶
Rename
get/set_image_type_code_sequence→get/set_image_type_code_datasetfor consistency with pydicom naming conventions.Add tests for image type code dataset handling in
OrthodonticPhotograph.Refactor test files for improved organisation and logging consistency.
0.4.7¶
Fix default Series and Study Date and Time to empty.
0.4.2¶
Add partial support for EXIF metadata: copy tags from EXIF to DICOM according to standard. Only Manufacturer related and date related tags are copied.
0.4¶
Add support for DICOM MWL (Modality Worklist): copy tags from MWL
Add support for using InstanceNumber and ScheduledProtocolCode to define image type
Add method to decode the image type from the InstanceNumber and ScheduledProtocolCodeSequence
Remove code related to teeth
Add setters for Series and Instance Numbers
0.2¶
Add BurnedInAnnotation, Operator, Institution and Performing Physician tags
Load views and codes from ADA-1107
Fix Patient, Doctor and Operator names
Add support for JPEG2000
UID is now generated from hashing the input file
Other bug fixes