{"id":13368,"date":"2026-02-11T21:19:00","date_gmt":"2026-02-11T21:19:00","guid":{"rendered":"https:\/\/gasquip.com\/?p=13368"},"modified":"2026-02-11T21:31:10","modified_gmt":"2026-02-11T21:31:10","slug":"sf6-reporting","status":"publish","type":"post","link":"https:\/\/gasquip.com\/fr\/sf6-reporting\/","title":{"rendered":"SF6 Reporting"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"13368\" class=\"elementor elementor-13368\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5612f49 e-flex e-con-boxed e-con e-parent\" data-id=\"5612f49\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-91468fc elementor-widget elementor-widget-html\" data-id=\"91468fc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"gq-sf6-tool\" style=\"max-width:1100px;margin:0 auto;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial;\">\r\n  <h2 style=\"margin:0 0 8px 0;\">GasQuip SF\u2086 Tracker Lite<\/h2>\r\n  <div style=\"opacity:.75;margin:0 0 16px 0;\">Track SF\u2086 inventory, movements, and CO\u2082e. Export CSV after email capture.<\/div>\r\n\r\n  <!-- SUMMARY -->\r\n  <div class=\"gqcard\" style=\"display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end\">\r\n    <div style=\"min-width:180px;\">\r\n      <div style=\"opacity:.7;font-size:12px;\">Total SF\u2086 moved<\/div>\r\n      <div id=\"sum_moved\" style=\"font-size:22px;font-weight:700;\">0.00 lbs<\/div>\r\n    <\/div>\r\n    <div style=\"min-width:220px;\">\r\n      <div style=\"opacity:.7;font-size:12px;\">Estimated cylinder loss (proxy emissions)<\/div>\r\n      <div id=\"sum_loss\" style=\"font-size:22px;font-weight:700;\">0.00 lbs<\/div>\r\n    <\/div>\r\n    <div style=\"min-width:220px;\">\r\n      <div style=\"opacity:.7;font-size:12px;\">Estimated CO\u2082e<\/div>\r\n      <div id=\"sum_co2e\" style=\"font-size:22px;font-weight:700;\">0.00 MTCO\u2082e<\/div>\r\n    <\/div>\r\n    <div style=\"margin-left:auto;display:flex;gap:10px;flex-wrap:wrap;\">\r\n      <button id=\"gq-export\" class=\"gqbtn gqbtn-primary\">Export CSV<\/button>\r\n      <button id=\"gq-reset\" class=\"gqbtn gqbtn-danger\">Reset<\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div style=\"display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px;\">\r\n    <button data-tab=\"assets\" class=\"gqbtn gqbtn-on\">Assets<\/button>\r\n    <button data-tab=\"cylinders\" class=\"gqbtn\">Cylinders<\/button>\r\n    <button data-tab=\"tx\" class=\"gqbtn\">Transactions<\/button>\r\n  <\/div>\r\n\r\n  <div id=\"gq-panels\">\r\n    <!-- ASSETS -->\r\n    <div id=\"gq-assets\" class=\"gqpanel\">\r\n      <div class=\"gqcard\">\r\n        <h3 style=\"margin:0 0 10px 0;\">Add Asset<\/h3>\r\n        <div class=\"gqgrid3\">\r\n          <input id=\"a_name\" class=\"gqinput\" placeholder=\"Asset name (e.g., Breaker 12A)\" \/>\r\n          <input id=\"a_site\" class=\"gqinput\" placeholder=\"Site\/Substation\" \/>\r\n          <input id=\"a_oem\" class=\"gqinput\" placeholder=\"OEM (optional)\" \/>\r\n          <input id=\"a_voltage\" class=\"gqinput\" placeholder=\"Voltage class (kV, optional)\" inputmode=\"decimal\" \/>\r\n          <input id=\"a_comp\" class=\"gqinput\" placeholder=\"Compartment (optional)\" \/>\r\n          <input id=\"a_capacity\" class=\"gqinput\" placeholder=\"Nameplate SF\u2086 (lbs, optional)\" inputmode=\"decimal\" \/>\r\n          <button id=\"a_add\" class=\"gqbtn gqbtn-primary\" style=\"grid-column:1\/-1;\">Add Asset<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"gqcard\">\r\n        <h3 style=\"margin:0 0 10px 0;\">Assets<\/h3>\r\n        <div id=\"a_list\" class=\"gqtable\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- CYLINDERS -->\r\n    <div id=\"gq-cylinders\" class=\"gqpanel\" style=\"display:none;\">\r\n      <div class=\"gqcard\">\r\n        <h3 style=\"margin:0 0 10px 0;\">Add Cylinder<\/h3>\r\n        <div class=\"gqgrid3\">\r\n          <input id=\"c_serial\" class=\"gqinput\" placeholder=\"Cylinder serial (required)\" \/>\r\n          <input id=\"c_owner\" class=\"gqinput\" placeholder=\"Owner (optional)\" \/>\r\n          <input id=\"c_capacity\" class=\"gqinput\" placeholder=\"Rated capacity (lbs, optional)\" inputmode=\"decimal\" \/>\r\n          <input id=\"c_tare\" class=\"gqinput\" placeholder=\"Tare weight (lbs, optional)\" inputmode=\"decimal\" \/>\r\n          <input id=\"c_gross\" class=\"gqinput\" placeholder=\"Gross weight now (lbs, optional)\" inputmode=\"decimal\" \/>\r\n          <input id=\"c_hydro\" class=\"gqinput\" type=\"date\" placeholder=\"Hydro due (optional)\" \/>\r\n          <button id=\"c_add\" class=\"gqbtn gqbtn-primary\" style=\"grid-column:1\/-1;\">Add Cylinder<\/button>\r\n        <\/div>\r\n        <div style=\"opacity:.7;margin-top:8px;font-size:13px;\">\r\n          If you enter Tare + Gross, we compute Net SF\u2086 = Gross \u2212 Tare (simple field-friendly proxy).\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"gqcard\">\r\n        <h3 style=\"margin:0 0 10px 0;\">Cylinders<\/h3>\r\n        <div id=\"c_list\" class=\"gqtable\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- TRANSACTIONS -->\r\n    <div id=\"gq-tx\" class=\"gqpanel\" style=\"display:none;\">\r\n      <div class=\"gqcard\">\r\n        <h3 style=\"margin:0 0 10px 0;\">Add Transaction<\/h3>\r\n        <div class=\"gqgrid2\">\r\n          <select id=\"t_type\" class=\"gqinput\">\r\n            <option value=\"fill\">Fill (cylinder \u2192 asset)<\/option>\r\n            <option value=\"recover\">Recover (asset \u2192 cylinder)<\/option>\r\n            <option value=\"transfer\">Transfer (cylinder \u2192 cylinder)<\/option>\r\n            <option value=\"adjust\">Adjust (inventory correction)<\/option>\r\n          <\/select>\r\n          <input id=\"t_date\" class=\"gqinput\" type=\"date\" \/>\r\n          <select id=\"t_cyl_from\" class=\"gqinput\"><\/select>\r\n          <select id=\"t_cyl_to\" class=\"gqinput\"><\/select>\r\n          <select id=\"t_asset\" class=\"gqinput\"><\/select>\r\n          <input id=\"t_lbs\" class=\"gqinput\" placeholder=\"lbs (+)\" inputmode=\"decimal\" \/>\r\n          <input id=\"t_note\" class=\"gqinput\" placeholder=\"Notes (optional)\" \/>\r\n          <button id=\"t_add\" class=\"gqbtn gqbtn-primary\" style=\"grid-column:1\/-1;\">Add Transaction<\/button>\r\n        <\/div>\r\n        <div style=\"opacity:.7;margin-top:8px;font-size:13px;\">\r\n          CO\u2082e is calculated automatically (GWP=23,500). Estimated \u201closs\u201d is based on net cylinder inventory change.\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"gqcard\">\r\n        <h3 style=\"margin:0 0 10px 0;\">Transactions<\/h3>\r\n        <div id=\"t_list\" class=\"gqtable\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- EMAIL GATE MODAL -->\r\n  <div id=\"gq-modal\" class=\"gqmodal\" style=\"display:none;\">\r\n    <div class=\"gqmodal-inner\">\r\n      <div style=\"display:flex;justify-content:space-between;align-items:center;gap:10px;\">\r\n        <h3 style=\"margin:0;\">Get your export<\/h3>\r\n        <button id=\"gq-close\" class=\"gqbtn\">X<\/button>\r\n      <\/div>\r\n      <p style=\"margin:10px 0;opacity:.8;\">Enter your email to export CSV. We\u2019ll also send SF\u2086 tracking best practices.<\/p>\r\n\r\n      <div id=\"gq-hubspot\">\r\n        <!-- HUBSPOT_FORM_EMBED_GOES_HERE -->\r\n      <\/div>\r\n\r\n      <div id=\"gq-fallback\" style=\"display:none;\">\r\n        <input id=\"gq-email\" class=\"gqinput\" placeholder=\"Email\" \/>\r\n        <button id=\"gq-email-btn\" class=\"gqbtn gqbtn-primary\" style=\"width:100%;margin-top:10px;\">Continue<\/button>\r\n      <\/div>\r\n\r\n      <div id=\"gq-modal-msg\" style=\"margin-top:10px;opacity:.8;font-size:13px;\"><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <style>\r\n    .gqbtn{border:1px solid #cfd7df;background:#fff;padding:8px 12px;border-radius:10px;cursor:pointer}\r\n    .gqbtn-on{background:#f3f6f9}\r\n    .gqbtn-primary{background:#0d60b2;color:#fff;border-color:#0d60b2}\r\n    .gqbtn-danger{background:#fff;color:#b00020;border-color:#f0c0c7}\r\n    .gqcard{border:1px solid #e6edf3;border-radius:14px;padding:14px;margin-bottom:12px;background:#fff}\r\n    .gqgrid2{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:10px;align-items:center}\r\n    .gqgrid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;align-items:center}\r\n    .gqinput{border:1px solid #cfd7df;border-radius:10px;padding:10px 12px;width:100%;box-sizing:border-box}\r\n    .gqtable{width:100%;overflow:auto}\r\n    table{width:100%;border-collapse:collapse;font-size:14px}\r\n    th,td{border-bottom:1px solid #eef2f6;padding:10px;text-align:left;white-space:nowrap}\r\n    .gqmodal{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:99999}\r\n    .gqmodal-inner{background:#fff;border-radius:16px;padding:16px;max-width:520px;width:calc(100% - 24px)}\r\n    @media(max-width:900px){.gqgrid2{grid-template-columns:1fr}.gqgrid3{grid-template-columns:1fr}}\r\n  <\/style>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  const KEY=\"gq_sf6_tracker_lite_v2\";\r\n  const GWP_SF6 = 23500;\r\n  const LBS_PER_METRIC_TON = 2204.6226218;\r\n\r\n  const state = load() || { assets:[], cylinders:[], tx:[], leads:{captured:false, email:null} };\r\n\r\n  \/\/ Tabs\r\n  document.querySelectorAll(\"#gq-sf6-tool [data-tab]\").forEach(btn=>{\r\n    btn.addEventListener(\"click\", ()=>{\r\n      document.querySelectorAll(\"#gq-sf6-tool [data-tab]\").forEach(b=>b.classList.remove(\"gqbtn-on\"));\r\n      btn.classList.add(\"gqbtn-on\");\r\n      showTab(btn.dataset.tab);\r\n    });\r\n  });\r\n  function showTab(tab){\r\n    document.getElementById(\"gq-assets\").style.display = tab===\"assets\" ? \"\" : \"none\";\r\n    document.getElementById(\"gq-cylinders\").style.display = tab===\"cylinders\" ? \"\" : \"none\";\r\n    document.getElementById(\"gq-tx\").style.display = tab===\"tx\" ? \"\" : \"none\";\r\n  }\r\n\r\n  \/\/ Helpers\r\n  function save(){ localStorage.setItem(KEY, JSON.stringify(state)); refresh(); }\r\n  function load(){ try{ return JSON.parse(localStorage.getItem(KEY)); }catch(e){ return null; } }\r\n  function uid(){ return Math.random().toString(36).slice(2,10); }\r\n  function num(x){ const v=parseFloat(x); return isFinite(v)? v : null; }\r\n  function today(){ return new Date().toISOString().slice(0,10); }\r\n  function co2e_mt(lbs){ return (Math.abs(lbs) * GWP_SF6) \/ LBS_PER_METRIC_TON; }\r\n\r\n  \/\/ UI refs\r\n  const a_name=q(\"#a_name\"), a_site=q(\"#a_site\"), a_oem=q(\"#a_oem\"), a_voltage=q(\"#a_voltage\"), a_comp=q(\"#a_comp\"), a_capacity=q(\"#a_capacity\"), a_add=q(\"#a_add\");\r\n  const c_serial=q(\"#c_serial\"), c_owner=q(\"#c_owner\"), c_capacity=q(\"#c_capacity\"), c_tare=q(\"#c_tare\"), c_gross=q(\"#c_gross\"), c_hydro=q(\"#c_hydro\"), c_add=q(\"#c_add\");\r\n  const t_type=q(\"#t_type\"), t_date=q(\"#t_date\"), t_cyl_from=q(\"#t_cyl_from\"), t_cyl_to=q(\"#t_cyl_to\"), t_asset=q(\"#t_asset\"), t_lbs=q(\"#t_lbs\"), t_note=q(\"#t_note\"), t_add=q(\"#t_add\");\r\n\r\n  t_date.value = today();\r\n\r\n  \/\/ Add asset\r\n  a_add.addEventListener(\"click\", ()=>{\r\n    const name=a_name.value.trim();\r\n    if(!name) return alert(\"Asset name required\");\r\n    state.assets.push({\r\n      id:uid(),\r\n      name,\r\n      site:a_site.value.trim(),\r\n      oem:a_oem.value.trim(),\r\n      voltage_kv:num(a_voltage.value),\r\n      compartment:a_comp.value.trim(),\r\n      nameplate_lbs:num(a_capacity.value)\r\n    });\r\n    a_name.value=\"\"; a_site.value=\"\"; a_oem.value=\"\"; a_voltage.value=\"\"; a_comp.value=\"\"; a_capacity.value=\"\";\r\n    save();\r\n  });\r\n\r\n  \/\/ Add cylinder\r\n  c_add.addEventListener(\"click\", ()=>{\r\n    const serial=c_serial.value.trim();\r\n    if(!serial) return alert(\"Cylinder serial required\");\r\n    if(state.cylinders.some(c=>c.serial.toLowerCase()===serial.toLowerCase())) return alert(\"Serial already exists\");\r\n    const tare=num(c_tare.value);\r\n    const gross=num(c_gross.value);\r\n    const net = (tare!==null && gross!==null) ? (gross - tare) : null;\r\n\r\n    state.cylinders.push({\r\n      id:uid(),\r\n      serial,\r\n      owner:c_owner.value.trim(),\r\n      capacity_lbs:num(c_capacity.value),\r\n      tare_lbs:tare,\r\n      gross_lbs:gross,\r\n      net_lbs:net,\r\n      hydro_due:c_hydro.value || null\r\n    });\r\n\r\n    c_serial.value=\"\"; c_owner.value=\"\"; c_capacity.value=\"\"; c_tare.value=\"\"; c_gross.value=\"\"; c_hydro.value=\"\";\r\n    save();\r\n  });\r\n\r\n  \/\/ Transactions\r\n  t_add.addEventListener(\"click\", ()=>{\r\n    if(state.cylinders.length===0) return alert(\"Add at least one cylinder first.\");\r\n    const type=t_type.value;\r\n    const lbs=num(t_lbs.value);\r\n    if(lbs===null || lbs===0) return alert(\"Enter lbs (non-zero). Use positive lbs.\");\r\n    const date=t_date.value || today();\r\n    const from=t_cyl_from.value || null;\r\n    const to=t_cyl_to.value || null;\r\n    const asset=t_asset.value || null;\r\n\r\n    if(type===\"fill\" && (!from || !asset)) return alert(\"Fill requires From Cylinder and Asset.\");\r\n    if(type===\"recover\" && (!to || !asset)) return alert(\"Recover requires To Cylinder and Asset.\");\r\n    if(type===\"transfer\" && (!from || !to)) return alert(\"Transfer requires From and To cylinders.\");\r\n    if(type===\"adjust\" && (!from && !to)) return alert(\"Adjust requires a cylinder (From or To).\");\r\n\r\n    const co2e = co2e_mt(lbs);\r\n\r\n    state.tx.push({id:uid(), date, type, from, to, asset, lbs:Math.abs(lbs), co2e_mt:co2e, note:t_note.value.trim()});\r\n    t_lbs.value=\"\"; t_note.value=\"\";\r\n    save();\r\n  });\r\n\r\n  \/\/ Export gate\r\n  q(\"#gq-export\").addEventListener(\"click\", ()=>{\r\n    if(state.leads.captured) return exportCsv();\r\n    openModal();\r\n  });\r\n\r\n  \/\/ Reset\r\n  q(\"#gq-reset\").addEventListener(\"click\", ()=>{\r\n    if(!confirm(\"Reset tracker data in this browser?\")) return;\r\n    localStorage.removeItem(KEY);\r\n    location.reload();\r\n  });\r\n\r\n  \/\/ Modal\r\n  const modal=q(\"#gq-modal\"), close=q(\"#gq-close\"), msg=q(\"#gq-modal-msg\");\r\n  close.addEventListener(\"click\", ()=> modal.style.display=\"none\");\r\n\r\n  function openModal(){\r\n    modal.style.display=\"flex\";\r\n    msg.textContent=\"After submitting your email, click Continue.\";\r\n    const hub=q(\"#gq-hubspot\");\r\n    const hasHub = hub && hub.innerText && hub.innerText.trim().length>0;\r\n    if(!hasHub) q(\"#gq-fallback\").style.display=\"\";\r\n  }\r\n\r\n  q(\"#gq-email-btn\").addEventListener(\"click\", ()=>{\r\n    const email=q(\"#gq-email\").value.trim();\r\n    if(!email || !email.includes(\"@\")) return alert(\"Enter a valid email\");\r\n    state.leads.captured=true;\r\n    state.leads.email=email;\r\n    save();\r\n    modal.style.display=\"none\";\r\n    exportCsv();\r\n  });\r\n\r\n  \/\/ Render\r\n  function refresh(){\r\n    renderAssets();\r\n    renderCylinders();\r\n    renderTx();\r\n    renderSelects();\r\n    renderSummary();\r\n  }\r\n\r\n  function renderSummary(){\r\n    \/\/ Total moved = sum of tx lbs\r\n    const moved = state.tx.reduce((s,t)=>s+(Math.abs(t.lbs||0)),0);\r\n\r\n    \/\/ Estimated \"loss\" proxy: negative net change in cylinders due to tx\r\n    \/\/ We compute inventory delta; any net negative indicates loss\/leak\/venting proxy.\r\n    const delta = cylinderInventoryDelta();\r\n    const loss = Math.max(0, -delta); \/\/ if delta is negative overall, show as loss\r\n\r\n    const co2e = co2e_mt(loss);\r\n\r\n    q(\"#sum_moved\").textContent = fmt(moved) + \" lbs\";\r\n    q(\"#sum_loss\").textContent = fmt(loss) + \" lbs\";\r\n    q(\"#sum_co2e\").textContent = fmt(co2e) + \" MTCO\u2082e\";\r\n  }\r\n\r\n  function renderAssets(){\r\n    q(\"#a_list\").innerHTML = table(\r\n      [\"Asset\",\"Site\",\"OEM\",\"kV\",\"Compartment\",\"Nameplate SF\u2086 (lbs)\",\"\"],\r\n      state.assets.map(a=>[\r\n        esc(a.name), esc(a.site||\"\"), esc(a.oem||\"\"), a.voltage_kv??\"\", esc(a.compartment||\"\"), a.nameplate_lbs??\"\",\r\n        delBtn(()=>{state.assets=state.assets.filter(x=>x.id!==a.id); save();})\r\n      ])\r\n    );\r\n  }\r\n\r\n  function renderCylinders(){\r\n    const balances = cylinderBalances();\r\n    const now = new Date().toISOString().slice(0,10);\r\n\r\n    q(\"#c_list\").innerHTML = table(\r\n      [\"Serial\",\"Owner\",\"Rated cap (lbs)\",\"Tare\",\"Gross\",\"Net (Gross\u2212Tare)\",\"Inventory (tx)\",\"Hydro due\",\"\"],\r\n      state.cylinders.map(c=>{\r\n        const inv = balances[c.id] || 0;\r\n        const hydro = c.hydro_due || \"\";\r\n        const hydroBad = hydro && hydro < now;\r\n        const hydroCell = hydro ? (hydroBad ? `<span style=\"color:#b00020;font-weight:700;\">${esc(hydro)} (expired)<\/span>` : esc(hydro)) : \"\";\r\n\r\n        return [\r\n          esc(c.serial), esc(c.owner||\"\"), c.capacity_lbs??\"\",\r\n          c.tare_lbs??\"\", c.gross_lbs??\"\", (c.net_lbs??\"\"),\r\n          fmt(inv),\r\n          hydroCell,\r\n          delBtn(()=>{state.cylinders=state.cylinders.filter(x=>x.id!==c.id); save();})\r\n        ];\r\n      })\r\n    );\r\n  }\r\n\r\n  function renderTx(){\r\n    const cylMap = Object.fromEntries(state.cylinders.map(c=>[c.id,c.serial]));\r\n    const aMap = Object.fromEntries(state.assets.map(a=>[a.id,a.name]));\r\n    q(\"#t_list\").innerHTML = table(\r\n      [\"Date\",\"Type\",\"From\",\"To\",\"Asset\",\"lbs\",\"CO\u2082e (MT)\",\"Notes\",\"\"],\r\n      state.tx.slice().reverse().map(t=>[\r\n        esc(t.date), esc(t.type),\r\n        esc(t.from?cylMap[t.from]:\"\"),\r\n        esc(t.to?cylMap[t.to]:\"\"),\r\n        esc(t.asset?aMap[t.asset]:\"\"),\r\n        fmt(t.lbs),\r\n        fmt(t.co2e_mt||0),\r\n        esc(t.note||\"\"),\r\n        delBtn(()=>{state.tx=state.tx.filter(x=>x.id!==t.id); save();})\r\n      ])\r\n    );\r\n  }\r\n\r\n  function renderSelects(){\r\n    const cylOpts = ['<option value=\"\">(none)<\/option>'].concat(\r\n      state.cylinders.map(c=>`<option value=\"${c.id}\">${escAttr(c.serial)}<\/option>`)\r\n    ).join(\"\");\r\n    t_cyl_from.innerHTML = cylOpts;\r\n    t_cyl_to.innerHTML = cylOpts;\r\n\r\n    const assetOpts = ['<option value=\"\">(none)<\/option>'].concat(\r\n      state.assets.map(a=>`<option value=\"${a.id}\">${escAttr(a.name)}<\/option>`)\r\n    ).join(\"\");\r\n    t_asset.innerHTML = assetOpts;\r\n  }\r\n\r\n  function cylinderBalances(){\r\n    const bal = {};\r\n    state.cylinders.forEach(c=>bal[c.id]=0);\r\n    state.tx.forEach(t=>{\r\n      const lbs = Math.abs(t.lbs || 0);\r\n      if(t.type===\"fill\"){ if(t.from) bal[t.from]-=lbs; }\r\n      if(t.type===\"recover\"){ if(t.to) bal[t.to]+=lbs; }\r\n      if(t.type===\"transfer\"){ if(t.from) bal[t.from]-=lbs; if(t.to) bal[t.to]+=lbs; }\r\n      if(t.type===\"adjust\"){\r\n        \/\/ if from specified: apply directly; else to specified: apply directly\r\n        if(t.from) bal[t.from]+= (t.lbs||0);\r\n        if(!t.from && t.to) bal[t.to]+= (t.lbs||0);\r\n      }\r\n    });\r\n    return bal;\r\n  }\r\n\r\n  function cylinderInventoryDelta(){\r\n    \/\/ net change across all cylinders from transactions\r\n    const bal = cylinderBalances();\r\n    return Object.values(bal).reduce((s,v)=>s+(v||0),0);\r\n  }\r\n\r\n  function exportCsv(){\r\n    const cylBal = cylinderBalances();\r\n    const assets = state.assets.map(a=>({\r\n      name:a.name, site:a.site||\"\", oem:a.oem||\"\",\r\n      voltage_kv:a.voltage_kv??\"\", compartment:a.compartment||\"\",\r\n      nameplate_lbs:a.nameplate_lbs??\"\"\r\n    }));\r\n\r\n    const cylinders = state.cylinders.map(c=>({\r\n      serial:c.serial, owner:c.owner||\"\", capacity_lbs:c.capacity_lbs??\"\",\r\n      tare_lbs:c.tare_lbs??\"\", gross_lbs:c.gross_lbs??\"\", net_lbs:c.net_lbs??\"\",\r\n      inventory_from_tx_lbs:(cylBal[c.id]||0),\r\n      hydro_due:c.hydro_due||\"\"\r\n    }));\r\n\r\n    const tx = state.tx.map(t=>t);\r\n\r\n    download(`gasquip_sf6_tracker_assets.csv`, toCsv(assets));\r\n    download(`gasquip_sf6_tracker_cylinders.csv`, toCsv(cylinders));\r\n    download(`gasquip_sf6_tracker_transactions.csv`, toCsv(tx));\r\n  }\r\n\r\n  function toCsv(rows){\r\n    if(!rows.length) return \"\";\r\n    const cols = Object.keys(rows[0]);\r\n    const lines = [cols.join(\",\")];\r\n    rows.forEach(r=>lines.push(cols.map(k=>csvVal(r[k])).join(\",\")));\r\n    return lines.join(\"\\n\");\r\n  }\r\n  function csvVal(v){\r\n    if(v===null||v===undefined) return \"\";\r\n    const s=String(v).replaceAll('\"','\"\"');\r\n    return `\"${s}\"`;\r\n  }\r\n  function download(filename, content){\r\n    const blob=new Blob([content],{type:\"text\/csv;charset=utf-8\"});\r\n    const url=URL.createObjectURL(blob);\r\n    const a=document.createElement(\"a\");\r\n    a.href=url; a.download=filename;\r\n    document.body.appendChild(a); a.click(); a.remove();\r\n    URL.revokeObjectURL(url);\r\n  }\r\n\r\n  function table(headers, rows){\r\n    return `<table><thead><tr>${headers.map(h=>`<th>${h}<\/th>`).join(\"\")}<\/tr><\/thead><tbody>${\r\n      rows.map(r=>`<tr>${r.map(c=>`<td>${c}<\/td>`).join(\"\")}<\/tr>`).join(\"\")\r\n    }<\/tbody><\/table>`;\r\n  }\r\n  function delBtn(onClick){\r\n    const id=\"btn_\"+uid();\r\n    setTimeout(()=>{ const el=document.getElementById(id); if(el) el.onclick=onClick; },0);\r\n    return `<button id=\"${id}\" class=\"gqbtn gqbtn-danger\">Delete<\/button>`;\r\n  }\r\n\r\n  function q(sel){ return document.querySelector(\"#gq-sf6-tool \"+sel) || document.querySelector(sel); }\r\n  function esc(s){ return String(s??\"\").replaceAll(\"&\",\"&amp;\").replaceAll(\"<\",\"&lt;\").replaceAll(\">\",\"&gt;\"); }\r\n  function escAttr(s){ return esc(s).replaceAll('\"',\"&quot;\"); }\r\n  function fmt(x){ return (Math.round((Number(x)+Number.EPSILON)*100)\/100).toFixed(2); }\r\n\r\n  refresh();\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>GasQuip SF\u2086 Tracker Lite Track SF\u2086 inventory, movements, and CO\u2082e. Export CSV after email capture. Total SF\u2086 moved 0.00 lbs Estimated cylinder loss (proxy emissions) 0.00 lbs Estimated CO\u2082e 0.00 MTCO\u2082e Export CSV Reset Assets Cylinders Transactions Add Asset Add Asset Assets Add Cylinder Add Cylinder If you enter Tare + Gross, we compute Net [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-13368","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SF6 Reporting<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gasquip.com\/fr\/sf6-reporting\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SF6 Reporting\" \/>\n<meta property=\"og:description\" content=\"GasQuip SF\u2086 Tracker Lite Track SF\u2086 inventory, movements, and CO\u2082e. Export CSV after email capture. Total SF\u2086 moved 0.00 lbs Estimated cylinder loss (proxy emissions) 0.00 lbs Estimated CO\u2082e 0.00 MTCO\u2082e Export CSV Reset Assets Cylinders Transactions Add Asset Add Asset Assets Add Cylinder Add Cylinder If you enter Tare + Gross, we compute Net [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gasquip.com\/fr\/sf6-reporting\/\" \/>\n<meta property=\"og:site_name\" content=\"GasQuip\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/gasquiptx\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-11T21:19:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-11T21:31:10+00:00\" \/>\n<meta name=\"author\" content=\"Luke Benden\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Luke Benden\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/\"},\"author\":{\"name\":\"Luke Benden\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/#\\\/schema\\\/person\\\/6f7f2b2ccf37d227b39a8643b958a3cf\"},\"headline\":\"SF6 Reporting\",\"datePublished\":\"2026-02-11T21:19:00+00:00\",\"dateModified\":\"2026-02-11T21:31:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/\"},\"wordCount\":114,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/gasquip.com\\\/#organization\"},\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/\",\"url\":\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/\",\"name\":\"SF6 Reporting\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gasquip.com\\\/#website\"},\"datePublished\":\"2026-02-11T21:19:00+00:00\",\"dateModified\":\"2026-02-11T21:31:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/sf6-reporting\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gasquip.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SF6 Reporting\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/#website\",\"url\":\"https:\\\/\\\/gasquip.com\\\/\",\"name\":\"GasQuip\",\"description\":\"SF6 Gas Equipment\",\"publisher\":{\"@id\":\"https:\\\/\\\/gasquip.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gasquip.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/#organization\",\"name\":\"GasQuip\",\"url\":\"https:\\\/\\\/gasquip.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/gasquip.com\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/Logo-Original-PNG-Cropped.png\",\"contentUrl\":\"https:\\\/\\\/gasquip.com\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/Logo-Original-PNG-Cropped.png\",\"width\":2819,\"height\":702,\"caption\":\"GasQuip\"},\"image\":{\"@id\":\"https:\\\/\\\/gasquip.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/gasquiptx\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/gasquip.com\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCUCicTtyc2zeJMcj5NMA0Ww\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/gasquip.com\\\/#\\\/schema\\\/person\\\/6f7f2b2ccf37d227b39a8643b958a3cf\",\"name\":\"Luke Benden\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6572a10e4f78b5b8da7eac404f75201e0eeace69be756edae016d8b45e02b445?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6572a10e4f78b5b8da7eac404f75201e0eeace69be756edae016d8b45e02b445?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6572a10e4f78b5b8da7eac404f75201e0eeace69be756edae016d8b45e02b445?s=96&d=mm&r=g\",\"caption\":\"Luke Benden\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SF6 Reporting","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gasquip.com\/fr\/sf6-reporting\/","og_locale":"fr_FR","og_type":"article","og_title":"SF6 Reporting","og_description":"GasQuip SF\u2086 Tracker Lite Track SF\u2086 inventory, movements, and CO\u2082e. Export CSV after email capture. Total SF\u2086 moved 0.00 lbs Estimated cylinder loss (proxy emissions) 0.00 lbs Estimated CO\u2082e 0.00 MTCO\u2082e Export CSV Reset Assets Cylinders Transactions Add Asset Add Asset Assets Add Cylinder Add Cylinder If you enter Tare + Gross, we compute Net [&hellip;]","og_url":"https:\/\/gasquip.com\/fr\/sf6-reporting\/","og_site_name":"GasQuip","article_publisher":"https:\/\/www.facebook.com\/gasquiptx","article_published_time":"2026-02-11T21:19:00+00:00","article_modified_time":"2026-02-11T21:31:10+00:00","author":"Luke Benden","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Luke Benden","Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gasquip.com\/sf6-reporting\/#article","isPartOf":{"@id":"https:\/\/gasquip.com\/sf6-reporting\/"},"author":{"name":"Luke Benden","@id":"https:\/\/gasquip.com\/#\/schema\/person\/6f7f2b2ccf37d227b39a8643b958a3cf"},"headline":"SF6 Reporting","datePublished":"2026-02-11T21:19:00+00:00","dateModified":"2026-02-11T21:31:10+00:00","mainEntityOfPage":{"@id":"https:\/\/gasquip.com\/sf6-reporting\/"},"wordCount":114,"commentCount":0,"publisher":{"@id":"https:\/\/gasquip.com\/#organization"},"articleSection":["Uncategorized"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gasquip.com\/sf6-reporting\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gasquip.com\/sf6-reporting\/","url":"https:\/\/gasquip.com\/sf6-reporting\/","name":"SF6 Reporting","isPartOf":{"@id":"https:\/\/gasquip.com\/#website"},"datePublished":"2026-02-11T21:19:00+00:00","dateModified":"2026-02-11T21:31:10+00:00","breadcrumb":{"@id":"https:\/\/gasquip.com\/sf6-reporting\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gasquip.com\/sf6-reporting\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gasquip.com\/sf6-reporting\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gasquip.com\/"},{"@type":"ListItem","position":2,"name":"SF6 Reporting"}]},{"@type":"WebSite","@id":"https:\/\/gasquip.com\/#website","url":"https:\/\/gasquip.com\/","name":"GazQuip","description":"\u00c9quipement de gaz SF6","publisher":{"@id":"https:\/\/gasquip.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gasquip.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/gasquip.com\/#organization","name":"GazQuip","url":"https:\/\/gasquip.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/gasquip.com\/#\/schema\/logo\/image\/","url":"https:\/\/gasquip.com\/wp-content\/uploads\/2020\/10\/Logo-Original-PNG-Cropped.png","contentUrl":"https:\/\/gasquip.com\/wp-content\/uploads\/2020\/10\/Logo-Original-PNG-Cropped.png","width":2819,"height":702,"caption":"GasQuip"},"image":{"@id":"https:\/\/gasquip.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/gasquiptx","https:\/\/www.linkedin.com\/company\/gasquip.com","https:\/\/www.youtube.com\/channel\/UCUCicTtyc2zeJMcj5NMA0Ww"]},{"@type":"Person","@id":"https:\/\/gasquip.com\/#\/schema\/person\/6f7f2b2ccf37d227b39a8643b958a3cf","name":"Luc Benden","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/6572a10e4f78b5b8da7eac404f75201e0eeace69be756edae016d8b45e02b445?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6572a10e4f78b5b8da7eac404f75201e0eeace69be756edae016d8b45e02b445?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6572a10e4f78b5b8da7eac404f75201e0eeace69be756edae016d8b45e02b445?s=96&d=mm&r=g","caption":"Luke Benden"}}]}},"_links":{"self":[{"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/posts\/13368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/comments?post=13368"}],"version-history":[{"count":7,"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/posts\/13368\/revisions"}],"predecessor-version":[{"id":13375,"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/posts\/13368\/revisions\/13375"}],"wp:attachment":[{"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/media?parent=13368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/categories?post=13368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gasquip.com\/fr\/wp-json\/wp\/v2\/tags?post=13368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}