WS2000 Site Edition · Модуль БУРЕНИЕ
Назад в БУРЕНИЕ Рассчитать проект
EDIT: действия ввода/управления AUTO: проверка/расчет/генерация

Well Data

Общие данные

Локация и контроль доступа

Оборудование бурового станка

Наземное оборудование (м и см)

ЭлементЭкв. длина (м)Экв. ID (см)
Стояк
РВД
Вертлюг
Келли / верхний привод

Буровые насосы

МодельТипХод (мм)Диаметр штока (мм)
1
2
3

Емкости бурового раствора

Название емкостиПрямой замерФормаОбъем (м3)
1
2
3
4

Оборудование очистки твердой фазы

ТипПроизводительМодельКонусов, штРазмер конусов (дюйм)Сит, штСхема сит
1
2
3

Well Casing & Sections

Обсадные колонны

StringOD (mm)ID (mm)Shoe TVD (m)
Conductor
Intermediate
Production
Liner

Интервалы ствола

SectionFrom (m)To (m)Hole OD (mm)
16"
12-1/4"
8-3/4"
6-1/8"

Lithology

Интервалы пород

FromToLithologyFormation
Для Level I рекомендуется максимальная детализация литологии.

Well Surveys

Точки траектории

MD (m)Inclination (deg)Azimuth (deg)TVD (m)

Well Testings

Испытание пласта/интервала

История тестов

DateTypeStatus
2026-02-15Leak-offPASS
2026-02-19Flow testPASS
2026-02-22Build-upWATCH

Bit Records

Текущий рейс долота

КНБК (BHA)

Элементы КНБК

ТипДлинаOD (мм)ID (мм)
1
2
3
4

Гидравлика на долоте

Кол-воДиаметр насадки (мм)
Формула TFA в метрической системе: $TFA = \frac{\pi}{4} \times \sum(n \times d^2)$, где $d$ в мм. Это эквивалент исходной формулы из WS для расчета суммарной площади насадок.

Очистка ствола

Параметры (автоматический расчет)

Формула расхода$Q = \frac{hy\_q}{60}$
Формула скорости струи$V = \frac{Q}{A}$
Перепад на долоте$\Delta P = \frac{\rho}{2}\left(\frac{Q}{C_d A}\right)^2$
Давление на насосе$P_{pump}=\Delta P_{bit}+\Delta P_{ann}$
Удельная гидромощность$HHSI_{metric}=\frac{\Delta P_{bit}\cdot Q}{TFA}$
Сила удара струи$F = \rho QV$

Fluid Sets & Properties

Суточные отчеты по свойствам раствора

ВремяТип раствора
Тип раствора и текущая запись задаются прямо здесь, как в журнале ежедневных измерений.
Общие свойства Свойства водной основы Дополнительные свойства

Показания реометра

СкоростьПоказание
θ600
θ300
θ200
θ100
θ6
θ3

Концентрация продуктов

ПродуктКонц.Ед.
Baritekg/m3
Emulsifierkg/m3
Limekg/m3

Свойства водной основы

Содержание известииз концентрации извести
Скорректированная твердая фаза100 - Retort Oil - Retort Water
HGSпо концентрации утяжелителя и его SG
LGSCorrected Solids - HGS
ASGсредний SG твердой фазы

Дополнительные свойства

ПараметрЗначениеЕд. изм.
Карбонаты [PF/MF]
Tau 0
K [HB]
n [HB]

Product Lists

Каталог компонентов

Продукт Назначение Ед. SG * Упаковка Вес упаковки Цена за тонну, р Цена за ед., р

Time Breakdown

Операции на буровой

Прочие операции

Авторасчет

Время вращения долотаБурение + Разбуривание + Керн + ННБ
Средняя ROPМетры бурения / (Время вращения - Разбуривание)

Inventory & Costing

Inventory продуктов

Продукт Упаковка Старт. кол-во Поступило Цена прихода, р Использ./потери Прочее списание Кон. кол-во Стоимость за отчет

Дополнительные расходы за сутки

Статья расхода Fluid Set Количество Единицы Цена за ед., р Стоимость за сутки, р Разбивка затрат

Volumes / Losses & Gains

Volumes

Losses & Gains

Визуализация емкостей

Гидравлика

Буровые насосы

