{"id":2645,"date":"2026-10-17T03:01:32","date_gmt":"2026-10-16T20:01:32","guid":{"rendered":"https:\/\/caaip.net\/corps\/?page_id=2645"},"modified":"2026-10-17T03:01:35","modified_gmt":"2026-10-16T20:01:35","slug":"draft-survey-calculator","status":"publish","type":"page","link":"https:\/\/caaip.net\/corps\/draft-survey-calculator\/","title":{"rendered":"Draft Survey Calculator"},"content":{"rendered":"        <div id=\"dsp-266511\" class=\"dsp-wrap\">\n          <header class=\"dsp-header\"><h2>Draft Survey Professional<\/h2><p>Universal Edition \u00b7 Bulk Carrier &amp; Tanker<\/p><\/header>\n          <section class=\"dsp-card\">\n            <h3>1. Pilih mode kapal<\/h3>\n            <label class=\"dsp-label\" for=\"dsp-266511-mode\">Jenis perhitungan<\/label>\n            <select class=\"dsp-mode\" id=\"dsp-266511-mode\"><option value=\"bulk\">Bulk Carrier \u2014 Draft \/ Displacement Survey<\/option><option value=\"tanker\">Tanker \u2014 Multi-Tank Cargo Estimate<\/option><\/select>\n            <p class=\"dsp-help dsp-mode-help\">Bulk Carrier: masukkan displacement yang sudah dikoreksi dari hydrostatic particulars kapal.<\/p>\n          <\/section>\n          <div class=\"dsp-bulk\">\n            <section class=\"dsp-card\"><h3>2. Draft Readings (m) \u2014 Referensi<\/h3><p class=\"dsp-help\">Enam pembacaan berikut ditampilkan dalam laporan sebagai referensi. Masukkan displacement terkoreksi dari approved hydrostatic particulars secara terpisah; kalkulator tidak mengubah draft menjadi displacement otomatis.<\/p><h4>Initial<\/h4><div class=\"dsp-grid\">\n              <label class=\"dsp-label\">Forward Port<input type=\"number\" step=\"any\" min=\"0\" class=\"i_fp\" value=\"3.000\"><\/label><label class=\"dsp-label\">Forward Starboard<input type=\"number\" step=\"any\" min=\"0\" class=\"i_fs\" value=\"3.000\"><\/label><label class=\"dsp-label\">Midship Port<input type=\"number\" step=\"any\" min=\"0\" class=\"i_mp\" value=\"3.100\"><\/label><label class=\"dsp-label\">Midship Starboard<input type=\"number\" step=\"any\" min=\"0\" class=\"i_ms\" value=\"3.100\"><\/label><label class=\"dsp-label\">Aft Port<input type=\"number\" step=\"any\" min=\"0\" class=\"i_ap\" value=\"3.200\"><\/label><label class=\"dsp-label\">Aft Starboard<input type=\"number\" step=\"any\" min=\"0\" class=\"i_as\" value=\"3.200\"><\/label><\/div><h4>Final<\/h4><div class=\"dsp-grid\">\n              <label class=\"dsp-label\">Forward Port<input type=\"number\" step=\"any\" min=\"0\" class=\"f_fp\" value=\"5.000\"><\/label><label class=\"dsp-label\">Forward Starboard<input type=\"number\" step=\"any\" min=\"0\" class=\"f_fs\" value=\"5.000\"><\/label><label class=\"dsp-label\">Midship Port<input type=\"number\" step=\"any\" min=\"0\" class=\"f_mp\" value=\"5.100\"><\/label><label class=\"dsp-label\">Midship Starboard<input type=\"number\" step=\"any\" min=\"0\" class=\"f_ms\" value=\"5.100\"><\/label><label class=\"dsp-label\">Aft Port<input type=\"number\" step=\"any\" min=\"0\" class=\"f_ap\" value=\"5.200\"><\/label><label class=\"dsp-label\">Aft Starboard<input type=\"number\" step=\"any\" min=\"0\" class=\"f_as\" value=\"5.200\"><\/label><\/div><\/section>\n            <section class=\"dsp-card\"><h3>3. Initial Survey<\/h3><div class=\"dsp-grid\">\n                            <label class=\"dsp-label\">Initial displacement (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"i_disp\" value=\"5000\"><\/label>              <label class=\"dsp-label\">Initial ballast (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"i_ballast\" value=\"200\"><\/label>              <label class=\"dsp-label\">Initial bunker (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"i_bunker\" value=\"100\"><\/label>              <label class=\"dsp-label\">Initial fresh water (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"i_fresh\" value=\"20\"><\/label>              <label class=\"dsp-label\">Initial other weights (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"i_other\" value=\"10\"><\/label>            <\/div><\/section>\n            <section class=\"dsp-card\"><h3>4. Final Survey<\/h3><div class=\"dsp-grid\">\n                            <label class=\"dsp-label\">Final displacement (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"f_disp\" value=\"9000\"><\/label>              <label class=\"dsp-label\">Final ballast (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"f_ballast\" value=\"250\"><\/label>              <label class=\"dsp-label\">Final bunker (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"f_bunker\" value=\"80\"><\/label>              <label class=\"dsp-label\">Final fresh water (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"f_fresh\" value=\"18\"><\/label>              <label class=\"dsp-label\">Final other weights (MT)<input type=\"number\" step=\"any\" min=\"0\" class=\"f_other\" value=\"8\"><\/label>            <\/div><p class=\"dsp-help\">Masukkan displacement dari hydrostatic table setelah semua koreksi yang diwajibkan kapal diterapkan. Nilai contoh hanya untuk demonstrasi.<\/p><\/section>\n            <section class=\"dsp-card\"><h3>Hasil Bulk Carrier<\/h3><div class=\"dsp-results\" aria-live=\"polite\"><p>Isi data lalu tekan HITUNG.<\/p><\/div><\/section>\n          <\/div>\n          <div class=\"dsp-tanker\" hidden>\n            <section class=\"dsp-card\"><h3>2. Data Cargo per Tangki<\/h3>\n              <p class=\"dsp-help\">Masukkan volume observasi dari tank calibration table setelah koreksi ullage\/sounding, trim, dan list sesuai prosedur kapal. Kurangi free water jika diukur terpisah. VCF dan densitas harus pada basis standar yang konsisten.<\/p>\n              <div class=\"dsp-table-scroll\"><table class=\"dsp-tank-table\"><thead><tr><th>Tank<\/th><th>Observed volume (m\u00b3)<\/th><th>Free water (m\u00b3)<\/th><th>VCF<\/th><th>Density at reference (MT\/m\u00b3)<\/th><th><\/th><\/tr><\/thead><tbody class=\"dsp-tank-rows\"><\/tbody><\/table><\/div>\n              <div class=\"dsp-actions\"><button type=\"button\" class=\"dsp-add\">+ Tambah tangki<\/button><button type=\"button\" class=\"dsp-calc-tanker dsp-primary\">HITUNG TANKER<\/button><button type=\"button\" class=\"dsp-print\">CETAK \/ SAVE PDF<\/button><button type=\"button\" class=\"dsp-reset\">RESET TANKER<\/button><\/div>\n            <\/section>\n            <section class=\"dsp-card\"><h3>Hasil Tanker<\/h3><div class=\"dsp-tanker-results\" aria-live=\"polite\"><p>Tambahkan data tangki lalu tekan HITUNG TANKER.<\/p><\/div><\/section>\n          <\/div>\n          <section class=\"dsp-card dsp-actions dsp-bulk-actions\"><button type=\"button\" class=\"dsp-calc-bulk dsp-primary\">HITUNG<\/button><button type=\"button\" class=\"dsp-print\">CETAK \/ SAVE PDF<\/button><button type=\"button\" class=\"dsp-reset-bulk\">RESET<\/button><\/section>\n          <section class=\"dsp-card dsp-notice\"><strong>Catatan keselamatan perhitungan<\/strong><p>Alat ini adalah kalkulator estimasi, bukan pengganti surveyor, approved hydrostatic particulars, tank calibration tables, atau prosedur terminal\/kapal. Mode Tanker tidak menghitung ullage\/sounding menjadi volume secara otomatis dan tidak menghasilkan VCF otomatis. Untuk custody transfer, gunakan tabel, standar, dan prosedur yang disetujui serta verifikasi independen.<\/p><\/section>\n        <\/div>\n        <style>\n        #dsp-266511{max-width:1000px;margin:20px auto;color:#17324d;font:15px\/1.5 Arial,sans-serif}#dsp-266511 *{box-sizing:border-box}#dsp-266511 .dsp-header{background:linear-gradient(120deg,#06466a,#087d70);color:#fff;padding:22px;border-radius:12px;margin-bottom:14px}#dsp-266511 .dsp-header h2{margin:0 0 5px;color:#fff;font-size:26px}#dsp-266511 .dsp-header p{margin:0;color:#e7f5f5}#dsp-266511 .dsp-card{background:#fff;border:1px solid #dce5ed;border-radius:10px;padding:18px;margin:14px 0;box-shadow:0 3px 12px rgba(20,50,80,.05)}#dsp-266511 h3{font-size:19px;margin:0 0 14px;color:#075985}#dsp-266511 .dsp-label{display:block;font-weight:600;font-size:13px;margin:0 0 12px}#dsp-266511 input,#dsp-266511 select{display:block;width:100%;margin-top:5px;padding:10px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;min-width:90px;color:#172b4d}#dsp-266511 .dsp-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}#dsp-266511 .dsp-help{font-size:12px;color:#526579;margin:8px 0 0}#dsp-266511 .dsp-actions{display:flex;gap:9px;flex-wrap:wrap;align-items:center}#dsp-266511 button{border:0;border-radius:6px;padding:11px 15px;cursor:pointer;background:#475569;color:#fff;font-weight:700}#dsp-266511 button.dsp-primary{background:#075985}#dsp-266511 .dsp-add{background:#0f766e}#dsp-266511 .dsp-table-scroll{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}#dsp-266511 .dsp-tank-table{width:100%;border-collapse:collapse;min-width:880px;table-layout:auto}#dsp-266511 th,#dsp-266511 td{text-align:left;padding:8px;border-bottom:1px solid #e2e8f0;vertical-align:middle}#dsp-266511 th{font-size:12px;background:#f1f5f9;white-space:normal}#dsp-266511 .dsp-tank-table th:first-child,#dsp-266511 .dsp-tank-table td:first-child{min-width:115px}#dsp-266511 .dsp-tank-table th:last-child,#dsp-266511 .dsp-tank-table td:last-child{width:88px;min-width:88px;text-align:center}#dsp-266511 .dsp-tank-table td input{width:100%;min-width:105px}#dsp-266511 .dsp-tank-table .dsp-remove{display:inline-block;min-width:64px;width:auto;white-space:nowrap;word-break:normal;overflow-wrap:normal;padding:10px 12px;font-size:13px;line-height:1.2}#dsp-266511 .dsp-results table,#dsp-266511 .dsp-tanker-results table{min-width:0}#dsp-266511 .dsp-results td:last-child,#dsp-266511 .dsp-tanker-results td:last-child{text-align:right;font-weight:700}#dsp-266511 .dsp-total{font-size:23px;font-weight:800;color:#075985;margin:16px 0 4px}#dsp-266511 .dsp-notice{font-size:12px;color:#526579}#dsp-266511 .dsp-notice p{margin:6px 0 0}#dsp-266511 [hidden]{display:none!important}@media(max-width:650px){#dsp-266511 .dsp-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#dsp-266511 .dsp-card{padding:13px}}@media(max-width:420px){#dsp-266511 .dsp-grid{grid-template-columns:1fr}}@media print{body *{visibility:hidden!important}#dsp-266511,#dsp-266511 *{visibility:visible!important}#dsp-266511{position:absolute;left:0;top:0;width:100%;max-width:none}#dsp-266511 button{display:none!important}#dsp-266511 .dsp-card{box-shadow:none;break-inside:avoid}}\n        <\/style>\n        <script>\n        (function(){const root=document.getElementById(\"dsp-266511\");if(!root)return;\n          const $=s=>root.querySelector(s), $$=s=>Array.from(root.querySelectorAll(s));\n          const mode=$('.dsp-mode'),bulk=$('.dsp-bulk'),tanker=$('.dsp-tanker'),bulkActions=$('.dsp-bulk-actions'),modeHelp=$('.dsp-mode-help');\n          function setMode(){const isT=mode.value==='tanker';bulk.hidden=isT;tanker.hidden=!isT;bulkActions.hidden=isT;modeHelp.textContent=isT?'Tanker: estimasi massa multi-tangki dari volume terkoreksi, VCF, dan densitas referensi.':'Bulk Carrier: masukkan displacement yang sudah dikoreksi dari hydrostatic particulars kapal.';}\n          mode.addEventListener('change',setMode);setMode();\n          function n(sel){const el=$(sel);return el?Number(el.value):0;} function fmt(x,d=3){const factor=Math.pow(10,d);const value=Math.abs(Number(x));const rounded=Math.sign(Number(x))*Math.round(value*factor+1e-7)\/factor;return rounded.toLocaleString('en-US',{minimumFractionDigits:d,maximumFractionDigits:d});}\n          function tableRows(rows){return '<table><tbody>'+rows.map(r=>'<tr><td>'+r[0]+'<\/td><td>'+r[1]+'<\/td><\/tr>').join('')+'<\/tbody><\/table>';}\n          $('.dsp-calc-bulk').addEventListener('click',()=>{const iDisp=n('.i_disp'),fDisp=n('.f_disp');const ik=['i_ballast','i_bunker','i_fresh','i_other'],fk=['f_ballast','f_bunker','f_fresh','f_other'];const iNC=ik.reduce((s,k)=>s+n('.'+k),0),fNC=fk.reduce((s,k)=>s+n('.'+k),0);const iNet=iDisp-iNC,fNet=fDisp-fNC,cargo=fNet-iNet;const vals=[iDisp,fDisp,...ik.map(k=>n('.'+k)),...fk.map(k=>n('.'+k))];if(vals.some(v=>!Number.isFinite(v)||v<0)||iDisp<=0||fDisp<=0){$('.dsp-results').innerHTML='<p role=\"alert\">Periksa input. Displacement harus lebih besar dari nol dan semua berat tidak boleh negatif.<\/p>';return;}const draftMean=(keys)=>keys.reduce((s,k)=>s+n('.'+k),0)\/keys.length;const iF=draftMean(['.i_fp','.i_fs']),iM=draftMean(['.i_mp','.i_ms']),iA=draftMean(['.i_ap','.i_as']),fF=draftMean(['.f_fp','.f_fs']),fM=draftMean(['.f_mp','.f_ms']),fA=draftMean(['.f_ap','.f_as']);$('.dsp-results').innerHTML=tableRows([['Initial forward mean draft (m)',fmt(iF)],['Initial midship mean draft (m)',fmt(iM)],['Initial aft mean draft (m)',fmt(iA)],['Initial preliminary mean draft (m)',fmt((iF+iM+iA)\/3)],['Initial trim, aft \u2212 forward (m)',fmt(iA-iF)],['Final forward mean draft (m)',fmt(fF)],['Final midship mean draft (m)',fmt(fM)],['Final aft mean draft (m)',fmt(fA)],['Final preliminary mean draft (m)',fmt((fF+fM+fA)\/3)],['Final trim, aft \u2212 forward (m)',fmt(fA-fF)],['Initial displacement (MT)',fmt(iDisp)],['Final displacement (MT)',fmt(fDisp)],['Initial non-cargo total (MT)',fmt(iNC)],['Final non-cargo total (MT)',fmt(fNC)],['Initial net weight (MT)',fmt(iNet)],['Final net weight (MT)',fmt(fNet)]])+'<p class=\"dsp-total\">Net cargo change: '+fmt(cargo)+' MT<\/p><p>'+(cargo>=0?'Indikasi loading.':'Indikasi discharge.')+'<\/p><p class=\"dsp-help\">Perhitungan displacement bersih dikurangi perubahan non-cargo. Koreksi hydrostatic\/trim tidak dilakukan oleh plugin.<\/p>';});\n          const tbody=$('.dsp-tank-rows');let tankCount=0;\n          function addTank(data){tankCount++;const tr=document.createElement('tr');tr.innerHTML='<td><input aria-label=\"Tank name\" class=\"tank-name\" type=\"text\" value=\"'+(data&&data.name?String(data.name).replace(\/[&<>\"']\/g,''):('Tank '+tankCount))+'\"><\/td><td><input aria-label=\"Observed volume\" class=\"tank-vol\" type=\"number\" min=\"0\" step=\"any\" value=\"'+(data?data.vol:'0')+'\"><\/td><td><input aria-label=\"Free water volume\" class=\"tank-fw\" type=\"number\" min=\"0\" step=\"any\" value=\"'+(data?data.fw:'0')+'\"><\/td><td><input aria-label=\"VCF\" class=\"tank-vcf\" type=\"number\" min=\"0.000001\" step=\"any\" value=\"'+(data?data.vcf:'1.00000')+'\"><\/td><td><input aria-label=\"Reference density\" class=\"tank-density\" type=\"number\" min=\"0.000001\" step=\"any\" value=\"'+(data?data.density:'0.850')+'\"><\/td><td><button type=\"button\" class=\"dsp-remove\">Hapus<\/button><\/td>';tbody.appendChild(tr);tr.querySelector('.dsp-remove').addEventListener('click',()=>{if(tbody.children.length>1)tr.remove();else alert('Minimal satu tangki harus tersedia.');});}\n          addTank({name:'Tank 1',vol:'1000',fw:'0',vcf:'1.00000',density:'0.850'});$('.dsp-add').addEventListener('click',()=>addTank());\n          $('.dsp-calc-tanker').addEventListener('click',()=>{let sumObs=0,sumFW=0,sumStd=0,sumMass=0,invalid=false;const rows=[];Array.from(tbody.querySelectorAll('tr')).forEach((tr,i)=>{const name=tr.querySelector('.tank-name').value.trim()||('Tank '+(i+1));const vol=Number(tr.querySelector('.tank-vol').value),fw=Number(tr.querySelector('.tank-fw').value),vcf=Number(tr.querySelector('.tank-vcf').value),density=Number(tr.querySelector('.tank-density').value);if(![vol,fw,vcf,density].every(Number.isFinite)||vol<0||fw<0||fw>vol||vcf<=0||density<=0){invalid=true;return;}const netObs=vol-fw,stdVol=netObs*vcf,mass=stdVol*density;sumObs+=vol;sumFW+=fw;sumStd+=stdVol;sumMass+=mass;rows.push([name,fmt(vol),fmt(fw),fmt(vcf,5),fmt(stdVol),fmt(mass)]);});if(invalid){$('.dsp-tanker-results').innerHTML='<p role=\"alert\">Periksa semua tangki: nilai harus valid, VCF dan density harus lebih besar dari nol, dan free water tidak boleh melebihi observed volume.<\/p>';return;}const head='<div class=\"dsp-table-scroll\"><table><thead><tr><th>Tank<\/th><th>Observed (m\u00b3)<\/th><th>Free water (m\u00b3)<\/th><th>VCF<\/th><th>Corrected volume (m\u00b3)<\/th><th>Estimated mass (MT)<\/th><\/tr><\/thead><tbody>'+rows.map(r=>'<tr>'+r.map((v,i)=>'<td>'+(i===0?esc(v):v)+'<\/td>').join('')+'<\/tr>').join('')+'<\/tbody><\/table><\/div>';$('.dsp-tanker-results').innerHTML=head+tableRows([['Total observed volume (m\u00b3)',fmt(sumObs)],['Total free water (m\u00b3)',fmt(sumFW)],['Total corrected standard volume (m\u00b3)',fmt(sumStd)],['Estimated cargo mass (MT)',fmt(sumMass)]])+'<p class=\"dsp-total\">Estimated cargo mass: '+fmt(sumMass)+' MT<\/p><p class=\"dsp-help\">Formula per tangki: (observed volume \u2212 free water) \u00d7 VCF \u00d7 reference density. Pastikan volume, VCF, dan density memakai basis temperatur\/standar yang cocok.<\/p>';});\n          function esc(s){return String(s).replace(\/[&<>\"']\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));}\n          $$('.dsp-print').forEach(b=>b.addEventListener('click',()=>window.print()));$('.dsp-reset-bulk').addEventListener('click',()=>{root.querySelectorAll('.dsp-bulk input').forEach(el=>{if(el.classList.contains('i_disp'))el.value='5000';else if(el.classList.contains('f_disp'))el.value='9000';else if(el.classList.contains('i_fp')||el.classList.contains('i_fs'))el.value='3.000';else if(el.classList.contains('i_mp')||el.classList.contains('i_ms'))el.value='3.100';else if(el.classList.contains('i_ap')||el.classList.contains('i_as'))el.value='3.200';else if(el.classList.contains('f_fp')||el.classList.contains('f_fs'))el.value='5.000';else if(el.classList.contains('f_mp')||el.classList.contains('f_ms'))el.value='5.100';else if(el.classList.contains('f_ap')||el.classList.contains('f_as'))el.value='5.200';else el.value='0';});$('.dsp-results').innerHTML='<p>Isi data lalu tekan HITUNG.<\/p>';});$('.dsp-reset').addEventListener('click',()=>{tbody.innerHTML='';tankCount=0;addTank({name:'Tank 1',vol:'0',fw:'0',vcf:'1.00000',density:'0.850'});$('.dsp-tanker-results').innerHTML='<p>Tambahkan data tangki lalu tekan HITUNG TANKER.<\/p>';});\n        })();\n        <\/script>\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-2645","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/pages\/2645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/comments?post=2645"}],"version-history":[{"count":1,"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/pages\/2645\/revisions"}],"predecessor-version":[{"id":2647,"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/pages\/2645\/revisions\/2647"}],"wp:attachment":[{"href":"https:\/\/caaip.net\/corps\/wp-json\/wp\/v2\/media?parent=2645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}