All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
8.0.3 - 2020-04-29
- All Redox message models not extend sealed trait hierarchy bellow, making them an ADT
- RedoxMessage
- PatientRedoxMessage
- VisitRedoxMessage
- PatientRedoxMessage
- RedoxMessage
8.0.1 - 2019-11-24
- Added
Invalid
sentinel values toDataModel
andEventType
enums, so that it is possible to construct aMeta
for any JSON message (essentially, all fields onMeta
are now optional)
- Swapped to using scalafmt for formatting
8.0.0 - 2019-08-26
- Breaking Upgrade to akka-http 10.1.8
7.0.0 - 2019-08-22
- Breaking: Upgrade to play-json 2.7.3
- Upgrade to play 2.7.3
- Upgrade to sbt 1.2.8
6.0.5 - 2019-05-14
- Redox sometimes send Language value as "Unknown" when language value is explicitly not specified. These "Unknown" values will get assigned the java.util.Locale.ROOT when deserialized.
6.0.4 - 2019-05-13
- Redox sometimes send Language value as "Other" for non-ISO standard values. These "Other" values will get assigned the java.util.Locale.ROOT when deserialized.
6.0.3 - 2019-04-15
- Add MetaLike interface to OrderMessageLike (non-breaking).
6.0.2 - 2019-04-12
- MedicationsMessage had some incorrect properties:
- MedicationsMessage.Order.Indications are now a sequence instead of an Option
- MedicationsMessage.Visit now use Option[VisitInfo] instead of Visit
- MedicationsMessage now extend MetaLike, HasPatient and HasVisitInfo (which are required for message models)
6.0.1 - 2019-04-11
- Support for Medication messages with new models for
MedicationOrder
,MedicationMessge
andOrderedMedication
.
6.0.0 - 2019-03-28
- Breaking: Renamed
CodeSet
toCodeset
(note the lower-cases
) to fix mappings from JSON, converted it into a trait, with implementationsBasicCodeset
andCodesetWithName
- Breaking: Converted
Observation
into a trait, with implementationsProcedureObservation
,ResultObservation
,VitalSignObservation
andFlowsheetObservation
- This was done to cope with the flowsheet observation not having a
CodeSystem
- This was done to cope with the flowsheet observation not having a
5.0.0 - 2019-03-25
- Breaking: Made Demographics.dob optional as it's not reliable in
PatientUpdate
messages.
4.0.0 - 2019-03-22
- Breaking: Made
Contact
andBasicPerson
'sFirstName
andLastName
optional (In Redox, these are only "possible" fields)
3.0.0 - 2019-01-28
-
Added the ability to handle multiple credentials for multiple sources.
Each source in Redox has a unique pair of key/secret credentials. If a client has multiple sources, this would have required creating multiple RedoxClients, one for each source.
However,
RedoxClient
constructed an internalWsClient
and an Akka schedule to manage the access-refresh Token lifecycle. This consumed unnecessary resources as each client would have created its own thread pool.
- Breaking:
RedoxClient
is completely redesigned to take in an external Http client. A secondary constructor is added for easier migration. However, usage is only advisable if application has a single source . - Marked one property on the ReceiveController protected
RedoxTokenManager
to manage Redox tokens for multiple sources.- Added
HttpClient
interface to allow using different http client under the hood. ClientConfig
object standardizes the configuration values that's needed to be passed into RedoxClient.
2.1.0 - 2019-01-18
- Added a controller helper trait for responding to Redox endpoint challenges and validating received webhook messages
2.0.5 - 2018-12-12
- Robust parsing of non-array paths
2.0.1 - 2.0.4 - 2018-10-31
- Fixed compiler warning on non-exhaustive match
2.0.0 - 2018-10-31
- Remove cross-compile code for 2.11 release as there are multiple incompatibilities.
1.6.0 - 1.6.2 - 2018-09-24
- Fixed
Locale
validation errors by introducing a strictLanguage
type.
Patient.Demographics.Language
is changed from java.util.Local to Language
1.5.1 - 2018-09-18
- Added
CanceledEvent
field to Meta
1.5.0 - 2018-09-18
- Made
VisitInfo.Patient
class an enum value
1.4.6 - 2018-09-04
- Added "Formatted Text" as a Order ValueType
- Handled "ST" and "RT" Order priority value via a mapping
1.4.5 - 2018-08-24
- Removed HasDefaultEnum json parsing
1.4.4 - 2018-08-23
- Changed Language field from String to java.util.Locale
1.4.3 - 2018-08-23
- Added robust parsing for primitive types.
1.4.2 - 2018-08-19
- Fixed robust parsing issue with json arrays.
1.4.1 - 2018-08-16
- Fixed bug where robust parsing fails to recover from deep errors
1.4.0 - 2018-08-13
- Changes signature of
webhook
to return both potential error and results.(Option[JsError], Option[AnyRef])
- Removed support for scala 2.11 (Backdated)
1.3.0 - 2018-08-10
- With the upgrade of
json-annotations
library. We will now assign default values to message fields whenever parsing of that filed fails.
- Failing to parse an
Enumeration
withHasDefaultReads
will now fallback to a default value and a failure being logged. (except forSexType
,DataModel
,RedoxEventTypes
andCommonVitalTypes
)
1.0.1 - 1.1.0 - 2018-06-28
- Releases are now performed by CI automatically
- Cross-build Scala versions updated to the latest in each of 2.11.x/2.12.x
- Optional reducer argument to
RedoxClient.webhook
, similar to the one on theRedoxClient
constructor
0.104 - 2018-06-12
- Added a constructor argument to
RedoxClient
,reducer
which allows specifying how to reduce e.g. empty parts of a response before it is converted into model instances. Defaults to the current behavior, which is to only prune parts of a response that are strictly null. - Added
reduceEmptySubtrees
as a method toJsValue
(via implicits), in addition to the existingreduceNullSubtrees
that prunes null objects - the difference is that the "empty" variant also considers arrays to be empty if they or their contents are (recursively).
0.103 - 2018-06-11
- Added a
HasVisitInfo
trait to mark models with aVisit: Option[VisitInfo]
property.
0.100 - 0.102 - 2018-06-11
- Initial and webhook support for the
Flowsheet
data model.
0.99 - 2018-06-01
-
Messages were previously matched to a data type using the
Meta.DataModel
field only. However, this doesn't completely determine the shape of the message; for example, a message withDataModel == Order
may not have anOrder
key, becauseMeta.EventType
might beGroupedOrders
(i.e. it has anOrders
key, not anOrder
key).We now take both the
Meta.DataModel
andMeta.EventType
into account when deciding how to parse a message. -
Patient.Demographics.Sex
now defaults to a value ofUnknown
. This was previously a required value, but Redox only define it as "reliable" and not "required" (we've seen messages in-the-wild withnull
for this property.)
0.98 - 2018-05-28
Insurance.Plan
changed fromInsurancePlan
toOption[InsurancePlan]
- That's because the plan may be a "null subtree" (all properties null), in which case it is not guaranteed to be set
- Null subtree algorithm removes nulls from arrays
-
Previously, if null-subtree objects were wrapped in an array, the subtree removal would replace the objects with JsNull values, but leave them in the array (causing a later error), e.g.
"Orders": [ { "Diagnoses": [ { "Code": null, "Codeset": null, "Name": null, "Type": null } ] } ]
previously became
"Orders": [ { "Diagnoses": [null] } ]
but will now become
"Orders": [ { "Diagnoses": [] } ]
-
0.97 - 2018-05-28
- Version appearing in README is automatically updated on release
- Added sbt-release plugin
- Added a CHANGELOG
0.96 - 2018-05-28
Order.ClinicalInfo.Code
changed fromString
toOption[String]
Order.Provider.NPI
changed fromString
toOption[String]