Đây là hoạt động được thiết kế và xây dựng trên nền tảng ứng dụng công nghệ số để kết nối trực tiếp người đi vay với người cho vay mà không thông qua các tổ chức trung gian tài chính.. M
CƠ SỞ LÝ THUYẾT
Tổng quan về mô hình cho vay P2P lending
Các công ty Fintech trong những năm gần đây đã có sự phát triển mạnh mẽ, cung cấp các giải pháp tài chính mới trên nền tảng số; trong đó có mô hình các công ty P2P lending Mặc dù có nhiều quan điểm khác nhau về nguồn gốc xuất xứ của P2P lending nhưng tựu chung lại P2P lending đều được hiểu chung là hoạt động dựa trên nền tảng công nghệ tài chính, được thiết kế và xây dựng trên nền tảng giao dịch trực tuyến kết nối trực tiếp giữa người đi vay và người cho vay mà không thông qua các trung gian tài chính như tổ chức tín dụng Toàn bộ hoạt động phê duyệt khoản vay, giải ngân, hay trả nợ giữa người đi vay và người cho vay được thực hiện trên nền tảng giao dịch trực tuyến của các công ty P2P lending, được lưu trữ bằng các bảng ghi điện tử, số hóa trên hệ thống cơ sở dữ liệu của công ty Có thể phân loại P2P lending thành một số mô hình phổ biến được áp dụng tại nhiều nước trên thế giới cũng như Việt Nam như sau:
2.1.1 Mô hình P2P lending truyền thống
Công ty P2P lending chỉ cung cấp nền tảng công nghệ đơn thuần, nhằm kết nối trực tuyến giữa người đi vay và người cho vay Theo đó, hợp đồng vay vốn được ký kết trực tiếp giữa người đi vay và người cho vay Người cho vay chịu mọi rủi ro nếu người đi vay không trả nợ Vốn vay và tiền trả nợ theo hợp đồng vay được tách biệt khỏi tài khoản trên nền tảng giao dịch trực tuyến Công ty P2P lending có nguồn thu từ phí giao dịch của các bên tham gia Như vậy trong mô hình này, các công ty P2P lending chỉ cung cấp nền tảng công nghệ đơn thuần
Hình 1: Mô hình P2P Lending truyền thống
Công ty P2P lending đóng vai trò như đại lý môi giới đối với người cho vay và người đi vay Trên cơ sở thỏa thuận của công ty P2P lending và ngân hàng, sau khi nhận thông tin từ công ty P2P lending, ngân hàng cấp các khoản vay và sau đó bán lại cho công ty P2P lending Trong mô hình này, vai trò của công ty P2P lending không chỉ còn là cung cấp công nghệ đơn thuần mà tham gia trực tiếp vào quy trình tín dụng Với sự tham gia của ngân hàng trong quá trình giải ngân, rủi ro đối với người đi vay được giảm thiểu khi họ có đầy đủ điều kiện được vay và giấy tờ cần thiết Các bước trong mô hình này được cụ thể hoá theo hình 2
Hình 2: Mô hình P2P lending hợp tác với ngân hàng
Trong mô hình này, công ty P2P lending cung cấp các khoản vay từ chính nguồn vốn được đóng góp bởi người cho vay/nhà đầu tư Công ty P2P lending đánh giá, lựa chọn đề xuất vay vốn và tự chủ động tiến hành cho vay trực tiếp đối với người đi vay và hưởng lãi suất, phí (nếu có) từ khoản vay này Nhà đầu tư đóng góp nguồn vốn vào quỹ/vốn của công ty P2P lending và nhận lợi nhuận theo cam kết của công ty P2P lending Đây không phải là một mô hình P2P lending phổ biến
Hình 3: Mô hình P2P Lending cam kết về lợi nhuận
Mô hình hoạt động P2P Lending tại Việt Nam
Tại Việt Nam bắt đầu xuất hiện công ty hoạt động giống mô hình P2P Lending từ năm 2016 với trang huydong.com Kể từ đó, nhiều công ty P2P Lending khác đã dần đi vào hoạt động, như Tima, SHA, Mobivi, Vaymuon.vn, Mofin…
Theo Báo cáo tài chính khu vực châu Á - Thái Bình Dương lần 3, quy mô của thị trường P2P Lending Việt Nam khá nhỏ so với các nước trong khu vực Đông Nam Á, chiếm 1,6% khối lượng giao dịch của khu vực, chỉ xếp trên Nepal và Kazakhstan (University of Cambridge JBS, 2018) Điều này cũng phù hợp với tuổi đời còn non trẻ của mô hình P2P Lending tại Việt Nam Tuy nhiên, Việt Nam có nhiều tiềm năng thích hợp cho sự phát triển của mô hình này dựa trên sự phát triển nhanh chóng của khoa học công nghệ, Internet, thiết bị di dộng và đặc biệt là dữ liệu lớn (Big Data) Bên cạnh đó, sự thay đổi về cơ cấu dân số học, đặc biệt là thế hệ trẻ sẵn sàng thích ứng với công nghệ mới và mong muốn được cung cấp các dịch vụ tài
18 chính thuận lợi và nhanh chóng hơn nên dễ dàng chấp nhận các sản phẩm dịch vụ mới như P2P Lending1
Thống kê sơ bộ của Ngân hàng Nhà nước, Việt Nam hiện có khoảng 100 công ty P2P Lending (bao gồm cả công ty đã đi vào hoạt động chính thức và một số công ty đang trong giai đoạn thử nghiệm) như Tima, Trust Circle, Vay mượn, Lendmo, Wecash, InterLoan… (Bảng 1) Tuy nhiên, thực tế số doanh nghiệp hoạt động P2P Lending có thể nhiều hơn và rất khó đo lường một cách chính xác vì hiện nay các cơ quan quản lý chưa tổ chức thống kê chính thức các thông tin liên quan đến doanh nghiệp triển khai hoạt động P2P Lending tại Việt Nam
Hình 4: Danh sách một số công ty P2P Lending truyền thống hoạt động tại Việt Nam
Tuy mới xuất hiện và tồn tại khoảng 5 năm, các công ty P2P Lending đã đưa ra các sản phẩm vay vốn trên các nền tảng trực tuyến khá đa dạng, gồm: Vay có tài sản bảo đảm và vay không có tài sản bảo đảm, trong đó chủ yếu là vay không có tài sản bảo đảm Đối với khoản vay cá nhân, các công ty P2P Lending đưa ra các sản phẩm vay tín chấp theo lương, vay theo sổ hộ khẩu, vay theo đăng ký xe máy, vay trả góp, vay theo hóa đơn điện, nước Đối với doanh nghiệp (chủ yếu là các doanh nghiệp vừa và nhỏ - SMEs), các công ty P2P Lending cũng đưa ra nhiều sản phẩm, dịch vụ như vay tài trợ các khoản phải thu, tài trợ bên mua hàng, tài trợ vốn lưu động, tài trợ thương mại điện tử
Hình 5: Số nền tảng P2P Lending theo quốc gia và theo đơn vị tiền tệ
Cơ sở pháp lý về hoạt động P2P Lending tại Việt Nam
Thực tế cho thấy, pháp luật hiện hành của Việt Nam chưa có một đạo luật riêng hoặc một văn bản quy phạm pháp luật được ban hành chỉ để điều chỉnh hoạt động cho vay ngang hàng Luật Các tổ chức tín dụng năm 2010 đã được sửa đổi, bổ sung năm 2017 không có quy định về vay ngang hàng Hoạt động cho vay ngang hàng không được xếp vào một dạng hoạt động cấp tín dụng theo cách hiểu của Luật Các tổ chức tín dụng Theo quy định tại Điều 4 Luật Các tổ chức tín dụng, “cấp tín dụng là việc thỏa thuận để tổ chức, cá nhân sử dụng một khoản tiền hoặc cam kết cho phép sử dụng một khoản tiền theo nguyên tắc có hoàn trả bằng nghiệp vụ cho vay, chiết khấu, cho thuê tài chính, bao thanh toán, bảo lãnh ngân hàng và các nghiệp vụ cấp tín dụng khác” và “cho vay là hình thức cấp tín dụng, theo đó bên cho vay giao hoặc cam kết giao cho khách hàng một khoản tiền để sử dụng vào mục đích xác định trong một thời gian nhất định theo thỏa thuận với nguyên tắc có hoàn trả cả gốc và lãi” Các thuật ngữ “cho vay” và “cấp tín dụng” theo quy định tại Luật Các tổ chức tín dụng luôn đòi hỏi bên cho vay hoặc bên cấp tín dụng phải là một tổ chức tín dụng hoạt động hợp pháp tại Việt Nam Trường hợp doanh nghiệp cung cấp nền tảng kết nối giữa người cho vay và người vay không trực tiếp là bên cho vay hoặc
20 bên vay thì rõ ràng, doanh nghiệp trung gian này không phải là tổ chức tín dụng theo nghĩa của Luật Các tổ chức tín dụng
Tuy nhiên, khi pháp luật hiện hành chưa có quy định nào cấm hoạt động cho vay ngang hàng, có thể xác định rằng, hoạt động cho vay ngang hàng, với tư cách là quan hệ hợp đồng, chịu sự điều chỉnh bởi các quy định về hợp đồng trong Bộ luật Dân sự năm 2015, nhất là các quy định về hợp đồng vay tài sản
Theo quy định tại Điều 465 Bộ luật Dân sự năm 2015, bên cho vay có các nghĩa vụ như sau: (1) Giao tài sản cho bên vay đầy đủ, đúng chất lượng, số lượng vào thời điểm và địa điểm đã thỏa thuận; (2) Bồi thường thiệt hại cho bên vay, nếu bên cho vay biết tài sản không bảo đảm chất lượng mà không báo cho bên vay biết, trừ trường hợp bên vay biết mà vẫn nhận tài sản đó; (3) Không được yêu cầu bên vay trả lại tài sản trước thời hạn, trừ trường hợp quy định tại Điều 470 của Bộ luật này hoặc luật khác có liên quan quy định khác
Trong khi đó, bên vay có nghĩa vụ trả nợ được quy định cụ thể tại Điều 466 Bộ luật Dân sự năm 2015 như sau: Bên vay tài sản là tiền thì phải trả đủ tiền khi đến hạn, trừ trường hợp có thỏa thuận khác; Địa điểm trả nợ là nơi cư trú hoặc nơi đặt trụ sở của bên cho vay, trừ trường hợp có thỏa thuận khác; Trường hợp vay không có lãi mà khi đến hạn bên vay không trả nợ hoặc trả không đầy đủ thì bên cho vay có quyền yêu cầu trả tiền lãi với mức lãi suất theo quy định tại khoản 2 Điều 468 của
Bộ luật này trên số tiền chậm trả tương ứng với thời gian chậm trả, trừ trường hợp có thỏa thuận khác hoặc luật có quy định khác; Trường hợp vay có lãi mà khi đến hạn bên vay không trả hoặc trả không đầy đủ thì bên vay phải trả lãi như sau: a) Lãi trên nợ gốc theo lãi suất thỏa thuận trong hợp đồng tương ứng với thời hạn vay mà đến hạn chưa trả; trường hợp chậm trả thì còn phải trả lãi theo mức lãi suất quy định tại khoản 2 Điều 468 của Bộ luật này; b) Lãi trên nợ gốc quá hạn chưa trả bằng 150% lãi suất vay theo hợp đồng tương ứng với thời gian chậm trả, trừ trường hợp có thỏa thuận khác Theo quy định tại Điều 467 Bộ luật Dân sự năm 2015, các bên có thể thỏa thuận về việc tài sản vay phải được sử dụng đúng mục đích vay Bên
21 cho vay có quyền kiểm tra việc sử dụng tài sản và có quyền đòi lại tài sản vay trước thời hạn nếu đã nhắc nhở mà bên vay vẫn sử dụng tài sản trái mục đích
Do hoạt động cho vay P2P vẫn chưa chính thức được công nhận, nên hoạt động của các công ty P2P chưa đi vào hệ thống, nhiều công ty cho vay P2P được thành lập không theo chuẩn nên tiềm ẩn không ít rủi ro.
Đánh giá vai trò và rủi ro trong hoạt động P2P Lending
Mô hình P2P Lending có khá nhiều ưu điểm:
- Thứ nhất, bên vay sẽ: (i) Tiếp cận được nguồn vốn trực tiếp, đặc biệt là với các món vay nhỏ, ngắn hạn của các doanh nghiệp nhỏ và vừa (DNNVV) khó tiếp cận nguồn vốn chính thức; (ii) Đáp ứng nhu cầu vay nhanh hơn do thủ tục, quy trình đơn giản hơn so với vay tiêu dùng thông thường; (iii) Phí và lãi suất có thể thấp hơn so với vay tiêu dùng thông thường qua trung gian do tiếp cận trực tiếp, sử dụng công nghệ và dữ liệu lớn (Big data) để tiết kiệm chi phí; (iv) Có thêm lựa chọn về kênh huy động vốn
- Thứ hai, đối với nhà đầu tư (bên cho vay), mô hình này cung cấp một kênh đầu tư, góp phần đa dạng hóa danh mục đầu tư; đồng thời, lợi tức khá hấp dẫn (lãi suất thường cao hơn gửi tiết kiệm hoặc đầu tư trái phiếu thông thường)
- Thứ ba, đối với công ty P2P Lending, đây là một lĩnh vực hoạt động mới, khai thác nền tảng công nghệ đã có, đem lại nguồn thu, đa dạng hóa hoạt động và tăng việc làm cho nhân viên
- Thứ tư, mô hình này giúp tăng khả năng tiếp cận vốn cho các DNNVV là đối tượng khó tiếp cận vốn từ các kênh huy động vốn truyền thống như vay vốn ngân hàng, phát hành cổ phiếu và trái phiếu trên thị trường vốn… Nguyên nhân chủ yếu là do đối tượng này thường có năng lực tài chính thấp, chưa xây dựng được kế hoạch kinh doanh dài hạn, nhu cầu vốn vay nhỏ và ngắn hạn, dễ bị ảnh hưởng bởi các đối tác, thiếu tài sản đảm bảo… Bên cạnh đó, mục đích loại hình cho vay này thường tập trung vào cho vay các món nhỏ
22 thế chấp (mua nhà, ô tô…), tái cho vay thẻ tín dụng, cho vay tiêu dùng, cho vay doanh nghiệp nhỏ và siêu nhỏ, cho vay khởi nghiệp
Song song với những ưu điểm, thì P2P Lending cũng đem đến một số rủi ro như sau:
- Khi P2P Lending không phải tuân thủ các quy định về an toàn hoạt động cũng như các quy định về giám sát, kiểm soát chặt chẽ như đối với các tổ chức tín dụng hay công ty quản lý đầu tư thì trách nhiệm ràng buộc giữa công ty P2P Lending và nhà đầu tư khá hạn chế, dẫn đến tranh chấp có thể xảy ra hoặc là khi xảy ra rủi ro, các bên liên quan không chịu trách nhiệm hoặc không được giải quyết đền bù như thường lệ
- Nhà đầu tư chịu nhiều rủi ro hơn so với bên vay, bởi vì tại nhiều quốc gia, bên vay vẫn được hưởng các quyền lợi theo quy định về bảo vệ người đi vay như các quy định về lãi suất, quyền được cung cấp thông tin… trong khi nhà đầu tư lại không được hưởng các quyền lợi liên quan đến việc bảo vệ người gửi tiền như trong hệ thống ngân hàng, trong khi đó, vẫn phải chịu các rủi ro về tín dụng, thanh khoản, pháp lý… Hơn nữa, nhà đầu tư chịu thêm rủi ro đạo đức xảy ra khi: Bên vay không trả được nợ (do khách quan hay cố ý, dù có thể được bù đắp một phần từ công ty P2P Lending); và/hoặc công ty P2P Lending dùng tiền đầu tư sai mục đích, quản lý kém hoặc phá sản (do khách quan hay cố ý)… dẫn đến khả năng mất vốn
- Những biến tướng của hình thức cho vay này như: công ty P2P Lending lừa đảo, áp dụng lãi suất và phí cao ngất ngưởng bất chấp khả năng trả nợ của bên vay; hoặc bên vay trốn tránh trả nợ dẫn đến bên cho vay hoặc công ty P2P Lending dùng mọi biện pháp kể cả thuê xã hội đen đòi nợ… dẫn đến diễn biến rất phức tạp, hệ lụy kinh tế và xã hội khó lường
- Rủi ro pháp lý cũng có thể xảy ra khi khung khổ pháp lý chưa đầy đủ và có thể bị thay đổi nhanh chóng, dẫn đến rủi ro cho cả phía doanh nghiệp và nhà đầu tư Cơ sở pháp lý chưa đầy đủ sẽ dẫn đến việc thiếu căn cứ để giải quyết
23 khi xảy ra rủi ro, tranh chấp… có thể dẫn đến chậm phát triển các dịch vụ P2P Lending, không đáp ứng kịp cho nhu cầu thị trường.
Kết luận
Trong bối cảnh phát triển mạnh mẽ của các công ty Fintech, mô hình cho vay ngang hàng P2P lending đã trở thành một phần quan trọng của hệ thống tài chính hiện đại Các công ty P2P lending kết nối trực tiếp người vay và người cho vay thông qua nền tảng công nghệ, loại bỏ sự trung gian của các tổ chức tài chính truyền thống Điều này tạo ra sự thuận tiện và tốc độ trong quá trình vay và cho vay.
Dự án nghiên cứu của nhóm tập trung vào mô hình P2P lending truyền thống, trong đó nền tảng P2P lending chỉ đóng vai trò như một nền tảng kết nối trực tuyến Hình thức này mang lại nhiều ưu điểm, bao gồm sự đơn giản trong quy trình, tốc độ nhanh chóng, và khả năng tiếp cận vốn cho những đối tượng khó tiếp cận với các kênh huy động vốn truyền thống
Tuy nhiên, nhóm nhận thức rằng cùng với những ưu điểm, mô hình P2P lending cũng mang đến một loạt rủi ro và thách thức Điều này bao gồm các vấn đề về an toàn hoạt động, trách nhiệm giữa các bên liên quan, và rủi ro pháp lý Đối với nhà đầu tư, họ phải đối mặt với rủi ro về tín dụng, thanh khoản, và cả rủi ro đạo đức
Hay hạn chế về thời gian và kiến thức nghiệp vụ, nhóm nghiên cứu đã quyết định chọn Mô hình P2P lending truyền thống để làm đề tài này Dự án hứa hẹn mang lại những kiến thức quý báu về hoạt động của P2P lending và cung cấp cái nhìn tổng quan về vai trò và thách thức của nó tại Việt Nam
CƠ SỞ CÔNG NGHỆ
Flutter
Flutter là một UI framework di động mã nguồn mở và hoàn toàn miễn phí do Google phát triển, và được công bố vào năm 2015 nhưng đến tháng 5 năm 2017 mới chính thức phát hành Flutter cho phép các nhà phát triển có thể tạo ra các bộ giao diện native chất lượng cao trong thời gian rất ngắn Ngoài ra, việc sử dụng Flutter cho phép các nhà phát triển với một Codebase có thể phát triển ứng dụng có trải nghiệm tốt trên đa nền tảng bao gồm: Mobile (Android và IOS), Web, Desktop App, Linux, giúp cho các Team phát triển có thể tiết kiệm nhân lực và chi phí
Flutter có 2 phần quan trọng:
+ SDK (Software Development Kit): là một bộ tập hợp các công cụ hỗ trợ các nhà phát triển bao gồm công cụ biên dịch Code thành mã máy Native
+ Framework: Flutter cung cấp một số lượng lớn các Widget (Button, ListView, Text Input, ScrollBar, ), giúp cho các nhà phát triển có thể xây dựng giao diện nhanh chóng, tiện lợi, đẹp mắt Ưu điểm:
- Phát triển giao diện đẹp, Animation đẹp mắt: Flutter cung cấp số lượng lớn các Widget, phong cách chuẩn Material và Cupertino, cho phép các nhà phát triển có thể tùy biến lại phụ thuộc vào nhu cầu của mình, từ đó giúp các nhà phát triển xây dựng giao diện nhanh chóng, tiện lợi
- Hot reload: Flutter được viết dựa trên ngôn ngữ Dart, một ngôn ngữ lập trình hướng đối tượng có hỗ trợ JIT (Just in time), từ đó cho phép framework này có thể cung cấp cơ chế hot reload Cơ chế này hoạt động bằng cách đưa những File Source Code đã được cập nhật, chỉnh sửa vào một máy ảo Virtual Machine (VM) của Dart Sau khi VM được cập nhật thì Flutter sẽ tự động tái xây dựng các Widget Tree và cho nhà phát triển xem được sự thay đổi trong app sau khi cập nhật Code mới Với cơ chế này, các nhà phát triển có thể cập nhật ứng dụng nhanh chóng ngay sau khi code xong mà không phải đợi build lại App
- Native Performance: Flutter giao tiếp gần như là trực tiếp với Native mà không phải thông qua một “cái cầu” như đối thủ của nó là React Native, do đó Flutter cung cấp một hiệu năng tiệm cận với các Native app Sở dĩ có thể làm được như này là do cơ chế AOT (Ahead of Time) giúp cho biên dịch nhanh hơn, chính xác và Native code
- Render UI: Render UI được nhóm phát triển viết lại hoàn toàn mà không liên quan đến UI của Native app điều này tạo ra sự đánh đổi
26 khi đồng nhất được giao diện trên các nền tảng, phiên bản nhưng lại sử dụng Memory lớn
- Phải học ngôn ngữ Dart: Flutter được viết dựa trên ngôn ngữ lập trình hướng đối tượng Dart, vốn là ngôn ngữ rất ít được sử dụng trước thời điểm Flutter ra mắt Tuy đây không phải một vấn đề quá lớn nhưng cũng là rào cản của Flutter so với React Native vốn được viết dựa trên ngôn ngữ lập trình JavaScript - một ngôn ngữ rất phổ biến ở thời điểm hiện tại
- Flutter chỉ mới được phát hành chính thức gần đây và vẫn còn đang được tiếp tục phát triển do đó vẫn còn một số API vẫn chưa được ổn định và có thay đổi lớn qua các bản cập nhập Tuy được giới thiệu có thể phát triển đa nền tảng, nhưng Flutter hiện tại hỗ trợ chưa tốt trong việc phát triển trên nền tảng Web, Linux, Desktop App.
Bloc - State Management
Bloc (viết tắt của Business Logic Component) là một thư viện giúp quản lý các State trong các ứng dụng của Flutter Bloc được xây dựng dựa trên RxDart, với
“event” là Input và “state” là Output Điểm độc đáo ở State Management này là
27 thường người ta sẽ chia các Bloc thành các Component và mỗi Component chỉ quản lý duy nhất một Business Logic, việc chia như này sẽ tránh ảnh hưởng, chồng chéo đến các Code Logic khác
Cũng giống như MVVM, MVC, Bloc cũng là một Pattern với mục đích là tách Business Logic ra khỏi tầng UI tránh gộp chung thành một File, để sau này khi có nhu cầu mở rộng hay thay đổi Business Logic thì sẽ dễ dàng thay đổi hơn mà không ảnh hưởng đến tầng UI
Hình 8: Ví dụ về mô hình ba lớp của BLoC
Trong một app Flutter, ta có thể chia thành 3 lớp như sau:
Data Layer: đây là lớp thấp nhất trong ứng dụng, chịu trách nhiệm truy xuất dữ liệu thô từ các nguồn bên ngoài như API, Database, Các Packages ở trong tầng này phải độc lập, không phụ thuộc vào UI (Feature layer)
Domain Layer: Tầng này như một cây cầu kết nối giữa 2 tầng là Feature Layer và Data Layer Ở đây là nơi tổng hợp các data từ tầng Data Layer và tiến hành xử lý Logic để tầng Feature Layer có thể sử dụng được Các thành phần trong tầng này được gọi là các Repository
Feature Layer: Đây là tầng sẽ làm việc trực tiếp và thể hiện ra cho người dùng Tầng này bao gồm các tính năng và các Business Logic của nó Thường các nhà phát triển sẽ phân chia các chức năng sao cho chúng độc lập với nhau để có thể dễ dàng thêm, xóa, sửa mà không ảnh hưởng đến các tính năng khác trong phần mềm, cách đơn giản để thực hiện việc này là chia theo từng trang Đối với mỗi tính năng, các State và Business logic sẽ được quản lý bởi Bloc Bloc sẽ tương tác với một hoặc nhiều Repository từ tầng Domain layer, đồng thời nó cũng sẽ nhận các Event từ UI và trả về các State để Render lại tầng UI
ReactJS
- ReactJs là một opensource được phát triển bởi Facebook, ra mắt vào năm
2013, bản thân nó là một thư viện Javascript được dùng để để xây dựng các tương tác với các thành phần trên website.
- Một trong những điểm nổi bật nhất của ReactJS đó là việc render dữ liệu không chỉ thực hiện được trên tầng Server mà còn ở dưới Client nữa
- Với triết lý "Learn Once, Write Anywhere" (Học Một Lần, Viết Ở Mọi Nơi), ReactJS đã trở thành một trong những công nghệ phổ biến nhất trong phát triển frontend
- Những điểm mạnh của ReactJS bao gồm:
- Component-Based Architecture (Kiến Trúc Dựa Trên Component): ReactJS sử dụng mô hình kiến trúc dựa trên component, cho phép phân chia giao diện người dùng thành các thành phần độc lập Điều này giúp tăng khả năng tái sử dụng mã và quản lý dễ dàng
- Virtual DOM (DOM Ảo): ReactJS sử dụng Virtual DOM để tối ưu hóa hiệu suất Thay vì cập nhật toàn bộ DOM mỗi khi có thay đổi, React chỉ cập nhật những phần cần thiết, giảm bớt tải lên trình duyệt và tăng tốc độ render
- JSX (JavaScript XML): JSX là một ngôn ngữ mở rộng của JavaScript, giúp việc viết mã HTML trong JavaScript trở nên dễ đọc và dễ bảo trì hơn JSX cung cấp sự tự động hóa quá trình tạo các thành phần UI
- Unidirectional Data Flow (Luồng Dữ Liệu Một Chiều): Dữ liệu trong ReactJS di chuyển một chiều từ component cha đến component con, giúp dễ dàng theo dõi và duy trì trạng thái ứng dụng
- Hiệu Suất Cao: Nhờ vào Virtual DOM và cập nhật thông minh, ReactJS cung cấp hiệu suất cao, giúp ứng dụng hoạt động mượt mà và nhanh chóng
- Tính Tương Thích: ReactJS có khả năng tích hợp dễ dàng với các thư viện và frameworks khác, làm cho quá trình phát triển và bảo trì trở nên linh hoạt
- Cộng Đồng Lớn: ReactJS có một cộng đồng lớn và tích cực, điều này đồng nghĩa với việc có nhiều tài nguyên, thư viện và hỗ trợ từ cộng đồng
- Component Reusability (Tính Tái Sử Dụng Component): Có thể sử dụng lại các component đã tạo, giảm độ phức tạp của mã nguồn và tăng tốc độ phát triển
- Ecosystem Mạnh Mẽ: ReactJS được hỗ trợ bởi một hệ sinh thái mạnh mẽ với nhiều công cụ và thư viện bổ sung như Redux, React Router, và Material-UI
NodeJS
- NodeJS là một môi trường thực thi JavaScript đa nền tảng mã nguồn mở
- Node.js ra mắt vào năm 2009, bởi Ryan Dahl
- Phần core của Node.js hầu hết được viết bằng C++ Chính vì thế mà tốc độ xử lý và hiệu năng khá cao
- Bên cạnh đó, Node.js còn tạo ra ứng dụng có tốc độ xử lý nhanh với thời gian thực
- Node.js cũng được áp dụng để tạo các sản phẩm có lượng truy cập lớn, mở rộng nhanh và đổi mới công nghệ hoặc tạo dự án Startup tiết kiệm thời gian nhất
- Những điểm mạnh của NodeJS bao gồm:
- Bất đồng bộ và phát sinh sự kiện (Non-blocking and Event Driven): Tất các các APIs của thư viện Node.js đều bất đồng bộ (non-blocking), vì thế không cần đợi một API trả về dữ liệu Server chuyển sang một API khác sau khi gọi nó và có cơ chế riêng để gửi thông báo và nhận phản hồi về các hoạt động của Node.js và API đã gọi
- Tốc độ nhanh: Phần core phía dưới được viết gần như toàn bộ bằng C++ kết hợp Chrome V8 Engine nên tốc độ xử lý công việc của Node.js cực nhanh, nhưng vẫn đảm bảo được tính chuẩn xác
- Đơn giản – Hiệu năng cao: Node.js sử dụng một mô hình luồng đơn luồng (single thread) và các sự kiện lặp (event-loop) Cơ chế sự kiện cho phép phía Server trả về phản hồi theo non-blocking, đồng thời tăng hiệu quả sử dụng Các luồng đơn cung cấp dịch vụ cho nhiều request hơn hẳn Server truyền thống
- Nodejs khá nhẹ nhưng lại hiệu quả nhờ vào cơ chế non-blocking I/O, chạy đa nền tảng trên Server và dùng Event-driven
- Có thể phát triển NodeJS trên mọi nền tảng, bao gồm Windows, Linux, MacOS
- Cộng đồng lập trình viên sử dụng NodeJs lớn và có nhiều thư viện
- NodeJS có tốc độ xử lý nhanh, có thể chịu đựng được lượng lớn người dùng truy cập cùng thời điểm.
PostgreSQL
- PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở (RDBMS), được phát triển từ dự án POSTGRES tại Đại học California, Berkeley
- PostgreSQL không chỉ là một hệ quản trị cơ sở dữ liệu mà còn là một hệ quản trị đối tượng, hỗ trợ một loạt các tính năng mạnh mẽ và linh hoạt, giúp người sử dụng xây dựng và duy trì các ứng dụng có hiệu suất cao và ổn định
- PostgreSQL cũng hỗ trợ nhiều loại dữ liệu và phương pháp truy vấn phức tạp, giúp cho việc lưu trữ và truy xuất dữ liệu trở nên dễ dàng hơn
- Những điểm mạnh của PostgreSQL bao gồm:
- Mã Nguồn Mở và Miễn Phí: PostgreSQL là một dự án mã nguồn mở, cho phép người dùng tự do sử dụng, sửa đổi, và phân phối mã nguồn mà không mất phí
- Khả Năng Mở Rộng: Hỗ trợ khả năng mở rộng dọc và ngang, cho phép mở rộng cấp dữ liệu và cấp server mà không ảnh hưởng đến hiệu suất
- Tiêu Chuẩn SQL Đầy Đủ: PostgreSQL tuân theo nhiều chuẩn SQL, giúp chuyển đổi giữa các hệ thống quản trị cơ sở dữ liệu một cách dễ dàng và giảm thiểu sự phụ thuộc vào các ngôn ngữ hay tính năng đặc biệt
- Hỗ Trợ Đối Tượng: PostgreSQL không chỉ lưu trữ dữ liệu theo kiểu quan hệ mà còn hỗ trợ dữ liệu đối tượng, giúp giảm sự phức tạp của cấu trúc dữ liệu
- Tính Năng ACID-Compliant: Đảm bảo tính nhất quán và an toàn của dữ liệu thông qua việc tuân thủ ACID (Atomicity, Consistency, Isolation, Durability)
- Bảo Mật Mạnh Mẽ: Cung cấp các tính năng bảo mật cao như quản lý người dùng, kiểm soát quyền truy cập, và mã hóa dữ liệu
- Cộng Đồng Phát Triển Lớn: Sự đóng góp của cộng đồng lớn giúp PostgreSQL ngày càng phát triển và cập nhật liên tục với các tính năng mới
- PostgreSQL hỗ trợ nhiều loại kiểu dữ liệu, bao gồm kiểu nguyên thủy (số nguyên, số thực, chuỗi, boolean), kiểu cấu trúc (ngày/giờ, mảng, phạm vi, UUID), kiểu tài liệu (JSON/JSONB, XML, key-value), kiểu hình học (điểm, đường thẳng, vòng tròn, đa giác) và kiểu tùy chỉnh
Vì thế hệ quản trị cơ sở dữ liệu sẽ tương thích tốt với lại server được xây dựng bằng JavaScript, từ đó nâng cao tốc độ phát triển
- MongoDB dễ dàng cài đặt, tương thích mọi nền tảng, từ đó dễ dàng triển khai MongoDB trên bất kỳ hệ điều hành nào như Linux, Windows và MacOS
- Cung cấp nhiều loại dữ liệu và hỗ trợ nhiều kiểu lưu trữ, từ dữ liệu đơn giản đến đối tượng phức tạp
- MongoDB được thiết kế để đảm bảo hiệu suất cao và ổn định, làm cho nó trở thành lựa chọn lý tưởng cho các ứng dụng có yêu cầu về khả năng xử lý cao.
Socket.IO
- Khi làm việc về vấn đề giao tiếp giữa Server và Client, đặc biệt là vấn đề Server, Client có thể nhận biết sự thay đổi của đối phương, những nhà phát triển thường sử dụng rất nhiều phương pháp mà có thể kể đến như: AJAX, HTML5 server-sent events, Tuy nhiên các phương pháp này đều tồn tại nhiều nhược điểm như chậm, tốn tài nguyên Do đó, Socket.IO đã được phát triển để giải quyết vấn đề này, đặc biệt là các ứng dụng có yêu cầu tính thời gian thực
- Socket.IO là 1 module trong NodeJS, được phát triển vào năm 2010 Mục đích lớn nhất để Socket.io ra đời là việc giao tiếp ngay tức khắc giữa Client và Server
- Đồ án của nhóm là việc xây dựng phần mềm Chat nên yêu cầu quan trọng nhất của phần mềm là Real-time, do đó Socket.IO là lựa chọn hợp lý vì đây là công nghệ mã nguồn mở do đó sẽ không bị các vấn đề liên quan đến chi phí như các bên cung cấp ở bên thứ 3 như Firebase,
- Bảo mật cao: SocketIO được xây dựng dựa trên Engine.IO, nó sẽ khởi chạy phương thức Long-polling đầu tiên, sau đó sẽ tới những phương thức kết nối tốt hơn Bên cạnh việc thiết lập chặt chẽ đó, Socket.IO còn tự tạo các kết nối bảo mật như: Proxy,
XÁC ĐỊNH VÀ PHÂN TÍCH YÊU CẦU
Khảo sát
Khảo sát được thực hiện nhằm mục đích:
• Hiểu rõ nhu cầu và mong muốn của các bên tham gia hoạt động cho vay ngang hàng (P2P lending), bao gồm người cho vay, người đi vay và các tổ chức trung gian
• Xác định các vấn đề, thách thức và cơ hội trong việc quản lý tài chính cho giải pháp P2P lending
• Thu thập thông tin và dữ liệu cần thiết để xây dựng hệ thống hỗ trợ quản lý tài chính cho P2P lending
Cụ thể, khảo sát sẽ tập trung vào các nội dung sau:
• Nhu cầu và mong muốn của người cho vay: o Mục đích vay vốn o Mức độ chấp nhận rủi ro o Thông tin và dữ liệu cần thiết để ra quyết định cho vay
• Nhu cầu và mong muốn của người đi vay: o Mục đích vay vốn o Thông tin và dữ liệu cần thiết để được vay vốn
• Nhu cầu và mong muốn của các tổ chức trung gian: o Vai trò và chức năng o Các dịch vụ cung cấp o Thông tin và dữ liệu cần thiết để quản lý rủi ro
Phân tích yêu cầu
4.2.1.1 Yêu cầu của người dùng là người sử dụng ứng dụng:
- Quản lý thông tin cá nhân: người dùng có thể quản lý những thông tin cá nhân
37 mà hệ thống đang lưu trữ như họ tên, số điện thoại, email, địa chỉ,… bên cạnh đó hệ thống cũng cần cung cấp giao diện thân thiện để người dùng có thể thay đổi mật khẩu dễ dàng và bảo mật
- Tìm kiếm bài đăng: người dùng có thể tìm kiếm bài đăng vay cho vay bằng nhiều tiêu chí như lọc theo lãi suất, kỳ hạn, số tiền cho vay,…
- Đăng tin: người dùng có thể đăng tin tìm kiếm các khoản vay hoặc cho vay
- Gửi yêu cầu: Người dung có thể gửi yêu cầu vay tiền đến người khác
- Quản lý yêu cầu vay tiền: Người dung có thể chấp nhận hoặc từ chối các yêu cầu vay tiền của người khác
- Xem các hợp đồng vay đã tạo: Người dùng có thể xem các hợp đồng vay đã tạo như thông tin các bên, số tiền vay, lãi suất, kỳ hạn,…
- Nhắn tin: người dùng có thể sử dụng chức năng nhắn tin để trao đổi thông tin với nhau,
- Tố cáo: người dùng có thể gửi báo các bài đăng hoặc người dùng vi phạm
- Xem tin tức: Người dùng có thể xem các tin tức blog do người quản trị đăng để cập nhật thông tin
4.2.1.2 Yêu cầu của người dùng là người quản trị hệ thống:
- Quản lý bài đăng: người quản trị có thể duyệt bài đăng, xoá hoặc từ chối bài đăng vi phạm
- Quản lý người dùng: người quản trị có thể xem thông tin người dùng hiện tại của hệ thống
- Quản lý tố cáo: người quản trị có thể xem các tố cáo, từ đó đưa ra các biện pháp ngăn chặn phù hợp như khoá tài khoản, gỡ bài đăng
- Thống kê: người quản trị có thể thống kê các loại bất động sản được đăng nhiều, số lượng bài đăng hay các gói dịch vụ
- Quản lý blog: Người quản trị có thể thêm hoặc xoá các blog
4.2.2 Yêu cầu phi chức năng
• Yêu cầu về giao diện: o Sử dụng tiếng Việt, giao diện đẹp và thân thiện với người sử dụng, hạn chế tối đa thao tác của người dùng o Các thành phần giao diện được sắp xếp hợp lý, dễ nhìn, dễ thao tác o Sử dụng màu sắc, phông chữ phù hợp, dễ gây thiện cảm cho người dùng
• Yêu cầu về hiệu năng: o Hệ thống chạy ổn định, không bị lỗi, hoạt động tốt trên các trình duyệt thông dụng hiện nay (Mozilla FireFox, Google Chrome, Cốc Cốc, Opera, ) o Hệ thống có khả năng chịu tải cao, đáp ứng được lượng truy cập lớn o Hệ thống có khả năng mở rộng, đáp ứng được nhu cầu phát triển của ứng dụng
• Yêu cầu về giao diện: o Sử dụng tiếng Việt, giao diện đẹp và thân thiện với người sử dụng, hạn chế tối đa thao tác của người dùng o Các thành phần giao diện được sắp xếp hợp lý, dễ nhìn, dễ thao tác o Sử dụng màu sắc, phông chữ phù hợp, dễ gây thiện cảm cho người dùng o Hệ thống có tính năng hỗ trợ người dùng, hướng dẫn sử dụng, giúp người dùng dễ dàng sử dụng hệ thống
• Yêu cầu về hiệu năng: o Hệ thống chạy ổn định, không bị lỗi, hoạt động tốt trên các thiết bị di động phổ biến hiện nay (iPhone, iPad, Android, )
39 o Hệ thống có khả năng chịu tải cao, đáp ứng được lượng truy cập lớn o Hệ thống có khả năng mở rộng, đáp ứng được nhu cầu phát triển của ứng dụng
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Sơ đồ ERD
Hình 13: Sơ đồ ERD tổng quát
Column Type Comment PK Nullable Default id uuid Mã thẻ ngân hàng
YES NO uuid_generate_v4() is_primary boolean Là thẻ chính
NO false user_id uuid Mã người dùng
NO bank_id uuid Mã ngân NO
41 hàng card_number varchar(50) Số thẻ NO branch varchar(50) Chi nhánh YES created_at timestamp without time zone
Ngày tạo NO now() deleted_at timestamp without time zone
Column Type Comment PK Nullable Default id uuid Mã ngân hàng YES NO uuid_generate_v4() name varchar(100) Tên ngân hàng NO code varchar(50) Mã code của ngân hàng
NO bin varchar(50) Mã bin ngân hàng
NO short_name varchar(50) Tên viết tắt NO logo text Đường dẫn ảnh logo
Column Type Comment PK Nullable Default
42 id uuid Mã blog YES NO uuid_generate_v4() title varchar(255) Tiêu đề blog
NO short_description text Mô tả ngắn
NO author varchar(50) Tên tác giả
NO thumbnail text Đường dẫn ảnh thumbnail
NO content text Nội dung bài viết
NO is_active boolean Tình trạng hoạt động
NO true created_at timestamp without time zone
Column Type Comment PK Nullable Default id uuid Mã hợp đồng mẫu
YES NO uuid_generate_v4() template_name text Tên hợp đồng mẫu
NO content text Nội dung NO
43 hợp đồng is_active boolean Tình trạng hoạt động
NO deleted_at timestamp without time zone
Ngày xoá YES created_at timestamp without time zone
Default id uuid Mã hợp đồng
() loan_contract_request_ id uuid Mã yêu cầu vay tiền
NO contract_template_id uuid Mã mẫu hộp đồng
NO lender_id uuid Mã người cho vay
NO borrower_id uuid Mã người
44 vay tiền loan_reason_type varchar(50
Mã lý do cho vay
NO loan_reason text Mã người cho vay
NO amount bigint Số tiền vay
NO interest_rate double precision
Lãi suất NO tenure_in_months integer Thời gian vay
NO overdue_interest_rate double precision
NO created_at timestamp without time zone
Ngày tạo NO expired_at timestamp without time zone
NO lender_bank_card_id uuid Mã tài khoản ngân hàng người cho vay
45 borrower_bank_card_i d uuid Mã tài khoản ngân hàng người vay tiền
Column Type Comment PK Nullable Default id uuid Mã cuộc trò chuyện
YES NO uuid_generate_v4() created_at date Ngày tạo NO now() last_messsage_id uuid Mã tin nhắn mới nhất
YES is_active boolean Tình trạng hoạt động
Default id uuid Mã yêu cầu vay tiền
() status varchar(50) Tình trạng yêu cầu
NO 'pending'::charact er varying
46 sender_id uuid Mã người gửi
NO receiver_id uuid Mã người nhận
NO description varchar Mô tả NO loan_amount bigint Số tiền vay
NO interest_rate double precision
Lãi suất NO overdue_interest_rat e double precision
NO loan_tenure_months integer Thời gian vay
NO loan_reason_type varchar(50) Loại lý do vay
Mô tả lý do vay
NO video_confirmation text Video xác minh
NO portait_photo text Ảnh chân dung
NO id_card_front_photo text Ảnh giấy tờ tuỳ
47 thân mặt trước id_card_back_photo text Ảnh giấy tờ tuỳ thân mặt sau
YES created_at timestamp without time zone
Ngày tạo NO now() updated_at timestamp without time zone
NO now() deleted_at timestamp without time zone
YES sender_bank_card_id uuid Mã người gửi (người vay)
NO receiver_bank_card_ id uuid Mã người nhận ( Người cho vay)
Column Type Comment PK Nullable Default id uuid Mã tin nhắn
YES NO uuid_generate_v4() conversation_id uuid Mã cuộc trò chuyện
NO sender_id uuid Mã cuộc trò chuyện
NO content_type varchar(50) Loại nội dung tin nhắn
NO content jsonb Nội dung tin nhắn
NO sent_at timestamp without time zone
Ngày gửi NO now() is_active boolean Tình trạng hoạt động
Column Type Comment PK Nullable Default id uuid Mã (ID)
49 type varchar(50) Loại OTP NO issued_at timestamp without time zone
Ngày cấp NO now() expiration_time timestamp without time zone
NO token varchar(255) Mã OTP được mã hoá
NO user_id uuid Mã người dùng
NO is_used boolean Tình trạng sử dụng
Column Type Comment PK Nullable Default conversation_id uuid Mã cuộc trò chuyện
YES NO user_id uuid Mã người dùng YES NO joined_at timestamp without time zone
Ngày tham gia NO now() read_last_message_at timestamp without time
Thời gian đọc tin nhắn mới
50 zone nhất is_active boolean Tình trạng hoạt động
Default id uuid Mã bài viết
4() user_id uuid Mã người dùng
NO type varchar(50) Loại bài viết
NO loan_reason_type varchar(50) Loại lý do vay
Mô tả lý do vay
YES status varchar(50) Tình trạng bài viết
NO 'pending'::charac ter varying title varchar(255
Tiêu đề NO description varchar(100
51 images text[] Ảnh NO created_at timestamp without time zone
NO now() updated_at timestamp without time zone
NO now() interest_rate double precision
NO loan_amount bigint Số tiền cho vay
NO tenure_months integer Thời hạn cho vay
NO overdue_interest_rate double precision
NO max_interest_rate double precision
YES max_loan_amount bigint Số tiền vay tối đa
YES max_tenure_months integer Thời hạn cho vay tối đa
YES max_overdue_interest_ double Lãi suất YES
52 rate precision quá hạn tối đa rejected_reason varchar(255
YES deleted_at timestamp without time zone
Column Type Comment PK Nullable Default id uuid Mã tố cáo YES NO uuid_generate_v4() reporter_id uuid Mã người tố cáo
NO reported_id uuid Mã nội dung tố cáo
NO status varchar(50) Tình trạng tố cáo
NO type varchar(50) Loại tố cáo NO content_type varchar(50) Nội dung tố cáo
NO description text Mô tả báo cáo
NO images text[] Ảnh YES created_date timestamp without time
Column Type Comment PK Nullable Default id uuid Mã phiên YES NO uuid_generate_v4() user_id uuid Mã người dùng
NO starting_date timestamp without time zone
NO now() expiration_date timestamp without time zone
NO updated_at timestamp without time zone
Thời gian cập nhật phiên
NO now() is_active boolean Tình trạng hoạt động
Column Type Comment PK Nullable Default id uuid Mã giao dịch
YES NO uuid_generate_v4() id_third_party varchar Mã giao của bên
54 thứ ba ( Nếu có) status varchar(50) Tình trạng giao dịch
NO 'pending'::character varying title varchar(250) Tiêu đề NO description varchar(250) Mô tả giao dịch
YES user_id uuid Mã người dùng
NO amount bigint Số tiền NO payment_method varchar Phương thức thanh toán
NO items jsonb Sản phẩm NO embed_data jsonb Thông tin nhúng
NO created_at timestamp without time zone
Ngày tạo NO now() transaction_at timestamp without time zone
YES deleted_at timestamp without time
Default id uuid Mã người dùng
NO uuid_generate_v4() status varchar(50) Trạng thái user
NO 'unverified'::charact er varying is_identity_verifie d boolean NO false role varchar NO 'user'::character varying email varchar(255
Mật khẩu đã được mã hoá
NO address jsonb Địa chỉ YES first_name varchar(50) Tên NO ''::character varying last_name varchar(50) Họ NO ''::character varying gender boolean Giới tính NO false
56 avatar text Ảnh đại diện
YES dob date Ngày sinh
YES phone varchar Số điện thoại
NO ''::character varying last_active_at timestamp without time zone
Thời gian hoạt động cuối cùng
NO now() created_at timestamp without time zone
Ngày tạo NO now() updated_at timestamp without time zone
YES banned_util timestamp without time zone
Thời gian bị khoá hết hạn
YES ban_reason text Lý do bị khoá
YES ts_full_name tsvector NO ''::tsvector
Sơ đồ UseCase
Hình 14: Sơ đồ Usecase Tổng quát
5.2.1 Sơ đồ Usecase đăng nhập
Tiền điều kiện: Hệ thống đã được khởi động và người dùng đã có tài khoản đăng nhập
Hậu điều kiện: Người dùng đã đăng nhập thành công và được chuyển đến trang chính của hệ thống với các chức năng đã được phân quyền
Tác nhân chính: Người dùng
Các bên liên quan: Không có
Mô tả: Usecase cho phép người dùng đăng nhập
Mối liên hệ: Liên hệ: Không có
Luồng sự kiện chính: 1 Người dùng chọn chức năng đăng nhập
2 Hệ thống hiển thị trang đăng nhập yêu cầu người dùng nhập tên đăng nhập và mật khẩu
3 Người dùng nhập thông tin tên đăng nhập và mật khẩu
4 Người dùng nhấn nút đăng nhập
5 Hệ thống kiểm tra thông tin đăng nhập của người dùng
6 Nếu thông tin đăng nhập hợp lệ, hệ thống chuyển đến trang chính của hệ thống với các chức năng đã được phân quyền
7 Nếu thông tin đăng nhập không hợp lệ, hệ thống hiển thị thông báo lỗi và yêu cầu người dùng nhập lại thông tin đăng nhập
Luồng sự kiện ngoại lê: Không có
5.2.2 Sơ đồ usecase quản lý bài đăng
Tên usecase: Quản lý bài đăng
Tiền điều kiện: Hệ thống quản lý bài đăng được chọn, người dùng đã đăng nhập
Hậu điều kiện: Thông tin về bài đăng đã được quản lý và cập nhật Tác nhân chính: Người dùng
Các bên liên quan: Không có
Mô tả: Use case này nhằm mô tả quá trình quản lý thông tin về bài đăng trong hệ thống Nó bao gồm việc thêm
59 mới, cập nhật thông tin, xem thông tin và thực hiện các thao tác quản lý liên quan đến bài đăng
Mối liên hệ: Liên hệ: Đăng nhập
Luồng sự kiện chính: 1 Người dùng truy cập vào trang quản lý bài đăng
2 Hệ thống hiển thị danh sách các bài đăng hiện có
3 Người dùng có thể thực hiện các hành động sau: a Xem chi tiết bài đăng: Người dùng chọn một bài đăng từ danh sách và yêu cầu hiển thị thông tin chi tiết của bài đăng đó b Sửa bài đăng: Người dùng chọn một bài đăng từ danh sách và yêu cầu chỉnh sửa nội dung của bài đăng đó c Xóa bài đăng: Người dùng chọn một bài đăng từ danh sách và yêu cầu xóa bài đăng đó khỏi hệ thống d Tạo bài đăng mới: Người dùng yêu cầu tạo một bài đăng mới và nhập thông tin cần thiết cho bài đăng đó
4 Sau mỗi hành động, hệ thống cập nhật trạng thái danh sách bài đăng và hiển thị lại danh sách cập nhật cho người dùng
5 Người dùng có thể tiếp tục thực hiện các hành động trên cho đến khi kết thúc hoặc thoát khỏi trang quản lý bài đăng
6 Khi kết thúc, hệ thống lưu trạng thái mới của danh sách bài đăng (nếu có) và thoát khỏi trang quản lý bài đăng
Luồng sự kiện ngoại lê: Nếu bài đăng không tồn tại trong hệ thống, hệ thống hiển thị thông báo lỗi
Nếu có lỗi xảy ra trong quá trình cập nhật thông tin, hệ thống hiển thị thông báo lỗi và yêu cầu thực hiện lại thao tác
5.2.3 Sơ đồ usecase quản lý thông tin tài khoản
Tên usecase: Quản lý thông tin tài khoản
Tiền điều kiện: Hệ thống quản lý thông tin tài khoản được chọn, người dùng đã đăng nhập
Hậu điều kiện: Thông tin về tài khoản đã được quản lý và cập nhật Tác nhân chính: Người dùng
Các bên liên quan: Không có
Mô tả: Use case này nhằm mô tả quá trình quản lý thông tin tài khoản trong hệ thống Nó bao gồm việc cập nhật thông tin đã xem, xem thông tin và thực hiện các thao tác quản lý liên quan đến tài khoản
Mối liên hệ: Liên hệ: Đăng nhập
Luồng sự kiện chính: 1 Người dùng truy cập vào trang quản lý thông tin tài khoản
2 Hệ thống hiển thị thông tin tài khoản hiện tại của người dùng
3 Người dùng có thể thực hiện các hành động sau: a Xem thông tin tài khoản: Người dùng yêu cầu hiển thị chi tiết thông tin của tài khoản b Cập nhật thông tin tài khoản: Người dùng yêu cầu chỉnh sửa thông tin cá nhân, bao gồm tên, địa chỉ, số điện thoại, email, vv c Thay đổi mật khẩu: Người dùng yêu cầu thay đổi mật khẩu hiện tại bằng một mật khẩu mới
4 Sau mỗi hành động, hệ thống cập nhật thông tin tài khoản theo yêu cầu của người dùng
5 Người dùng có thể tiếp tục thực hiện các hành động trên cho đến khi kết thúc hoặc thoát khỏi trang quản lý thông tin tài khoản
6 Khi kết thúc, hệ thống lưu trạng thái mới của thông tin tài khoản (nếu có) và thoát khỏi trang
61 quản lý thông tin tài khoản
Luồng sự kiện ngoại lê: Nếu tài khoản không tồn tại trong hệ thống, hệ thống hiển thị thông báo lỗi
Nếu có lỗi xảy ra trong quá trình cập nhật thông tin, hệ thống hiển thị thông báo lỗi và yêu cầu thực hiện lại thao tác
5.2.4 Sơ đồ usecase nhắn tin
Tiền điều kiện: Hệ thống nhắn tin được chọn, người dùng đã đăng nhập
Hậu điều kiện: Thông tin cuộc trò chuyện, tin nhắn được cập nhật Tác nhân chính: Người dùng
Các bên liên quan: Không có
Mô tả: Use case này nhằm mô tả quá trình đăng ký nhắn tin trong hệ thống Nó bao gồm việc xem, thêm, xóa cuộc trò chuyện, gửi tin nhắn
Mối liên hệ: Liên hệ: Đăng nhập
Luồng sự kiện chính: 1 Người dùng truy cập vào ứng dụng nhắn tin
2 Hệ thống hiển thị danh sách các cuộc trò chuyện hiện có
3 Người dùng có thể thực hiện các hành động sau: a Xem cuộc trò chuyện: Người dùng chọn một cuộc trò chuyện từ danh sách và yêu cầu hiển thị nội dung cuộc trò chuyện đó b Thêm cuộc trò chuyện: Người dùng yêu cầu tạo một cuộc trò chuyện mới và nhập thông tin liên quan, chẳng hạn như tên người tham gia c Xóa cuộc trò chuyện: Người dùng chọn một
62 cuộc trò chuyện từ danh sách và yêu cầu xóa cuộc trò chuyện đó khỏi hệ thống d Gửi tin nhắn: Trong một cuộc trò chuyện, người dùng nhập nội dung tin nhắn và gửi nó cho người tham gia trong cuộc trò chuyện
4 Hệ thống xử lý yêu cầu của người dùng, bao gồm lưu trạng thái cuộc trò chuyện và tin nhắn
5 Hệ thống cập nhật giao diện người dùng và hiển thị lại danh sách cuộc trò chuyện và nội dung tin nhắn mới nhất
6 Người dùng có thể tiếp tục thực hiện các hành động trên cho đến khi kết thúc hoặc thoát khỏi ứng dụng nhắn tin
7 Khi kết thúc, hệ thống lưu trạng thái cuộc trò chuyện và tin nhắn (nếu có) và thoát khỏi ứng dụng nhắn tin
Luồng sự kiện ngoại lê: Nếu cuộc trò chuyện không tồn tại trong hệ thống, hệ thống hiển thị thông báo lỗi
Nếu có lỗi xảy ra trong quá trình nhắn tin, hệ thống hiển thị thông báo lỗi và yêu cầu thực hiện lại thao tác
5.2.5 Sơ đồ usecase gửi yêu cầu vay tiền
Tên usecase: Gửi yêu cầu vay tiền
Tiền điều kiện: Người dùng đã đăng nhập và hệ thống
Hậu điều kiện: Yêu cầu vay tiền được gửi đến người nhận
Tác nhân chính: Người dùng
Các bên liên quan: Không có
Mô tả: Use case này nhằm mô tả quá trình người dùng gửi yêu cầu vay tiền đến người khác
Mối liên hệ: Liên hệ: Đăng nhập
Luồng sự kiện chính: 1 Người dùng truy cập vào ứng dụng và chọn gửi yêu cầu cho vay
2 Người dùng chọn người cho vay, điền các thông tin cần thiết như số tiền cho vay, lãi suất, kỳ hạn mong muốn
3 Người dùng chụp ảnh, quay video xác minh danh tính
4 Người dùng nhấn nút gửi Hệ thống kiểm tra thông tin người dùng nhập Nếu chưa đầy đủ hoặc không hợp lệ thì yêu cầu người dùng nhập lại
5 Hệ thống lưu và gửi yêu cầu đến người nhận Luồng sự kiện ngoại lê: Nếu có lỗi xảy ra trong quá trình nhắn tin, hệ thống hiển thị thông báo lỗi và yêu cầu thực hiện lại thao tác
5.2.6 Sơ đồ usecase xác nhận và tạo yêu cầu vay tiền
Tên usecase: Xác nhận và tạo yêu cầu vay tiền
Tiền điều kiện: Người dùng đã đăng nhập và hệ thống
Người dùng đã chọn yêu cầu vay để chấp nhận
Hậu điều kiện: Hợp đồng được tạo nếu người cho vay thanh toán lệ phí thành công
Tác nhân chính: Người dùng
Các bên liên quan: Không có
Mô tả: Use case này nhằm mô tả quá trình người cho vay xác nhận yêu cầu cho vay và thanh toán lệ phí để tạo hợp đồng
Mối liên hệ: Liên hệ: Đăng nhập
Luồng sự kiện chính: 1 Người dùng chọn yêu cầu cho vay cần xác nhận
2 Người dùng nhấn nút thanh toán
3 Hệ thống mở trang thanh toán
4 Người dùng thanh toán lệ phí
5 Hệ thống kiểm tra thanh toán
6 Nếu thành công thì tạo một hợp đồng vay tiền Luồng sự kiện ngoại lê:
Sơ đồ hoạt động
Hình 15: Sơ đồ hoạt động đăng ký
Hình 16: Sơ đồ hoạt động đăng nhập
5.3.3 Gửi yêu cầu vay tiền
Hình 17: Sơ đồ hoạt động Gửi yêu cầu vay tiền
THIẾT KẾ ỨNG DỤNG
Danh sách màn hình
STT Tên màn hình Ý nghĩa/ Ghi chú
1 Đăng nhập Đăng nhập vào ứng dụng
2 Đăng ký Đăng ký tạo tài khoản mới
3 Xác nhận email Trang thông báo người dùng về việc gửi email xác nhận
4 Hoàn thiện thông tin cá nhân Hiển thị form điền thông tin cho người dùng trước khi sử dụng phần mềm
Hiển thị ô nhập email đã đăng ký với hệ thống để hệ thống gửi email khôi phục mật khẩu
6 Xác nhận mã OTP Hiển thị ô nhập số OTP gửi đến email
7 Trang chủ Trang chủ của ứng dụng, hiển thị các thông tin như hạn mức vay, cho vay tối đa, thống kê, blogs, tiện ích,
8 Blogs Hiển thị bài blogs quảng cáo từ hệ thống
9 Danh sách bài đăng Màn hình hiển thị danh sách các bài đăng
10 Chi tiết bài đăng Màn hình hiển thị chi tiết của một bài đăng
11 Thông tin người dùng Màn hình hiển thị thông tin cá nhân của người dùng
12 Tạo bài đăng Màn hình cho phép người dùng đăng tin vay tiền hoặc cho vay mới
13 Tìm kiếm bài đăng Màn hình tìm kiếm bài đăng trong ứng dụng
Màn hình hiển thị danh sách bài viết đã đăng, đang chờ, bị từ chối, đã ẩn của người dùng
15 Danh sách tin nhắn Màn hình hiển thị danh sách tin nhắn của
16 Chi tiết tin nhắn Màn hình hiển thị chi tiết tin nhắn
17 Thông báo Màn hình hiển thị thông báo từ hệ thống
18 Quản lý yêu cầu Màn hình quản lý các yêu cầu đã được xác nhận, đang chờ, đã gửi, đã bị hủy
19 Tạo yêu cầu Màn hình để người dùng tạo mới một yêu cầu
20 Chi tiết yêu cầu Màn hình hiển thị chi tiết của một yêu cầu
21 Hủy yêu cầu Màn hình để người dùng hủy một yêu cầu
22 Quản lý hợp đồng Màn hình quản lý các hợp đồng cho vay, đã cho vay
23 Chi tiết hợp đồng Màn hình hiển thị chi tiết của một hợp đồng
24 Chi tiết pdf hợp đồng Màn hình hiển thị nội dung của hợp đồng dưới định dạng PDF
25 Thanh toán ZaloPay Màn hình thanh toán sử dụng ZaloPay
26 Kết quả thanh toán Màn hình hiển thị kết quả sau khi thanh toán
27 Quản lý tài khoản Màn hình quản lý thông tin và cài đặt tài khoản
28 Chi tiết hồ sơ người dùng Màn hình hiển thị chi tiết hồ sơ của người dùng
29 Đổi mật khẩu Màn hình hiển thị form thay đổi mật khẩu
30 Cập nhập thông tin Màn hình để người dùng cập nhật thông tin cá nhân
31 Cài đặt thông số Màn hình cài đặt các thông số trong ứng dụng
32 Xác thực người dùng Màn hình xác thực danh tính của người dùng
Bảng 16: Bảng danh sách màn hình
Chi tiết màn hình
Hình 18: Màn hình Đăng nhập
Hình 19: Màn hình Đăng ký
6.2.3 Màn hình Xác nhận email
Hình 20: Màn hình Xác nhận email
6.2.4 Màn hình Hoàn thiện thông tin cá nhân
Hình 21: Màn hình Hoàn thiện thông tin cá nhân
6.2.5 Màn hình Quên mật khẩu
Hình 22: Màn hình Quên mật khẩu
6.2.6 Màn hình Xác nhận mã OTP
Hình 23: Màn hình Xác nhận mã OTP
Hình 24: Màn hình Trang chủ
6.2.9 Màn hình Danh sách bài đăng
Hình 26: Màn hình Danh sách bài đăng
6.2.10 Màn hình Chi tiết bài đăng
Hình 27: Màn hình Chi tiết bài đăng
6.2.11 Màn hình Thông tin người dùng
Hình 28: Màn hình Thông tin người dùng
6.2.12 Màn hình tạo bài đăng:
Hình 29: Màn hình Đăng tin
6.2.13 Màn hình Tìm kiếm bài đăng
Hình 30: Màn hình Tìm kiếm bài đăng
6.2.14 Màn hình Quản lý bài viết
Hình 31: Màn hình Quản lý bài viết (1)
Hình 32: Màn hình Quản lý bài viết (2)
6.2.15 Màn hình Danh sách tin nhắn
Hình 33: Màn hình danh sách tin nhắn
6.2.16 Màn hình Chi tiết tin nhắn
Hình 34: Màn hình Chi tiết tin nhắn
Hình 35: Màn hình Thông báo
6.2.18 Màn hình Quản lý yêu cầu
Hình 36: Màn hình Quản lý yêu cầu (1)
Hình 37: Màn hình Quản lý yêu cầu (2)
6.2.19 Màn hình Tạo yêu cầu
Hình 38: Màn hình Tạo yêu cầu (2)
6.2.20 Màn hình Chi tiết yêu cầu
Hình 39: Màn hình Chi tiết yêu cầu
6.2.21 Màn hình Hủy yêu cầu
Hình 40: Màn hình Hủy yêu cầu
6.2.22 Màn hình Quản lý hợp đồng
Hình 41: Màn hình Quản lý hợp đồng
6.2.23 Màn hình Chi tiết hợp đồng
Hình 42: Màn hình Chi tiết hợp đồng
6.2.24 Màn hình Chi tiết pdf hợp đồng
Hình 43: Màn hình Chi tiết pdf hợp đồng
6.2.25 Màn hình Thanh toán ZaloPay
Hình 44: Màn hình Thanh toán ZaloPay
6.2.26 Màn hình Kết quả thanh toán
Hình 45: Màn hình Kết quả thanh toán
6.2.27 Màn hình Quản lý tài khoản
Hình 46: Màn hình Quản lý tài khoản
6.2.28 Màn hình Chi tiết hồ sơ người dùng
Hình 47: Màn hình Chi tiết hồ sơ người dùng
6.2.29 Màn hình đổi mật khẩu
Hình 48: Màn hình Đổi mật khẩu
6.2.30 Màn hình Cập nhập thông tin
Hình 49: Màn hình Cập nhập thông tin
6.2.31 Màn hình Cài đặt thông số
Hình 50: Màn hình Cài đặt thông số