Luận văn Phân tích và xây dựng chức năng giám định tự động trong hệ thống giám định bảo hiểm xã hội

Luận văn đã trình bày kiến trúc hướng dịch vụ SOA, phương pháp xây dựng một ứng dụng dựa trên kiến trúc hướng dịch vụ SOA cụ thể là phương pháp top-down. Từ đó áp dụng vào bài toán giám định tự động. Luận văn đã phân tích và xây dựng thành công: - Bộ service giám định hồ sơ: GetDataKB, ProcessDataKB, SendDataKB - Bộ service giám định danh mục: GetData, ProcessData, SendData - Bộ quy tắc hồ sơ: Quy tắc thẻ, quy tắc mức hưởng, quy tắc thuốc, quy tắc dịch vụ kỹ thuật, quy tắc vật tư y tế và quy tắc khác về máu, thanh toán ngày giường - Bộ quy tắc danh mục: Quy tắc thuốc thầu tỉnh, vật tư thầu tỉnh, thuốc bệnh viện, dịch vụ kỹ thuật bệnh viện, vật tư y tế bệnh viện. Hiện tại bộ service hồ sơ có thể xử lý được khoảng trên 40 hồ sơ/giây, đóng vai trò đắc lực hỗ trợ giám định viên phát hiện xử lý sai phạm trong quá trình thanh quyết toán bảo hiểm y tế. Giúp tiết kiệm ngân sách hàng năm của nhà nước. Nhưng hạn chế của giải pháp này là phải định nghĩa trước được bộ quy tắc cần phải chạy, vì vậy trong tương lai định hướng phát triển của em sẽ theo hướng mà sẽ mã hóa các bộ quy tắc trước được lưu trữ trong file hoặc database dưới dạng chuỗi base64 hoặc json. Trong service ProcessDataKB thực hiện giám định, sẽ cần phát triển tính năng đọc được chuỗi mã hóa quy tắc để tìm ra những quy tắc giám định. Với giải pháp này khi thêm quy tắc mới chỉ cần thêm một chuỗi mã hóa quy tắc mà không cần sửa lại service xử lý. Hiện tại với giám định tự động chưa có yêu cầu công khai như một dịch vụ nhưng trong tương lai giám định tự động có thể sẽ được công khai rộng rãi như một dịch vụ, để các cơ sở thực hiện giám định tự động trước khi gửi hồ sơ để tránh sai phạm, mất thời gian gửi dữ liệu. Chức năng sẽ công khai một đầu webservice để cơ sở thực hiện gửi hồ sơ dạng file xml, tận dụng các bộ service nghiệp vụ như hiện tại để xử lý và trả lại kết quả cho webservice thông qua hệ thống message queue.

