{
  "info": {
    "_postman_id": "f1a89c22-7711-49e0-8b10-183flagseq001",
    "name": "LNSW Pengangkut - [ND-183] Fix Billing Flag Sequence & Status Log Test Suite",
    "description": "Postman collection khusus untuk memvalidasi penutupan celah sequence flagging Single Billing pada COP Sinkarkes (POST /submit-cop) serta eliminasi pencatatan log status redundan 101/103/111 pada POST /request-billing berdasarkan Nota Dinas ND-183/LNSW.34/2026.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://demo-backend.insw.go.id/pengangkut/api",
      "type": "string"
    },
    {
      "key": "bearerToken",
      "value": "KZ6IlAA4NxocmCozKC71xaYymS7sMAgM_94h0gftFnG",
      "type": "string"
    },
    {
      "key": "inswKemenhubKey",
      "value": "xxx",
      "type": "string"
    },
    {
      "key": "billingKemenhubKey",
      "value": "xxx",
      "type": "string"
    },
    {
      "key": "billingKemenkesKey",
      "value": "xxx",
      "type": "string"
    },
    {
      "key": "serviceNumber",
      "value": "102019B83694C",
      "type": "string"
    },
    {
      "key": "serviceNumberKedatangan",
      "value": "101019543877B",
      "type": "string"
    },
    {
      "key": "idempotencyKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "1. Simulasi Data Prasyarat (Data Seeding)",
      "item": [
        {
          "name": "1. Simulasi Approval LK3 Kemenhub",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "insw-kemenhub-key",
                "value": "{{inswKemenhubKey}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"no_aju\": \"{{serviceNumber}}\",\n  \"tipe\": \"LK3\",\n  \"nomor_layanan\": \"BDN.IDMAK.2609.000140\",\n  \"status\": 2,\n  \"message\": \"\",\n  \"nomor_produk\": \"SL003.IDMAK.0926.000142\",\n  \"waktu_approve\": \"2026-09-09 11:10:22\",\n  \"link_produk\": \"https://simpadu-inaportnet.dephub.go.id/index.php/document/pdfs/lk3_nakhoda/SL003.DN.IDMAK.2609.000139\",\n  \"kode_dermaga\": \"\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/warta-kapal/send/putResponse",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "warta-kapal",
                "send",
                "putResponse"
              ]
            },
            "description": "Simulasi kirim respon approval LK3 dari Kemenhub (doc=7, status=2)."
          },
          "response": []
        },
        {
          "name": "2. Simulasi Tagihan Inaportnet (Kemenhub - KL 022)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"simponi_req\": {\n    \"method\": \"billingcode\",\n    \"key\": \"{{billingKemenhubKey}}\",\n    \"data\": [\n      {\n        \"header\": [\n          \"{{serviceNumber}}\",\n          \"INV.IDMAK.2609.000003\",\n          \"\",\n          null,\n          \"022\",\n          \"04\",\n          \"413439\",\n          \"F\",\n          \"1\",\n          834660,\n          \"Labuh-PU-PT. JELAJAH LAUT NUSANTARA\",\n          \"413439\",\n          \"014844831042001\"\n        ],\n        \"detail\": [\n          [\n            \"Labuh-PU-PT. JELAJAH LAUT NUSANTARA\",\n            \"000401\",\n            \"201615C\",\n            \"425513\",\n            90,\n            9274,\n            \"Per GT/15 Hari\",\n            834660,\n            \"19\",\n            \"51\",\n            0\n          ]\n        ]\n      },\n      {\n        \"header\": [\n          \"{{serviceNumber}}\",\n          \"INV.IDMAK.2609.000009\",\n          \"\",\n          null,\n          \"022\",\n          \"04\",\n          \"287473\",\n          \"F\",\n          \"1\",\n          175000,\n          \"VTS-PU-IDMAK-PT. JELAJAH LAUT NUSANTARA\",\n          \"287473\",\n          \"014844831042001\"\n        ],\n        \"detail\": [\n          [\n            \"VTS-PU-IDMAK-PT. JELAJAH LAUT NUSANTARA\",\n            \"000930\",\n            \"201615C\",\n            \"425517\",\n            175000,\n            1,\n            \"Per Kapal\",\n            175000,\n            \"19\",\n            \"51\",\n            0\n          ]\n        ]\n      }\n    ]\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/tagihan",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tagihan"
              ]
            },
            "description": "Injeksi data tagihan Warta Kapal Kemenhub (KL 022) ke sistem."
          },
          "response": []
        },
        {
          "name": "3. Simulasi Tagihan Sinkarkes (Kemenkes - KL 024)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"simponi_req\": {\n    \"method\": \"billingcode\",\n    \"key\": \"{{billingKemenkesKey}}\",\n    \"data\": {\n      \"header\": [\n        \"{{serviceNumber}}\",\n        \"58830\",\n        \"SIxxxxx\",\n        \"2026-09-08 07:23:44\",\n        \"024\",\n        \"05\",\n        \"416145\",\n        \"F\",\n        \"1\",\n        85000,\n        \"PT JELAJAH LAUT NUSANTARA\",\n        \"416145\",\n        \"014844831042001\"\n      ],\n      \"detail\": [\n        [\n          \"PT JELAJAH LAUT NUSANTARA\",\n          \"001111\",\n          \"2024045\",\n          \"425314\",\n          85000,\n          1,\n          \"Per Pemeriksaan Per Kapal\",\n          85000,\n          \"19\",\n          \"51\"\n        ]\n      ]\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/tagihan",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tagihan"
              ]
            },
            "description": "Injeksi data tagihan Sinkarkes Kemenkes (KL 024) ke sistem."
          },
          "response": []
        },
        {
          "name": "4. Simulasi Tagihan Sinkarkes Kedatangan (Kemenkes - KL 024)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"simponi_req\": {\n    \"method\": \"billingcode\",\n    \"key\": \"{{billingKemenkesKey}}\",\n    \"data\": {\n      \"header\": [\n        \"{{serviceNumberKedatangan}}\",\n        \"58830\",\n        \"SIxxxxx\",\n        \"2026-09-08 07:23:44\",\n        \"024\",\n        \"05\",\n        \"416145\",\n        \"F\",\n        \"1\",\n        85000,\n        \"PT JELAJAH LAUT NUSANTARA\",\n        \"416145\",\n        \"014844831042001\"\n      ],\n      \"detail\": [\n        [\n          \"PT JELAJAH LAUT NUSANTARA\",\n          \"001111\",\n          \"2024045\",\n          \"425314\",\n          85000,\n          1,\n          \"Per Pemeriksaan Per Kapal\",\n          85000,\n          \"19\",\n          \"51\"\n        ]\n      ]\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/tagihan",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tagihan"
              ]
            },
            "description": "Injeksi data tagihan Sinkarkes Kemenkes (KL 024) kedatangan ke sistem."
          },
          "response": []
        }
      ]
    },
    {
      "name": "2. Skenario 1 - Kirim Sinkarkes Gagal & Integritas Flag Billing (POST /submit-cop)",
      "item": [
        {
          "name": "1. POST Generate Idempotency Key (SEND_COP)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 200 OK\", function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var jsonData = pm.response.json();",
                  "pm.test(\"Idempotency Key berhasil di-generate\", function () {",
                  "    pm.expect(jsonData).to.have.property(\"data\");",
                  "    pm.expect(jsonData.data).to.have.property(\"idempotencyKey\");",
                  "});",
                  "",
                  "pm.collectionVariables.set(\"idempotencyKey\", jsonData.data.idempotencyKey);",
                  "console.log(\"Saved idempotencyKey for SEND_COP:\", jsonData.data.idempotencyKey);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"SEND_COP\",\n  \"serviceNumber\": \"{{serviceNumberKedatangan}}\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/generate-idempotency-key",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "generate-idempotency-key"
              ]
            },
            "description": "Membuat idempotency key untuk aksi pengiriman formulir COP Sinkarkes."
          },
          "response": []
        },
        {
          "name": "2. POST Submit COP Sinkarkes (Simulasi Transmisi Gagal)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Respons menandakan kegagalan pengiriman ke downstream (500/502/downstream error)\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([500, 502, 504, 400]);",
                  "});",
                  "",
                  "// Verifikasi Hasil:",
                  "// 1. Sisi Frontend UI: Pada halaman detail permohonan Kedatangan Kapal, pastikan label 'Jenis Pengajuan' masih 'Non Single Billing' (prasyarat: warta kapal belum dikirim dengan Single Billing).",
                  "// 2. Sisi Database SQL: SELECT service_number, fl_billing_warta, fl_billing_sinkarkes FROM pengangkut.agents WHERE service_number = '{{serviceNumberKedatangan}}';",
                  "//    Ekspektasi: fl_billing_sinkarkes bernilai false (0 atau null). Logika: (fl_billing_warta OR fl_billing_sinkarkes) tetap false!"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              },
              {
                "key": "x-idempotency-key",
                "value": "{{idempotencyKey}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idLayanan\": \"{{serviceNumberKedatangan}}\",\n  \"idWilker\": \"WILKER001\",\n  \"idKKP\": \"KKP001\",\n  \"isSingleBilling\": true,\n  \"jenisLayanan\": {\n    \"cop\": true,\n    \"phqc\": false\n  },\n  \"kapal\": {\n    \"namaKapal\": \"MV JELAJAH NUSANTARA\",\n    \"bendera\": \"ID\",\n    \"callSign\": \"YBDN\",\n    \"gt\": 9274\n  },\n  \"agensi\": {\n    \"namaAgensi\": \"PT PELAYARAN NUSANTARA JAYA\",\n    \"npwp\": \"014844831042001\"\n  },\n  \"rencanaKegiatan\": \"Bongkar Muat Barang Umum\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/submit-cop",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "submit-cop"
              ]
            },
            "description": "Pengiriman formulir COP Sinkarkes dengan opsi isSingleBilling=true pada kondisi downstream simulasi gagal. Sistem tidak boleh memperbarui fl_billing_sinkarkes menjadi true."
          },
          "response": []
        }
      ]
    },
    {
      "name": "3. Skenario 2 - Request Billing Positif & Eliminasi Status Redundan (POST /request-billing)",
      "item": [
        {
          "name": "1. POST Generate Idempotency Key (REQUEST_BILLING)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 200 OK\", function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var jsonData = pm.response.json();",
                  "pm.test(\"Idempotency Key berhasil di-generate\", function () {",
                  "    pm.expect(jsonData).to.have.property(\"data\");",
                  "    pm.expect(jsonData.data).to.have.property(\"idempotencyKey\");",
                  "});",
                  "",
                  "pm.collectionVariables.set(\"idempotencyKey\", jsonData.data.idempotencyKey);",
                  "console.log(\"Saved idempotencyKey for REQUEST_BILLING:\", jsonData.data.idempotencyKey);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"REQUEST_BILLING\",\n  \"serviceNumber\": \"{{serviceNumber}}\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/generate-idempotency-key",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "generate-idempotency-key"
              ]
            },
            "description": "Membuat idempotency key untuk aksi request billing manual."
          },
          "response": []
        },
        {
          "name": "2. POST Request Billing (Positive Case)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 200 or 201\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "var jsonData = pm.response.json();",
                  "pm.test(\"Payload response sukses memproses permintaan billing\", function () {",
                  "    pm.expect(jsonData).to.be.an(\"object\");",
                  "});",
                  "",
                  "// Verifikasi Frontend UI:",
                  "// Pada permohonan Sinkarkes di web portal Pengangkut, pastikan TIDAK ADA LAGI status 'Proses Permintaan Tagihan'."
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              },
              {
                "key": "x-idempotency-key",
                "value": "{{idempotencyKey}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"serviceNumber\": \"{{serviceNumber}}\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/request-billing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "request-billing"
              ]
            },
            "description": "Eksekusi manual request billing positif. Setelah request ini sukses, pastikan tabel pengangkut.history_status_detail TIDAK mencatat status 101, 103, atau 111."
          },
          "response": []
        }
      ]
    }
  ]
}