# I. Design
## 1. Overview
```userstory
```
```plantuml
|#lime|Kafka|
start
:Streaming order events;
|#pink|Pricing rule|
:Comsuming events;
:Transformance to DTO;
:Call api to get price;
|#pink|Pricing rule|
:Get rule realtime from cache;
|#orange|Redis|
:Return rule;
|Pricing rule|
if (rule is valid - not null) then (yes)
:Continue calculate;
else (no)
:Get rule from Master DB;
|#thistle|Master db|
:Return rule;
|Pricing rule|
if (rule is valid - not null) then (yes)
:Continue calculate;
else (no)
:Notify to Error rule;
|#silver|Notify service|
:Save to log;
endif
endif
|Pricing rule|
:Continue caclulate;
:Calculate price;
:Save to master db;
|Master db|
:Save to db;
|Pricing rule|
:Caching to redis;
|Redis|
:Cahing to redis;
stop
@enduml
```
## 2. User story: Người dùng update rule qua template
```userstory
Là người dùng(quản trị) muốn cập nhật rule cho tính toán mới nhất
```
```plantuml
|#plum|USER|
start
:Request template phần tử bảng giá;
|#pink|RULE SYSTEM(Policy)|
:Response template phần tử bảng giá tương ứng;
|USER|
:Upload template lên Pricing service;
|#orchid|PRICING Web|
:Reponse dữ liệu bảng giá drl;
|USER|
:Upload drl to RULE system;
|RULE SYSTEM(Policy)|
:Update insert drl;
|#thistle|Master db(Mariadb)|
:Upsert to db;
|RULE SYSTEM(Policy)|
:Caching to redis;
|#orange|Redis|
:Update rule;
stop
@enduml
```
## 3. User story: Người dùng tìm kiếm rule
```userstory
Người dùng muốn tìm kiếm, xem chi tiết các rule đang hiện hành
```
```plantuml
|#orangeRed|USER|
start
:Vào màn hình list danh sách rule;
|Pricing rule|
:List all rules;
|USER|
:Select rule to get info;
:Click to download or view rule;
|#pink|Pricing rule|
:Return rule action from user;
stop
@enduml
```
# II. Bảng giá
```mermaid
flowchart LR
Pricing(Bảng giá)-->ExtraService(Bảng giá dịch vụ cộng thêm)
Pricing-->OtherService(Phụ phí hàng hóa đặc biệt)
Pricing-->EconomicalDelivery(Dịch vụ chuyển phát tiết kiệm)
Pricing-->ExpressDelivery(Dịch vụ chuyển phát hỏa tốc, hẹn giờ)
Pricing-->FastDelivery(Dịch vụ chuyển phát nhanh)
```
## 1. Dịch vụ cộng thêm
```mermaid
flowchart LR
style ExtraService fill:#F8F8F8,stroke:#666,stroke-width:2px;
ExtraService(Dịch vụ cộng thêm)-->BK(1.Bảo hiểm và khai giá)
ExtraService(Dịch vụ cộng thêm)-->DK(2.Đồng kiểm)
ExtraService(Dịch vụ cộng thêm)-->LK(3.Lưu kho)
ExtraService(Dịch vụ cộng thêm)-->TDTT(4.Thay đổi thông tin địa chỉ đơn hàng)
ExtraService(Dịch vụ cộng thêm)-->BP(5.Báo phát)
ExtraService(Dịch vụ cộng thêm)-->PTT(6. Phát tận tay)
ExtraService(Dịch vụ cộng thêm)-->PHST(7. Phát hàng siêu thị)
ExtraService(Dịch vụ cộng thêm)-->GHMP(8. Giao hàng một phần)
ExtraService(Dịch vụ cộng thêm)-->DH(9. Đổi hàng)
ExtraService(Dịch vụ cộng thêm)-->TTXH(10. Thu tiền xem hàng)
ExtraService(Dịch vụ cộng thêm)-->PTDGD(11. Phát tại điểm giao dịch)
ExtraService(Dịch vụ cộng thêm)-->ZALO(12. Zalo thông báo đơn hàng)
ExtraService(Dịch vụ cộng thêm)-->SMS(13. SMS thông báo đơn hàng)
ExtraService(Dịch vụ cộng thêm)-->HC(14. Dịch vụ hoàn cước)
```
## 2. Dịch vụ hàng hóa đặc biệt
```mermaid
flowchart LR
OtherService(Dịch vụ hàng đặc biệt)-->GTC(1. Hàng giá trị cao)
OtherService(Dịch vụ hàng đặc biệt)-->HD(2. Hóa đơn, giấy chứng nhận)
OtherService(Dịch vụ hàng đặc biệt)-->HST(3. Hồ sơ thầu)
OtherService(Dịch vụ hàng đặc biệt)-->HDV(4. Hàng dễ vỡ)
OtherService(Dịch vụ hàng đặc biệt)-->HNK(5. Hàng nguyên khối)
OtherService(Dịch vụ hàng đặc biệt)-->HQK(6. Hàng quá khổ)
OtherService(Dịch vụ hàng đặc biệt)-->HCL(7. Chất lỏng)
OtherService(Dịch vụ hàng đặc biệt)-->HTT(8. Hàng từ tính,PIN)
OtherService(Dịch vụ hàng đặc biệt)-->HL(9. Hàng lạnh)
```
## 3. Dịch vụ chuyển phát tiết kiệm
```mermaid
flowchart TD
TKS(Dịch vụ chuyển phát tiết kiệm)-->NM(Nội miền)
TKS(Dịch vụ chuyển phát tiết kiệm)-->CM(Cận miền)
TKS(Dịch vụ chuyển phát tiết kiệm)-->LM(Liên miền)
```
## 4. Dịch vụ chuyển phát thương mại điện tử
```mermaid
flowchart TD
TMDT(Chuyển phát thương mại điện tử)-->NT(Nội tỉnh)
TMDT(Chuyển phát thương mại điện tử)-->NM(Nội miền)
TMDT(Chuyển phát thương mại điện tử)-->LM(Liên miền)
NT(Nội tỉnh)-->NTTK(Tiết kiệm)
NT(Nội tỉnh)-->NTHT(Hỏa tốc)
LM(Liên miền)-->LMTK(Tiết kiệm)
LM(Liên miền)-->LMN(Nhanh)
```
## 5. Dịch vụ chuyển phát hỏa tốc hẹn giờ
```mermaid
flowchart TD
HTHG(Chuyển phát hỏa tốc hẹn giờ)-->HNDN(Hà Nội - Đà Nẵng)
HTHG(Chuyển phát hỏa tốc hẹn giờ)-->HNHCM(Hà Nội - Hồ Chí Minh)
HTHG(Chuyển phát hỏa tốc hẹn giờ)-->DNHCM(Đà Nẵng - Hồ Chí Minh)
HTHG(Chuyển phát hỏa tốc hẹn giờ)-->NT(Nội tỉnh)
HTHG(Chuyển phát hỏa tốc hẹn giờ)-->NM(Nội miền)
HTHG(Chuyển phát hỏa tốc hẹn giờ)-->LM(Liên miền)
```
## 6. Dịch vụ chuyển phát nhanh
```mermaid
flowchart TD
HTHG(Chuyển phát nhanh)-->HNDN(Hà Nội - Đà Nẵng)
HTHG(Chuyển phát nhanh)-->HNHCM(Hà Nội - Hồ Chí Minh)
HTHG(Chuyển phát nhanh)-->DNHCM(Đà Nẵng - Hồ Chí Minh)
HTHG(Chuyển phát nhanh)-->NT(Nội tỉnh)
HTHG(Chuyển phát nhanh)-->NM(Nội miền)
HTHG(Chuyển phát nhanh)-->LM(Liên miền)
```
# III. Vùng miền
```mermaid
flowchart TD
VM(Miền)-->MB(Miền Bắc)
VM(Miền)-->MT(Miền Trung)
VM(Miền)-->MN(Miền Nam)
```
## 1. Miền Bắc
```mermaid
flowchart TD
MB(Miền Bắc)-->BC(Bắc Cạn )
MB(Miền Bắc)-->CB(Cao Bằng )
MB(Miền Bắc)-->HG(Hà Giang )
MB(Miền Bắc)-->LS(Lạng Sơn )
MB(Miền Bắc)-->TQ(Tuyên Quang )
MB(Miền Bắc)-->DB(Điện Biên )
MB(Miền Bắc)-->LC(Lào Cai )
MB(Miền Bắc)-->LC(Lai Châu )
MB(Miền Bắc)-->PT(Phú Thọ )
MB(Miền Bắc)-->SL(Sơn La )
MB(Miền Bắc)-->YB(Yên Bái )
MB(Miền Bắc)-->BG(Bắc Giang )
MB(Miền Bắc)-->TN(Thái Nguyên )
MB(Miền Bắc)-->VP(Vĩnh Phúc )
MB(Miền Bắc)-->BN(Bắc Ninh )
MB(Miền Bắc)-->HB(Hòa Bình )
MB(Miền Bắc)-->HD(Hải Dương )
MB(Miền Bắc)-->HN(Hà Nam )
MB(Miền Bắc)-->HP(Hải Phòng )
MB(Miền Bắc)-->HY(Hưng Yên )
MB(Miền Bắc)-->ND(Nam Định )
MB(Miền Bắc)-->NB(Ninh Bình )
MB(Miền Bắc)-->QN(Quảng Ninh )
MB(Miền Bắc)-->TB(Thái Bình )
MB(Miền Bắc)-->HANOI(Hà Nội )
MB(Miền Bắc)-->HT(Hà Tĩnh )
MB(Miền Bắc)-->NA(Nghệ An )
MB(Miền Bắc)-->TH(Thanh Hóa )
```
## 2. Miền trung
```mermaid
flowchart TD
MT(Miền trung)-->QB(Quảng Bình )
MT(Miền trung)-->QT(Quảng Trị )
MT(Miền trung)-->TTH(Thừa Thiên-Huế )
MT(Miền trung)-->DN(Đà Nẵng )
MT(Miền trung)-->QNAM(Quảng Nam )
MT(Miền trung)-->QN(Quảng Ngãi )
MT(Miền trung)-->KT(Kon Tum )
MT(Miền trung)-->GL(Gia Lai )
MT(Miền trung)-->KH(Khánh Hòa )
MT(Miền trung)-->PY(Phú Yên )
MT(Miền trung)-->BD(Bình Định )
```
## 3. Miền nam
```mermaid
flowchart TD
MN(Miền Nam)-->BT(Bình Thuận )
MN(Miền Nam)-->NT(Ninh Thuận )
MN(Miền Nam)-->DL(Đắk Lắk )
MN(Miền Nam)-->LD(Lâm Đồng )
MN(Miền Nam)-->BD(Bình Dương )
MN(Miền Nam)-->BP(Bình Phước )
MN(Miền Nam)-->BT(Bến Tre )
MN(Miền Nam)-->DN(Đắk Nông )
MN(Miền Nam)-->ĐN(Đồng Nai )
MN(Miền Nam)-->LA(Long An )
MN(Miền Nam)-->TG(Tiền Giang )
MN(Miền Nam)-->TN(Tây Ninh )
MN(Miền Nam)-->BRVT(Bà Rịa-Vũng Tàu)
MN(Miền Nam)-->HCM(Hồ Chí Minh )
MN(Miền Nam)-->TV(Trà Vinh )
MN(Miền Nam)-->VL(Vĩnh Long )
MN(Miền Nam)-->AG(An Giang )
MN(Miền Nam)-->BL(Bạc Liêu )
MN(Miền Nam)-->CM(Cà Mau )
MN(Miền Nam)-->CT(Cần Thơ )
MN(Miền Nam)-->DT(Đồng Tháp )
MN(Miền Nam)-->HG(Hậu Giang )
MN(Miền Nam)-->KG(Kiên Giang )
MN(Miền Nam)-->ST(Sóc Trăng )
```
# IV. Khu vực miền bắc & Hồ Chí Minh
```mermaid
flowchart TD
KV(Khu vực)-->KV1(Khu vực 1)
KV(Khu vực)-->KV2(Khu vực 2)
KV(Khu vực)-->KV3(Khu vực 3)
KV(Khu vực)-->KV4(Khu vực 4)
```
## 1. Khu vực 1
```mermaid
flowchart TD
KV1-->HN(Hà Nội)
KV1-->HCM(Hồ Chí Minh)
```
## 2. Khu vực 2
```mermaid
flowchart TD
KV2-->Hải_Phòng(Hải Phòng )
KV2-->Hưng_Yên(Hưng Yên )
KV2-->Gia_Lai(Gia Lai )
KV2-->Bắc_Ninh(Bắc Ninh )
KV2-->Nam_Định(Nam Định )
KV2-->Thái_Nguyên(Thái Nguyên)
KV2-->Hải_Dương(Hải Dương )
KV2-->Bắc_Giang(Bắc Giang )
KV2-->Thanh_Hóa(Thanh Hóa )
KV2-->Nghệ_An(Nghệ An )
KV2-->Đà_Nẵng(Đà Nẵng )
KV2-->Vĩnh_Phúc(Vĩnh Phúc )
```
## 3. Khu vực 3
```mermaid
flowchart TD
KV3-->Quảng_Ninh
KV3-->Hòa_Bình
KV3-->Quảng_Nam
KV3-->Hà_Tĩnh
KV3-->Quảng_Trị
KV3-->Khánh_Hòa
KV3-->Quảng_Ngãi
KV3-->Phú_Thọ
KV3-->Hà_Nam
KV3-->Thái_Bình
KV3-->Thừa_Thiên_Huế
KV3-->Ninh_Bình
```
## 4. Khu vực 4
```mermaid
flowchart TD
KV4-->Cao_Bằng
KV4-->Bắc_Kạn
KV4-->Hà_Giang
KV4-->Sơn_La
KV4-->Lai_Châu
KV4-->Điện_Biên
KV4-->Quảng_Bình
KV4-->Lào_Cai
KV4-->Kon_Tum
KV4-->Phú_Yên
KV4-->Lạng_Sơn
KV4-->Tuyên_Quang
KV4-->Bình_Định
KV4-->Yên_Bái
```
# IV. Khu vực miền nam
```mermaid
flowchart TD
KV(Khu vực)-->KV1(Khu vực 1)
KV(Khu vực)-->KV2(Khu vực 2)
KV(Khu vực)-->KV3(Khu vực 3)
```
## 1. Khu vực 1
```mermaid
flowchart TD
KV1-->BD(Bình Dương)
KV1-->DN(Đồng Nai)
```
## 2. Khu vực 2
```mermaid
flowchart TD
KV2-->Bình_Thuận
KV2-->Long_An
KV2-->Đắk_Lắk
KV2-->Cần_Thơ
```
## 3. Khu vực 3
```mermaid
flowchart TD
KV3-->Tiền_Giang
KV3-->Bến_Tre
KV3-->Tây_Ninh
KV3-->Hậu_Giang
KV3-->Trà_Vinh
KV3-->Ninh_Thuận
KV3-->Vĩnh_Long
KV3-->Bà_Rịa_Vũng_Tàu
KV3-->Cà_Mau
KV3-->An_Giang
KV3-->Kiên_Giang
KV3-->Bạc_Liêu
KV3-->Lâm_Đồng
KV3-->Bình_Phước
KV3-->Đăk_Nông
KV3-->Sóc_Trăng
KV3-->Đồng_Tháp
```