Giới thiệu
Dự án Insurlink là dự án bán bảo hiểm online hợp tác cùng IBaoHiem, sử dụng API của các công ty bảo hiểm gốc.
Tech stack
- Laravel 11, Tailwindcss, Alpinejs
- PHP 8.3
- MySQL
- Nginx
Các đối tượng trong hệ thống:
Insurer: Công ty bảo hiểmInsured: Người được bảo hiểmHolder: Chủ hợp đồngProduct Type: Loại sản phẩm, ví dụ: Bảo hiểm TNDS ô tô, TNDS xe máy, bảo hiểm du lịchProduct: Sản phẩm bảo hiểm (thuộc 1 loại sản phẩm).
Triển khai 1 sản phẩm bảo hiểm mới
Cập nhật Seeders để tạo loại sản phẩm (hoặc sản phẩm). Chú ý việc set handle là unique dùng cho việc update database.
- Tạo công ty bảo hiểm (nếu chưa có)
- Tạo loại sản phẩm mới cho sản phẩm này (loại sản phẩm dùng cho việc chia ra các loại sản phẩm, vd: TNDS ô tô, TNDS xe máy, du lịch, …)
- Tạo sản phẩm cho loại sản phẩm (là các sản phẩm thuộc 1 loại sản phẩm, dùng cho việc tạo đơn hàng.)
Việc phân loại này hoàn toàn có thể chia thành 1 sản phẩm mới = 1 loại sản phẩm mới, tùy vào việc quy hoạch các sản phẩm dựa trên sự giống nhau của các loại sản phẩm. Nếu các loại sản phẩm khác hoàn toàn, tốt nhất tách riêng.
Quy trình cấp đơn
Quy trình để tạo 1 đơn bảo hiểm gồm 4 bước chính trên hệ thống của Insurlink.
- Tính giá
- Tạo đơn
- Thanh toán
- Cấp GCN
Tuy nhiên bước 2 và 3 có thể khác nhau tùy vào công ty bảo hiểm, có 2 trường hợp sau:
-
ty bảo hiểm cho phép chúng ta tạo 1 đơn dạng pending trước khi khách hàng thanh toán, và khi khách hàng thanh toán chỉ cần gọi API xác nhận để cấp GCN.
-
Một số bên thì lại không hỗ trợ việc này, do đó chỉ sau khi khách hàng thanh toán, chúng ta mới gọi api cấp GCN sang phía cty để tạo đơn cho khách hàng (việc này dễ bị lỗi hơn).
Affiliate
Thu nhập của 1 CTV sẽ được đến từ 2 nguồn chính:
- Hoa hồng tính theo đơn hàng
- Tiền thưởng hoặc phạt (cộng tay do admin tạo)
Luồng tính hoa hồng
- Khi 1 đơn hàng được tạo, số tiền hoa hồng sẽ được tính tại thời điểm đó. (Chưa cộng vào ví của CTV)
- Khi đơn hàng hoàn thành, hoa hồng được chuyển thành giao dịch tiền vào ví
- Khi đơn hàng bị hủy
- Nếu đơn hàng trước khi hủy đang ở trạng thái chờ (chưa hoàn thành), bỏ qua không có gì xảy ra
- Nếu đơn hàng trước đó đã hoàn thành, tiền đã được cộng vào ví cho CTV. Khi đó sẽ có thêm 1 giao dịch trừ tiền vào ví cộng tác viên với số tiền hoa hồng tương ứng.
Thưởng phạt cho cộng tác viên
Được thực hiện trong backoffice, tạo giao dịch cho CTV và số tiền tương ứng, chú ý set ngày có hiệu lực để có thể được tính vào chu kì payout mong muốn.
Nếu phạt tiền thì phải nhập số âm
Thay đổi affiliate
Để thay đổi người giới thiệu cho 1 đơn hàng, có thể thực hiện hành động trong trang chi tiết của đơn hàng.
Xóa người giới thiệu hiện tại, trong trường hợp này nếu đã ghi nhận tiền cho CTV, sẽ có thêm giao dịch trừ tiền tương ứng để revert lại số dư
Sau đó chọn người mới để ghi nhân hoa hồng.
Payout
Payout là chu kì đối soát và thanh toán tiền cho CTV.
Generate payout
Khi hệ thống generate payout, sẽ tạo ra 2 pending payout. Số tiền được làm tròn theo quy tắc, nếu giá trị sau dấu phẩy >=5 thì làm tròn lên, còn lại làm tròn xuống.
Khi tạo payout sẽ cần 1 ngày kết thúc, số tiền sẽ được tính từ trước cho đến cuối ngày hôm đó.
- 1 payout là số tiền thực trả cho cộng tác viên (90% số tiền còn lại)
- 1 payout là thuế TNCN, tính bằng 10% tổng số tiền. Nếu số tiền thuế = 0 thì payout này ko được tạo.
Payout khi được tạo ra sẽ ở trạng thái Pending.
Confirm payout
Khi một payout được xác nhận, tài khoản của cộng tác viên sẽ bị trừ đi số tiền đúng theo giá trị của payout.
Payout số tiền thực trả sẽ có lưu lại các transaction cho giao dịch này (payout_id column trong table affiliate_transactions). Vì vậy chúng ta có thể xác định được đơn hàng nào đã được thanh toán hay chưa.
Cancel payout
Chỉ có thể hủy các payout đang ở trạng thái pending. Chú ý khi hủy payout cũng phải set các transaction liên quan đến payout này thành null (payout_id column)
Phân luồng đơn hàng
Hiện tại chỉ áp dụng cho MIC
Có 2 tài khoản của MIC:
- MIC Tràng An
- MIC Long Biên
Truy cập vào trong backoffice->Cty Bảo hiểm -> MIC
Trong danh sách các loại sản phẩm, chọn icon cog để cấu hình tỉ lệ phần trăm trong việc phân phối
Hiện tại đang hỗ trợ 2 tài khoản của MIC Long Biên và MIC Tràng An.
- Dựa theo tỉ lệ setup, hệ thống tự động phân phối đều cho các bên, tỉ lệ sát nhất có thể.
- Tỉ lệ tính theo tháng, tức là số lượng đơn hàng cho việc tính toán được tính từ ngày đầu tiên của tháng cho tới ngày hiện tại
- Các trạng thái của đơn hàng được tính:
Thành công,Đang xử lí
Thuật toán phân phối đơn hàng:
Thuật toán này chia đơn hàng cho các công ty bảo hiểm dựa trên phần trăm mà họ đáng ra phải nhận.
Cách nó chạy:
- Nhìn xem tháng này mỗi công ty đã nhận bao nhiêu đơn hàng.
- Tính xem với phần trăm mục tiêu thì mỗi công ty nên có bao nhiêu đơn.
- Tìm công ty nào bị “hụt” nhiều nhất so với số họ đáng ra phải có.
- Đưa đơn hàng tiếp theo cho công ty đó.
Ví dụ: Giả sử Công ty A phải nhận 60% đơn, Công ty B nhận 40%:
- Nếu có 10 đơn, thì A đáng ra có 6 đơn, B có 4 đơn.
- Nhưng nếu giờ A có 7 đơn, B chỉ có 3 đơn, thì B đang thiếu.
- Đơn tiếp theo sẽ cho B để bù lại cho cân bằng.
Nhờ vậy, lâu dài số đơn mỗi công ty nhận sẽ gần với phần trăm mục tiêu.