From e75db7f705fc454d89e98cf987e50d5badeec4b8 Mon Sep 17 00:00:00 2001
From: evance-mose <evasmose@gmail.com>
Date: Wed, 27 Mar 2024 11:27:34 +0200
Subject: [PATCH 1/3] Add auditEvent

---
 .../engine/auditEvent/AuditEventWorker.kt     | 84 +++++++++++++++++++
 .../engine/configuration/app/ConfigService.kt | 11 +++
 .../fhircore/quest/ui/main/AppMainActivity.kt | 15 +++-
 3 files changed, 109 insertions(+), 1 deletion(-)
 create mode 100644 android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt

diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
new file mode 100644
index 0000000000..4deb87410b
--- /dev/null
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
@@ -0,0 +1,84 @@
+package org.smartregister.fhircore.engine.auditEvent
+
+import android.content.Context
+import androidx.hilt.work.HiltWorker
+import androidx.work.CoroutineWorker
+import androidx.work.WorkerParameters
+import com.google.android.fhir.FhirEngine
+import com.google.android.fhir.logicalId
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedInject
+import dagger.hilt.android.qualifiers.ApplicationContext
+import org.hl7.fhir.r4.model.AuditEvent
+import org.hl7.fhir.r4.model.Coding
+import org.hl7.fhir.r4.model.Practitioner
+import org.smartregister.fhircore.engine.data.local.DefaultRepository
+import org.smartregister.fhircore.engine.util.SharedPreferenceKey
+import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
+import org.smartregister.fhircore.engine.util.extension.asReference
+import timber.log.Timber
+import java.util.Date
+import java.util.UUID
+
+@HiltWorker
+class AuditEventWorker
+@AssistedInject
+constructor(
+    @Assisted val appContext: Context,
+    @Assisted workerParameters: WorkerParameters,
+    val fhirEngine: FhirEngine,
+    val sharedPreferences: SharedPreferencesHelper,
+    val defaultRepository: DefaultRepository
+    ) : CoroutineWorker(appContext, workerParameters) {
+
+    override suspend fun doWork(): Result {
+        Timber.e("AuditEventWorker is running")
+        createAuditEvent()
+        return Result.success()
+    }
+
+    private suspend fun createAuditEvent(){
+        // Get Practitioner Resource
+        val practitionerID =
+            sharedPreferences.read(key = SharedPreferenceKey.PRACTITIONER_ID.name, defaultValue = null)
+        val practitioner = defaultRepository.loadResource<Practitioner>(practitionerID!!)
+
+        // Create AuditEvent Resource
+        val auditEvent = AuditEvent().apply {
+            id = UUID.randomUUID().toString()
+            type = Coding().apply {
+                system = "http://dicom.nema.org/resources/ontology/DCM"
+                code ="110114"
+                display = "User Authentication"
+            }
+            subtype = listOf(
+                Coding().apply {
+                    system = "http://dicom.nema.org/resources/ontology/DCM"
+                    code = "110122"
+                    display = "Login"
+                }
+            )
+            outcome = AuditEvent.AuditEventOutcome._0
+            action = AuditEvent.AuditEventAction.C
+            recorded = Date()
+            agent = listOf(
+                AuditEvent.AuditEventAgentComponent().apply {
+                    who = practitioner?.asReference()
+                    requestor = true
+                }
+            )
+            source = AuditEvent.AuditEventSourceComponent().apply {
+                site = "https://d-tree.org"
+                observer = practitioner?.asReference()
+            }
+        }
+
+        // Save AuditEvent Resource
+        defaultRepository.addOrUpdate(true, auditEvent,)
+    }
+
+    companion object{
+        const val NAME = "AuditEventWorker"
+    }
+
+}
\ No newline at end of file
diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt
index 10bace2ec2..c3b3a0cd33 100644
--- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt
@@ -18,17 +18,21 @@ package org.smartregister.fhircore.engine.configuration.app
 
 import android.content.Context
 import androidx.work.ExistingPeriodicWorkPolicy
+import androidx.work.OneTimeWorkRequestBuilder
 import androidx.work.PeriodicWorkRequestBuilder
 import androidx.work.WorkManager
