diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt
index 772201574255e14ac9de25bf7d68a7126f32f0eb..160e19e1f3d52f4e8fdb410d86fb42a64f580a06 100644
--- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt
+++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt
@@ -92,6 +92,7 @@ class TransactionFragment : Fragment() {
     }
 
     fun onTransactionClicked(transactionId: Int) {
+        // Handle transaction click
         transactionViewModel.onTransactionClicked(transactionId)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt
index c1676ecc42888a2e94c8e1c2fa4ec03dbd7d9a85..ad71dd67949945468edc4a9d0ae5e377e844b8d7 100644
--- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt
+++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt
@@ -84,11 +84,6 @@ class TransactionViewModel @Inject constructor(
     val growth: LiveData<Long>
         get() = _growth
 
-    // Transaction detail (TransactionDetailViewModel)
-    private val _transactionById: MutableLiveData<Transaction> = MutableLiveData()
-    val transactionById: LiveData<Transaction>
-        get() = _transactionById
-
     // Scan data (ScanViewModel)
     private val _atomicTransaction: MutableLiveData<ScanResult> = MutableLiveData()
     val atomicTransaction: LiveData<ScanResult>
@@ -104,16 +99,6 @@ class TransactionViewModel @Inject constructor(
     val addTransactionStatus: LiveData<Boolean>
         get() = _addTransactionStatus
 
-    // Delete transaction state (DeleteTransactionViewModel)
-    private val _deleteTransactionStatus: MutableLiveData<Boolean> = MutableLiveData()
-    val deleteTransactionStatus: LiveData<Boolean>
-        get() = _deleteTransactionStatus
-
-    // Update transaction state (UpdateTransactionViewModel)
-    private val _updateTransactionStatus: MutableLiveData<Boolean> = MutableLiveData()
-    val updateTransactionStatus: LiveData<Boolean>
-        get() = _updateTransactionStatus
-
     // Camera state ?? (ScanTransactionViewModel)
     private val _cameraStatus: MutableLiveData<Boolean> = MutableLiveData()
     val cameraStatus: LiveData<Boolean>
@@ -155,23 +140,7 @@ class TransactionViewModel @Inject constructor(
         }
     }
 
-    // Delete transaction (TransactionDetailViewModel)
-    fun deleteTransaction(transaction: Transaction) {
-        viewModelScope.launch {
-            transactionDatabaseRepoImpl.deleteTransaction(transaction)
-            _deleteTransactionStatus.postValue(true)
-        }
-    }
-
-    // Update transaction (TransactionDetailViewModel)
-    fun updateTransaction(transaction: Transaction) {
-        viewModelScope.launch {
-            transactionDatabaseRepoImpl.updateTransaction(transaction)
-            _updateTransactionStatus.postValue(true)
-        }
-    }
-
-    // Get transaction (TransactionDetailViewModel)
+    // Get transaction
     fun getTransactions(type: String) {
         var sum = 0L
         viewModelScope.launch {
@@ -197,14 +166,6 @@ class TransactionViewModel @Inject constructor(
         }
     }
 
-    // Get transaction by id (TransactionDetailViewModel)
-    fun getTransactionById(id: Int){
-        viewModelScope.launch {
-            val response = transactionDatabaseRepoImpl.getTransactionById(id)
-            _transactionById.postValue(response)
-        }
-    }
-
     // Get all date
     fun getAllDate(){
         viewModelScope.launch {
@@ -356,16 +317,6 @@ class TransactionViewModel @Inject constructor(
         _addTransactionStatus.postValue(false)
     }
 
-    // Reset delete transaction state (TransactionDetailViewModel)
-    fun resetDeleteTransactionStatus(){
-        _deleteTransactionStatus.postValue(false)
-    }
-
-    // Reset update transaction state (TransactionDetailViewModel)
-    fun resetUpdateTransactionStatus(){
-        _updateTransactionStatus.postValue(false)
-    }
-
     // Change new state (NewTransactionViewModel)
     fun changeAddStatus(status: Boolean){
         _addTransactionStatus.postValue(status)
diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailViewModel.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b43ae44d49c48fa76aab9f8e7b53a91ce70968fc
--- /dev/null
+++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailViewModel.kt
@@ -0,0 +1,76 @@
+package com.example.transactionapp.ui.screen.mainmenu.transactionDetail
+
+import android.util.Log
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.example.transactionapp.domain.db.model.Transaction
+import com.example.transactionapp.domain.db.repo.TransactionDatabaseRepoImpl
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@HiltViewModel
+class TransactionDetailViewModel @Inject constructor(
+    private val transactionDatabaseRepoImpl: TransactionDatabaseRepoImpl
+): ViewModel() {
+    // Transaction detail (TransactionDetailViewModel)
+    private val _transactionById: MutableLiveData<Transaction> = MutableLiveData()
+    val transactionById: LiveData<Transaction>
+        get() = _transactionById
+
+    // Get transaction by id (TransactionDetailViewModel)
+    fun getTransactionById(id: Int){
+        viewModelScope.launch {
+            val response = transactionDatabaseRepoImpl.getTransactionById(id)
+            _transactionById.postValue(response)
+        }
+    }
+
+    // Add transaction state (NewTransactionVideModel)
+    private val _addTransactionStatus: MutableLiveData<Boolean> = MutableLiveData()
+    val addTransactionStatus: LiveData<Boolean>
+        get() = _addTransactionStatus
+
+    // Delete transaction state (TransactionDetailViewModel)
+    private val _deleteTransactionStatus: MutableLiveData<Boolean> = MutableLiveData()
+    val deleteTransactionStatus: LiveData<Boolean>
+        get() = _deleteTransactionStatus
+
+    // Update transaction state (TransactionDetailViewModel)
+    private val _updateTransactionStatus: MutableLiveData<Boolean> = MutableLiveData()
+    val updateTransactionStatus: LiveData<Boolean>
+        get() = _updateTransactionStatus
+
+    // Change new state (NewTransactionViewModel)
+    fun changeAddStatus(status: Boolean){
+        _addTransactionStatus.postValue(status)
+    }
+
+    // Delete transaction (TransactionDetailViewModel)
+    fun deleteTransaction(transaction: Transaction) {
+        viewModelScope.launch {
+            transactionDatabaseRepoImpl.deleteTransaction(transaction)
+            _deleteTransactionStatus.postValue(true)
+        }
+    }
+
+    // Update transaction (TransactionDetailViewModel)
+    fun updateTransaction(transaction: Transaction) {
+        viewModelScope.launch {
+            transactionDatabaseRepoImpl.updateTransaction(transaction)
+            _updateTransactionStatus.postValue(true)
+        }
+    }
+
+    // Reset delete transaction state (TransactionDetailViewModel)
+    fun resetDeleteTransactionStatus(){
+        _deleteTransactionStatus.postValue(false)
+    }
+
+    // Reset update transaction state (TransactionDetailViewModel)
+    fun resetUpdateTransactionStatus(){
+        _updateTransactionStatus.postValue(false)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt
index b8565a061332d5682e5b0e8ed86e4856df7f90c4..dad7c0c8e80ead757f51af7f6d495b6b43c9b29c 100644
--- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt
+++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt
@@ -5,7 +5,6 @@ import android.content.Intent
 import android.net.Uri
 import android.os.Build
 import android.os.Bundle
-import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -17,34 +16,28 @@ import com.example.transactionapp.databinding.FragmentTransactionDetailsBinding
 import com.example.transactionapp.domain.db.model.Transaction
 import com.example.transactionapp.ui.viewmodel.location.LocationModel
 import com.example.transactionapp.ui.viewmodel.location.LocationViewModel
-import com.example.transactionapp.ui.screen.mainmenu.transaction.TransactionViewModel
 import com.example.transactionapp.utils.changeDateTypeToStandardDateLocal
 import kotlinx.coroutines.flow.MutableStateFlow
 
 class TransactionDetailsFragment : Fragment() {
-
-    private val db : TransactionViewModel by activityViewModels()
+    private val transactionDetailViewModel : TransactionDetailViewModel by activityViewModels()
     private val locationViewModel: LocationViewModel by activityViewModels()
     private val locationData = MutableStateFlow<LocationModel?>(null)
-
     private lateinit var locationAdapter: LocationAdapter
 
-    companion object {
-        const val ARG_TRANSACTION_ID = "transaction_id"
-    }
-
     @RequiresApi(Build.VERSION_CODES.S)
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
         savedInstanceState: Bundle?
-    ): View? {
+    ): View {
+
         // Bind layout using layout binding
         val binding = FragmentTransactionDetailsBinding.inflate(layoutInflater)
 
         // Get an instance of transaction from transaction id argument
         val transactionId = TransactionDetailsFragmentArgs.fromBundle(requireArguments()).transactionId
-        db.getTransactionById(transactionId)
-        db.transactionById.observe(viewLifecycleOwner) {
+        transactionDetailViewModel.getTransactionById(transactionId)
+        transactionDetailViewModel.transactionById.observe(viewLifecycleOwner) {
             binding.titleInput.setText(it.title)
 
             binding.dateInput.text = changeDateTypeToStandardDateLocal(it.createdAt)
@@ -68,6 +61,7 @@ class TransactionDetailsFragment : Fragment() {
             }
         }
 
+        // Handle save transaction
         binding.saveTransactionButton.setOnClickListener {
             if (binding.titleInput.text.toString() == ""){
                 return@setOnClickListener
@@ -77,31 +71,32 @@ class TransactionDetailsFragment : Fragment() {
             }
 
             if (binding.titleInput.text.toString() != "" && binding.amountInput.text.toString() != ""){
-                db.updateTransaction(
+                transactionDetailViewModel.updateTransaction(
                     Transaction(
                         id = transactionId,
                         title = binding.titleInput.text.toString(),
                         category = binding.categoryInput.text.toString(),
                         nominal = binding.amountInput.text.toString().toLong(),
-                        createdAt = db.transactionById.value?.createdAt!!,
+                        createdAt = transactionDetailViewModel.transactionById.value?.createdAt!!,
                         location = binding.locationInput.text.toString(),
                         lat = locationData.value?.latitude?:0.0,
                         long = locationData.value?.longitude?:0.0,
                     )
                 )
-                db.changeAddStatus(true)
+                transactionDetailViewModel.changeAddStatus(true)
                 Toast.makeText(requireContext(), "Transaction Updated", Toast.LENGTH_SHORT).show()
                 requireActivity().onBackPressed()
             }
         }
 
+        // Handle delete transaction
         binding.deleteTransactionButton.setOnClickListener {
             val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext())
             builder.setMessage("Are you sure you want to delete this transaction?")
                 .setCancelable(false)
                 .setPositiveButton("Yes") { _, _ ->
-                    db.deleteTransaction(db.transactionById.value!!)
-                    db.changeAddStatus(true)
+                    transactionDetailViewModel.deleteTransaction(transactionDetailViewModel.transactionById.value!!)
+                    transactionDetailViewModel.changeAddStatus(true)
                     Toast.makeText(requireContext(), "Transaction Deleted", Toast.LENGTH_SHORT).show()
                     requireActivity().onBackPressed()
                 }
@@ -113,7 +108,7 @@ class TransactionDetailsFragment : Fragment() {
         }
 
         binding.locationInput.setOnClickListener {
-            val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=${db.transactionById.value?.lat},${db.transactionById.value?.long}"))
+            val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=${transactionDetailViewModel.transactionById.value?.lat},${transactionDetailViewModel.transactionById.value?.long}"))
             startActivity(intent)
         }