Skip to content

Commit

Permalink
Update symptoms as per definition based extraction. (#688)
Browse files Browse the repository at this point in the history
  • Loading branch information
santosh-pingle committed Aug 10, 2021
1 parent 74da80e commit 2ccda9b
Show file tree
Hide file tree
Showing 2 changed files with 205 additions and 56 deletions.
226 changes: 180 additions & 46 deletions reference/src/main/assets/screener-questionnaire.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,7 @@
"text": "Symptoms",
"linkId": "1.0.0",
"type": "group",
"definition": "http://hl7.org/fhir/StructureDefinition/Observation",
"extension": [
{
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemExtractionContext",
"valueExpression": {
"language": "application/x-fhir-query",
"expression": "Observation",
"name": "symptoms"
}
},
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",
"valueCodeableConcept": {
Expand All @@ -49,56 +40,199 @@
"item": [
{
"text": "In the past two weeks have you experienced ANY of these symptoms?",
"type": "choice",
"code": [],
"linkId": "1.1.0",
"required": true,
"repeats": true,
"definition": "http://hl7.org/fhir/StructureDefinition/Observation#Observation.category",
"type": "display",
"linkId": "1.1.0"
},
{
"linkId": "1.2.0",
"type": "group",
"definition": "http://hl7.org/fhir/StructureDefinition/Observation",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/questionnaire-item-control",
"code": "drop-down",
"display": "Drop down"
}
],
"text": "Drop down"
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemExtractionContext",
"valueExpression": {
"language": "application/x-fhir-query",
"expression": "Observation",
"name": "fever"
}
}
],
"answerOption": [
"item": [
{
"valueCoding": {
"code": "386661006",
"display": "Fever",
"system": "http://snomed.info/sct"
}
},
"type": "choice",
"linkId": "1.2.1",
"required": true,
"repeats": true,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/questionnaire-item-control",
"code": "drop-down",
"display": "Drop down"
}
],
"text": "Drop down"
}
}
],
"definition": "http://hl7.org/fhir/StructureDefinition/Observation#Observation.code",
"answerOption": [
{
"valueCoding": {
"code": "386661006",
"display": "Fever",
"system": "http://snomed.info/sct"
}
}
]
}
]
},
{
"linkId": "1.3.0",
"type": "group",
"definition": "http://hl7.org/fhir/StructureDefinition/Observation",
"extension": [
{
"valueCoding": {
"code": "13645005",
"display": "Shortness of breath",
"system": "http://snomed.info/sct"
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemExtractionContext",
"valueExpression": {
"language": "application/x-fhir-query",
"expression": "Observation",
"name": "breathShortness"
}
},
}
],
"item": [
{
"valueCoding": {
"code": "49727002",
"display": "Cough",
"system": "http://snomed.info/sct"
"type": "choice",
"linkId": "1.3.1",
"required": true,
"repeats": true,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/questionnaire-item-control",
"code": "drop-down",
"display": "Drop down"
}
],
"text": "Drop down"
}
}
],
"definition": "http://hl7.org/fhir/StructureDefinition/Observation#Observation.code",
"answerOption": [
{
"valueCoding": {
"code": "13645005",
"display": "Shortness of breath",
"system": "http://snomed.info/sct"
}
}
]
}
]
},
{
"linkId": "1.4.0",
"type": "group",
"definition": "http://hl7.org/fhir/StructureDefinition/Observation",
"extension": [
{
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemExtractionContext",
"valueExpression": {
"language": "application/x-fhir-query",
"expression": "Observation",
"name": "cough"
}
},
}
],
"item": [
{
"valueCoding": {
"code": "44169009",
"display": "Loss of smell",
"system": "http://snomed.info/sct"
"type": "choice",
"linkId": "1.4.1",
"required": true,
"repeats": true,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/questionnaire-item-control",
"code": "drop-down",
"display": "Drop down"
}
],
"text": "Drop down"
}
}
],
"definition": "http://hl7.org/fhir/StructureDefinition/Observation#Observation.code",
"answerOption": [
{
"valueCoding": {
"code": "49727002",
"display": "Cough",
"system": "http://snomed.info/sct"
}
}
]
}
]
},
{
"linkId": "1.5.0",
"type": "group",
"definition": "http://hl7.org/fhir/StructureDefinition/Observation",
"extension": [
{
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemExtractionContext",
"valueExpression": {
"language": "application/x-fhir-query",
"expression": "Observation",
"name": "lossOfSmell"
}
}
],
"item": [
{
"type": "choice",
"linkId": "1.5.1",
"required": true,
"repeats": true,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/questionnaire-item-control",
"code": "drop-down",
"display": "Drop down"
}
],
"text": "Drop down"
}
}
],
"definition": "http://hl7.org/fhir/StructureDefinition/Observation#Observation.code",
"answerOption": [
{
"valueCoding": {
"code": "44169009",
"display": "Loss of smell",
"system": "http://snomed.info/sct"
}
}
]
}
]
}
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,25 +57,41 @@ class ScreenerViewModel(application: Application, private val state: SavedStateH
fun saveScreenerEncounter(questionnaireResponse: QuestionnaireResponse, patientId: String) {
viewModelScope.launch {
val bundle = ResourceMapper.extract(questionnaireResource, questionnaireResponse)
val reference = Reference("Patient/$patientId")
val subjectReference = Reference("Patient/$patientId")
if (isRequiredFieldMissing(bundle)) {
isResourcesSaved.value = false
return@launch
}
saveResources(bundle, reference)
saveResources(bundle, subjectReference)
isResourcesSaved.value = true
}
}

private suspend fun saveResources(bundle: Bundle, reference: Reference) {
private suspend fun saveResources(bundle: Bundle, subjectReference: Reference) {
val encounterId = generateUuid()
val encounterReference = Reference("Encounter/$encounterId")
bundle.entry.forEach {
val resource = it.resource
when (resource) {
is Observation -> resource.subject = reference
is Condition -> resource.subject = reference
is Encounter -> resource.subject = reference
when (val resource = it.resource) {
is Observation -> {
if (resource.hasCode()) {
resource.id = generateUuid()
resource.subject = subjectReference
resource.encounter = encounterReference
saveResourceToDatabase(resource)
}
}
is Condition -> {
resource.id = generateUuid()
resource.subject = subjectReference
resource.encounter = encounterReference
saveResourceToDatabase(resource)
}
is Encounter -> {
resource.subject = subjectReference
resource.id = encounterId
saveResourceToDatabase(resource)
}
}
saveResourceToDatabase(resource)
}
}

Expand All @@ -95,7 +111,6 @@ class ScreenerViewModel(application: Application, private val state: SavedStateH
}

private suspend fun saveResourceToDatabase(resource: Resource) {
resource.id = generateUuid()
fhirEngine.save(resource)
}

Expand Down

0 comments on commit 2ccda9b

Please sign in to comment.