pdf96 trang | Chia sẻ: yenxoi77 | Lượt xem: 471 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Luận văn Phân tích và xây dựng chức năng giám định tự động trong hệ thống giám định bảo hiểm xã hội, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ssage Broker). Một trong những hệ thống message broker phổ biến cũng như dễ sử dụng hiện nay là RabbitMQ, về rabbitMQ thì đã được trình bày trong phần giám định hồ sơ. Cơ sở dữ liệu: Oracle 11g 64bit Ngôn ngữ lập trình: C# trên môi trường .Net 4.0, công cụ lập trình Visual Studio 15. Các thư viện client sử dụng sẽ được trình bày chi tiết hơn ở chương 4. 3.2.2.8. Các quy tắc giám định danh mục  Danh mục thuốc tỉnh: - A1_1: Thuốc không có số đăng ký Trường hợp thuốc phóng xạ và vị thuốc y học cổ truyền thì không có số đăng ký nên sẽ bỏ qua còn những trường hợp khác không có số đăng ký sẽ cảnh báo (DM_THUOC_THAU.SODK == null). - A1_2: Thuốc chưa được kê khai Thuốc cần kê khai với cục quản lý dược để cấp số đăng ký, vì vậy tìm kiếm với số đăng ký được gửi lên trong danh mục kê khai kê khai lại của cục quản lý dược nếu không tìm thấy thì từ chối duyệt những thuốc này (DM_THUOC_KK). - A1_3: Thuốc vượt giá kê khai kê khai lại 64 Với những thuốc đã được kê khai, cần kiểm tra giá khi gửi lên với giá thuốc khi kê khai bên cục quản lý, nếu giá thuốc gửi lên mà cao hơn thì sẽ từ chối duyệt những thuốc giá cao hơn (DM_THUOC_THAU.GIA > DM_THUOC_KK.GIA). - A1_5: Thuốc ngoài danh mục Bộ Y tế Tùy trường hợp thuốc là đơn chất hay đa chất có quy định, đa chất không có quy định mà kiểm tra tìm kiếm trong Thông tư 40 (DM_HOATCHAT) hay Thông tư 05 (DM_THUOCYHCT). Khi không tìm thấy sẽ tiến hành cảnh báo thuốc này. - A1_6: Không có thuốc được cấp số đăng ký có cùng đường dùng và ngày công bố phù hợp Với trường hợp thuốc phóng xạ và vị thuốc y học cổ truyền thì không có số đăng ký, còn những trường hợp còn lại có số đăng ký, cần kiểm số đăng ký này trên cục quản lý dược. Nếu không có thuốc nào được tìm thấy thì từ chối thuốc được gửi lên (DM_THUOC). - A1_8: Thuốc kết hợp Vitamin sai quy định Chỉ kiểm tra với những đa chất không có quy định tại Thông tư 40 (DM_HOATCHAT). Theo quy định hoạt chất vitamin không được kết hợp với một hoạt chất khác không cùng nhóm vitamin nên sẽ kiểm tra nếu thuốc đa chất không có quy định mà có vitamin kết hợp với một hoặc nhiều hoạt chất không cùng nhóm vitamin thì sẽ tiến hành cảnh báo (Kiểm tra các hoạt chất trong của thuốc, từ MA_THUOC). - A1_9: Sai hoạt chất Với trường hợp thuốc tân dược, kiểm tra với Thông tư 40 nếu tên hoạt chất của thuốc được gửi lên khác so với hoạt chất được quy định với Thông tư 40 thì tiến hành cảnh báo (tìm trong DM_HOATCHAT theo mã hoạt chất trong DM_THUOC_THAU.MA_THUOC, kiểm tra DM_THUOC_THAU.TEN với DM_HOATCHAT.TEN). - A1_10: Đa chất kết hợp sai đơn chất 65 Với trường hợp đa chất được kết hợp bởi nhiều đơn chất, cần kiểm tra từng đơn chất có tồn tại trong Thông tư 40 hay Thông tư 05 hay không (DM_HOATCHAT với DM_THUOCYHCT). Nếu tồn tại một đơn chất không tồn tại thì tiến hành cảnh báo vi phạm. - A1_11: Đa chất kết hợp sai đường dùng Với trường hợp đa chất kết hợp bởi nhiều đơn chất, những đơn chất đã tồn tại trong Thông tư 40 hay Thông tư 05 (DM_HOATCHAT, DM_THUOCYHCT) thì cần kiểm tra những đơn chất này có cùng đường dùng hay nhóm đường dùng được quy định ở Thông tư 40, Thông tư 05 hay không. Nếu tồn tại một đơn chất mà đường dùng khác hoặc đường dùng không thuộc nhóm đường dùng thì tiến hành cảnh báo vi phạm.  Danh mục vật tư tỉnh: - A3_16: Không nằm trong danh mục dùng chung Bộ y tế Cần kiểm tra vật tư được gửi lên có trong danh mục vật tư mà Bộ y tế ban hành hay không (DM_VATTU). Nếu vật tư gửi lên không nằm trong danh mục vật tư của Bộ y tế thì sẽ bị từ chối phê duyệt (DM_VATTU_THAU). - A3_17: Sai tên vật tư y tế Khi vật tư gửi lên đã có trong danh mục vật tư mà Bộ y tế ban hành (DM_VATTU), cần kiểm tra tên của vật tư gửi lên có giống với tên của vật tư mà Bộ y tế ban hành hay không. Nếu không giống thì cần cảnh báo (DM_VATTU_THAU.TEN != DM_VATTU.TEN). - A3_18: Vật tư y tế không thanh toán riêng Có những vật tư sẽ không được thanh toán riêng nếu thanh toán một mình vì vậy khi vật tư đã có trong danh mục vật tư mà Bộ y tế ban hành (DM_VATTU), nếu vật tư này không được thanh toán riêng thì cần từ chối phê duyệt (DM_VATTU.KHONGTHANHTOANRIENG == 1).  Danh mục thuốc bệnh viện: - B1_20: Thuốc kết hợp nhiều đường dùng khác nhau 66 Với thuôc tân dược, trường hợp đa chất được kết hợp bởi nhiều đơn chất, cần kiểm tra tất cả các đơn chất được kết hợp có cùng đường dùng hoặc nhóm đường dùng. Nếu tồn tại một hoặc nhiều đơn chất mà không có cùng đường dùng hoặc nhóm đường dùng thì sẽ cảnh báo (từ DM_THUOC_BV.MA -> lấy trong DM_HOATCHAT.DUONGDUNG). - B1_21: Thuốc tân dược không có số đăng ký Trường hợp thuốc tân dược gửi lên không có số đăng ký cần cảnh báo để giám định viên biết (DM_THUOC_BV.LOAITHUOC == 1 và DM_THUOC_BV.SODK == null). - B1_22: Thuốc không có tên hoạt chất/ đường dùng Trường hợp thuốc tân dược (DM_THUOC_BV.LOAITHUOC == 1) gửi lên không có tên hoạt chất hoặc đường dùng cần cảnh báo để giám định viên biết. (DM_THUOC_BV.HOATCHAT == null hoặc DUONGDUNG == null). - B1_23: Tân dược nằm ngoài danh mục Trường hợp thuốc tân dược, đơn chất hay đa chất có quy định hay đa chất không có quy định, cần kiểm tra các hoạt chất của thuốc tồn tại trong Thông tư 40 (DM_HOATCHAT) hoặc Thông tư 05 (DM_THUOCYHCT). Nếu tồn tại một hoặc nhiều hoạt chất không tồn tại trong Thông tư 40 hoặc Thông tư 05 thì sẽ từ chối phê duyệt thuốc. - B1_25: Thuốc sử dụng sai hạng Với thuốc tân dược, trong Thông tư 40 có quy định về hạng bệnh viện được sử dụng các loại thuốc khác nhau, vì vậy cần kiểm tra thuốc được dùng tại cơ sở gửi lên có đúng hạng đã được quy định trong Thông tư 40 hay không. Nếu sử dụng sai hạng sẽ cảnh báo (DM_HOATCHAT.HANG != CSKCB.HANGBV). - B1_26: Thuốc vượt giá kê khai kê khai lại Với thuốc tân dược, khi cơ sở gửi thuốc lên giám định, cần kiểm tra giá thuốc của cơ sở gửi lên so với giá thuốc mà cục quản lý dược quản lý. Nếu giá thuốc cơ sở 67 gửi lên cao hơn giá thuốc cục quản lý dược quản lý thì sẽ bị từ chối phê duyệt (DM_THUOC_BV.GIA > DM_THUOC_KK.GIA). - B1_27: Thuốc tân dược vượt giá đấu thầu Với thuốc tân dược (DM_THUOC_BV.LOAITHUOC == 1), khi cơ sở gửi thuốc lên giám định cũng cần kiểm tra giá thuốc của cơ sở gửi lên so với giá thuốc mà tỉnh đã đấu thầu. Nếu giá thuốc cơ sở gửi lên cao hơn giá thuốc tỉnh đã đấu thầu thì sẽ bị từ chối phê duyệt (DM_THUOC_BV.GIA > DM_THUOC_THAU.GIA). - B1_28: Thuốc kết hợp nhóm Vitamin ngoài quy định Với thuốc tân dược, đa chất mà có chứa đơn chất là vitamin (mã nhóm chứa .A27). Theo quy định vitamin sẽ chỉ được kết hợp với các đơn chất là cùng vitamin hoặc nhóm vitamin. Cần kiểm tra các đơn chất của thuốc, nếu tồn tại một đơn chất khác nhóm vitamin thì cần cảnh báo thuốc. - B1_30: Thuốc tân dược ngoài thầu Với thuốc tân dược, khi cơ sở gửi lên giám định, cần kiểm tra lại so với dữ liệu đấu thầu của tỉnh (DM_THUOC_THAU), nếu thuốc cơ sở gửi lên không tồn tại trong dữ liệu đấu thầu của tỉnh thì sẽ bị từ chối phê duyệt. - B1_31: Thuốc phối hợp có sử dụng nhóm điều trị ung thư Với thuốc tân dược, đa chất mà có chứa hoạt chất có mã nhóm điều trị ung thư (mã nhóm chứa .A.8.1). Cần kiểm tra cơ sở đấy có được sử dụng thuốc điều trị ung thư hay không (COSO_KCB.UNGTHU != 1). Nếu không được điều trị cần từ chối phê duyệt. - B1_32: Thuốc sai tên hoạt chất Với thuốc tân dược (DM_THUOC_BV.LOAITHUOC == 1), cần kiểm tra từng tên hoạt chất cấu thành thuốc mà cơ sở gửi lên so với Thông tư 40. Nếu tên hoạt chất khác nhau cần cảnh báo vi phạm (DM_THUOC_BV.HOATCHAT != DMHOATCHAT.TEN). - B1_33: Thuốc sai tên đường dùng 68 Với thuốc tân dược, cần kiểm tra đường dùng của các hoạt chất, nếu tồn tại một hoạt chất có đường dùng khác hoặc nhóm đường dùng khác thì cần cảnh báo vi phạm (DM_THUOC_BV.DUONGDUNG != DM_HOATCHAT.DUONGDUNG). - B1_34: Thuốc sử dụng vượt tuyến đi kèm với dịch vụ kỹ thuật Với thuốc tân dược, các thuốc cơ sở gửi lên cần kiểm tra với Thông tư 40 (DM_HOATCHAT) để biết hạng bệnh viện được sử dụng. Nếu sai hạng, sẽ kiểm tra quyết định phê duyệt kèm theo (DM_HOATCHAT.HANG != COSO_KCB.HANGBV). Nếu không có quyết định phê duyệt cơ sở được sử dụng thuốc này thì tiến hành từ chối phê duyệt (DM_QUYETDINHPHEDUYET). - B1_35: Thuốc có số đăng ký chưa được công bố Với thuốc tân dược, cần kiểm tra thuốc cơ sở gửi lên có tồn tại trong cục quản lí dược hay không (DM_THUOC). Nếu không tồn tại thì tiến hành từ chối phê duyệt. - B1_37: Thuốc tân dược sai tên so với thầu Với thuốc tân dược, cần kiểm tra tên thuốc cơ sở gửi lên so với tên thuốc trong dữ liệu đấu thầu của tỉnh. Nếu khác nhau cần cảnh báo (DM_THUOC_BV.TEN != DM_THUOC_THAU.TEN). - B1_38: Thuốc tân dược sai đường dùng so với thầu Với thuốc tân dược, cần kiểm tra đường dùng của thuốc cơ sở gửi lên so với đường dùng của thuốc trong dữ liệu đấu thầu của tỉnh. Nếu đường dùng khác nhau cần cảnh báo (DM_THUOC_BV.DUONGDUNG != DM_THUOCTHAU.DUONGDUNG).  Danh mục dịch vụ kỹ thuật bệnh viện: - B5_62: Dịch vụ kỹ thuật không nằm trong danh mục tương đương Kiểm tra dịch vụ kĩ thuật bệnh viện cơ sở gửi lên có nằm trong danh mục tương đương mà Bộ y tế ban hành hay không (DM_DICHVU_TD). Nếu dịch vụ kỹ thuật bệnh viện cơ sở gửi lên không nằm trong danh mục tương đương thì tiến hành từ chối phê duyệt. 69 - B5_63: Dịch vụ có tên sai quy định (Thông tư 43, Thông tư 50) Với dịch vụ kỹ thuật bệnh viện cơ sở gửi lên đã tồn tại trong Thông tư 43, Thông tư 50, tiến hành kiểm tra tên của dịch vụ bệnh viện cơ sở gửi lên với tên dịch vụ kỹ thuật trong Thông tư 43, Thông tư 50. Nếu khác nhau thì cảnh báo. (DM_DICHVU_BV.TEN != DM_TEN_DICHVU.TEN) - B5_66: Dịch vụ kỹ thuật không phù hợp với tuyến, hạng của bệnh viện Thông tư 43, Thông tư 50 có quy định về hạng bệnh viện được sử dụng dịch vụ kỹ thuật, vì vậy cần kiểm tra dịch vụ kỹ thuật cơ sở gửi lên có phù hợp với hạng viện viện của cơ sở hay không. Nếu hạng bệnh viện không phù hợp theo Thông tư 43, Thông tư 50 thì từ chối phê duyệt (COSO_KCB.HANGBV != DM_TEN_DICHVU.HANG). - B6_68: Dịch vụ kỹ thuật không nằm trong danh mục phê duyệt của tỉnh Kiểm tra danh mục dịch vụ kỹ thuật phê duyệt của tỉnh, nếu dịch vụ kỹ thuật cơ sở gửi lên không tồn tại trong danh mục dịch vụ kỹ thuật phê duyệt của tỉnh thì tiến hành từ chối phê duyệt (DM_GIA_DICHVU_TINH). - B6_69: Giá sử dụng cao hơn giá phê duyệt Với những dịch vụ kỹ thuật đã nằm trong danh mục dịch vụ kỹ thuật phê duyệt của tỉnh, tiến hành so sánh giá dịch vụ kỹ thuật cơ sở gửi lên với danh mục dịch vụ kỹ thuật phê duyệt của tỉnh, nếu giá lớn hơn thì tiến hành từ chối phê duyệt (DM_DICHVU_BV.GIA > DM_GIA_DICHVU_TINH.GIA). - B6_70: Giá sử dụng cao hơn giá trong thông tư Bộ Y tế Với những dịch vụ kỹ thuật đã nằm trong danh mục dịch vụ kỹ thuật tương đương do Bộ y tế ban hành, tiến hành kiểm tra giá của dịch vụ kỹ thuật cơ sở gửi lên với giá của dịch vụ kĩ thuật trong danh mục tương đương mà Bộ y tế ban hành. Nếu lớn hơn thì từ chối phê duyệt (DM_DICHVU_BV.GIA > DM_DICHVU_TD.GIA). - B6_71: Dịch vụ kỹ thuật không nằm trong danh mục được phê duyệt của cơ sở thực hiện 70 Theo Công văn 510, dịch vụ kỹ thuật của cơ sở gửi lên sẽ nằm trong danh mục được phê duyệt của cơ sở thực hiện. Vì vậy cần kiểm tra dịch vụ kỹ thuật của cơ sở gửi lên có nằm trong danh mục dịch vụ kỹ thuật của cơ sở thực hiện. Nếu không tồn tại thì thực hiện từ chối phê duyệt.  Danh mục vật tư bệnh viện: - B7_72: Vật tư y tế không nằm trong danh mục Bộ y tế Với những vật tư cơ sở gửi lên, cần kiểm tra với danh mục vật tư do Bộ y tế ban hành, nếu vật tư cơ sở gửi lên mà không tồn tại trong danh mục vật tư do Bộ y tế ban hành thì từ chối phê duyệt (DM_VATTU). - B7_73: Vật tư y tế không thanh toán riêng Với những vật tư đã tồn tại trong danh mục vật tư do Bộ y tế ban hành thì tiến hành kiểm tra vật tư đó có được thanh toán riêng hay không. Nếu vật tư đó không được thanh toán riêng thì cảnh báo (DM_VATTU.KHONGTHANHTOANRIENG == 1). - B7_74: Sai tên vật tư y tế Với những vật tư đã tồn tại trong danh mục vật tư do Bộ y tế ban hành thì tiến hành kiểm tra tên của vật tư đó so với vật tư trong danh mục Bộ y tế. Nếu tên khác nhau thì tiến hành cảnh báo (DM_VATTU_BV.TEN != DM_VATTU.TEN). - B7_75: Vật tư y tế không nằm trong danh mục thầu tỉnh Với những vật tư y tế cơ sở gửi lên, cần kiểm tra với danh mục đấu thầu của tỉnh (DM_VATTU_THAU). Nếu trong danh mục đấu thầu của tỉnh không tồn tại vật tư mà cơ sở gửi lên thì tiến hành từ chối phê duyệt - B7_76: Vật tư y tế giá cao hơn danh mục thầu tỉnh Với những vật tư y tế cơ sở gửi lên đã tồn tại trong danh mục đấu thầu của tỉnh (DM_VATTU_THAU), kiểm tra giá vật tư y tế mà cơ sở đưa lên, nếu giá vật tư y tế mà cơ sở đưa lên lớn hơn giá của vật tư trong danh mục đấu thầu tỉnh thì tiến hành từ chối phê duyệt (DM_VATTU_BV.GIA > DM_VATTU_THAU.GIA). 71 3.3. Kết luận Chương 3 đã giới thiệu về hệ thống giám định bảo hiểm xã hội việt nam, từ đó giới thiệu về bài toán giám định tự động, các tính chất, yêu cầu của giám định tự động. Áp dụng các bước xây dựng một ứng dụng kiến trúc hướng dịch vụ vào bài toán giám định tự động. Phân tích và xây dựng các dịch vụ được đưa cùng hai bộ quy tắc hồ sơ và quy tắc danh mục. 72 CHƯƠNG 4: CÀI ĐẶT, TRIỂN KHAI VÀ THỰC NGHIỆM GIÁM ĐỊNH TỰ ĐỘNG 4.1. Cài đặt Như đã đề cập trong chương trước, ta sẽ sử dụng: Ngôn ngữ lập trình: C# môi trường .Net 4.0 Phiên bản ODTwithODAC 32bit, 64bit phiên bản 11 Công cụ lập trình: Visual Studio 15 4.1.1. Giám định hồ sơ 4.1.1.1. GetDataKB Nhiệm vụ của dịch vụ GetDataKB sẽ cần phải chạy độc lập, liên tục khi có các hồ sơ mới được gửi lên và lưu vào bảng Xml19324, Xml29324, Xml39324, Xml49324, Xml59324. Sau khi lấy được danh sách các hồ sơ mới được gửi lên dưới dạng danh sách Object của Xml19324 dịch vụ sẽ cần phải gửi lên hệ thống Message Broker với queue có tên là WaitingProcessKB. Trong trường hợp xảy ra sự cố thì dịch vụ cần phải xử lý sự cố cũng như ghi log lại để quản trị viên có thể xử lý kịp thời. Dịch vụ cần quét liên tục nên cơ chế Timer sẽ phù hợp với yêu cầu này. Với tham số thời gian vòng lặp sẽ được đọc ở file cấu hình để tùy chỉnh số giây mà Timer sẽ quét lượt tiếp theo. Vì cần đánh dấu các hồ sơ đã lấy để xử lý, mà thời gian đánh dấu sẽ có độ trễ nên dịch vụ ta sẽ thực hiện theo cơ đế đơn luồng. Dịch vụ GetXml19324(): Dịch vụ lấy những hồ sơ KCB theo trạng thái mới được gửi lên: Sử dụng Nhibernate.dll để kết nối đến cơ sở dữ liệu. Rồi thực hiện select trong bảng Xml19324 với status = 0, mỗi lần ta sẽ lấy một lượng theo cấu hình trong file cấu hình, sau khi lấy thì tiến hành cập nhật status của bản ghi = 1 để đánh dấu bản ghi là trạng thái đã được lấy để xử lý. 73 SendMessage(Message): Dịch vụ sẽ gửi thông điệp cho thành phần khác với thông điệp dạng đối tượng Message lên hệ thống MessageBroker với queue tên WaitingProcessKB. Tạo kết nối đến Hệ thống MessageBroker sử dụng RabbitMQ.Client.dll. Sau khi tạo kết nối thì tiến hành gửi nội dung thông điệp lên queue. Gửi nội dung lên queue, cần mã hóa nội dung gửi thành mảng byte. Hàm chuyển từ đối tượng sang mảng byte được hỗ trợ bởi Newtonsoft.Json.dll Xử lý(exeption): Xử lý khi xảy ra sự cố, trong trường hợp có lỗi kết nối đến cơ sở dữ liệu thì sẽ tiến hành ghi log để quản trị viên có thể xử lý, còn trường hợp có sự cố khi gửi thông điệp lên queue thì sẽ tiến hành cập nhật lại bản ghi thành trạng thái mới (status = 0). Ghilog(exeption): Dịch vụ ghi log khi xảy ra sự cố dùng log4net.dll 4.1.1.2. ProcessDataKB Nhiệm vụ của dịch vụ ProcessDataKB là thực hiện tìm kiếm trên queue WaitingProcessKB, nếu có thông điệp mới được gửi đến từ dịch vụ GetDataKB thì tiến hành giải mã thông điệp, thực hiện giám định và gửi thông điệp tới dịch vụ khác thông qua queue FinishProcessKB của RabbitMQ. Trong trường hợp xảy ra sự cố thì tiến hành xử lý và ghi log để quản trị viên biết và xử lý kịp thời. Dịch vụ cần quét liên tục nên cơ chế Timer sẽ phù hợp với yêu cầu này. Với tham số thời gian vòng lặp sẽ được đọc ở file cấu hình để tùy chỉnh số giây mà Timer sẽ quét lượt tiếp theo. Với việc nghiệp vụ có thể thực hiện một cách song song, vì vậy dịch vụ sẽ thực hiện cơ chế đa luồng để tăng hiệu năng. Số luồng sẽ được cấu hình ở file cấu hình. GetMesssage(): Dịch vụ nhận thông điệp từ dịch vụ khác, tiến hành kết nối đến RabbitMQ để lấy thông điệp. Sau khi kết nối đến queue WaitingProcessKB của hệ thống MessageBroker sẽ tiến hành lấy thông điệp. Nhưng nội dung của thông điệp là chuỗi json vì vậy cần giải mã thông điệp về đối tượng để sử dụng. 74 Giải mã(Message): Dịch vụ giải mã thông điệp, khi đã lấy được phần nội dung trong thông điệp, nhưng phần nội dung của thông điệp đang ở dạng mảng bytes, vì vậy cần giải mã về dạng đối tượng để xử lý giám định. Với hàm chuyển từ mảng bytes sang chuỗi string của System.dll của .net Hàm chuyển từ chuỗi json sang đối tượng message sử dụng thư viện Newtonsoft.Json.dll Hàm chuyển từ chuỗi base64 sang đối tượng sử dụng thư viện Newtonsoft.Json.dll và System.dll ConnectDB(): Kết nối cơ sở dữ liệu sử dụng Nhibernate.dll GetDmFunction(xml.NgayThanhToan): Lấy những quy tắc đang bật theo ngày thanh toán của hồ sơ. Lấy những bản ghi thỏa mãn điều kiện, start_date nhỏ hơn hoặc bằng ngày thành toán, end_date có thể null hoặc lớn hơn ngày thanh toán và giá trị value bằng một là những quy tắc đang được bật. Run(Xml19324): Thực hiện chạy các quy tắc giám định hồ sơ, với danh sách các quy tắc hồ sơ lấy được từ dịch vụ GetDmFunction(xml.NgayThanhToan), tiến hành chạy lần lượt qua các quy tắc để phát hiện sai phạm. Các quy tắc sẽ được gọi bằng phương thức Invoke theo tên hàm trùng với Key trong DmFunction. Nội dung các quy tắc sẽ tuân theo chi tiết trong phần các quy tắc giám định hồ sơ. SendMessage(Message): Dịch vụ sẽ gửi thông điệp cho thành phần khác với thông điệp dạng đối tượng Message lên hệ thống MessageBroker với queue tên FinishProcessKB. Tạo kết nối đến Hệ thống MessageBroker sử dụng RabbitMQ.Client.dll. Thực hiện chuyển đổi đối tượng thông điệp sang mảng byte để thực hiện gửi lên queue. Với hàm chuyển từ đối tượng sang mảng byte được hỗ trợ bởi Newtonsoft.Json.dll Xử lý(exeption): Xử lý khi xảy ra sự cố, trong trường hợp có lỗi kết nối đến cơ sở dữ liệu thì sẽ tiến hành ghi log để quản trị viên có thể xử lý, còn trường hợp có sự cố khi gửi thông điệp lên queue thì sẽ tiến hành cập nhật lại bản ghi thành trạng thái mới. 75 Ghilog(exeption): Dịch vụ ghi log khi xảy ra sự cố dùng log4net.dll 4.1.1.3. SendDataKB Nhiệm vụ của dịch vụ SendDataKB là thực hiện tìm kiếm trên queue FinishProcessKB, nếu có thông điệp mới được gửi đến từ dịch vụ ProcessDataKB thì tiến hành giải mã thông điệp, cập nhật kết quả vào cơ sở dữ liệu, thực hiện tính toán các trường nghiệp vụ để tiến hành gửi dữ liệu lên Solr. Trong trường hợp xảy ra sự cố thì tiến hành xử lý và ghi log để quản trị viên biết và xử lý kịp thời. Dịch vụ cần quét liên tục nên cơ chế Timer sẽ phù hợp với yêu cầu này. Với tham số thời gian vòng lặp sẽ được đọc ở file cấu hình để tùy chỉnh số giây mà Timer sẽ quét lượt tiếp theo. Với việc nghiệp vụ có thể thực hiện một cách song song, vì vậy dịch vụ sẽ thực hiện cơ chế đa luồng để tăng hiệu năng. Số luồng sẽ được cấu hình ở file cấu hình. GetMesssage(): Dịch vụ nhận thông điệp từ dịch vụ khác, tiến hành kết nối đến RabbitMQ để lấy thông điệp. Sau khi kết nối đến queue FinishProcessKB của hệ thống MessageBroker sẽ tiến hành lấy thông điệp. Giải mã(Message): Dịch vụ giải mã thông điệp, khi đã lấy được phần nội dung trong thông điệp, nhưng phần nội dung của thông điệp đang ở dạng mảng bytes, vì vậy cần giải mã về dạng đối tượng để xử lý giám định: Với hàm chuyển từ mảng bytes sang chuỗi string của System.dll của .net Hàm chuyển từ chuỗi json sang đối tượng message sử dụng thư viện Newtonsoft.Json.dll Hàm chuyển từ chuỗi base64 sang đối tượng sử dụng thư viện Newtonsoft.Json.dll và System.dll ConnectDB(): Kết nối cơ sở dữ liệu sử dụng Nhibernate.dll UpdateSGD(Xml19324): Cập nhật kết quả sau giám định, thực hiện cập nhật các trường loại bn, các trường tiền cơ sở đề nghị sau, tiền quyết toán sau khi tổng hợp từ chi tiết và tiền xuất toán sau khi thực hiện giám định. Cùng với các kết quả giám định ghi vào các trường resultchung, resultthuoc, resultdichvu tương ứng với các quy tắc. 76 Tinhtoan(ref Xml19324): Tính toán theo yêu cầu báo cáo. Từ các trường tiền đề nghị tính toán trường tổng chi là tổng số tiền được đề nghị lên. Tổng quyết toán là tổng các trường tiền quyết toán. Tổng tiền bảo hiểm thanh toán quyết toán là tổng các trường tiền đề nghị có nhân mức hưởng nhưng tiền vận chuyển sẽ không nhân mức hưởng. Convert(Xml19324): Chuyển đổi về schema của Solr, gán giá trị tương tứng ở đối tượng Xml19324 với các trường trong đối tượng Xml19324_report. SendSolr(Xml19324_report): Đẩy dữ liệu lên Solr. Thư viện sử dụng SolrNet.dll. Việc đẩy lên Solr đối tượng Xml19324_report sẽ cần mapping trong đối tượng tương ứng với các trường nghiệp vụ trên Solr schema. Xử lý(exeption): Xử lý khi xảy ra sự cố, trong trường hợp có lỗi kết nối đến cơ sở dữ liệu thì sẽ tiến hành ghi log để quản trị viên có thể xử lý, còn trường hợp có sự cố khi gửi thông điệp lên queue hoặc Solr thì sẽ tiến hành cập nhật lại bản ghi thành trạng thái mới (status = 0). Ghilog(exeption): Dịch vụ ghi log khi xảy ra sự cố dùng log4net.dll 4.1.2. Giám định danh mục 4.1.2.1. GetData Nhiệm vụ của dịch vụ GetData sẽ cần phải chạy độc lập, liên tục khi có các danh mục mới được gửi lên và lưu vào các bảng danh mục tương ứng: DmThuocThau, DmVattuThau, DmGiadvTinh, DmThuocBv, DmVattuBv, DmDichvuBv. Sau khi lấy được danh sách các danh mục mới được gửi lên dưới dạng danh sách Object của các danh mục tương ứng dịch vụ sẽ cần phải gửi lên hệ thống Message Broker với queue có tên là WaitingProcess. Trong trường hợp xảy ra sự cố thì dịch vụ cần phải xử lý sự cố cũng như ghi log lại để quản trị viên có thể xử lý kịp thời. Dịch vụ cần quét liên tục nên cơ chế Timer sẽ phù hợp với yêu cầu này. Với tham số thời gian vòng lặp sẽ được đọc ở file cấu hình để tùy chỉnh số giây mà Timer sẽ quét lượt tiếp theo. 77 Vì cần đánh dấu các hồ sơ đã lấy để xử lý, mà thời gian đánh dấu sẽ có độ trễ nên dịch vụ ta sẽ thực hiện theo cơ đế đơn luồng, nhưng với mỗi loại danh mục sẽ tạo một luồng riêng. GetListDm(): Lấy danh sách danh mục theo trạng thái mới được gửi lên, số lượng bản ghi lấy sẽ được cấu hình trong file cấu hình. DmThuocBv: Với danh mục thuốc bệnh viện có status = 0, chưa có hiệu lực (hiệu lực = 0) và chưa bị xóa isdel = 0. DmVattuBv: Với danh mục vật tư bệnh viện có status = 0, chưa có hiệu lực (hiệu lực = 0) và chưa bị xóa isdel = 0. DmDichvuBv: Với danh mục dịch vụ bệnh viện có status = 0, chưa có hiệu lực (hiệu lực = 0) và chưa bị xóa và thuộc trong một bảng giá (bảng giá dvkt id không null). DmThuocThau: Với danh mục thuốc thầu có status = 0, chưa có hiệu lực (hiệu lực = 0) và chưa bị xóa isdel = 0. DmVattuThau: Với danh mục vật tư thầu có status = 0, chưa có hiệu lực (hiệu lực = 0) và chưa bị xóa isdel = 0. DmGiaDichvuTinh: Với danh mục giá dịch vụ tỉnh có status =0, chưa có hiệu lực (hiệu lực = 0) và chưa bị xóa isdel = 0. Sau khi lấy được danh sách các bản ghi thì tiến hành cập nhật status = 1 để đánh dấu trạng thái đã được lấy để xử lý. SendMessage(Message): Dịch vụ sẽ gửi thông điệp cho thành phần khác với thông điệp dạng đối tượng Message lên hệ thống MessageBroker với queue tên WaitingProcess. Tạo kết nối đến Hệ thống MessageBroker sử dụng RabbitMQ.Client.dll. Sau khi kết nối sẽ tiến hành mã hóa đối tượng sang bảng byte rồi thực hiện gửi thông điệp. Hàm chuyển từ đối tượng sang mảng byte được hỗ trợ bởi Newtonsoft.Json.dll Xử lý(exeption): Xử lý khi xảy ra sự cố, trong trường hợp có lỗi kết nối đến cơ sở dữ liệu thì sẽ tiến hành ghi log để quản trị viên có thể xử lý, còn trường hợp có sự 78 cố khi gửi thông điệp lên queue thì sẽ tiến hành cập nhật lại bản ghi thành trạng thái mới. Ghilog(exeption): Dịch vụ ghi log khi xảy ra sự cố dùng log4net.dll 4.1.2.2. ProcessData Nhiệm vụ của dịch vụ ProcessData là thực hiện tìm kiếm trên queue WaitingProcess, nếu có thông điệp mới được gửi đến từ dịch vụ GetData thì tiến hành giải mã thông điệp, thực hiện giám định và gửi thông điệp tới dịch vụ khác thông qua queue FinishProcess của RabbitMQ. Trong trường hợp xảy ra sự cố thì tiến hành xử lý và ghi log để quản trị viên biết và xử lý kịp thời. Dịch vụ cần quét liên tục nên cơ chế Timer sẽ phù hợp với yêu cầu này. Với tham số thời gian vòng lặp sẽ được đọc ở file cấu hình để tùy chỉnh số giây mà Timer sẽ quét lượt tiếp theo. Với việc nghiệp vụ có thể thực hiện một cách song song, vì vậy dịch vụ sẽ thực hiện cơ chế đa luồng để tăng hiệu năng. Số luồng sẽ được cấu hình ở file cấu hình. GetMesssage(): Dịch vụ nhận thông điệp từ dịch vụ khác, tiến hành kết nối đến RabbitMQ để lấy thông điệp. Sau khi kết nối đến queue WaitingProcess của hệ thống MessageBroker sẽ tiến hành lấy thông điệp. Vì thông điệp đang ở dạng chuỗi json vì vậy cần giải mã thông điệp sang dạng đối tượng. Giải mã(Message): Dịch vụ giải mã thông điệp, khi đã lấy được phần nội dung trong thông điệp, nhưng phần nội dung của thông điệp đang ở dạng mảng bytes, vì vậy cần giải mã về dạng đối tượng để xử lý giám định. Với hàm chuyển từ mảng bytes sang chuỗi string của System.dll của .net. Hàm chuyển từ chuỗi json sang đối tượng message sử dụng thư viện Newtonsoft.Json.dll. Hàm chuyển từ chuỗi base64 sang đối tượng sử dụng thư viện Newtonsoft.Json.dll và System.dll ConnectDB(): Kết nối cơ sở dữ liệu sử dụng Nhibernate.dll GetDmFunctionDm(objectDm.Tungay): Lấy những quy tắc danh mục đang bật theo từ ngày của danh mục. Từ ngày của danh mục lớn hơn hoặc bằng ngày bắt đầu của 79 quy tắc. Ngày kết thúc của quy tắc có thể không có hoặc từ ngày của danh mục nhỏ hơn hoặc bằng ngày kết thúc của quy tắc, và giá trị của quy tắc đang bật value = 1. Mapping(objectDm): Thực hiện ánh xạ danh mục với từng loại danh mục. Với từng loại danh mục cần ánh xạ với các danh mục dùng chung như DmThuoc, DmDichvuTd, Dmhoatchat, DmYhct Run(ObjectDm): Thực hiện chạy các quy tắc giám định danh mục lấy được. Các quy tắc sẽ được gọi bằng phương thức Invoke theo tên hàm trùng với Key trong DmFunctionDm. Nội dung các quy tắc sẽ tuân theo chi tiết trong phần các quy tắc giám định danh mục. SendMessage(Message): Dịch vụ sẽ gửi thông điệp cho thành phần khác với thông điệp dạng đối tượng Message lên hệ thống MessageBroker với queue tên FinishProcess. Tạo kết nối đến Hệ thống MessageBroker sử dụng RabbitMQ.Client.dll. Sau khi kết nối đến hệ thống queue, tiến hành chuyển đối tượng sang chuỗi byte để thực hiện gửi thông điệp lên queue. Hàm chuyển từ đối tượng sang mảng byte được hỗ trợ bởi Newtonsoft.Json.dll Xửlý(exeption): Xử lý khi xảy ra sự cố, trong trường hợp có lỗi kết nối đến cơ sở dữ liệu thì sẽ tiến hành ghi log để quản trị viên có thể xử lý, còn trường hợp có sự cố khi gửi thông điệp lên queue thì sẽ tiến hành cập nhật lại bản ghi thành trạng thái mới. Ghilog(exeption): Dịch vụ ghi log khi xảy ra sự cố dùng log4net.dll 4.1.2.3. SendData Nhiệm vụ của dịch vụ SendData là thực hiện tìm kiếm trên queue FinishProcess, nếu có thông điệp mới được gửi đến từ dịch vụ ProcessData thì tiến hành giải mã thông điệp, cập nhật kết quả vào cơ sở dữ liệu. Trong trường hợp xảy ra sự cố thì tiến hành xử lý và ghi log để quản trị viên biết và xử lý kịp thời. Dịch vụ cần quét liên tục nên cơ chế Timer sẽ phù hợp với yêu cầu này. Với tham số thời gian vòng lặp sẽ được đọc ở file cấu hình để tùy chỉnh số giây mà Timer sẽ quét lượt tiếp theo. 80 Với việc nghiệp vụ có thể thực hiện một cách song song, vì vậy dịch vụ sẽ thực hiện cơ chế đa luồng để tăng hiệu năng. Số luồng sẽ được cấu hình ở file cấu hình. GetMesssage(): Dịch vụ nhận thông điệp từ dịch vụ khác, tiến hành kết nối đến RabbitMQ để lấy thông điệp. Sau khi kết nối đến queue FinishProcess của hệ thống MessageBroker sẽ tiến hành lấy thông điệp. Vì thông điệp lấy được đang ở dạng json nên cần giải mã từ chuỗi json về dạng đối tượng để sử dụng. Giải mã(Message): Dịch vụ giải mã thông điệp, khi đã lấy được phần nội dung trong thông điệp, nhưng phần nội dung của thông điệp đang ở dạng mảng bytes, vì vậy cần giải mã về dạng đối tượng để xử lý giám định. Với hàm chuyển từ mảng bytes sang chuỗi string của System.dll của .net. Hàm chuyển từ chuỗi json sang đối tượng message sử dụng thư viện Newtonsoft.Json.dll. Hàm chuyển từ chuỗi base64 sang đối tượng sử dụng thư viện Newtonsoft.Json.dll và System.dll. ConnectDB(): Kết nối cơ sở dữ liệu sử dụng Nhibernate.dll UpdateSGD(ObjectDm): Tùy từng loại danh mục mà tiến hành cập nhật kết quả giám định tương ứng vào cơ sở dữ liệu Xử lý(exeption): Xử lý khi xảy ra sự cố, trong trường hợp có lỗi kết nối đến cơ sở dữ liệu thì sẽ tiến hành ghi log để quản trị viên có thể xử lý, còn trường hợp có sự cố khi gửi thông điệp lên queue thì sẽ tiến hành cập nhật lại bản ghi thành trạng thái mới. Ghilog(exeption): Dịch vụ ghi log khi xảy ra sự cố dùng log4net.dll 4.2. Triển khai Các dịch vụ sẽ được triển khai trên Win server được cài đặt môi trường .net 4.0 và phiên bản ODTwithODAC 32bit, 64bit phiên bản 11. Cùng các hệ thống RabbitMQ 3.6.2, Solr 6.4 Một vài chú ý trong quá trình triển khai: - Các service GetData, GetDataKB vì chạy đơn luồng nên khi có lượng hồ sơ hay danh mục được gửi lên nhiều. Với 1 app không thể đáp ứng được tốc độ 81 sẽ thì sẽ tiến hành chia nhỏ các app Get ra thành một bộ Get riêng, có thể chia theo nghiệp vụ. Ví dụ với hồ sơ, có thể làm bộ Get theo các tháng quyết toán khác nhau. Với những tháng có thể lấy theo hồ sơ theo giới tính hoặc mã loại khám chữa bệnh - Các service ProcessDataKB, ProcessData là các service xử lý nên tùy vào lượng thông điệp được gửi đến queue WaitingProcessDataKB, WaitingProcessData để lựa chọn số lượng app bật sao cho phù hợp nhất. Tương tự với các app SendDataKB và SendData. Một vài hình ảnh về bộ service giám định tự động: Hình 4.1. Màn hình hiển thị service GetDataKB khi quét trong Database. Hình 4.1 hiển thị màn hình của service GetDataKB khi đang quét trong cơ sở dữ liệu bảng Xml19324 để tìm các hồ sơ mới được gửi lên. 82 Hình 4.2. Màn hình hiển thị của Service ProcessDataKB khi đang giám định hồ sơ. Hình 4.2 là màn hình hiển thị Service ProcessDataKB khi đang thực hiện giám định hồ sơ. Sau khi giám định sẽ thực hiện gửi thông điệp lên queue FinishProcessKB. 4.3. Kết quả thực nghiệm Nội dung thực nghiệm: Sau khi triển khai môi trường, các dịch vụ giám định tự động đã đáp ứng các yêu cầu về nghiệp vụ giám định. Nhưng cần phải đảm bảo về mặt hiệu năng xử lý nữa nên phần thực nghiệm sẽ tập trung về tốc độ xử lý của dịch vụ giám định hồ sơ. Sau đây là kết quả thực nghiệm dịch vụ giám định hồ sơ. Sau đây là một vài kết quả thực nghiệm của chức năng giám định hồ sơ với mô hình triển khai bật một service GetDataKB, 5 service ProcessDataKB, 3 service SendDataKB: Số lượng hồ sơ Thời gian xử lý xong 134 20.12s 1120 77.85s 16739 932s 83 Hê thống đã đáp ứng với những yêu cầu phi chức năng đã nêu: - Khả năng dễ sử dụng: sử dụng nền tảng application nên chỉ cần bật tắt, thông báo hiển thị ra màn hình dos. Rất dễ sử dụng. - Khả năng dễ triển khai: chỉ cần cài đặt môi trường .net 4.0 và oda bản 11 64bit để triển khai. - Khả năng dễ bảo trì: vì phát triển trên nền tảng application, việc nâng cấp sửa chữa phiên bản rất dễ dàng. - Tính sẵn sàng của hệ thống: hệ thống làm việc 24/24h trừ những khoảng thời gian bảo trì, nâng cấp. Hệ thống triển khai trên môi trường win server, dưới dạng các application và cơ chế timer sẽ hoạt động 24/24h trừ các thời gian bảo trì, nâng cấp. - Hiệu năng: với trung bình một tháng có 15 triệu hồ sơ được gửi lên, khoảng 350 hồ sơ trung bình một phút, nhưng với những thời điểm cao điểm lượng hồ sơ tăng gấp nhiều lần. Hệ thống phải đảm bảo xử lý độ trễ các hồ sơ không quá 1h: Với yêu cầu về thời gian thực thi, như bảng thời gian thực thi giám định hồ sơ ở trên cho thấy một phút chức năng giám định hồ sơ có thể xử lý khoảng 1077hs. Điều này có thể đáp ứng được nhu cầu vào những ngày bình thường, lượng hồ sơ gửi lên khoảng 350hs một phút. Nhưng với những ngày cao điểm, lượng hồ sơ được gửi lên trong một thời điểm sẽ tăng lên rất nhiều. Hiện tại chức năng sẽ xử lý được lượng hồ sơ tăng gấp 3 lần bình thường. Nhưng như thế là chưa đủ. Vì vậy vào những thời điểm cao điểm, nếu lượng hồ sơ tăng vọt thì cần tăng lượng application xử lý để hạn chế độ trễ của việc giám định. Đây cũng là một ưu điểm khi phát triển chức năng bằng Application. Với chức năng giám định tự động hiện tại đã thể hiện một vài tính chất của hệ thống kiến trúc hướng dịch vụ như sau: - Sử dụng dịch vụ bất đồng bộ: các yêu cầu được đưa lên hệ thống message queue, bên gửi thông điệp không cần chờ bên nhận xử lý thông điệp xử lý xong. Hiện tại chức năng giám định tự động chưa thể hiện được các tính chất của hệ thống kiến trúc hướng dịch vụ sau: - Tính kết nối lỏng lẻo: các service hiện tại đang kết nối với nhau 84 - Sử dụng lại dịch vụ: các dịch vụ hiện tại đang chạy trên cùng dải wan, chưa cung cấp một dịch vụ công khai trên mạng. - Quản lý chính sách: vì chưa công khai một dịch vụ nên hiện tại các dịch vụ chưa cung cấp một chính sách để giao tiếp. - Khả năng cộng tác: hiện tại các dịch vụ chỉ có thể cộng tác trong cùng một ngôn ngữ C#. Trong tương lai gần bài toán công khai dịch vụ giám định tự động cho cơ sở khám chữa bệnh thực hiện giám định tự động công khai để có thể kiểm tra hồ sơ một cách dễ dàng trước khi đẩy dữ liệu sẽ tiết kiệm được thời gian ngân sách. Vì vậy trong tương lai định hướng của đề tài sẽ phát triển một đầu webservice cung cấp các đầu hàm hỗ trợ giám định tự động và sử dụng các đầu dịch vụ hiện tại để xử lý. Khi đó các tính chất về kiến trúc hướng dịch vụ như tính sử dụng lại dịch vụ, quản lý chinh sách, khả năng cộng tác sẽ được thỏa mãn. 4.4. Kết luận Chương 4 đã trình bày về chi tiết cài đặt các dịch vụ, ngôn ngữ, công cụ lập trình. Môi trường phát triển cùng các thư viện sử dụng. Chương này cũng đưa ra môi trường triển khai cho các dịch vụ. Kết quả thực nghiệm của các dịch vụ giám định hồ sơ, đánh giá giám định hồ sơ dựa vào các yêu cầu phi chức năng của chức năng cũng như đánh giá các tính chất mà chức năng đã đáp ứng được của hệ thống kiến trúc hướng dịch vụ và những tính chất chưa đáp ứng được, giải pháp để đáp ứng được các tính chất đó. 85 KẾT LUẬN Luận văn đã trình bày kiến trúc hướng dịch vụ SOA, phương pháp xây dựng một ứng dụng dựa trên kiến trúc hướng dịch vụ SOA cụ thể là phương pháp top-down. Từ đó áp dụng vào bài toán giám định tự động. Luận văn đã phân tích và xây dựng thành công: - Bộ service giám định hồ sơ: GetDataKB, ProcessDataKB, SendDataKB - Bộ service giám định danh mục: GetData, ProcessData, SendData - Bộ quy tắc hồ sơ: Quy tắc thẻ, quy tắc mức hưởng, quy tắc thuốc, quy tắc dịch vụ kỹ thuật, quy tắc vật tư y tế và quy tắc khác về máu, thanh toán ngày giường - Bộ quy tắc danh mục: Quy tắc thuốc thầu tỉnh, vật tư thầu tỉnh, thuốc bệnh viện, dịch vụ kỹ thuật bệnh viện, vật tư y tế bệnh viện. Hiện tại bộ service hồ sơ có thể xử lý được khoảng trên 40 hồ sơ/giây, đóng vai trò đắc lực hỗ trợ giám định viên phát hiện xử lý sai phạm trong quá trình thanh quyết toán bảo hiểm y tế. Giúp tiết kiệm ngân sách hàng năm của nhà nước. Nhưng hạn chế của giải pháp này là phải định nghĩa trước được bộ quy tắc cần phải chạy, vì vậy trong tương lai định hướng phát triển của em sẽ theo hướng mà sẽ mã hóa các bộ quy tắc trước được lưu trữ trong file hoặc database dưới dạng chuỗi base64 hoặc json. Trong service ProcessDataKB thực hiện giám định, sẽ cần phát triển tính năng đọc được chuỗi mã hóa quy tắc để tìm ra những quy tắc giám định. Với giải pháp này khi thêm quy tắc mới chỉ cần thêm một chuỗi mã hóa quy tắc mà không cần sửa lại service xử lý. Hiện tại với giám định tự động chưa có yêu cầu công khai như một dịch vụ nhưng trong tương lai giám định tự động có thể sẽ được công khai rộng rãi như một dịch vụ, để các cơ sở thực hiện giám định tự động trước khi gửi hồ sơ để tránh sai phạm, mất thời gian gửi dữ liệu. Chức năng sẽ công khai một đầu webservice để cơ sở thực hiện gửi hồ sơ dạng file xml, tận dụng các bộ service nghiệp vụ như hiện tại để xử lý và trả lại kết quả cho webservice thông qua hệ thống message queue. 86 TÀI LIỆU THAM KHẢO Tiếng Việt [1]. Công văn 510/BHXH-CSYT, thanh toán BHYT cho một số dịch vụ kỹ thuật y tế chuyển sang cơ sở KCB khác để thực hiện. [2]. Công văn 9324/BYT - BH, trích xuất đầu ra dữ liệu yêu cầu thanh toán BHYT. [3]. Đặng Đức Hạnh, Trương Ninh Thuận, Giáo trình Phân tích Thiết kế hướng đối tượng, Nhà xuất bản đại học quốc gia Hà Nội. [4]. Nguyễn Thị Dung, Đề tài nghiên cứu khoa học Kiến trúc hướng dịch vụ (Service- Oriented - Architecture). [5]. Quy trình giám định bảo hiểm y tế, kèm theo quyết định số 1456/QĐ-BHXH. [6]. Quyết định 3465/QĐ-BYT, về việc ban hành bộ mã danh mục dùng chung áp dụng trong khám bệnh, chữa bệnh và thanh toán bảo hiểm y tế [7]. Thông tư 27/2013/TT-BYT, ban hành danh mục vật tư y tế thuộc phạm vi thanh toán của quỹ bảo hiểm y tế. [8]. Thông tư 40/2014/TT-BYT, ban hành và hướng dẫn thực hiện danh mục thuốc tân dược thuộc phạm vi thanh toán của quỹ bảo hiểm y tế. [9]. Thông tư 05/2016/TT-BYT, quy định về kê đơn thuốc trong điều trị ngoại trú. Tiếng Anh [10]. IBM Red Book Team (2004), Parttern: Service- Oriented Architecture and Web Services. [11]. RabbitMQ tutorials, https://www.rabbitmq.com/getstarted.html. [12]. Rabbitmq beginner, https://www.cloudamqp.com/blog/2015-05-18-part1- rabbitmq-for-beginners-what-is-rabbitmq.html [13]. Solr architure, https://lucene.apache.org/solr/guide/6_6/a-quick- overview.html. [14]. Solr tutorial, [15]. Document of redis, https://redis.io/documentation. [16]. Redis tutorial, https://www.tutorialspoint.com/redis/ 87 PHỤ LỤC  Danh sách các trường dữ liệu trong các bảng danh mục tương ứng Các danh mục dùng chung được BYT ban hành: DM_THUOC: Danh mục thuốc được BYT ban hành, có số đăng ký công bố ID, TEN, MA, HIEULUC, STT, DUONGDUNG, DONVITINH, VANBANQUYETDINH_ID, HOATCHAT, QUYCACH, SODK, TIEUCHUAN, MIEUTA, BAOCHE, TUOITHO, STTTHONGTU, NGUONGOC, NUOCDANGKY, DIACHIDANGKY, CONGTYDANGKY, DIACHISANXUAT, NUOCSANXUAT, CONGTYSANXUAT,MADUONGDUNG, MADONVITINH, TUNGAY, DENNGAY, HAMLUONG, LOAI, NHOMTHUOC_ID, GHICHU. DM_THUOC_KK: Danh mục thuốc sau khi nhà sản xuất đăng ký số đăng ký với cơ quan quản lý dược, kèm theo giá bán. ID, STT, TEN, HOATCHAT, HAMLUONG, BAO_CHE, SO_DANG_KY, QUYCACH, DONVITINH, GIABAN, NHASX, DONVIKEKHAI, NGAYKEKHAI, GHICHU, LOAIKEKHAI, NGAYCONGB, HIEULUC, TRANG_THAI DM_HOATCHAT: Theo thông tư 40 của BYT ban hành về hoạt chất của các thuốc tân dược ID, TEN, TEN_EN, MA, STT, STTHOATCHAT, HIEULUC, LOAITHUOC, VANBANQUYETDINH_ID, PHANLOAIHOATCHAT_ID, MIEUTA, HANG1, HANG2, HANG3, HANG4,DUONGDUNG, TYLE, HOICHAN, MANHOM, MAATC, DANGLUUHANH, PHATHANH, CHUANHOA, UNGTHU, CODIEUKIEN, MADUONGDUNG, DUONGDUNG_ID, MAVANBANQUYETDINH, TUNGAY, DENNGAY, DANGDUNG, DONVITINH DM_THUOCYHCT: Theo thông tư 05 của BYT ban hành về hoạt chất của các thuốc y học cổ truyền ID, TEN, TEN_EN, MA, STT, STTHOATCHAT, HIEULUC,TENKHOAHOC, TENKHOAHOCCAY, LOAITHUOC, VANBANQUYETDINH_ID, NHOMTHUOCYHCT_ID, MIEUTA, DUONGDUNG , NGUONGOC, TYLE, 88 MADUONGDUNG,DUONGDUNG_ID, TUNGAY, DENNGAY, CODIEUKIEN, HOICHAN, DANGLUUHANH DM_DICHVU_TD: Danh mục dịch vụ kỹ thuật dùng chung được BYT ban hành ID, MA, MA4350, MAGIA, TEN, TENGIA, LOAIPTTT, GIA, GIASAU, GHICHU, HIEULUC, VANBANQUYETDINH_ID, TUNGAY, DENNGAY, QUYETDINH, DOT, BANGGIA_DVKT_ID, NHOMDICHVU_ID, MA_NHOMDICHVU DM_VATTU: Danh mục vật tư dùng chung được BYT ban hành ID, TEN, MA, NHOMVATTU_ID, HIEULUC, STT, VANBANQUYETDINH_ID, TEN_EN, DONVITINH, MIEUTA, MANHOMVATTU, TUNGAY, DENNGAY, TYLE, KOTHANHTOAN, DIKEM_DICHVU DM_MUCHUONGBHYT: Danh mục mức hưởng của từng loại đối tượng khám chữa bệnh ID, NHOMDTBHYT_ID, MAHIEU, TYLE, MA, TEN, MIEUTA, STT, HIEULUC, VANCHUYEN DM_GIAXANG: Danh mục giá xăng do BHXH Việt Nam quản lý ID, DONGIA, TUNGAY, DENNGAY, MIEUTA, HIEULUC DM_MAU: Danh mục máu do BHXH Việt Nam quản lý ID, MA, TEN, LOAIMAU_ID, THETICH, GIATOIDA, MIEUTA, HIEULUC, VANBANQUYETDINH_ID, TUNGAY, DENNGAY DM_COSOKCB: Danh mục cơ sở khám chữa bệnh do BHXH Việt Nam cấp phát và quản lý ID, TEN, MA, MABHYT, DONVIHANHCHINH_ID, DIACHI, HANGBENHVIEN, TUYENCMKT, HIEULUC, MIEUTA, STT, TINHTHANH_ID, QUANHUYEN_ID, MATINHTHANH, MAQUANHUYEN, DONVI_ID, MACOSOKCBCHA, COSOKCBCHA_ID, MADONVI, THANNHANTAO, THAIGHEP, LOAIHOPDONG, DKKCBBD, HINHTHUCTT, LOAIBENHVIEN, KHAMTREEM, NGAYNGUNGHD, MATAICHINH, PKDAKHOA, UNGTHU, VIEMGAN, 89 TEBAOMAUTD, KHAMT7, KHAMCN, KHAMNGAYLE, MASOTHUE, DIENTHOAI, EMAIL, FAX, COQUANCHUQUAN, NGAYKYHOPDONG, KIEUBV, CAPCSKCB_MIN, TTPHEDUYET, SOHOPDONG, LYDO, TRANGTHAI, TUCHU, HANGDICHVU_TD, HANGTHUOC_TD, HANGVATTU_TD, BYT, SO_GPHD, KCB, NGAYCAPMA, NGAYDIEUCHINH, LOAI_DONVICHUQUAN, CHUA_PD43, NGAYKYHOPDONGLANDAU, GHICHU_TINHTHAYDOI, SL_THE_BH_DKBD, SL_THE_BH_DA_CAP, LOAI_CK, TEN_VIETTAT DM_TYLETRAITUYEN: Danh mục tỷ lệ trái tuyến, với những trường hợp đi khám trái tuyến, tỷ lệ hưởng sẽ được thể hiện trong bảng ID, STT, HANGBV, TUYENBV, BHYT_THANHTOAN, BN_THANHTOAN, TUNGAY, DENNGAY, HINHTHUC_KCB, QUYENLOI_THEOTHE, HIEULUC, MIEUTA Các danh mục thầu của tỉnh được thể hiện ở các bảng: DM_THUOC_THAU: Danh mục thuốc trúng thầu của tỉnh ID, TEN, MA, DUONGDUNG, HAMLUONG, HOATCHAT, SODK, QUYCACH, TIEUCHUAN, COSOKCB_ID, TINHTHANH_ID, HIEULUC, STT, STTHOATCHAT, DONVITINH, NHASX, NUOCSX, MADUONGDUNG, TENNHATHAU, QUYETDINH, GOITHAU, NHOMTHUOC, HANSUDUNG, NAM, MANHATHAU, DANGBAOCHE, LYDOTUCHOI, MIEUTA, MACOSOKCB, MATINHTHANH, LOAI, TUNGAY, DENNGAY, HOSO_ID, STATUS, RESULT, SOLUONG, CONGBO, TRANGTHAI, GOITHAU_ID, THUOC_ID, STTPHEDUYET, KETQUA, DONGGOI, NHOMTHAU, DONGIA, THANHTIEN, MA_GY, TT4005_ID, LANNHAP, MOTALOI, LISTCELLERROR, MADD_GY, AX_CD, AX_TD, KETQUA_TD, GIA, HOATCHAT2, TT3112_ID, HANTHAUCU, NGAY_NHAN, NGAY_AP_DUNG DM_VATTU_THAU: Danh mục vật tư trúng thầu của tỉnh TEN, MA, MIEUTA, NAM, NGAYCONGBO, QUYETDINHTHAU, DOTTHAU, HINHTHUCTHAU, DONVITINH, SOLUONG, QUYCACH, NHASX, NUOCSX, HIEULUC, MACOSOKCB, STT, MATHAU, NHATHAU, COSOKCB_ID, 90 TINHTHANH_ID, MATINHTHANH, MANHOMVATTU, TUNGAY, DENNGAY, SODK, STTPHEDUYET, GOITHAU_ID, VATTU_ID, KETQUA, ID, TRANGTHAI, STATUS, RESULT, LOAI, MAHIEU, THANHTIEN, MA_GY, TEN_GY, LANNHAP, MOTALOI, LISTCELLERROR, AX_CD, AX_TD, KETQUA_TD, TENCHITIET, LYDOTUCHOI, GIATHAU, NGAY_NHAN, NGAY_AP_DUNG DM_GIADICHVU_TINH: Danh mục dịch vụ kỹ thuật trúng thầu của tỉnh ID, TUNGAY, GIA, TINHTHANH_ID, HIEULUC, MADV, DENNGAY, MIEUTA, HANGBV, MATINHTHANH, TEN, STTPHEDUYET, KETQUA, TRANGTHAI, STATUS, QUYETDINH, RESULT, GIADICHVU_ID, DICHVU_ID, LYDOTUCHOI, GOITHAU_ID, MOTALOI, LISTCELLERROR, LANNHAP, MA37, TEN37, MATD, MA5084, TEN5084 Các danh mục của bệnh viện sử dụng được thể hiện ở các bảng sau: DM_THUOC_BV: Danh mục thuốc mà bệnh viện sử dụng ID, TEN, TEN_EN, MA, DUONGDUNG, HAMLUONG, HOATCHAT, SODK, QUYCACH, TIEUCHUAN, COSOKCB_ID, TINHTHANH_ID, HIEULUC, STT, STTHOATCHAT, DONVITINH, NHASX, NUOCSX, MADUONGDUNG, TENNHATHAU, QUYETDINH, GOITHAU, NHOMTHUOC, HANSUDUNG, NAM, MANHATHAU, DANGBAOCHE, LYDOTUCHOI, MIEUTA, MACOSOKCB, MATINHTHANH, LOAITHAU, DAGIAMDINH, TUNGAY, DENNGAY, HOSO_ID, STATUS, RESULT, THUOC_ID, LOAI, KETQUA, TRANGTHAI, MA_BV, CONGBO, THUOCTHAU_ID, NGOAIDINHSUAT, NHOM_THAU, TT4005_ID, MANHOM_9324, KHONGTHANHTOAN, MA_GY, HUONGDAN, MADD_GY, ISDEL, AX_ID, AX_CD, AX_TD, KETQUA_TD, RESULT_TD, GIA, GIABH, SOLUONG, KEY, TT3112_ID, TEN_BV, THUOCGOC_ID, NGAY_NHAN, NGAY_AP_DUNG, NGAY_HET_HAN, GHICHU, SOLUONG_BV, RESULTSOLUONG DM_DICHVU_BV: Danh mục dịch vụ kỹ thuật mà bệnh viện sử dụng ID, TEN, MA, TEN_EN, COSOKCB_ID, HIEULUC, STT, MIEUTA, MACOSOKCB, STATUS, MATINH, NGAYBATDAU, DAGIAMDINH, RESULT, 91 SOQUYETDINH, NHOMDICHVU_ID, TRANGTHAI, MAKHOA, STTPHEDUYET, SOMAYTH, SOCANBOCM, THOIGIANTH, SOCACHOPHEP, MATT, KETQUA, TENDICHVU_ID, TUNGAY, DENNGAY, DICHVU_TD_ID, GIADICHVU_ID, GIADICHVU_TINH_ID, LOAIPTTT, TINHTHANH_ID, NGOAIDINHSUAT, MANHOM_9324, TYLE, KHONGTHANHTOAN, QUYTRINH, ISDEL, AX_ID, MAGIA_GY, MA_GY, TEN_GY, AX_CD, AX_TD, KETQUA_TD, RESULT_TD, LYDOTUCHOI, PHEDUYET_ID, GIA, GIABYT, BANGGIA_DVKT_ID, TIENKHAM_ID, TIENGIUONG_ID, KEY, PHEDUYET_GIA_ID, CHUA_PD43, TEN_BV, NGAY_NHAN, NGAY_AP_DUNG DM_VATTU_BV: Danh mục vật tư mà bệnh viện sử dụng ID, MA_BYT, TEN, MA_BV, MIEUTA, HIEULUC, QUYCACH, NUOCSX, NHASX, DONVITINH, DINHMUC, COSOKCB_ID, SOLUONG, STT, MATINHTHANH, MANHOM, LOAITHAU, DAGIAMDINH, HOSO_ID, MACOSOKCB, STATUS, TUNGAY, DENNGAY, RESULT, SODK, NHATHAU, NHOMVATTU_ID, DASUDUNG, SOCATHUCHIEN, DINHMUCPD, KETQUA, VATTU_ID, TRANGTHAI, TEN_BV, MAHIEU, QUYETDINH, CONGBO, VATTUTHAU_ID, NGOAIDINHSUAT, TYLE, MANHOM_9324, KHONGTHANHTOAN, MA_GY, TEN_GY, ISDEL, AX_ID, AX_CD, AX_TD, KETQUA_TD, RESULT_TD, LYDOTUCHOI, GIA, GIABHYT, KEY, NGAY_NHAN, NGAY_AP_DUNG Hồ sơ khám chữa bệnh sẽ được thể hiện ở các bảng: XML1_9324: Thông tin cá nhân, bệnh án, tổng chi phí mà bệnh nhân sử dụng trong quá trình khám chữa bệnh ID, MA_LK, STT, MA_BN, HO_TEN, GIOI_TINH, DIA_CHI, MA_THE, MA_DKBD, TEN_BENH, MA_BENH, MA_BENHKHAC, MA_LYDO_VVIEN , MA_NOI_CHUYEN, MA_TAI_NAN, SO_NGAY_DTRI, KET_QUA_DTRI, TINH_TRANG_RV, NGAY_TTOAN, MUC_HUONG , T_THUOC, T_VTYT, T_TONGCHI, T_BNTT, T_BHTT, T_NGUONKHAC, T_NGOAIDS, NAM_QT, THANG_QT, MA_LOAI_KCB, MA_KHOA, MA_CSKCB, MA_KHUVUC, MA_PTTT_QT, CAN_NANG, COSOKCB_ID, TINHTHANH_ID, TRANGTHAI, HOSO_ID, KYGIAMDINH_ID, MIEUTA, STATUS, NGAY_SINH, NGAY_RA, 92 NGAY_VAO, GT_THE_TU, GT_THE_DEN, RESULTCHUNG, RESULTTHUOC, RESULTDICHVU, NGUOIGIAMDINH_ID, NGAYTHANHTOAN, DOTGIAMDINH_ID, TRONGMAU, LOAI_BN, NGAYNHAN, RESULTCHUNG_TD, RESULTTHUOC_TD, RESULTDICHVU_TD, TRANGTHAI_TD, THEODOI, GIAMDINHTIEP, KETQUA, STTMAU, KETQUA_TD, MA_LYDO_VVIEN_TD, MUC_HUONG_TD, LYDOXT, XUATTOAN, K_XETNGHIEM, K_CDHATDCN, K_THUOC, K_MAU, K_PTTT, K_VTYT, H_DVKT, H_THUOC, H_VTYT, TIENKHAM, VANCHUYEN, TIENGIUONG, K_XETNGHIEM_QT, K_CDHATDCN_QT, K_THUOC_QTK_MAU_QT, K_PTTT_QT, K_VTYT_QT, H_DVKT_QT, H_THUOC_QT, H_VTYT_QT, TIENKHAM_QT, VANCHUYEN_QT, TIENGIUONG_QT, T_BNTT_QT, MUC_HUONG_BV, MA_LYDO_VVIEN_BV, K_XETNGHIEM_KTL, K_CDHATDCN_KTL, K_THUOC_KTL, K_MAU_KTL, K_PTTT_KTL, K_VTYT_KTL, H_DVKT_KTL, H_THUOC_KTL, H_VTYT_KTL, TIENKHAM_KTL, VANCHUYEN_KTL, TIENGIUONG_KTL, T_NGOAIDS_QT, CHOTDLQUY_ID, CHOTDLNAM_ID, ISNEW, XML1_GOP_ID, PHANCONG_ID, KY_QT, GHICHUHS, T_TONGCHI_TD, T_BHTT_TD, T_TONGCHI_XT, QTTHE, LOAI_THE, ISEDIT, NGAY_XU_LY, MODIFIER_DATE, T_TONGCHI_XTTD XML2_9324: Thông chi tiết các thuốc mà bệnh nhân sử dụng trong quá trình khám chữa bệnh ID, MA_LK, STT, MA_THUOC, MA_NHOM, TEN_THUOC, DON_VI_TINH, HAM_LUONG, DUONG_DUNG, LIEU_DUNG, SO_DANG_KY, SO_LUONG, TY_LE, MA_KHOA, MA_BAC_SI, MA_BENH, MA_PTTT, COSOKCB_ID, TINHTHANH_ID, TRANGTHAI, HOSO_ID, XML1_9324_ID, KYGIAMDINH_ID, MIEUTA, STATUS, NGAY_YL, THUOC_ID, NGUOIGIAMDINH_ID, LYDO_ID, SOLUONG_TD, LYDO_TEN, MA_THUOC_GOC, SO_LUONG_BV, TY_LE_TD, TEN_THUOC_GOC, XML2_GOC_ID, DON_GIA, DON_GIA_BV, DON_GIA_TD, THANH_TIEN, KY_QT, DON_VI_TINH_GOC, THEMMOI, NGAY_YL_NUMBER, SL192021, DG192021, MA192021, SL_VUOTTHAU, MUC_HUONG, SL_DOT_NGTRU, TYLE_DOT_NGTRU 93 XML3_9324: Thông tin chi tiết các dịch vụ kỹ thuật, vật tư mà bệnh nhân sử dụng trong quá trình khám chữa bệnh ID, MA_LK, STT, MA_DICH_VU, MA_VAT_TU, MA_NHOM, TEN_DICH_VU, DON_VI_TINH, SO_LUONG, TYLE_TT, MA_KHOA, MA_BAC_SI, MA_BENH, NGAY_YL, NGAY_KQ, MA_PTTT, COSOKCB_ID, TINHTHANH_ID, TRANGTHAI, HOSO_ID, XML1_9324_ID, KYGIAMDINH_ID, MIEUTA, STATUS, NGUOIGIAMDINH_ID, LYDO_ID, SOLUONG_TD, LYDO_TEN, MA_VATTU_GOC, MA_DICHVU_GOC, MA_GIA_DV, THEMMOI, SO_LUONG_BV, TY_LE_TD, TEN_DICHVU_GOC, XML3_GOC_ID, DON_GIA, DON_GIA_BV, DON_GIA_TD, THANH_TIEN, KY_QT, T_NGUONKHAC, DON_VI_TINH_GOC, TYLE_APTRAN, NGAY_YL_NUMBER, NGAY_KQ_NUMBER, SL192021, DG192021, MA192021, MUC_HUONG, GOI_VTYT, SL_DOT_NGTRU, TYLE_DOT_NGTRU XML4_9324: Thông tin chỉ tiêu chỉ số kết quả cận lâm sang ID, MA_LK, STT, MA_DICH_VU, MA_CHI_SO, TEN_CHI_SO, GIA_TRI, MA_MAY, MO_TA, KET_LUAN, NGAY_KQ, HOSO_ID, KYGIAMDINH_ID, COSOKCB_ID, TINHTHANH_ID, TRANGTHAI, MIEUTA, STATUS, XML1_9324_ID, NGUOIGIAMDINH_ID, NGAYKETQUA, KY_QT XML5_9324: Thông tin chỉ tiêu theo dõi diễn biến lâm sang ID, MA_LK, STT, DIEN_BIEN, HOI_CHAN, PHAU_THUAT, NGAY_YL, HOSO_ID, KYGIAMDINH_ID, COSOKCB_ID, TINHTHANH_ID, TRANGTHAI, MIEUTA, STATUS, XML1_9324_ID, NGUOIGIAMDINH_ID, NGAYYLENH, MABACSI, KY_QT Một số bảng khác: DM_FUNCTION: danh sách các quy tắc hồ sơ, quy định bật hay tắc các quy tắc KEY, VALUE, DESCRIPTION, TYPE, RESULT, START_DATE, END_DATE, LYDO_ID, HIEULUC DM_FUNCTION_DM: danh sách các quy tắc danh mục, quy định bật hay tắt các quy tắc 94 KEY, VALUE, DESCRIPTION, TYPE, RESULT, START_DATE, END_DATE, HIEULUC Với các bảng XML1_9324 sẽ có quan hệ 1-n với các bảng XML2_9324, XML3_9324, XML4_9324, XML5_9324 với khóa ngoại là XML1_9324_ID.

Các file đính kèm theo tài liệu này:

  • pdfluan_van_phan_tich_va_xay_dung_chuc_nang_giam_dinh_tu_dong_t.pdf
Luận văn liên quan