{
  "info": {
    "_postman_id": "nd374-ship-types-validation-2026",
    "name": "LNSW Pengangkut - [ND-374] Penyesuaian Skema Penarikan Jenis Kapal & Validasi Referensi",
    "description": "Postman Collection resmi untuk verifikasi pengujian teknis Nota Dinas ND-374/LNSW.2/2026 pada SSm Pengangkut (service: pengangkut-backend). Mencakup pengujian validasi jenis kapal (type_ship) berdasarkan bendera (flag) dan jenis rute/trayek (route_type: 0=NON-TRAYEK, 1=LINER, 2=TRAMPER, 3=PKKA, 4=PPKN).\n\nPRASYARAT PENGUJIAN QA:\n1. Sebelum menjalankan request PUT kapal, lakukan pembuatan data Agen terlebih dahulu melalui UI Frontend SSm Pengangkut dengan mengisi Jenis Trayek (misal: TRAMPER / PKKA) dan Nomor Registrasi yang sah.\n2. Setelah berhasil, copy service_number ke Environment / Collection Variables.\n3. CATATAN KENDALA INAPORTNET: Saat inisiasi aju di halaman Agen, ada potensi error HTTP 500 akibat transient TLS/SSL socket drop ke gateway Inaportnet ('Client network socket disconnected before secure TLS connection was established'). QA dapat melakukan percobaan ulang (retry) sampai berhasil karena server development Inaportnet memiliki kestabilan yang fluktuatif.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api-stg.insw.go.id/api/pengangkut",
      "type": "string"
    },
    {
      "key": "bearerToken",
      "value": "YOUR_BEARER_TOKEN_HERE",
      "type": "string"
    },
    {
      "key": "serviceNumberTramper",
      "value": "101019B86C4B4",
      "type": "string"
    },
    {
      "key": "serviceNumberPkka",
      "value": "101019B86C56C",
      "type": "string"
    },
    {
      "key": "serviceNumberNonTrayek",
      "value": "101019B66BB12",
      "type": "string"
    },
    {
      "key": "registrationNumberId",
      "value": "AL.103/2000/72476/90951/25",
      "type": "string"
    },
    {
      "key": "registrationNumberForeign",
      "value": "AL.203/2000/04786/25937/25",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "0. Referensi Master Data",
      "item": [
        {
          "name": "1. GET List Jenis Kapal Referensi (type_ship)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 200 OK\", function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test(\"Datas berisi daftar referensi jenis kapal valid\", function () {",
                  "    var json = pm.response.json();",
                  "    pm.expect(json.datas).to.be.an(\"array\");",
                  "    pm.expect(json.datas.length).to.be.above(0);",
                  "    pm.expect(json.datas[0]).to.have.property(\"kode_tipe_kapal\");",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json, text/plain, */*"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/ref/jenis-kapal-all",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ref",
                "jenis-kapal-all"
              ]
            },
            "description": "Mengambil seluruh referensi kode jenis kapal valid dari tabel pengangkut.tr_tipe_kapal (cache Redis REF_JENIS_KAPAL_ALL, TTL 12 jam)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "1. Skenario 1 - Kapal Trayek Bendera Indonesia (Bypass & Terkunci)",
      "item": [
        {
          "name": "1. PUT Superset Ship - Kapal Trayek ID (Bypass Validasi)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 200 OK atau 201 Created\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test(\"Data tersimpan sukses dan validasi manual di-bypass\", function () {",
                  "    var json = pm.response.json();",
                  "    pm.expect(json.success).to.be.true;",
                  "});",
                  "",
                  "// Verifikasi Database:",
                  "// SELECT type_ship, type, kind FROM pengangkut.ships WHERE service_number = '{{serviceNumber}}';",
                  "// Ekspektasi: type_ship terisi sesuai tarikan Inaportnet (kapalJenisDetail / jenisDetail), bukan isian payload manual"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"service_number\": \"{{serviceNumberTramper}}\",\n  \"registration_number\": \"{{registrationNumberId}}\",\n  \"trayek\": \"tramper\",\n  \"identity\": {\n    \"code\": \"2010 Ba No. 2100/L\",\n    \"name\": \"VARIA USAHA 9\",\n    \"flag\": \"ID\",\n    \"siupal\": \"B XXV-1617/AL.58\",\n    \"kind\": \"tugboat\",\n    \"domicile\": null,\n    \"call_sign\": \"asd\",\n    \"inmarsat_number\": \"N/A\",\n    \"cso_name\": null,\n    \"cso_phone\": null,\n    \"voyage_number\": \"aaaaVVVV\",\n    \"captain_name\": \"Nakhoda\",\n    \"shipping_type\": \"DOMESTIK\",\n    \"route\": \"Asam-Asam, Biringkassi, Balikpapan, Bunati, Banjarmasin, Cirebon, Ciwandan, Cigading, Cilegon, Gresik, Bojonegara, Kintap, Kendawangan, Kumai, Lamongan, Rembang/Sluke, Pulang Pisau, Sungai Puting, Samarinda, Semarang/Tanjung Emas, Marunda, Ketapang, Boom Baru/Palembang, Tanjung Perak, Tanjung Priok, Tarjun, Labuhan Lombok, Tuban, Pontianak, Dumai, Pasang Kayu, Tanjung Redep, Pangkalpinang, Banka, Panjang, Kotabaru, Tarahan, Makassar, Satui/Sei Danau, Sampit, Teluk Adang dan Tanah Grogot, Asam-Asam, Biringkassi, Balikpapan, Bunati, Banjarmasin, Cirebon, Ciwandan, Cigading, Cilegon, Gresik, Bojonegara, Kintap, Kendawangan, Kumai, Lamongan, Rembang/Sluke, Pulang Pisau, Sungai Puting, Samarinda, Semarang/Tanjung Emas, Marunda, Ketapang, Boom Baru/Palembang, Tanjung Perak, Tanjung Priok, Tarjun, Labuhan Lombok, Tuban, Pontianak, Dumai, Pasang Kayu, Tanjung Redep, Pangkalpinang, Banka, Panjang, Kotabaru, Tarahan, Makassar, Satui/Sei Danau, Sampit, Teluk Adang dan Tanah Grogot\",\n    \"permanent_activity_ship\": null,\n    \"imo\": \"9606998\",\n    \"type_ship\": \"1.7.13\",\n    \"registration_port\": \"TANJUNG PRIOK\",\n    \"mmsi\": \"asd\",\n    \"tugboat\": \"N/A\",\n    \"perintis_ship\": null,\n    \"docking_ship\": null,\n    \"tongkang_ship\": null,\n    \"tugboat_ship\": null,\n    \"is_coal_carrier\": null,\n    \"is_tol_laut_ship\": null,\n    \"is_new_ship\": null,\n    \"is_sea_trial_ship\": null,\n    \"is_livestock_carrier_ship\": null,\n    \"is_short_sea_ship\": null,\n    \"is_tobe_scrapped_ship\": null\n  },\n  \"specification\": {\n    \"ship_width\": \"8.00\",\n    \"back_draft\": \"1\",\n    \"max_draft\": \"1\",\n    \"front_draft\": \"1\",\n    \"air_height\": \"1\",\n    \"minimum_safe_manning\": \"1\",\n    \"length_overall\": \"26.00\",\n    \"driving_force\": \"1\",\n    \"TahunPembuatan\": \"2010\",\n    \"deadweight_ton\": \"0\",\n    \"gross_ton\": \"189\"\n  },\n  \"ports\": {\n    \"transit_port\": null,\n    \"unloading_port\": null,\n    \"next_port\": null,\n    \"before_origin_port\": \"IDBPN\",\n    \"raw_route\": [\n      { \"id\": 1, \"port_flag\": \"ID\", \"port_code\": \"IDIAM\", \"port_name\": \"Asam-Asam\" },\n      { \"id\": 2, \"port_flag\": \"ID\", \"port_code\": \"IDBIR\", \"port_name\": \"Biringkassi\" },\n      { \"id\": 3, \"port_flag\": \"ID\", \"port_code\": \"IDBPN\", \"port_name\": \"Balikpapan\" },\n      { \"id\": 4, \"port_flag\": \"ID\", \"port_code\": \"IDBTI\", \"port_name\": \"Bunati\" },\n      { \"id\": 5, \"port_flag\": \"ID\", \"port_code\": \"IDBDJ\", \"port_name\": \"Banjarmasin\" },\n      { \"id\": 6, \"port_flag\": \"ID\", \"port_code\": \"IDCBN\", \"port_name\": \"Cirebon\" },\n      { \"id\": 7, \"port_flag\": \"ID\", \"port_code\": \"IDCIW\", \"port_name\": \"Ciwandan\" },\n      { \"id\": 8, \"port_flag\": \"ID\", \"port_code\": \"IDCIG\", \"port_name\": \"Cigading\" },\n      { \"id\": 9, \"port_flag\": \"ID\", \"port_code\": \"IDCGN\", \"port_name\": \"Cilegon\" },\n      { \"id\": 10, \"port_flag\": \"ID\", \"port_code\": \"IDGRE\", \"port_name\": \"Gresik\" },\n      { \"id\": 11, \"port_flag\": \"ID\", \"port_code\": \"IDBGA\", \"port_name\": \"Bojonegara\" },\n      { \"id\": 12, \"port_flag\": \"ID\", \"port_code\": \"IDKNP\", \"port_name\": \"Kintap\" },\n      { \"id\": 13, \"port_flag\": \"ID\", \"port_code\": \"IDKDW\", \"port_name\": \"Kendawangan\" },\n      { \"id\": 14, \"port_flag\": \"ID\", \"port_code\": \"IDKUM\", \"port_name\": \"Kumai\" },\n      { \"id\": 15, \"port_flag\": \"ID\", \"port_code\": \"IDLAM\", \"port_name\": \"Lamongan\" },\n      { \"id\": 16, \"port_flag\": \"ID\", \"port_code\": \"IDRNE\", \"port_name\": \"Rembang/Sluke\" },\n      { \"id\": 17, \"port_flag\": \"ID\", \"port_code\": \"IDPPS\", \"port_name\": \"Pulang Pisau\" },\n      { \"id\": 18, \"port_flag\": \"ID\", \"port_code\": \"IDSPT\", \"port_name\": \"Sungai Puting\" },\n      { \"id\": 19, \"port_flag\": \"ID\", \"port_code\": \"IDSRI\", \"port_name\": \"Samarinda\" },\n      { \"id\": 20, \"port_flag\": \"ID\", \"port_code\": \"IDSRG\", \"port_name\": \"Semarang/Tanjung Emas\" },\n      { \"id\": 21, \"port_flag\": \"ID\", \"port_code\": \"IDMRA\", \"port_name\": \"Marunda\" },\n      { \"id\": 22, \"port_flag\": \"ID\", \"port_code\": \"IDKTG\", \"port_name\": \"Ketapang\" },\n      { \"id\": 23, \"port_flag\": \"ID\", \"port_code\": \"IDBRU\", \"port_name\": \"Boom Baru/Palembang\" },\n      { \"id\": 24, \"port_flag\": \"ID\", \"port_code\": \"IDSUB\", \"port_name\": \"Tanjung Perak\" },\n      { \"id\": 25, \"port_flag\": \"ID\", \"port_code\": \"IDJKT\", \"port_name\": \"Tanjung Priok\" },\n      { \"id\": 26, \"port_flag\": \"ID\", \"port_code\": \"IDTAR\", \"port_name\": \"Tarjun\" },\n      { \"id\": 27, \"port_flag\": \"ID\", \"port_code\": \"IDLLO\", \"port_name\": \"Labuhan Lombok\" },\n      { \"id\": 28, \"port_flag\": \"ID\", \"port_code\": \"IDTBN\", \"port_name\": \"Tuban\" },\n      { \"id\": 29, \"port_flag\": \"ID\", \"port_code\": \"IDPNK\", \"port_name\": \"Pontianak\" },\n      { \"id\": 30, \"port_flag\": \"ID\", \"port_code\": \"IDDUM\", \"port_name\": \"Dumai\" },\n      { \"id\": 31, \"port_flag\": \"ID\", \"port_code\": \"IDAYU\", \"port_name\": \"Pasang Kayu\" },\n      { \"id\": 32, \"port_flag\": \"ID\", \"port_code\": \"IDTRE\", \"port_name\": \"Tanjung Redep\" },\n      { \"id\": 33, \"port_flag\": \"ID\", \"port_code\": \"IDPGK\", \"port_name\": \"Pangkalpinang, Banka\" },\n      { \"id\": 34, \"port_flag\": \"ID\", \"port_code\": \"IDPNJ\", \"port_name\": \"Panjang\" },\n      { \"id\": 35, \"port_flag\": \"ID\", \"port_code\": \"IDKBU\", \"port_name\": \"Kotabaru\" },\n      { \"id\": 36, \"port_flag\": \"ID\", \"port_code\": \"IDTRH\", \"port_name\": \"Tarahan\" },\n      { \"id\": 37, \"port_flag\": \"ID\", \"port_code\": \"IDMAK\", \"port_name\": \"Makassar\" },\n      { \"id\": 38, \"port_flag\": \"ID\", \"port_code\": \"IDSTU\", \"port_name\": \"Satui/Sei Danau\" },\n      { \"id\": 39, \"port_flag\": \"ID\", \"port_code\": \"IDSMQ\", \"port_name\": \"Sampit\" },\n      { \"id\": 40, \"port_flag\": \"ID\", \"port_code\": \"IDTNB\", \"port_name\": \"Teluk Adang dan Tanah Grogot\" },\n      { \"id\": 41, \"port_flag\": \"ID\", \"port_code\": \"IDIAM\", \"port_name\": \"Asam-Asam\" },\n      { \"id\": 42, \"port_flag\": \"ID\", \"port_code\": \"IDBIR\", \"port_name\": \"Biringkassi\" },\n      { \"id\": 43, \"port_flag\": \"ID\", \"port_code\": \"IDBPN\", \"port_name\": \"Balikpapan\" },\n      { \"id\": 44, \"port_flag\": \"ID\", \"port_code\": \"IDBTI\", \"port_name\": \"Bunati\" },\n      { \"id\": 45, \"port_flag\": \"ID\", \"port_code\": \"IDBDJ\", \"port_name\": \"Banjarmasin\" },\n      { \"id\": 46, \"port_flag\": \"ID\", \"port_code\": \"IDCBN\", \"port_name\": \"Cirebon\" },\n      { \"id\": 47, \"port_flag\": \"ID\", \"port_code\": \"IDCIW\", \"port_name\": \"Ciwandan\" },\n      { \"id\": 48, \"port_flag\": \"ID\", \"port_code\": \"IDCIG\", \"port_name\": \"Cigading\" },\n      { \"id\": 49, \"port_flag\": \"ID\", \"port_code\": \"IDCGN\", \"port_name\": \"Cilegon\" },\n      { \"id\": 50, \"port_flag\": \"ID\", \"port_code\": \"IDGRE\", \"port_name\": \"Gresik\" },\n      { \"id\": 51, \"port_flag\": \"ID\", \"port_code\": \"IDBGA\", \"port_name\": \"Bojonegara\" },\n      { \"id\": 52, \"port_flag\": \"ID\", \"port_code\": \"IDKNP\", \"port_name\": \"Kintap\" },\n      { \"id\": 53, \"port_flag\": \"ID\", \"port_code\": \"IDKDW\", \"port_name\": \"Kendawangan\" },\n      { \"id\": 54, \"port_flag\": \"ID\", \"port_code\": \"IDKUM\", \"port_name\": \"Kumai\" },\n      { \"id\": 55, \"port_flag\": \"ID\", \"port_code\": \"IDLAM\", \"port_name\": \"Lamongan\" },\n      { \"id\": 56, \"port_flag\": \"ID\", \"port_code\": \"IDRNE\", \"port_name\": \"Rembang/Sluke\" },\n      { \"id\": 57, \"port_flag\": \"ID\", \"port_code\": \"IDPPS\", \"port_name\": \"Pulang Pisau\" },\n      { \"id\": 58, \"port_flag\": \"ID\", \"port_code\": \"IDSPT\", \"port_name\": \"Sungai Puting\" },\n      { \"id\": 59, \"port_flag\": \"ID\", \"port_code\": \"IDSRI\", \"port_name\": \"Samarinda\" },\n      { \"id\": 60, \"port_flag\": \"ID\", \"port_code\": \"IDSRG\", \"port_name\": \"Semarang/Tanjung Emas\" },\n      { \"id\": 61, \"port_flag\": \"ID\", \"port_code\": \"IDMRA\", \"port_name\": \"Marunda\" },\n      { \"id\": 62, \"port_flag\": \"ID\", \"port_code\": \"IDKTG\", \"port_name\": \"Ketapang\" },\n      { \"id\": 63, \"port_flag\": \"ID\", \"port_code\": \"IDBRU\", \"port_name\": \"Boom Baru/Palembang\" },\n      { \"id\": 64, \"port_flag\": \"ID\", \"port_code\": \"IDSUB\", \"port_name\": \"Tanjung Perak\" },\n      { \"id\": 65, \"port_flag\": \"ID\", \"port_code\": \"IDJKT\", \"port_name\": \"Tanjung Priok\" },\n      { \"id\": 66, \"port_flag\": \"ID\", \"port_code\": \"IDTAR\", \"port_name\": \"Tarjun\" },\n      { \"id\": 67, \"port_flag\": \"ID\", \"port_code\": \"IDLLO\", \"port_name\": \"Labuhan Lombok\" },\n      { \"id\": 68, \"port_flag\": \"ID\", \"port_code\": \"IDTBN\", \"port_name\": \"Tuban\" },\n      { \"id\": 69, \"port_flag\": \"ID\", \"port_code\": \"IDPNK\", \"port_name\": \"Pontianak\" },\n      { \"id\": 70, \"port_flag\": \"ID\", \"port_code\": \"IDDUM\", \"port_name\": \"Dumai\" },\n      { \"id\": 71, \"port_flag\": \"ID\", \"port_code\": \"IDAYU\", \"port_name\": \"Pasang Kayu\" },\n      { \"id\": 72, \"port_flag\": \"ID\", \"port_code\": \"IDTRE\", \"port_name\": \"Tanjung Redep\" },\n      { \"id\": 73, \"port_flag\": \"ID\", \"port_code\": \"IDPGK\", \"port_name\": \"Pangkalpinang, Banka\" },\n      { \"id\": 74, \"port_flag\": \"ID\", \"port_code\": \"IDPNJ\", \"port_name\": \"Panjang\" },\n      { \"id\": 75, \"port_flag\": \"ID\", \"port_code\": \"IDKBU\", \"port_name\": \"Kotabaru\" },\n      { \"id\": 76, \"port_flag\": \"ID\", \"port_code\": \"IDTRH\", \"port_name\": \"Tarahan\" },\n      { \"id\": 77, \"port_flag\": \"ID\", \"port_code\": \"IDMAK\", \"port_name\": \"Makassar\" },\n      { \"id\": 78, \"port_flag\": \"ID\", \"port_code\": \"IDSTU\", \"port_name\": \"Satui/Sei Danau\" },\n      { \"id\": 79, \"port_flag\": \"ID\", \"port_code\": \"IDSMQ\", \"port_name\": \"Sampit\" },\n      { \"id\": 80, \"port_flag\": \"ID\", \"port_code\": \"IDTNB\", \"port_name\": \"Teluk Adang dan Tanah Grogot\" }\n    ],\n    \"origin_nation\": \"ID\",\n    \"origin_port\": \"IDBPN\",\n    \"destination_port\": \"IDBPN\",\n    \"landing_site\": \"IDJKT.A01\",\n    \"windows_status\": null,\n    \"pandu\": []\n  },\n  \"dates\": {\n    \"estimate_arrival\": \"2026-10-02 00:00\",\n    \"actual_arrival\": null,\n    \"unload\": null,\n    \"load\": null,\n    \"estimate_depature\": \"2026-10-04 00:00\",\n    \"actual_depature\": null\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/super-set/ship/{{serviceNumberTramper}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "super-set",
                "ship",
                "{{serviceNumberTramper}}"
              ]
            },
            "description": "Kapal Trayek (route_type = 1/2/3/4) berbendera Indonesia (flag = 'ID'). Validasi referensi manual dilewati, type_ship otomatis diisi dari tarikan Inaportnet dan dikunci."
          },
          "response": []
        }
      ]
    },
    {
      "name": "2. Skenario 2 - Kapal Non-Trayek (Validasi Wajib)",
      "item": [
        {
          "name": "1. PUT Superset Ship - Non-Trayek dengan type_ship Valid (200 OK)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 200 OK atau 201 Created\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test(\"Data kapal Non-Trayek berhasil disimpan\", function () {",
                  "    var json = pm.response.json();",
                  "    pm.expect(json.success).to.be.true;",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"service_number\": \"{{serviceNumberNonTrayek}}\",\n  \"registration_number\": \"\",\n  \"trayek\": \"non-trayek\",\n  \"identity\": {\n    \"code\": \"58633-PEXT\",\n    \"name\": \"MV. DOLPHIN 82\",\n    \"flag\": \"PA\",\n    \"siupal\": \"B X-139/AL.001\",\n    \"kind\": \"tongkang\",\n    \"domicile\": null,\n    \"call_sign\": \"123\",\n    \"inmarsat_number\": null,\n    \"cso_name\": null,\n    \"cso_phone\": null,\n    \"voyage_number\": \"123\",\n    \"captain_name\": \"123\",\n    \"shipping_type\": null,\n    \"route\": null,\n    \"permanent_activity_ship\": null,\n    \"imo\": \"9300556\",\n    \"type_ship\": \"1.4.5\",\n    \"registration_port\": \"-\",\n    \"mmsi\": \"123\",\n    \"tugboat\": \"N/A\",\n    \"perintis_ship\": null,\n    \"docking_ship\": null,\n    \"tongkang_ship\": null,\n    \"tugboat_ship\": true,\n    \"is_coal_carrier\": null,\n    \"is_tol_laut_ship\": null,\n    \"is_new_ship\": null,\n    \"is_sea_trial_ship\": true,\n    \"is_livestock_carrier_ship\": null,\n    \"is_short_sea_ship\": true,\n    \"is_tobe_scrapped_ship\": null\n  },\n  \"specification\": {\n    \"ship_width\": \"32.20\",\n    \"back_draft\": \"123\",\n    \"max_draft\": null,\n    \"front_draft\": \"123\",\n    \"air_height\": null,\n    \"minimum_safe_manning\": \"123\",\n    \"length_overall\": \"224.93\",\n    \"driving_force\": null,\n    \"TahunPembuatan\": \"2004\",\n    \"deadweight_ton\": \"0\",\n    \"gross_ton\": \"39035.00\"\n  },\n  \"ports\": {\n    \"transit_port\": null,\n    \"unloading_port\": null,\n    \"next_port\": null,\n    \"before_origin_port\": \"CLISG\",\n    \"raw_route\": [],\n    \"origin_nation\": \"CN\",\n    \"origin_port\": \"IDMUB\",\n    \"destination_port\": \"IDMUB\",\n    \"landing_site\": null,\n    \"windows_status\": null,\n    \"pandu\": []\n  },\n  \"dates\": {\n    \"estimate_arrival\": \"2026-09-30T07:00:00\",\n    \"actual_arrival\": null,\n    \"unload\": null,\n    \"load\": null,\n    \"estimate_depature\": \"2026-10-01T00:00:00\",\n    \"actual_depature\": null\n  },\n  \"id_ship\": 5811\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/super-set/ship/{{serviceNumberNonTrayek}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "super-set",
                "ship",
                "{{serviceNumberNonTrayek}}"
              ]
            },
            "description": "Kapal Non-Trayek (route_type = 0) dengan type_ship '1.4.5' (valid di referensi tr_tipe_kapal). Wajib berhasil disimpan (200 OK)."
          },
          "response": []
        },
        {
          "name": "2. PUT Superset Ship - Non-Trayek dengan type_ship Invalid (400 Bad Request)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 400 Bad Request\", function () {",
                  "    pm.response.to.have.status(400);",
                  "});",
                  "",
                  "pm.test(\"Pesan error spesifik penolakan referensi\", function () {",
                  "    var json = pm.response.json();",
                  "    pm.expect(json.success).to.be.false;",
                  "    pm.expect(json.message).to.eql(\"Jenis kapal tidak valid atau tidak terdaftar di referensi!\");",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"service_number\": \"{{serviceNumberNonTrayek}}\",\n  \"registration_number\": \"\",\n  \"trayek\": \"non-trayek\",\n  \"identity\": {\n    \"code\": \"58633-PEXT\",\n    \"name\": \"MV. DOLPHIN 82\",\n    \"flag\": \"PA\",\n    \"siupal\": \"B X-139/AL.001\",\n    \"kind\": \"tongkang\",\n    \"domicile\": null,\n    \"call_sign\": \"123\",\n    \"inmarsat_number\": null,\n    \"cso_name\": null,\n    \"cso_phone\": null,\n    \"voyage_number\": \"123\",\n    \"captain_name\": \"123\",\n    \"shipping_type\": null,\n    \"route\": null,\n    \"permanent_activity_ship\": null,\n    \"imo\": \"9300556\",\n    \"type_ship\": \"KODE_INVALID_999\",\n    \"registration_port\": \"-\",\n    \"mmsi\": \"123\",\n    \"tugboat\": \"N/A\",\n    \"perintis_ship\": null,\n    \"docking_ship\": null,\n    \"tongkang_ship\": null,\n    \"tugboat_ship\": true,\n    \"is_coal_carrier\": null,\n    \"is_tol_laut_ship\": null,\n    \"is_new_ship\": null,\n    \"is_sea_trial_ship\": true,\n    \"is_livestock_carrier_ship\": null,\n    \"is_short_sea_ship\": true,\n    \"is_tobe_scrapped_ship\": null\n  },\n  \"specification\": {\n    \"ship_width\": \"32.20\",\n    \"back_draft\": \"123\",\n    \"max_draft\": null,\n    \"front_draft\": \"123\",\n    \"air_height\": null,\n    \"minimum_safe_manning\": \"123\",\n    \"length_overall\": \"224.93\",\n    \"driving_force\": null,\n    \"TahunPembuatan\": \"2004\",\n    \"deadweight_ton\": \"0\",\n    \"gross_ton\": \"39035.00\"\n  },\n  \"ports\": {\n    \"transit_port\": null,\n    \"unloading_port\": null,\n    \"next_port\": null,\n    \"before_origin_port\": \"CLISG\",\n    \"raw_route\": [],\n    \"origin_nation\": \"CN\",\n    \"origin_port\": \"IDMUB\",\n    \"destination_port\": \"IDMUB\",\n    \"landing_site\": null,\n    \"windows_status\": null,\n    \"pandu\": []\n  },\n  \"dates\": {\n    \"estimate_arrival\": \"2026-09-30T07:00:00\",\n    \"actual_arrival\": null,\n    \"unload\": null,\n    \"load\": null,\n    \"estimate_depature\": \"2026-10-01T00:00:00\",\n    \"actual_depature\": null\n  },\n  \"id_ship\": 5811\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/super-set/ship/{{serviceNumberNonTrayek}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "super-set",
                "ship",
                "{{serviceNumberNonTrayek}}"
              ]
            },
            "description": "Negative Case: Kapal Non-Trayek dengan kode type_ship sembarangan ('KODE_INVALID_999'). Wajib ditolak dengan HTTP 400 Bad Request."
          },
          "response": []
        }
      ]
    },
    {
      "name": "3. Skenario 3 - Kapal Berbendera Asing (Validasi Wajib)",
      "item": [
        {
          "name": "1. PUT Superset Ship - Kapal Asing dengan type_ship Valid (200 OK)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 200 OK atau 201 Created\", function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test(\"Data kapal asing berhasil disimpan\", function () {",
                  "    var json = pm.response.json();",
                  "    pm.expect(json.success).to.be.true;",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"service_number\": \"{{serviceNumberPkka}}\",\n  \"registration_number\": \"{{registrationNumberForeign}}\",\n  \"trayek\": \"pkka\",\n  \"identity\": {\n    \"code\": \"030108\",\n    \"name\": \"EVER BEFIT\",\n    \"flag\": \"TW\",\n    \"siupal\": \"BX-79/AL203\",\n    \"kind\": \"KAPAL MUATAN PETI KEMAS / CONTAINER\",\n    \"domicile\": null,\n    \"call_sign\": \"aaaa\",\n    \"inmarsat_number\": \"aaaa\",\n    \"cso_name\": null,\n    \"cso_phone\": null,\n    \"voyage_number\": \"aaaaVVVV\",\n    \"captain_name\": \"HOANG VU DAI\",\n    \"shipping_type\": \"INTERNATIONAL\",\n    \"route\": \"Shekou/China, Semarang/Tanjung Emas, Tanjung Priok, Kaohsiung\",\n    \"permanent_activity_ship\": null,\n    \"imo\": \"9784128\",\n    \"type_ship\": \"1.3.8\",\n    \"registration_port\": \"CINA\",\n    \"mmsi\": \"asd\"\n  },\n  \"specification\": {\n    \"ship_width\": \"32.80\",\n    \"back_draft\": \"1\",\n    \"max_draft\": \"1\",\n    \"front_draft\": \"1\",\n    \"air_height\": null,\n    \"minimum_safe_manning\": \"1\",\n    \"length_overall\": \"211.00\",\n    \"driving_force\": \"24260.00\",\n    \"TahunPembuatan\": 2017,\n    \"deadweight_ton\": \"36972.00\",\n    \"gross_ton\": \"32691.00\"\n  },\n  \"ports\": {\n    \"transit_port\": null,\n    \"unloading_port\": null,\n    \"next_port\": null,\n    \"before_origin_port\": \"TWKHH\",\n    \"raw_route\": [\n      {\n        \"id\": 1,\n        \"port_flag\": \"CN\",\n        \"port_code\": \"CNSHK\",\n        \"port_name\": \"Shekou/China\"\n      },\n      {\n        \"id\": 2,\n        \"port_flag\": \"ID\",\n        \"port_code\": \"IDSRG\",\n        \"port_name\": \"Semarang/Tanjung Emas\"\n      },\n      {\n        \"id\": 3,\n        \"port_flag\": \"ID\",\n        \"port_code\": \"IDJKT\",\n        \"port_name\": \"Tanjung Priok\"\n      },\n      {\n        \"id\": 4,\n        \"port_flag\": \"TW\",\n        \"port_code\": \"TWKHH\",\n        \"port_name\": \"Kaohsiung\"\n      }\n    ],\n    \"origin_nation\": \"CN\",\n    \"origin_port\": \"CNSHK\",\n    \"destination_port\": \"TWKHH\",\n    \"landing_site\": \"IDJKT.A01\",\n    \"windows_status\": null,\n    \"pandu\": []\n  },\n  \"dates\": {\n    \"estimate_arrival\": \"2026-10-01 00:00\",\n    \"actual_arrival\": null,\n    \"unload\": null,\n    \"load\": null,\n    \"estimate_depature\": \"2026-10-02 00:00\",\n    \"actual_depature\": null\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/super-set/ship/{{serviceNumberPkka}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "super-set",
                "ship",
                "{{serviceNumberPkka}}"
              ]
            },
            "description": "Kapal berbendera asing (flag = 'TW') dengan type_ship valid '1.3.8'. Wajib lolos validasi referensi dan berhasil disimpan."
          },
          "response": []
        },
        {
          "name": "2. PUT Superset Ship - Kapal Asing dengan type_ship Invalid (400 Bad Request)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test(\"Status code is 400 Bad Request\", function () {",
                  "    pm.response.to.have.status(400);",
                  "});",
                  "",
                  "pm.test(\"Pesan error jenis kapal tidak valid\", function () {",
                  "    var json = pm.response.json();",
                  "    pm.expect(json.success).to.be.false;",
                  "    pm.expect(json.message).to.eql(\"Jenis kapal tidak valid atau tidak terdaftar di referensi!\");",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{bearerToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"service_number\": \"{{serviceNumberPkka}}\",\n  \"registration_number\": \"{{registrationNumberForeign}}\",\n  \"trayek\": \"pkka\",\n  \"identity\": {\n    \"code\": \"030108\",\n    \"name\": \"EVER BEFIT\",\n    \"flag\": \"TW\",\n    \"siupal\": \"BX-79/AL203\",\n    \"kind\": \"KAPAL MUATAN PETI KEMAS / CONTAINER\",\n    \"domicile\": null,\n    \"call_sign\": \"aaaa\",\n    \"inmarsat_number\": \"aaaa\",\n    \"cso_name\": null,\n    \"cso_phone\": null,\n    \"voyage_number\": \"aaaaVVVV\",\n    \"captain_name\": \"HOANG VU DAI\",\n    \"shipping_type\": \"INTERNATIONAL\",\n    \"route\": \"Shekou/China, Semarang/Tanjung Emas, Tanjung Priok, Kaohsiung\",\n    \"permanent_activity_ship\": null,\n    \"imo\": \"9784128\",\n    \"type_ship\": \"INVALID_FOREIGN_CODE\",\n    \"registration_port\": \"CINA\",\n    \"mmsi\": \"asd\"\n  },\n  \"specification\": {\n    \"ship_width\": \"32.80\",\n    \"back_draft\": \"1\",\n    \"max_draft\": \"1\",\n    \"front_draft\": \"1\",\n    \"air_height\": null,\n    \"minimum_safe_manning\": \"1\",\n    \"length_overall\": \"211.00\",\n    \"driving_force\": \"24260.00\",\n    \"TahunPembuatan\": 2017,\n    \"deadweight_ton\": \"36972.00\",\n    \"gross_ton\": \"32691.00\"\n  },\n  \"ports\": {\n    \"transit_port\": null,\n    \"unloading_port\": null,\n    \"next_port\": null,\n    \"before_origin_port\": \"TWKHH\",\n    \"raw_route\": [\n      {\n        \"id\": 1,\n        \"port_flag\": \"CN\",\n        \"port_code\": \"CNSHK\",\n        \"port_name\": \"Shekou/China\"\n      },\n      {\n        \"id\": 2,\n        \"port_flag\": \"ID\",\n        \"port_code\": \"IDSRG\",\n        \"port_name\": \"Semarang/Tanjung Emas\"\n      },\n      {\n        \"id\": 3,\n        \"port_flag\": \"ID\",\n        \"port_code\": \"IDJKT\",\n        \"port_name\": \"Tanjung Priok\"\n      },\n      {\n        \"id\": 4,\n        \"port_flag\": \"TW\",\n        \"port_code\": \"TWKHH\",\n        \"port_name\": \"Kaohsiung\"\n      }\n    ],\n    \"origin_nation\": \"CN\",\n    \"origin_port\": \"CNSHK\",\n    \"destination_port\": \"TWKHH\",\n    \"landing_site\": \"IDJKT.A01\",\n    \"windows_status\": null,\n    \"pandu\": []\n  },\n  \"dates\": {\n    \"estimate_arrival\": \"2026-10-01 00:00\",\n    \"actual_arrival\": null,\n    \"unload\": null,\n    \"load\": null,\n    \"estimate_depature\": \"2026-10-02 00:00\",\n    \"actual_depature\": null\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/super-set/ship/{{serviceNumberPkka}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "super-set",
                "ship",
                "{{serviceNumberPkka}}"
              ]
            },
            "description": "Negative Case: Kapal berbendera asing (flag = 'TW') dengan type_ship tidak valid ('INVALID_FOREIGN_CODE'). Ditolak dengan HTTP 400 Bad Request."
          },
          "response": []
        }
      ]
    }
  ]
}