ТипМодельЛайнер (мм)КПД (%)л/ходход/минл/минБустер

Параметры

ECD

Время циркуляции / ходы

Потери давления

Гидравлика на долоте

Параметры раствора

Затрубные скорости

Комментарий

Давление циркуляции и суммарные потери давления должны практически совпадать. Верхний предел задается полем «Максимальное давление», а зеленые поля пересчитываются из насосов, геометрии, КНБК и параметров раствора.

Zero Defects Tracking

Контроль дефектов

Критерии

RuleTarget
Critical issues0
Overdue actions0
Open issues trendNon-increasing

Mud Reports

Параметры суточного рапорта

Сводка по готовности

Рапорт собирается автоматически из Well Data, Fluid Sets & Properties, Time Breakdown, Inventory & Costing, Volumes / Losses & Gains, Hydraulics и текущих емкостей.
Если автоматический PDF недоступен в браузере, кнопка экспорта откроет печатную версию, которую можно сохранить как PDF через системный диалог.

Готовый суточный рапорт

Нажмите «Собрать суточный рапорт», чтобы сформировать сводный лист по буровым растворам и затем скачать его в PDF.

Post Well Audit

Intervals recap

IntervalFromToCost USD
12-1/4" OH
8-1/2" OH

Conclusions

Data Management

Exchange Data with Server

Backup / Restore

Имитация операций управления данными WELLSIGHT: server exchange, восстановление, контроль статуса передачи.

Print Manager

Пакет печати

Точки запуска Report Manager

ЭкранДоступ
Well DataЧерез верхнюю панель
Mud ReportsКнопка Open Report Manager
Post Well AuditКнопка Launch в модуле
Print ManagerLaunch Report Manager

Report Manager

Экран 1: Task Selection

Экран 2: Report Type Selection

Экран 3: Report Selection

Экран 4: Results

Результаты генерации, путь сохранения и предпросмотр.

Сохраненные шаблоны

Предпросмотр