+import dagger.hilt.android.qualifiers.ApplicationContext
 import java.util.concurrent.TimeUnit
 import org.hl7.fhir.r4.model.Coding
 import org.smartregister.fhircore.engine.appointment.MissedFHIRAppointmentsWorker
 import org.smartregister.fhircore.engine.appointment.ProposedWelcomeServiceAppointmentsWorker
+import org.smartregister.fhircore.engine.auditEvent.AuditEventWorker
 import org.smartregister.fhircore.engine.sync.ResourceTag
 import org.smartregister.fhircore.engine.task.FhirTaskPlanWorker
 import org.smartregister.fhircore.engine.task.WelcomeServiceBackToCarePlanWorker
 import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
 import org.smartregister.fhircore.engine.util.extension.extractLogicalIdUuid
+import javax.inject.Inject
 
 /** An interface that provides the application configurations. */
 interface ConfigService {
@@ -119,4 +123,11 @@ interface ConfigService {
         workRequest,
       )
   }
+
+  fun scheduleAuditEvent(context: Context) {
+    val workRequest = OneTimeWorkRequestBuilder<AuditEventWorker>().build()
+
+    WorkManager.getInstance(context)
+      .enqueue(workRequest)
+  }
 }
diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt
index 31bf881041..50286e701d 100644
--- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt
+++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt
@@ -34,6 +34,7 @@ import org.hl7.fhir.r4.model.Encounter
 import org.hl7.fhir.r4.model.ResourceType
 import org.smartregister.fhircore.engine.R
 import org.smartregister.fhircore.engine.configuration.app.ConfigService
+import org.smartregister.fhircore.engine.data.remote.shared.TokenAuthenticator
 import org.smartregister.fhircore.engine.sync.OnSyncListener
 import org.smartregister.fhircore.engine.sync.SyncBroadcaster
 import org.smartregister.fhircore.engine.task.FhirCarePlanGenerator
