# Indah Logistik COD Integration (December 2023) ## Existing Flow ### Generate AWB Internal ```plantuml participant "everpro-logistic-client" as elc participant "everpro-3pl-aggregator" as 3plAgg database "popaket_logistic" as db1 participant "3pl" as 3pl activate elc elc -> elc note left ... existing generate awb logic ... end note elc -> elc: prepare generate awb data elc -> 3plAgg: send grpc generate awb note left using flow `new generate awb` end note activate 3plAgg 3plAgg -> db1: get mapping location data note right table `logistic_codes` get data: - origin_code - destination_code - is_enable_cod etc.. end note db1 --> 3plAgg: return data 3plAgg -> 3plAgg: process generate awb data 3plAgg -> 3pl: generate awb to 3pl 3pl --> 3plAgg: return awb data 3plAgg -> 3pl: request pickup to 3pl 3pl --> 3plAgg: return response 3plAgg --> elc: return awb data response deactivate 3plAgg elc -> db1: update status and awb elc -> elc note left ... existing generate awb logic ... end note ``` ### Generate AWB External ```plantuml participant "everpro-order" as eo participant "NSQ" as nsq participant "everpro-3pl-aggregator" as 3plAgg database "popaket_logistic" as db1 participant "3pl" as 3pl database "popaket_order" as db2 activate eo eo -> eo note left ... existing generate awb logic ... end note eo -> eo : prepare generate awb data eo -> nsq : produce generate awb deactivate eo nsq -> 3plAgg: consume genarate awb activate 3plAgg 3plAgg -> db1: get mapping location data note right table `logistic_codes` get data: - origin_code - destination_code - is_enable_cod etc.. end note db1 --> 3plAgg: return data 3plAgg -> 3plAgg: process generate awb data 3plAgg -> 3pl: generate awb to 3pl 3pl --> 3plAgg: return awb data 3plAgg -> 3pl: request pickup to 3pl 3pl --> 3plAgg: return response 3plAgg -> nsq : produce update awb number deactivate 3plAgg nsq -> eo : consume update awb number activate eo eo -> db2 : update status and awb ``` ## Solution Flow ### Generate AWB ```plantuml participant "everpro-logistic-client/everpro-order" as os participant "everpro-3pl-aggregator" as 3plAgg database "popaket_logistic" as db1 participant "3pl" as 3pl activate os os -> os note left ... existing generate awb flow ... end note os -> 3plAgg: send generate awb request activate 3plAgg 3plAgg -> db1: get mapping location data note left table `logistic_codes` get data: - origin_code - destination_code - is_enabled_cod etc.. end note db1 --> 3plAgg: return data 3plAgg -> 3plAgg: process generate awb data note right if the order type is cod: will send the`nominal_barang` value to 3pl end note 3plAgg -> 3pl: generate awb to 3pl note right if the order type is cod: will request generate awb to endpoint `insert_trans_cod` end note 3pl --> 3plAgg: return awb data 3plAgg -> 3pl: request pickup to 3pl 3pl --> 3plAgg: return response 3plAgg --> os: return response deactivate 3plAgg os -> os note left ... existing generate awb flow ... end note ``` # Indah Logistik API Integration in Core Logistic (November 2024) ## Get Rates ```plantuml actor client participant "evm-3pl-client-gateway" as gateway participant "evm-3pl-logistic" as logistic participant "evm-3pl-aggregator" as aggregator participant "evm-3pl-location" as location participant 3pl client -> gateway : <<send request get rates>> activate gateway gateway -> logistic : <<send rpc request get rates>> activate logistic logistic ->logistic : validate logistic settings logistic -> aggregator : <<send rpc request get rates to 3pl>> activate aggregator aggregator -> location: get location code location --> aggregator : return location data alt if request is use COD aggregator -> aggregator : set request get rates param id_layanan = 8:Expres note left because only service `8:Expres` is eligible to use COD end note end aggregator -> 3pl : <<send request get rates>> 3pl --> aggregator : return response aggregator --> logistic: return rates response deactivate aggregator logistic --> gateway: return rates response deactivate logistic gateway --> client: return rates response deactivate gateway ``` ## Create Order ```plantuml actor client participant "evm-3pl-client-gateway" as gateway participant "evm-3pl-logistic" as logistic database "evm_3pl_logistic" as db1 participant "evm-3pl-aggregator" as aggregator participant "evm-3pl-location" as location participant 3pl participant "evm-notif-publisher" as notif client -> gateway : <<send request create order>> activate gateway gateway -> logistic: <<send rpc request create order>> activate logistic logistic -> db1 : insert new order data db1 --> logistic : return logistic -> aggregator : <<send rpc request create order/generate awb to 3pl>> activate aggregator aggregator -> location: get location code location --> aggregator : return location data aggregator -> 3pl : <<send request create order>> 3pl --> aggregator : return response alt if shipment type is pickup aggregator -[#blue]> 3pl : <<send request pickup>> 3pl -[#blue]-> aggregator : return response alt if error aggregator -> notif : send notif failed request pickup end end aggregator --> logistic: return awb response deactivate aggregator logistic -> db1: update awb number db1 --> logistic: return logistic --> gateway: return awb response deactivate logistic gateway --> client: return awb response deactivate gateway ``` ## Request Pickup ```plantuml actor user participant "evm-3pl-aggregator" as aggregator participant "evm-3pl-logistic" as logistic participant 3pl user -> aggregator : <<send request pickup to 3pl>> activate aggregator aggregator -> logistic : <<send request get order detail>> logistic --> aggregator : return data aggregator -> aggregator: validate order status note left order status should still be waiting for pickup/dropoff end note deactivate aggregator ``` ## Webhook Tracking ```plantuml actor client participant "evm-3pl-logsitic" as logistic participant "evm-3pl-log" as log participant "evm-3pl-aggregator" as aggregator participant 3pl 3pl -> aggregator: send webhook tracking activate aggregator aggregator -> aggregator: formating webhook payload aggregator -> log : store log webhook (use queue) aggregator -> logistic : update order status and send callback tracking to client deactivate aggregator logistic -> client: send callback tracking ```