diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java
index 3f7f265c3344377f8f41ec36a0870817e7e5e2dc..5ffd7d0117e808d537db11de680c441a6ce94299 100644
--- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java
+++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/controller/DokterRestController.java
@@ -1,4 +1,4 @@
-package spring.TK.SpringTkApap.user.controller;
+package spring.tk.springtkapap.user.controller;
 
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
@@ -8,9 +8,9 @@ import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import spring.TK.SpringTkApap.appointment.AppointmentRestController;
-import spring.TK.SpringTkApap.user.model.DokterDTO;
-import spring.TK.SpringTkApap.user.service.DokterService;
+import spring.tk.springtkapap.appointment.AppointmentRestController;
+import spring.tk.springtkapap.user.model.DokterDTO;
+import spring.tk.springtkapap.user.service.DokterService;
 
 import java.util.List;
 
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java
index a95004bfd6fd3c8bdd5aaaefb7431548cc88106f..fe12341954572a67dba668e4a405629c6f02d2e1 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/appointment/AppointmentServiceImpl.java
@@ -1,7 +1,7 @@
 package spring.tk.springtkapap.appointment;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;<<
+import org.springframework.stereotype.Service;
 import spring.tk.springtkapap.appointment.model.AppointmentModel;
 import spring.tk.springtkapap.user.model.DokterModel;
 
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/CreateTagihanDTO.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/CreateTagihanDTO.java
index e4a86d112a50502af56f0304555a414127cee903..b917b3f3713924053da4e08a6c9f678d66822865 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/CreateTagihanDTO.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/CreateTagihanDTO.java
@@ -7,7 +7,6 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 
 @Setter
 @Getter
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanDTO.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanDTO.java
index d82f68bee6e6cad1cbaf055805bb73f0789f5f10..8590c8d03c038ca699ce74a1110a64d2cce2dc87 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanDTO.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanDTO.java
@@ -6,7 +6,7 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 
-import java.time.LocalDateTime;
+
 
 @Setter
 @Getter
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java
index 30d4c1345039c905f36d093113bdabf37f33ad33..53526634be817265f1dbddacc66d7a77b6a700a6 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/TagihanServiceImpl.java
@@ -29,7 +29,6 @@ public class TagihanServiceImpl implements TagihanService{
         int kode = + (int) (tagihanDB.count() + 1);
         var strKode = Integer.toString(kode);
         tagihan.setKode("BILL-" + strKode);
-//        List<ObatModel> listObat = appointment.getListResep().g
         tagihan.setAppointment(appointment);
         tagihanDB.save(tagihan);
         appointment.setListTagihan(new ArrayList<>());
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/controller/TagihanRestController.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/controller/TagihanRestController.java
index a829542c810b16334bb059df7f4e8c97452d211f..1529de89680d5326350d0a4cf2ac813edf39740f 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/controller/TagihanRestController.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/controller/TagihanRestController.java
@@ -1,18 +1,14 @@
 package spring.tk.springtkapap.tagihan.controller;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.server.ResponseStatusException;
-import spring.tk.springtkapap.appointment.model.AppointmentModel;
-import spring.tk.springtkapap.appointment.model.CreateAppointmentDTO;
-import spring.tk.springtkapap.appointment.model.DetailDTO;
-import spring.tk.springtkapap.appointment.model.GetAptDTO;
 import spring.tk.springtkapap.tagihan.CreateTagihanDTO;
 import spring.tk.springtkapap.tagihan.TagihanDTO;
-import spring.tk.springtkapap.tagihan.TagihanModel;
 import spring.tk.springtkapap.tagihan.service.TagihanServiceRest;
 import spring.tk.springtkapap.user.model.PasienModel;
 import spring.tk.springtkapap.user.service.PasienService;
@@ -23,6 +19,7 @@ import java.util.List;
 @RestController
 @CrossOrigin(origins = "*")
 @RequestMapping("/api/tagihan")
+@Slf4j
 public class TagihanRestController {
     @Autowired
     private PasienService pasienService;
@@ -33,27 +30,33 @@ public class TagihanRestController {
     @GetMapping(value = "/all")
     public List<TagihanDTO> getAllTagihan(Principal principal) {
         PasienModel pasien = pasienService.getPasienByUsername(principal.getName());
+        log.info("berhasil get semua tagihan");
         return tagihanServiceRest.listTagihan(pasien);
     }
     @PostMapping(value = "/bayar")
     public ResponseEntity<String> createAppointmentSubmit(@RequestBody CreateTagihanDTO tagihan, BindingResult bindingResult, Principal principal) {
         if (bindingResult.hasFieldErrors()) {
+            log.warn("terdapat field yang tidak valid");
             throw new ResponseStatusException(
                     HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field."
             );
         } else {
-            TagihanModel newAppointment = tagihanServiceRest.bayar(tagihan.getKode(),pasienService.getPasienByUsername(principal.getName()));
-            if (newAppointment == null) {
-                throw new ResponseStatusException(
-                        HttpStatus.INTERNAL_SERVER_ERROR, "saldo tidak cukup."
-                );
+            int newTagihan = tagihanServiceRest.bayar(tagihan.getKode(),pasienService.getPasienByUsername(principal.getName()));
+            if (newTagihan == 0) {
+                log.warn("saldo pasien tidak cukup");
+                return ResponseEntity.internalServerError().body("saldo tidak cukup");
             }
+            else if(newTagihan == -1){
+                log.warn("tagihan sudah berstatus lunas");
+                return ResponseEntity.internalServerError().body("sudah lunas sebelumnya");
+            }
+            log.info("berhasil melakukan pembayaran");
             return ResponseEntity.ok("pembayaran berhasil");
         }
     }
     @GetMapping(value = "/detail/{kodeApt}")
     public TagihanDTO getDetailApt(@PathVariable(name = "kodeApt") String kode) {
-        System.out.println(kode);
+        log.info("berhasil get tagihan");
         return tagihanServiceRest.getTagihan(kode);
     }
 }
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRest.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRest.java
index f0e3880779b33f6f04adf2213d0d3713451b881b..2e2a9c427e21939e6ca5a21bd8e1398e5758c5a8 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRest.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRest.java
@@ -1,7 +1,7 @@
 package spring.tk.springtkapap.tagihan.service;
 
 
-import spring.tk.springtkapap.tagihan.TagihanModel;
+
 import spring.tk.springtkapap.tagihan.TagihanDTO;
 import spring.tk.springtkapap.user.model.PasienModel;
 
@@ -11,5 +11,5 @@ public interface TagihanServiceRest {
     List<TagihanDTO> listTagihan(PasienModel pasien);
     TagihanDTO getTagihan(String kode);
 
-    TagihanModel bayar(String kode,PasienModel pasien);
+    int bayar(String kode,PasienModel pasien);
 }
diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRestImpl.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRestImpl.java
index 63fea8d8950f27d25b6bd2d983bac16de4d647bf..b86b3c68f9685b65612814fae0fb8661d1c4adb0 100644
--- a/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRestImpl.java
+++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/tagihan/service/TagihanServiceRestImpl.java
@@ -2,17 +2,14 @@ package spring.tk.springtkapap.tagihan.service;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import spring.tk.springtkapap.appointment.AppointmentService;
 import spring.tk.springtkapap.appointment.model.AppointmentModel;
-import spring.tk.springtkapap.appointment.model.DetailDTO;
-import spring.tk.springtkapap.appointment.model.GetAptDTO;
 import spring.tk.springtkapap.tagihan.TagihanDB;
 import spring.tk.springtkapap.tagihan.TagihanDTO;
 import spring.tk.springtkapap.tagihan.TagihanModel;
 import spring.tk.springtkapap.user.model.PasienModel;
 
 import javax.transaction.Transactional;
-import javax.validation.constraints.Null;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.NoSuchElementException;
@@ -32,9 +29,7 @@ public class TagihanServiceRestImpl implements TagihanServiceRest {
         for (AppointmentModel appointment : listAppointment) {
             if (appointment.getListTagihan().get(0) != null) {
                 TagihanModel tagihan = appointment.getListTagihan().get(0);
-                System.out.println(tagihan.getKode());
                 TagihanDTO dto = new TagihanDTO();
-                System.out.println(tagihan.getKode());
                 dto.setTanggalTerbuat(tagihan.getTanggalTerbuat().toString());
                 if(tagihan.getIsPaid()) {
                     dto.setTanggalBayar(tagihan.getTanggalBayar().toString());
@@ -55,7 +50,6 @@ public class TagihanServiceRestImpl implements TagihanServiceRest {
     }
     @Override
     public TagihanDTO getTagihan(String kode) {
-        System.out.println(kode);
         Optional<TagihanModel> tagihan = tagihanDB.findByKode(kode);
         TagihanModel tag;
         if (tagihan.isPresent()) {
@@ -74,11 +68,28 @@ public class TagihanServiceRestImpl implements TagihanServiceRest {
         newTagihan.setTanggalTerbuat(tag.getTanggalTerbuat().toString());
         newTagihan.setIsPaid(done);
         newTagihan.setDokter(tag.getAppointment().getDokter().getNama());
+        if(tag.getTanggalBayar() != null){
+            newTagihan.setTanggalBayar(tag.getTanggalBayar().toString());
+        }
+        else {
+            newTagihan.setTanggalBayar("-");
+        }
+        newTagihan.setJumlahTagihan(tag.getJumlahTagihan().toString());
         return newTagihan;
     }
     @Override
-    public TagihanModel bayar(String kode,PasienModel pasien){
+    public int bayar(String kode,PasienModel pasien){
         Optional<TagihanModel> tagihan = tagihanDB.findByKode(kode);
-        return  tagihan.orElse(null);
+        TagihanModel tagihan1 = tagihan.get();
+        if(tagihan1.getIsPaid()){
+            return -1;
+        }
+        if((pasien.getSaldo() - tagihan1.getJumlahTagihan()) < 0){
+            return 0;
+        }
+        pasien.setSaldo(pasien.getSaldo() - tagihan1.getJumlahTagihan());
+        tagihan1.setIsPaid(true);
+        tagihan1.setTanggalBayar(LocalDateTime.now());
+        return  1;
     }
 }
diff --git a/tk_apap_flutter/lib/pages/detailTagihan.dart b/tk_apap_flutter/lib/pages/detailTagihan.dart
index bdc54d2563cd5c5dc7b1b42593648986333e5082..28849d12aa8623412e411a9906566960a60da48f 100644
--- a/tk_apap_flutter/lib/pages/detailTagihan.dart
+++ b/tk_apap_flutter/lib/pages/detailTagihan.dart
@@ -129,23 +129,9 @@ class DetailTagihan extends StatelessWidget {
                                         ],
                                       ),
                                     );
-                                  } else {
-                                    showDialog<String>(
-                                      context: context,
-                                      builder: (BuildContext context) => AlertDialog(
-                                        title: Text(response.reasonPhrase),
-                                        actions: <Widget>[
-                                          TextButton(
-                                            onPressed: () =>
-                                                Navigator.pop(context, 'OK'),
-                                            child: Text('${response.statusCode}'),
-                                          )
-                                        ],
-                                      ),
-                                    );
                                   }
                                 },
-                              ),
+                              child: Text('bayar'),),
                             ],
                           ),
                         ),