@@ -61,9 +62,11 @@ open class AppMainActivity : BaseMultiLanguageActivity(), OnSyncListener {
 
   @Inject lateinit var configService: ConfigService
 
+  @Inject lateinit var tokenAuthenticator: TokenAuthenticator
+
   val appMainViewModel by viewModels<AppMainViewModel>()
 
-  val authActivityLauncherForResult =
+  private val authActivityLauncherForResult =
     registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { res ->
       if (res.resultCode == Activity.RESULT_OK) {
         appMainViewModel.onEvent(AppMainEvent.ResumeSync)
@@ -75,6 +78,7 @@ open class AppMainActivity : BaseMultiLanguageActivity(), OnSyncListener {
     setupTimeOutListener()
     setContent { AppTheme { MainScreen(appMainViewModel = appMainViewModel) } }
     syncBroadcaster.registerSyncListener(this, lifecycleScope)
+    scheduleAuthWorkers()
   }
 
   override fun onResume() {
@@ -171,6 +175,15 @@ open class AppMainActivity : BaseMultiLanguageActivity(), OnSyncListener {
     }
   }
 
+  private fun scheduleAuthWorkers() {
+    val isAuthenticated = tokenAuthenticator.sessionActive()
+    if(isAuthenticated){
+      with(configService) {
+        scheduleAuditEvent(applicationContext)
+      }
+    }
+  }
+
   private fun setupTimeOutListener() {
     if (application is QuestApplication) {
       (application as QuestApplication).onInActivityListener =

From 148a2b04bd3e06424844914310d01dda6b826c91 Mon Sep 17 00:00:00 2001
From: evance-mose <evasmose@gmail.com>
Date: Thu, 28 Mar 2024 10:20:48 +0200
Subject: [PATCH 2/3] add repository for auditEvent

---
 .../engine/auditEvent/AuditEventRepository.kt | 69 +++++++++++++++++++
 .../engine/auditEvent/AuditEventWorker.kt     | 46 +------------
 .../fhircore/engine/di/CoreModule.kt          |  8 +++
 3 files changed, 79 insertions(+), 44 deletions(-)
 create mode 100644 android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt

diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt
new file mode 100644
index 0000000000..60524509ba
--- /dev/null
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt
@@ -0,0 +1,69 @@
+package org.smartregister.fhircore.engine.auditEvent
+
+import com.google.android.fhir.FhirEngine
+import org.hl7.fhir.r4.model.AuditEvent
+import org.hl7.fhir.r4.model.Coding
+import org.hl7.fhir.r4.model.Practitioner
+import org.smartregister.fhircore.engine.data.local.DefaultRepository
+import org.smartregister.fhircore.engine.util.SharedPreferenceKey
+import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
+import org.smartregister.fhircore.engine.util.extension.asReference
+import java.util.Date
+import java.util.UUID
+import javax.inject.Inject
+import javax.inject.Singleton
+
+
+@Singleton
+class AuditEventRepository
+@Inject
+constructor(
+    val defaultRepository: DefaultRepository,
+    val sharedPreferences: SharedPreferencesHelper,
+): IAuditEventRepository {
+    override suspend fun createAuditEvent() {
+        // Get Practitioner Resource
+        val practitionerID =
+            sharedPreferences.read(key = SharedPreferenceKey.PRACTITIONER_ID.name, defaultValue = null)
+        val practitioner = defaultRepository.loadResource<Practitioner>(practitionerID!!)
+
+        // Create AuditEvent Resource
+        val auditEvent = AuditEvent().apply {
+            id = UUID.randomUUID().toString()
+            type = Coding().apply {
+                system = "http://dicom.nema.org/resources/ontology/DCM"
+                code ="110114"
+                display = "User Authentication"
+            }
+            subtype = listOf(
+                Coding().apply {
+                    system = "http://dicom.nema.org/resources/ontology/DCM"
+                    code = "110122"
+                    display = "Login"
+                }
+            )
+            outcome = AuditEvent.AuditEventOutcome._0
+            action = AuditEvent.AuditEventAction.C
+            recorded = Date()
+            agent = listOf(
+                AuditEvent.AuditEventAgentComponent().apply {
+                    who = practitioner?.asReference()
+                    requestor = true
+                }
+            )
+            source = AuditEvent.AuditEventSourceComponent().apply {
+                site = "https://d-tree.org"
+                observer = practitioner?.asReference()
+            }
+        }
+
+        // Save AuditEvent Resource
+        defaultRepository.addOrUpdate(true, auditEvent,)
+    }
+}
+
+
+
+interface IAuditEventRepository {
+    suspend fun createAuditEvent()
+}
\ No newline at end of file
diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
index 4deb87410b..69b7f00a8d 100644
--- a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
@@ -26,57 +26,15 @@ class AuditEventWorker
 constructor(
     @Assisted val appContext: Context,
     @Assisted workerParameters: WorkerParameters,
-    val fhirEngine: FhirEngine,
-    val sharedPreferences: SharedPreferencesHelper,
-    val defaultRepository: DefaultRepository
+    private val auditEventRepository: AuditEventRepository
     ) : CoroutineWorker(appContext, workerParameters) {
 
     override suspend fun doWork(): Result {
         Timber.e("AuditEventWorker is running")
-        createAuditEvent()
+        auditEventRepository.createAuditEvent()
         return Result.success()
     }
 
-    private suspend fun createAuditEvent(){
-        // Get Practitioner Resource
-        val practitionerID =
-            sharedPreferences.read(key = SharedPreferenceKey.PRACTITIONER_ID.name, defaultValue = null)
-        val practitioner = defaultRepository.loadResource<Practitioner>(practitionerID!!)
-
-        // Create AuditEvent Resource
-        val auditEvent = AuditEvent().apply {
-            id = UUID.randomUUID().toString()
-            type = Coding().apply {
-                system = "http://dicom.nema.org/resources/ontology/DCM"
-                code ="110114"
-                display = "User Authentication"
-            }
-            subtype = listOf(
-                Coding().apply {
-                    system = "http://dicom.nema.org/resources/ontology/DCM"
-                    code = "110122"
-                    display = "Login"
-                }
-            )
-            outcome = AuditEvent.AuditEventOutcome._0
-            action = AuditEvent.AuditEventAction.C
-            recorded = Date()
-            agent = listOf(
-                AuditEvent.AuditEventAgentComponent().apply {
-                    who = practitioner?.asReference()
-                    requestor = true
-                }
-            )
-            source = AuditEvent.AuditEventSourceComponent().apply {
-                site = "https://d-tree.org"
-                observer = practitioner?.asReference()
-            }
-        }
-
-        // Save AuditEvent Resource
-        defaultRepository.addOrUpdate(true, auditEvent,)
-    }
-
     companion object{
         const val NAME = "AuditEventWorker"
     }
diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt
index ca29e8e5e7..3abad23558 100644
--- a/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt
@@ -30,6 +30,7 @@ import dagger.hilt.components.SingletonComponent
 import javax.inject.Singleton
 import org.hl7.fhir.r4.context.SimpleWorkerContext
 import org.hl7.fhir.r4.model.Parameters
+import org.smartregister.fhircore.engine.auditEvent.AuditEventRepository
 import org.smartregister.fhircore.engine.configuration.ConfigurationRegistry
 import org.smartregister.fhircore.engine.configuration.app.ConfigService
 import org.smartregister.fhircore.engine.data.local.DefaultRepository
@@ -91,4 +92,11 @@ class CoreModule {
     defaultRepository: DefaultRepository,
     configurationRegistry: ConfigurationRegistry,
   ): PatientDao = HivRegisterDao(fhirEngine, defaultRepository, configurationRegistry)
+
+  @Singleton
+  @Provides
+  fun provideAudiEventRepository(
+    defaultRepository: DefaultRepository,
+    sharedPreferencesHelper: SharedPreferencesHelper
+  ): AuditEventRepository = AuditEventRepository(defaultRepository, sharedPreferencesHelper)
 }

From 3b51f415e124a10602ff410ee67cc2d329e5def0 Mon Sep 17 00:00:00 2001
From: evance-mose <evasmose@gmail.com>
Date: Thu, 28 Mar 2024 14:35:11 +0200
Subject: [PATCH 3/3] spotless

---
 .../engine/auditEvent/AuditEventRepository.kt | 117 ++++++++++--------
 .../engine/auditEvent/AuditEventWorker.kt     |  55 ++++----
 .../engine/configuration/app/ConfigService.kt |   5 +-
 .../fhircore/engine/di/CoreModule.kt          |   2 +-
 .../engine/src/main/res/values/strings.xml    |   1 +
 .../fhircore/quest/ui/main/AppMainActivity.kt |   6 +-
 6 files changed, 102 insertions(+), 84 deletions(-)

diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt
index 60524509ba..3ad1be229b 100644
--- a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventRepository.kt
@@ -1,69 +1,88 @@
+/*
+ * Copyright 2021 Ona Systems, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.smartregister.fhircore.engine.auditEvent
 
-import com.google.android.fhir.FhirEngine
+import java.util.Date
+import java.util.UUID
+import javax.inject.Inject
+import javax.inject.Singleton
 import org.hl7.fhir.r4.model.AuditEvent
 import org.hl7.fhir.r4.model.Coding
 import org.hl7.fhir.r4.model.Practitioner
+import org.smartregister.fhircore.engine.R
 import org.smartregister.fhircore.engine.data.local.DefaultRepository
 import org.smartregister.fhircore.engine.util.SharedPreferenceKey
 import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
 import org.smartregister.fhircore.engine.util.extension.asReference
-import java.util.Date
-import java.util.UUID
-import javax.inject.Inject
-import javax.inject.Singleton
-
 
 @Singleton
 class AuditEventRepository
 @Inject
 constructor(
-    val defaultRepository: DefaultRepository,
-    val sharedPreferences: SharedPreferencesHelper,
-): IAuditEventRepository {
-    override suspend fun createAuditEvent() {
-        // Get Practitioner Resource
-        val practitionerID =
-            sharedPreferences.read(key = SharedPreferenceKey.PRACTITIONER_ID.name, defaultValue = null)
-        val practitioner = defaultRepository.loadResource<Practitioner>(practitionerID!!)
+  val defaultRepository: DefaultRepository,
+  val sharedPreferences: SharedPreferencesHelper,
+) : IAuditEventRepository {
+  override suspend fun createAuditEvent() {
+    // Get Practitioner Resource
+    val practitionerID =
+      sharedPreferences.read(key = SharedPreferenceKey.PRACTITIONER_ID.name, defaultValue = null)
+        ?: return
 
-        // Create AuditEvent Resource
-        val auditEvent = AuditEvent().apply {
-            id = UUID.randomUUID().toString()
-            type = Coding().apply {
-                system = "http://dicom.nema.org/resources/ontology/DCM"
-                code ="110114"
-                display = "User Authentication"
-            }
-            subtype = listOf(
-                Coding().apply {
-                    system = "http://dicom.nema.org/resources/ontology/DCM"
-                    code = "110122"
-                    display = "Login"
-                }
-            )
-            outcome = AuditEvent.AuditEventOutcome._0
-            action = AuditEvent.AuditEventAction.C
-            recorded = Date()
-            agent = listOf(
-                AuditEvent.AuditEventAgentComponent().apply {
-                    who = practitioner?.asReference()
-                    requestor = true
-                }
-            )
-            source = AuditEvent.AuditEventSourceComponent().apply {
-                site = "https://d-tree.org"
-                observer = practitioner?.asReference()
-            }
-        }
+    val practitioner = defaultRepository.loadResource<Practitioner>(practitionerID!!)
 
-        // Save AuditEvent Resource
-        defaultRepository.addOrUpdate(true, auditEvent,)
-    }
-}
+    val context = sharedPreferences.context
 
+    // Create AuditEvent Resource
+    val auditEvent =
+      AuditEvent().apply {
+        id = UUID.randomUUID().toString()
+        type =
+          Coding().apply {
+            system = context.getString(R.string.audit_event_system)
+            code = "110114"
+            display = "User Authentication"
+          }
+        subtype =
+          listOf(
+            Coding().apply {
+              system = context.getString(R.string.audit_event_system)
+              code = "110122"
+              display = "Login"
+            },
+          )
+        outcome = AuditEvent.AuditEventOutcome._0
+        action = AuditEvent.AuditEventAction.C
+        recorded = Date()
+        agent =
+          listOf(
+            AuditEvent.AuditEventAgentComponent().apply {
+              who = practitioner?.asReference()
+              requestor = true
+            },
+          )
+        source =
+          AuditEvent.AuditEventSourceComponent().apply { observer = practitioner?.asReference() }
+      }
 
+    // Save AuditEvent Resource
+    defaultRepository.addOrUpdate(true, auditEvent)
+  }
+}
 
 interface IAuditEventRepository {
-    suspend fun createAuditEvent()
-}
\ No newline at end of file
+  suspend fun createAuditEvent()
+}
diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
index 69b7f00a8d..90a32c97e2 100644
--- a/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/auditEvent/AuditEventWorker.kt
@@ -1,42 +1,45 @@
+/*
+ * Copyright 2021 Ona Systems, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.smartregister.fhircore.engine.auditEvent
 
 import android.content.Context
 import androidx.hilt.work.HiltWorker
 import androidx.work.CoroutineWorker
 import androidx.work.WorkerParameters
-import com.google.android.fhir.FhirEngine
-import com.google.android.fhir.logicalId
 import dagger.assisted.Assisted
 import dagger.assisted.AssistedInject
-import dagger.hilt.android.qualifiers.ApplicationContext
-import org.hl7.fhir.r4.model.AuditEvent
-import org.hl7.fhir.r4.model.Coding
-import org.hl7.fhir.r4.model.Practitioner
-import org.smartregister.fhircore.engine.data.local.DefaultRepository
-import org.smartregister.fhircore.engine.util.SharedPreferenceKey
-import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
-import org.smartregister.fhircore.engine.util.extension.asReference
 import timber.log.Timber
-import java.util.Date
-import java.util.UUID
 
 @HiltWorker
 class AuditEventWorker
 @AssistedInject
 constructor(
-    @Assisted val appContext: Context,
-    @Assisted workerParameters: WorkerParameters,
-    private val auditEventRepository: AuditEventRepository
-    ) : CoroutineWorker(appContext, workerParameters) {
-
-    override suspend fun doWork(): Result {
-        Timber.e("AuditEventWorker is running")
-        auditEventRepository.createAuditEvent()
-        return Result.success()
-    }
+  @Assisted val appContext: Context,
+  @Assisted workerParameters: WorkerParameters,
+  private val auditEventRepository: AuditEventRepository,
+) : CoroutineWorker(appContext, workerParameters) {
 
-    companion object{
-        const val NAME = "AuditEventWorker"
-    }
+  override suspend fun doWork(): Result {
+    Timber.e("AuditEventWorker is running")
+    auditEventRepository.createAuditEvent()
+    return Result.success()
+  }
 
-}
\ No newline at end of file
+  companion object {
+    const val NAME = "AuditEventWorker"
+  }
+}
diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt
index c3b3a0cd33..fc6077c3cd 100644
--- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/app/ConfigService.kt
@@ -21,7 +21,6 @@ import androidx.work.ExistingPeriodicWorkPolicy
 import androidx.work.OneTimeWorkRequestBuilder
 import androidx.work.PeriodicWorkRequestBuilder
 import androidx.work.WorkManager
-import dagger.hilt.android.qualifiers.ApplicationContext
 import java.util.concurrent.TimeUnit
 import org.hl7.fhir.r4.model.Coding
 import org.smartregister.fhircore.engine.appointment.MissedFHIRAppointmentsWorker
@@ -32,7 +31,6 @@ import org.smartregister.fhircore.engine.task.FhirTaskPlanWorker
 import org.smartregister.fhircore.engine.task.WelcomeServiceBackToCarePlanWorker
 import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
 import org.smartregister.fhircore.engine.util.extension.extractLogicalIdUuid
-import javax.inject.Inject
 
 /** An interface that provides the application configurations. */
 interface ConfigService {
@@ -127,7 +125,6 @@ interface ConfigService {
   fun scheduleAuditEvent(context: Context) {
     val workRequest = OneTimeWorkRequestBuilder<AuditEventWorker>().build()
 
-    WorkManager.getInstance(context)
-      .enqueue(workRequest)
+    WorkManager.getInstance(context).enqueue(workRequest)
   }
 }
diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt
index 3abad23558..e32e09ec55 100644
--- a/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt
+++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/di/CoreModule.kt
@@ -97,6 +97,6 @@ class CoreModule {
   @Provides
   fun provideAudiEventRepository(
     defaultRepository: DefaultRepository,
-    sharedPreferencesHelper: SharedPreferencesHelper
+    sharedPreferencesHelper: SharedPreferencesHelper,
   ): AuditEventRepository = AuditEventRepository(defaultRepository, sharedPreferencesHelper)
 }
diff --git a/android/engine/src/main/res/values/strings.xml b/android/engine/src/main/res/values/strings.xml
index df30809186..6b537661db 100644
--- a/android/engine/src/main/res/values/strings.xml
+++ b/android/engine/src/main/res/values/strings.xml
@@ -155,4 +155,5 @@
     <string name="error_loading_config_general">Error connecting to the server. Please contact the system administrator</string>
     <string name="re_fetch_practitioner">Re-fetch Practitioner</string>
     <string name="dev_menu">Dev Menu</string>
+    <string name="audit_event_system">http://dicom.nema.org/resources/ontology/DCM</string>
 </resources>
diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt
index 50286e701d..2d79dd8fae 100644
--- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt
+++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt
@@ -177,10 +177,8 @@ open class AppMainActivity : BaseMultiLanguageActivity(), OnSyncListener {
 
   private fun scheduleAuthWorkers() {
     val isAuthenticated = tokenAuthenticator.sessionActive()
-    if(isAuthenticated){
-      with(configService) {
-        scheduleAuditEvent(applicationContext)
-      }
+    if (isAuthenticated) {
+      with(configService) { scheduleAuditEvent(applicationContext) }
     }
   }