Нет данных для preview.
${sheet.outerHTML} `); w.document.close(); w.focus(); } function loadExternalScript(src){ return new Promise((resolve,reject)=>{ const existing=[...document.querySelectorAll('script')].find((item)=>item.src===src); if(existing){ if(existing.dataset.loaded==='1') resolve(); else existing.addEventListener('load',()=>resolve(),{once:true}); return; } const script=document.createElement('script'); script.src=src; script.async=true; script.onload=()=>{ script.dataset.loaded='1'; resolve(); }; script.onerror=()=>reject(new Error(`Failed to load ${src}`)); document.head.appendChild(script); }); } async function ensureMudReportPdfLibs(){ if(!(window.html2canvas && window.jspdf && window.jspdf.jsPDF)){ await loadExternalScript('https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js'); await loadExternalScript('https://cdn.jsdelivr.net/npm/jspdf@2.5.1/dist/jspdf.umd.min.js'); } } async function downloadMudReportPdf(){ const data=buildMudReportData(); const reportId=data.dmrId || 'calculator'; renderMudReportPreview(data); const sheet=el('mr_preview_sheet'); if(!sheet){ alert('Сначала соберите суточный рапорт.'); return; } const host=document.createElement('div'); host.style.position='fixed'; host.style.left='-20000px'; host.style.top='0'; host.style.width='1120px'; host.style.background='#ffffff'; host.style.padding='16px'; host.appendChild(sheet.cloneNode(true)); document.body.appendChild(host); try { await ensureMudReportPdfLibs(); const canvas=await window.html2canvas(host,{scale:2,backgroundColor:'#ffffff',useCORS:true,logging:false}); const imgData=canvas.toDataURL('image/png'); const pdf=new window.jspdf.jsPDF({orientation:'p',unit:'mm',format:'a4'}); const pageWidth=pdf.internal.pageSize.getWidth(); const pageHeight=pdf.internal.pageSize.getHeight(); const margin=6; const imgWidth=pageWidth-(margin*2); const imgHeight=(canvas.height*imgWidth)/canvas.width; let heightLeft=imgHeight; let position=margin; pdf.addImage(imgData,'PNG',margin,position,imgWidth,imgHeight,undefined,'FAST'); heightLeft-=pageHeight-(margin*2); while(heightLeft>0){ position=margin-(imgHeight-heightLeft); pdf.addPage(); pdf.addImage(imgData,'PNG',margin,position,imgWidth,imgHeight,undefined,'FAST'); heightLeft-=pageHeight-(margin*2); } const fileName=`mud_report_${sanitizeFileNamePart(reportId)}_${sanitizeFileNamePart(data.reportDate)}_${sanitizeFileNamePart(data.wellDisplay)}.pdf`; pdf.save(fileName); } catch(error){ console.error(error); alert('Не удалось автоматически сформировать PDF. Будет открыта печатная версия, которую можно сохранить в PDF через системный диалог.'); openMudReportPrintView(); } finally { host.remove(); } } function buildMudReport(){ const data=buildMudReportData(); el('mr_util_auto').value=data.treatmentRatio.toFixed(1); el('mr_products_received_auto').value=data.receivedTotal.toFixed(3); el('mr_products_used_auto').value=data.usedTotal.toFixed(3); el('mr_daily_cost_auto').value=data.dailyCost; el('mr_balance_auto').value=data.volumeBalance; el('mr_status_auto').value=data.status; renderMudReportPreview(data); const out=el('mr_out'); out.style.display=''; out.innerHTML= row('Дата рапорта',data.reportDate)+ row('Смена',data.shift)+ row('Коэффициент обработки',data.treatmentRatio.toFixed(1),'%')+ row('Поступило материалов',data.receivedTotal.toFixed(3))+ row('Израсходовано материалов',data.usedTotal.toFixed(3))+ row('Суточные затраты',data.dailyCost)+ `
Статус рапорта${data.status}
`; } function buildAudit(){ const f1=fn('au_f1'),t1=fn('au_t1'),c1=fn('au_c1'),f2=fn('au_f2'),t2=fn('au_t2'),c2=fn('au_c2'); const m=(t1-f1)+(t2-f2), c=c1+c2; state.auditReady=(m>0 && c>0); el('au_m_auto').value=m.toFixed(1); el('au_total_auto').value=c.toFixed(2); el('au_cpm_auto').value=(c/Math.max(1,m)).toFixed(2); const out=el('audit_out'); out.style.display=''; out.innerHTML=row('Interval meters',m.toFixed(1),'m')+row('Total cost',c.toFixed(2),'USD')+row('Avg cost',(c/Math.max(1,m)).toFixed(2),'USD/m'); const p=el('pm_out'); if(p){ p.style.display=''; p.innerHTML=row('Post Well Audit','Prepared')+row('Print package',fv('pm_pack')); } } function exchangeServer(action){ const out=el('dm_out'); out.style.display=''; out.innerHTML=row('Action',action)+row('Profile',fv('dm_profile'))+row('Package',fv('dm_pkg'))+row('Status','SUCCESS')+row('Timestamp',new Date().toLocaleString()); el('dm_status').value='Ready'; el('dm_last').value=new Date().toLocaleString(); } function exportDIMS(){ const payload={ action:'Export to DIMS', well:fv('well_name'), reportType:el('rp_type')?fv('rp_type'):'Daily Report', generatedAt:new Date().toISOString() }; downloadBlob(JSON.stringify(payload,null,2),'application/json','dims_export_payload.json'); const out=el('dm_out'); out.style.display=''; out.innerHTML=row('Action','Export to DIMS')+row('Status','QUEUED'); } function backupData(){ downloadBlob(JSON.stringify(gatherState(),null,2),'application/json','ws2000_backup.json'); } function restoreData(){ loadState(); } function runQC(){ const volOk=(state.volDelta!==null&&state.docDelta!==null&&Math.abs(state.volDelta-state.docDelta)<0.01); const costOk=(state.costTotal!==null && state.costTotal>0); const auditOk=state.auditReady && volOk && costOk; const gate=getAutoGateStatus(); const autoGateOk=gate.ok; applyAutoGateHighlights(gate); const p=el('qcPanel'); p.innerHTML = `
Well mandatory${state.wellOk?'PASS':'FAIL'}
`+ `
Volume reconciliation${volOk?'PASS':'FAIL'}
`+ `
Cost consistency${costOk?'PASS':'PENDING'}
`+ `
Audit readiness${auditOk?'READY':'IN PROGRESS'}
`+ `
AUTO cells gate${autoGateOk?'PASS':'FAIL'}
`; return {volOk,costOk,auditOk,autoGateOk}; } function getAutoGateStatus(){ const checks=[ {name:'MD/TVD check', fieldId:'well_status_auto', ok:fv('well_status_auto')==='PASS'}, {name:'Testing status', fieldId:'wt_status_auto', ok:fv('wt_status_auto')==='PASS'}, {name:'PV status', fieldId:'fl_pv_status_auto', ok:fv('fl_pv_status_auto')==='OK'}, {name:'Product SG rule', fieldId:'pl_status_auto', ok:fv('pl_status_auto')==='PASS'}, {name:'Nozzle status', fieldId:'hy_noz_auto', ok:fv('hy_noz_auto')==='OK'}, {name:'Zero Defects status', fieldId:'zd_status_auto', ok:fv('zd_status_auto')==='PASS'} ]; const invDiff=Math.abs(Number(fv('inv_diff_auto')||0)); const lgDiff=Math.abs(Number(fv('lg_diff_auto')||999)); checks.push({name:'Inventory difference', fieldId:'inv_diff_auto', ok:invDiff<0.01}); checks.push({name:'L/G reconcile difference', fieldId:'lg_diff_auto', ok:lgDiff<0.01}); const failed=checks.filter(x=>!x.ok).map(x=>x.name); const failedFieldIds=checks.filter(x=>!x.ok).map(x=>x.fieldId).filter(Boolean); return {ok:failed.length===0,failed,failedFieldIds}; } function applyAutoGateHighlights(gate){ document.querySelectorAll('input.ro.fail').forEach(x=>x.classList.remove('fail')); (gate.failedFieldIds||[]).forEach(id=>{ const x=el(id); if(x) x.classList.add('fail'); }); } function gatherState(){ const ids=[...document.querySelectorAll('input,select,textarea')].map(x=>x.id).filter(Boolean); const data={}; ids.forEach(id=>{ const x=el(id); data[id]=x.type==='checkbox'?x.checked:x.value; }); data._meta={savedAt:new Date().toISOString(),state,rigPitCount:getRigPitRowCount(),rigSolidCount:getRigSolidControlRowCount(),bhaRowCount:getBhaRowCount(),fluidAdditionalCount:getFluidAdditionalRowCount(),inventoryRowCount:getInventoryRowCount(),additionalChargeRowCount:getAdditionalChargeRowCount()}; return data; } function applyState(data){ const meta=data._meta||{}; const rigPitCount=Number(meta.rigPitCount||0); const rigSolidCount=Number(meta.rigSolidCount||0); const bhaRowCount=Number(meta.bhaRowCount||0); const fluidAdditionalCount=Number(meta.fluidAdditionalCount||0); const inventoryRowCount=Number(meta.inventoryRowCount||0); const additionalChargeRowCount=Number(meta.additionalChargeRowCount||0); while(getRigPitRowCount(){ if(id==='_meta') return; const x=el(id); if(!x) return; if(x.type==='checkbox') x.checked=!!data[id]; else x.value=data[id]; }); if(meta.state){ Object.assign(state,meta.state); } ensureVolumePitVisualization(); } function saveState(){ const snapshot=JSON.stringify(gatherState()); localStorage.setItem(KEY,snapshot); if(!isStandaloneCalculator && dmrIndex===1) localStorage.setItem(LEGACY_KEY,snapshot); alert(isStandaloneCalculator ? 'Расчетная программа сохранена.' : `${dmrId} сохранен. Следующий DMR откроется с этими данными.`); } function loadState(){ loadStateFromCandidates(getLoadCandidates(true), false); } function exportJSON(){ const data=gatherState(); const blob=new Blob([JSON.stringify(data,null,2)],{type:'application/json'}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download='ws2000_site_edition_export.json'; a.click(); URL.revokeObjectURL(a.href); } function getTemplates(){ const raw=localStorage.getItem(TEMPLATE_KEY); if(!raw){ const legacyRaw=localStorage.getItem(LEGACY_TEMPLATE_KEY); if(!legacyRaw) return []; try { return JSON.parse(legacyRaw); } catch(e){ return []; } } try { return JSON.parse(raw); } catch(e){ return []; } } function setTemplates(list){ localStorage.setItem(TEMPLATE_KEY, JSON.stringify(list)); } function refreshTemplateList(){ const sel=el('rp_template_list'); if(!sel) return; const list=getTemplates(); sel.innerHTML=''; list.forEach((t,idx)=>{ const o=document.createElement('option'); o.value=String(idx); o.textContent=`${t.name} · ${t.type} · ${t.format} · ${t.lang}`; sel.appendChild(o); }); if(list.length===0){ const o=document.createElement('option'); o.value=''; o.textContent='(нет сохраненных шаблонов)'; sel.appendChild(o); } } function saveTemplate(){ const name=fv('rp_template_name').trim() || 'Template'; const tpl={ name, type:fv('rp_type'), format:fv('rp_format'), lang:fv('rp_lang'), savedAt:new Date().toISOString() }; const list=getTemplates(); const existing=list.findIndex(t=>t.name===name); if(existing>=0) list[existing]=tpl; else list.push(tpl); setTemplates(list); refreshTemplateList(); const out=el('rp_out'); out.style.display=''; out.innerHTML=row('Template',name)+row('Status','Saved'); } function applyTemplate(){ const sel=el('rp_template_list'); const idx=Number(sel.value); const list=getTemplates(); if(!isFinite(idx) || idx<0 || idx>=list.length) return; const t=list[idx]; el('rp_template_name').value=t.name; el('rp_type').value=t.type; el('rp_format').value=t.format; el('rp_lang').value=t.lang; const p=el('rp_preview'); p.innerHTML=row('Name',t.name)+row('Type',t.type)+row('Format',t.format)+row('Language',t.lang)+row('Saved',new Date(t.savedAt).toLocaleString()); } function deleteTemplate(){ const sel=el('rp_template_list'); const idx=Number(sel.value); const list=getTemplates(); if(!isFinite(idx) || idx<0 || idx>=list.length) return; list.splice(idx,1); setTemplates(list); refreshTemplateList(); el('rp_preview').innerHTML='Шаблон удален.'; } function exportTemplates(){ const list=getTemplates(); const blob=new Blob([JSON.stringify(list,null,2)],{type:'application/json'}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download='ws2000_templates.json'; a.click(); URL.revokeObjectURL(a.href); } function importTemplates(event){ const f=event.target.files && event.target.files[0]; if(!f) return; const r=new FileReader(); r.onload=()=>{ try { const imported=JSON.parse(String(r.result)); if(!Array.isArray(imported)) throw new Error('invalid'); const merged=[...getTemplates()]; imported.forEach(t=>{ if(!t || !t.name) return; const ix=merged.findIndex(x=>x.name===t.name); if(ix>=0) merged[ix]=t; else merged.push(t); }); setTemplates(merged); refreshTemplateList(); el('rp_preview').innerHTML=`Импортировано шаблонов: ${imported.length}`; } catch(e){ alert('Ошибка импорта шаблонов. Проверьте JSON формат.'); } }; r.readAsText(f,'utf-8'); event.target.value=''; } function collectReportData(){ return { well: fv('well_name'), api: fv('well_api'), operator: fv('well_operator'), md: fv('well_md'), tvd: fv('well_tvd'), fluid: fv('fl_type'), mudWeight: fv('fl_rho'), totalCost: state.costTotal ?? 'N/A', volumeDelta: state.volDelta ?? 'N/A', documentedDelta: state.docDelta ?? 'N/A', summary: fv('au_sum'), recommendations: fv('au_rec'), type: el('rp_type') ? fv('rp_type') : 'Daily Report', format: el('rp_format') ? fv('rp_format') : 'TXT', lang: el('rp_lang') ? fv('rp_lang') : 'Русский' }; } function reportLines(d){ return [ 'WS2000 Site Edition Report', `Type: ${d.type}`, `Language: ${d.lang}`, `Well: ${d.well}`, `API: ${d.api}`, `Operator: ${d.operator}`, `MD/TVD: ${d.md}/${d.tvd} m`, `Fluid: ${d.fluid}, MW=${d.mudWeight}`, `Cost Total USD: ${d.totalCost}`, `Volume delta: ${d.volumeDelta}; Documented: ${d.documentedDelta}`, `Audit summary: ${d.summary}`, `Recommendations: ${d.recommendations}` ]; } function downloadBlob(content, mime, fileName){ const blob=new Blob([content],{type:mime}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download=fileName; a.click(); URL.revokeObjectURL(a.href); } function exportCSV(d){ const rows=[ ['Field','Value'], ['Type',d.type],['Language',d.lang],['Well',d.well],['API',d.api],['Operator',d.operator], ['MD',d.md],['TVD',d.tvd],['Fluid',d.fluid],['MudWeight',d.mudWeight], ['TotalCostUSD',d.totalCost],['VolumeDelta',d.volumeDelta],['DocumentedDelta',d.documentedDelta], ['Summary',d.summary],['Recommendations',d.recommendations] ]; const esc=v=>`"${String(v).replace(/"/g,'""')}"`; const csv=rows.map(r=>r.map(esc).join(',')).join('\n'); downloadBlob(csv,'text/csv;charset=utf-8','ws2000_report.csv'); } function exportXLS(d){ const html=`${[ ['Type',d.type],['Language',d.lang],['Well',d.well],['API',d.api],['Operator',d.operator], ['MD',d.md],['TVD',d.tvd],['Fluid',d.fluid],['MudWeight',d.mudWeight], ['TotalCostUSD',d.totalCost],['VolumeDelta',d.volumeDelta],['DocumentedDelta',d.documentedDelta], ['Summary',d.summary],['Recommendations',d.recommendations] ].map(r=>``).join('')}
FieldValue
${r[0]}${String(r[1]).replace(/
`; downloadBlob(html,'application/vnd.ms-excel','ws2000_report.xls'); } function printPDF(d){ const w=window.open('','_blank'); if(!w){ alert('Разрешите pop-up для печати отчета.'); return; } w.document.write(`WS2000 Report

WS2000 Site Edition Report

${[ ['Type',d.type],['Language',d.lang],['Well',d.well],['API',d.api],['Operator',d.operator],['MD/TVD',d.md+'/'+d.tvd], ['Fluid',d.fluid],['Mud Weight',d.mudWeight],['Total Cost USD',d.totalCost],['Volume Delta',d.volumeDelta], ['Documented Delta',d.documentedDelta],['Summary',d.summary],['Recommendations',d.recommendations] ].map(r=>``).join('')}
FieldValue
${r[0]}${String(r[1]).replace(/
`); w.document.close(); w.focus(); w.print(); } function generateReport(){ const qc=runQC(); const gate=getAutoGateStatus(); if(!state.wellOk || !qc.volOk || !qc.costOk || !qc.auditOk || !gate.ok){ const details=gate.failed.length?`\nAUTO FAIL: ${gate.failed.join(', ')}`:''; alert('Отчет заблокирован: проверьте mandatory fields, Volumes/Losses, Costing/Audit и AUTO-ячейки.'+details); return; } const d=collectReportData(); const fmt=(d.format||'TXT').toUpperCase(); const lines=reportLines(d); if(fmt==='CSV') exportCSV(d); else if(fmt==='XLS') exportXLS(d); else if(fmt==='PRINT-PDF') printPDF(d); else downloadBlob(lines.join('\n'),'text/plain;charset=utf-8','ws2000_site_report.txt'); if(el('rp_preview')){ el('rp_preview').innerHTML = row('Last generated',new Date().toLocaleString()) + row('Type',d.type) + row('Format',d.format) + row('Language',d.lang); } if(el('rp_out')){ const o=el('rp_out'); o.style.display=''; o.innerHTML = row('Generation','SUCCESS') + row('Format',d.format) + row('Report type',d.type); } } // initial load if available (function(){ setDmrContext(); placeProductListsAfterRig(); renderProductCatalogModule(); attachModuleSaveButtons(); ensureVolumePitVisualization(); applyConstructionDefaults(); loadStateFromCandidates(getLoadCandidates(true), true); if(getAdditionalChargeRowCount()===0) addAdditionalChargeRow(); refreshProductCatalogPriceRows(); calcProductList(); ensureMudReportDateValue(); if(el('auto_calc')) el('auto_calc').checked=state.autoCalc; tagButtonsByRole(); bindAutoCalc(); refreshTemplateList(); buildMudReport(); runQC(); if(state.autoCalc) scheduleAutoCalc(); })();