[{"data":1,"prerenderedAt":1251},["ShallowReactive",2],{"page-\u002Futils\u002Fgetting-started\u002Ffirst-use":3,"navigation":875},{"collection":4,"page":5},"docs_en",{"id":6,"title":7,"body":8,"description":867,"extension":868,"meta":869,"navigation":223,"path":870,"rawbody":871,"seo":872,"stem":873,"__hash__":874},"docs_en\u002Futils\u002F1.getting-started\u002F2.first-use.md","First use",{"type":9,"value":10,"toc":864},"minimark",[11,21,739,742,818,835,840,860],[12,13,14,15,20],"p",{},"This page builds a short summary of a well, the kind of block a report or a registry page shows. It uses one of the ",[16,17,19],"a",{"href":18},"\u002Fformat\u002Freference\u002Fexamples","example wells",", a 204 m supply well in crystalline rock with a pumping test, permits and meters.",[22,23,29],"pre",{"className":24,"code":25,"filename":26,"language":27,"meta":28,"style":28},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { readFile } from 'node:fs\u002Fpromises';\nimport { createRequire } from 'node:module';\nimport { calculatedWellDepth, parseWell } from '@welldot\u002Fcore';\nimport {\n  calculateHoleFillVolume,\n  calculateSubmergence,\n  formatNumber,\n  getCurrentWellStatus,\n  getLatestAquiferAnalysisField,\n  getLatestPumpingDynamicLevel,\n  getLatestStaticLevel,\n  getProductionTotal,\n  isFlowingArtesian,\n} from '@welldot\u002Futils';\n\nconst require = createRequire(import.meta.url);\nconst file =\n  require.resolve('@welldot\u002Fcore\u002Fexamples\u002Fcoluna-mg-cristalino-abastecimento.well');\nconst well = parseWell(await readFile(file, 'utf8'));\n\nconst m = (v: number | undefined) =>\n  formatNumber(v, { fractionDigits: 2, suffix: 'm' });\n\nconsole.log({\n  depth: m(well.well_depth ?? calculatedWellDepth(well)), \u002F\u002F '204.00 m'\n  gravelPack: formatNumber(calculateHoleFillVolume('gravel_pack', well), {\n    fractionDigits: 2,\n    suffix: 'm³',\n  }), \u002F\u002F '1.88 m³'\n  staticLevel: m(getLatestStaticLevel(well)), \u002F\u002F '3.94 m'\n  flowing: isFlowingArtesian(well), \u002F\u002F false\n  dynamicLevel: m(getLatestPumpingDynamicLevel(well)), \u002F\u002F '52.75 m'\n  pumpSubmergence: m(calculateSubmergence(well)), \u002F\u002F '9.25 m'\n  specificCapacity: getLatestAquiferAnalysisField(well, 'specific_capacity'), \u002F\u002F 0.291 (m²\u002Fh)\n  status: getCurrentWellStatus(well) ?? 'unknown', \u002F\u002F 'active'\n  produced: formatNumber(getProductionTotal(well).total, { suffix: 'm³' }), \u002F\u002F '1,238,406 m³'\n});\n","summary.ts","ts","",[30,31,32,68,91,120,128,137,145,153,161,169,177,185,193,201,218,225,259,270,295,331,336,371,413,418,434,467,501,513,530,543,565,584,606,628,657,685,730],"code",{"__ignoreMap":28},[33,34,37,41,45,49,52,55,58,62,65],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"s7zQu","import",[33,42,44],{"class":43},"sMK4o"," {",[33,46,48],{"class":47},"sTEyZ"," readFile",[33,50,51],{"class":43}," }",[33,53,54],{"class":39}," from",[33,56,57],{"class":43}," '",[33,59,61],{"class":60},"sfazB","node:fs\u002Fpromises",[33,63,64],{"class":43},"'",[33,66,67],{"class":43},";\n",[33,69,71,73,75,78,80,82,84,87,89],{"class":35,"line":70},2,[33,72,40],{"class":39},[33,74,44],{"class":43},[33,76,77],{"class":47}," createRequire",[33,79,51],{"class":43},[33,81,54],{"class":39},[33,83,57],{"class":43},[33,85,86],{"class":60},"node:module",[33,88,64],{"class":43},[33,90,67],{"class":43},[33,92,94,96,98,101,104,107,109,111,113,116,118],{"class":35,"line":93},3,[33,95,40],{"class":39},[33,97,44],{"class":43},[33,99,100],{"class":47}," calculatedWellDepth",[33,102,103],{"class":43},",",[33,105,106],{"class":47}," parseWell",[33,108,51],{"class":43},[33,110,54],{"class":39},[33,112,57],{"class":43},[33,114,115],{"class":60},"@welldot\u002Fcore",[33,117,64],{"class":43},[33,119,67],{"class":43},[33,121,123,125],{"class":35,"line":122},4,[33,124,40],{"class":39},[33,126,127],{"class":43}," {\n",[33,129,131,134],{"class":35,"line":130},5,[33,132,133],{"class":47},"  calculateHoleFillVolume",[33,135,136],{"class":43},",\n",[33,138,140,143],{"class":35,"line":139},6,[33,141,142],{"class":47},"  calculateSubmergence",[33,144,136],{"class":43},[33,146,148,151],{"class":35,"line":147},7,[33,149,150],{"class":47},"  formatNumber",[33,152,136],{"class":43},[33,154,156,159],{"class":35,"line":155},8,[33,157,158],{"class":47},"  getCurrentWellStatus",[33,160,136],{"class":43},[33,162,164,167],{"class":35,"line":163},9,[33,165,166],{"class":47},"  getLatestAquiferAnalysisField",[33,168,136],{"class":43},[33,170,172,175],{"class":35,"line":171},10,[33,173,174],{"class":47},"  getLatestPumpingDynamicLevel",[33,176,136],{"class":43},[33,178,180,183],{"class":35,"line":179},11,[33,181,182],{"class":47},"  getLatestStaticLevel",[33,184,136],{"class":43},[33,186,188,191],{"class":35,"line":187},12,[33,189,190],{"class":47},"  getProductionTotal",[33,192,136],{"class":43},[33,194,196,199],{"class":35,"line":195},13,[33,197,198],{"class":47},"  isFlowingArtesian",[33,200,136],{"class":43},[33,202,204,207,209,211,214,216],{"class":35,"line":203},14,[33,205,206],{"class":43},"}",[33,208,54],{"class":39},[33,210,57],{"class":43},[33,212,213],{"class":60},"@welldot\u002Futils",[33,215,64],{"class":43},[33,217,67],{"class":43},[33,219,221],{"class":35,"line":220},15,[33,222,224],{"emptyLinePlaceholder":223},true,"\n",[33,226,228,232,235,238,241,244,246,249,252,254,257],{"class":35,"line":227},16,[33,229,231],{"class":230},"spNyl","const",[33,233,234],{"class":47}," require ",[33,236,237],{"class":43},"=",[33,239,77],{"class":240},"s2Zo4",[33,242,243],{"class":47},"(",[33,245,40],{"class":39},[33,247,248],{"class":43},".",[33,250,251],{"class":47},"meta",[33,253,248],{"class":43},[33,255,256],{"class":47},"url)",[33,258,67],{"class":43},[33,260,262,264,267],{"class":35,"line":261},17,[33,263,231],{"class":230},[33,265,266],{"class":47}," file ",[33,268,269],{"class":43},"=\n",[33,271,273,276,278,281,283,285,288,290,293],{"class":35,"line":272},18,[33,274,275],{"class":47},"  require",[33,277,248],{"class":43},[33,279,280],{"class":240},"resolve",[33,282,243],{"class":47},[33,284,64],{"class":43},[33,286,287],{"class":60},"@welldot\u002Fcore\u002Fexamples\u002Fcoluna-mg-cristalino-abastecimento.well",[33,289,64],{"class":43},[33,291,292],{"class":47},")",[33,294,67],{"class":43},[33,296,298,300,303,305,307,309,312,314,317,319,321,324,326,329],{"class":35,"line":297},19,[33,299,231],{"class":230},[33,301,302],{"class":47}," well ",[33,304,237],{"class":43},[33,306,106],{"class":240},[33,308,243],{"class":47},[33,310,311],{"class":39},"await",[33,313,48],{"class":240},[33,315,316],{"class":47},"(file",[33,318,103],{"class":43},[33,320,57],{"class":43},[33,322,323],{"class":60},"utf8",[33,325,64],{"class":43},[33,327,328],{"class":47},"))",[33,330,67],{"class":43},[33,332,334],{"class":35,"line":333},20,[33,335,224],{"emptyLinePlaceholder":223},[33,337,339,341,344,346,349,353,356,360,363,366,368],{"class":35,"line":338},21,[33,340,231],{"class":230},[33,342,343],{"class":47}," m ",[33,345,237],{"class":43},[33,347,348],{"class":43}," (",[33,350,352],{"class":351},"sHdIc","v",[33,354,355],{"class":43},":",[33,357,359],{"class":358},"sBMFI"," number",[33,361,362],{"class":43}," |",[33,364,365],{"class":358}," undefined",[33,367,292],{"class":43},[33,369,370],{"class":230}," =>\n",[33,372,374,376,379,381,383,387,389,393,395,398,400,402,405,407,409,411],{"class":35,"line":373},22,[33,375,150],{"class":240},[33,377,378],{"class":47},"(v",[33,380,103],{"class":43},[33,382,44],{"class":43},[33,384,386],{"class":385},"swJcz"," fractionDigits",[33,388,355],{"class":43},[33,390,392],{"class":391},"sbssI"," 2",[33,394,103],{"class":43},[33,396,397],{"class":385}," suffix",[33,399,355],{"class":43},[33,401,57],{"class":43},[33,403,404],{"class":60},"m",[33,406,64],{"class":43},[33,408,51],{"class":43},[33,410,292],{"class":47},[33,412,67],{"class":43},[33,414,416],{"class":35,"line":415},23,[33,417,224],{"emptyLinePlaceholder":223},[33,419,421,424,426,429,431],{"class":35,"line":420},24,[33,422,423],{"class":47},"console",[33,425,248],{"class":43},[33,427,428],{"class":240},"log",[33,430,243],{"class":47},[33,432,433],{"class":43},"{\n",[33,435,437,440,442,445,448,450,453,456,458,461,463],{"class":35,"line":436},25,[33,438,439],{"class":385},"  depth",[33,441,355],{"class":43},[33,443,444],{"class":240}," m",[33,446,447],{"class":47},"(well",[33,449,248],{"class":43},[33,451,452],{"class":47},"well_depth ",[33,454,455],{"class":43},"??",[33,457,100],{"class":240},[33,459,460],{"class":47},"(well))",[33,462,103],{"class":43},[33,464,466],{"class":465},"sHwdD"," \u002F\u002F '204.00 m'\n",[33,468,470,473,475,478,480,483,485,487,490,492,494,497,499],{"class":35,"line":469},26,[33,471,472],{"class":385},"  gravelPack",[33,474,355],{"class":43},[33,476,477],{"class":240}," formatNumber",[33,479,243],{"class":47},[33,481,482],{"class":240},"calculateHoleFillVolume",[33,484,243],{"class":47},[33,486,64],{"class":43},[33,488,489],{"class":60},"gravel_pack",[33,491,64],{"class":43},[33,493,103],{"class":43},[33,495,496],{"class":47}," well)",[33,498,103],{"class":43},[33,500,127],{"class":43},[33,502,504,507,509,511],{"class":35,"line":503},27,[33,505,506],{"class":385},"    fractionDigits",[33,508,355],{"class":43},[33,510,392],{"class":391},[33,512,136],{"class":43},[33,514,516,519,521,523,526,528],{"class":35,"line":515},28,[33,517,518],{"class":385},"    suffix",[33,520,355],{"class":43},[33,522,57],{"class":43},[33,524,525],{"class":60},"m³",[33,527,64],{"class":43},[33,529,136],{"class":43},[33,531,533,536,538,540],{"class":35,"line":532},29,[33,534,535],{"class":43},"  }",[33,537,292],{"class":47},[33,539,103],{"class":43},[33,541,542],{"class":465}," \u002F\u002F '1.88 m³'\n",[33,544,546,549,551,553,555,558,560,562],{"class":35,"line":545},30,[33,547,548],{"class":385},"  staticLevel",[33,550,355],{"class":43},[33,552,444],{"class":240},[33,554,243],{"class":47},[33,556,557],{"class":240},"getLatestStaticLevel",[33,559,460],{"class":47},[33,561,103],{"class":43},[33,563,564],{"class":465}," \u002F\u002F '3.94 m'\n",[33,566,568,571,573,576,579,581],{"class":35,"line":567},31,[33,569,570],{"class":385},"  flowing",[33,572,355],{"class":43},[33,574,575],{"class":240}," isFlowingArtesian",[33,577,578],{"class":47},"(well)",[33,580,103],{"class":43},[33,582,583],{"class":465}," \u002F\u002F false\n",[33,585,587,590,592,594,596,599,601,603],{"class":35,"line":586},32,[33,588,589],{"class":385},"  dynamicLevel",[33,591,355],{"class":43},[33,593,444],{"class":240},[33,595,243],{"class":47},[33,597,598],{"class":240},"getLatestPumpingDynamicLevel",[33,600,460],{"class":47},[33,602,103],{"class":43},[33,604,605],{"class":465}," \u002F\u002F '52.75 m'\n",[33,607,609,612,614,616,618,621,623,625],{"class":35,"line":608},33,[33,610,611],{"class":385},"  pumpSubmergence",[33,613,355],{"class":43},[33,615,444],{"class":240},[33,617,243],{"class":47},[33,619,620],{"class":240},"calculateSubmergence",[33,622,460],{"class":47},[33,624,103],{"class":43},[33,626,627],{"class":465}," \u002F\u002F '9.25 m'\n",[33,629,631,634,636,639,641,643,645,648,650,652,654],{"class":35,"line":630},34,[33,632,633],{"class":385},"  specificCapacity",[33,635,355],{"class":43},[33,637,638],{"class":240}," getLatestAquiferAnalysisField",[33,640,447],{"class":47},[33,642,103],{"class":43},[33,644,57],{"class":43},[33,646,647],{"class":60},"specific_capacity",[33,649,64],{"class":43},[33,651,292],{"class":47},[33,653,103],{"class":43},[33,655,656],{"class":465}," \u002F\u002F 0.291 (m²\u002Fh)\n",[33,658,660,663,665,668,671,673,675,678,680,682],{"class":35,"line":659},35,[33,661,662],{"class":385},"  status",[33,664,355],{"class":43},[33,666,667],{"class":240}," getCurrentWellStatus",[33,669,670],{"class":47},"(well) ",[33,672,455],{"class":43},[33,674,57],{"class":43},[33,676,677],{"class":60},"unknown",[33,679,64],{"class":43},[33,681,103],{"class":43},[33,683,684],{"class":465}," \u002F\u002F 'active'\n",[33,686,688,691,693,695,697,700,702,704,707,709,711,713,715,717,719,721,723,725,727],{"class":35,"line":687},36,[33,689,690],{"class":385},"  produced",[33,692,355],{"class":43},[33,694,477],{"class":240},[33,696,243],{"class":47},[33,698,699],{"class":240},"getProductionTotal",[33,701,578],{"class":47},[33,703,248],{"class":43},[33,705,706],{"class":47},"total",[33,708,103],{"class":43},[33,710,44],{"class":43},[33,712,397],{"class":385},[33,714,355],{"class":43},[33,716,57],{"class":43},[33,718,525],{"class":60},[33,720,64],{"class":43},[33,722,51],{"class":43},[33,724,292],{"class":47},[33,726,103],{"class":43},[33,728,729],{"class":465}," \u002F\u002F '1,238,406 m³'\n",[33,731,733,735,737],{"class":35,"line":732},37,[33,734,206],{"class":43},[33,736,292],{"class":47},[33,738,67],{"class":43},[12,740,741],{},"What each call does:",[743,744,745,756,761,775,783,789,809],"ul",{},[746,747,748,751,752,755],"li",{},[30,749,750],{},"calculatedWellDepth"," (from core) is the deepest construction depth, used when ",[30,753,754],{},"well_depth"," is absent.",[746,757,758,760],{},[30,759,482],{}," sums the net annular volume of every gravel pack interval, subtracting the casing and screens inside it.",[746,762,763,765,766,770,771,774],{},[30,764,557],{}," takes the most recent static level from the hydrodynamic events, skipping any event retracted by a correction (",[16,767,769],{"href":768},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#corrections-since-v23","corrections","). ",[30,772,773],{},"isFlowingArtesian"," is true when that level is negative.",[746,776,777,779,780,782],{},[30,778,598],{}," is the last level measured while pumping; ",[30,781,620],{}," is the depth of the current pump's intake below it.",[746,784,785,788],{},[30,786,787],{},"getLatestAquiferAnalysisField"," reads a field from the most recent interpretation that has it.",[746,790,791,794,795,798,799,802,803,808],{},[30,792,793],{},"getCurrentWellStatus"," is the status of the latest ",[30,796,797],{},"status_change"," log entry, or ",[30,800,801],{},"undefined"," (unknown) when there is none (",[16,804,806],{"href":805},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#status_change",[30,807,797],{},").",[746,810,811,813,814,808],{},[30,812,699],{}," derives volumes from meter readings with the spec's rollover and gap rules (",[16,815,817],{"href":816},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#volume-derivation-normative","volume derivation",[819,820,821],"note",{},[12,822,823,824,826,827,830,831,834],{},"Functions return ",[30,825,801],{}," when the data is not there: no test, no pump, no meter. That is the format's \"absent means unknown\" rule carried into code. ",[30,828,829],{},"formatNumber"," shows ",[30,832,833],{},"—"," for it.",[836,837,839],"h2",{"id":838},"next","Next",[743,841,842,848,854],{},[746,843,844],{},[16,845,847],{"href":846},"\u002Futils\u002Fguides\u002Fgeometry-and-volumes","Geometry and volumes",[746,849,850],{},[16,851,853],{"href":852},"\u002Futils\u002Fguides\u002Fpumping-tests","Water levels and pumping tests",[746,855,856],{},[16,857,859],{"href":858},"\u002Futils\u002Fapi","API reference",[861,862,863],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":70,"depth":70,"links":865},[866],{"id":838,"depth":70,"text":839},"Load a .well file and compute a well summary with @welldot\u002Futils, covering depth, gravel pack volume, water levels, specific capacity, status and production.","md",{},"\u002Futils\u002Fgetting-started\u002Ffirst-use","---\ntitle: First use\ndescription: Load a .well file and compute a well summary with @welldot\u002Futils, covering depth, gravel pack volume, water levels, specific capacity, status and production.\n---\n\nThis page builds a short summary of a well, the kind of block a report or a registry page shows. It uses one of the [example wells](\u002Fformat\u002Freference\u002Fexamples), a 204 m supply well in crystalline rock with a pumping test, permits and meters.\n\n```ts [summary.ts]\nimport { readFile } from 'node:fs\u002Fpromises';\nimport { createRequire } from 'node:module';\nimport { calculatedWellDepth, parseWell } from '@welldot\u002Fcore';\nimport {\n  calculateHoleFillVolume,\n  calculateSubmergence,\n  formatNumber,\n  getCurrentWellStatus,\n  getLatestAquiferAnalysisField,\n  getLatestPumpingDynamicLevel,\n  getLatestStaticLevel,\n  getProductionTotal,\n  isFlowingArtesian,\n} from '@welldot\u002Futils';\n\nconst require = createRequire(import.meta.url);\nconst file =\n  require.resolve('@welldot\u002Fcore\u002Fexamples\u002Fcoluna-mg-cristalino-abastecimento.well');\nconst well = parseWell(await readFile(file, 'utf8'));\n\nconst m = (v: number | undefined) =>\n  formatNumber(v, { fractionDigits: 2, suffix: 'm' });\n\nconsole.log({\n  depth: m(well.well_depth ?? calculatedWellDepth(well)), \u002F\u002F '204.00 m'\n  gravelPack: formatNumber(calculateHoleFillVolume('gravel_pack', well), {\n    fractionDigits: 2,\n    suffix: 'm³',\n  }), \u002F\u002F '1.88 m³'\n  staticLevel: m(getLatestStaticLevel(well)), \u002F\u002F '3.94 m'\n  flowing: isFlowingArtesian(well), \u002F\u002F false\n  dynamicLevel: m(getLatestPumpingDynamicLevel(well)), \u002F\u002F '52.75 m'\n  pumpSubmergence: m(calculateSubmergence(well)), \u002F\u002F '9.25 m'\n  specificCapacity: getLatestAquiferAnalysisField(well, 'specific_capacity'), \u002F\u002F 0.291 (m²\u002Fh)\n  status: getCurrentWellStatus(well) ?? 'unknown', \u002F\u002F 'active'\n  produced: formatNumber(getProductionTotal(well).total, { suffix: 'm³' }), \u002F\u002F '1,238,406 m³'\n});\n```\n\nWhat each call does:\n\n- `calculatedWellDepth` (from core) is the deepest construction depth, used when `well_depth` is absent.\n- `calculateHoleFillVolume` sums the net annular volume of every gravel pack interval, subtracting the casing and screens inside it.\n- `getLatestStaticLevel` takes the most recent static level from the hydrodynamic events, skipping any event retracted by a correction ([corrections](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#corrections-since-v23)). `isFlowingArtesian` is true when that level is negative.\n- `getLatestPumpingDynamicLevel` is the last level measured while pumping; `calculateSubmergence` is the depth of the current pump's intake below it.\n- `getLatestAquiferAnalysisField` reads a field from the most recent interpretation that has it.\n- `getCurrentWellStatus` is the status of the latest `status_change` log entry, or `undefined` (unknown) when there is none ([`status_change`](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#status_change)).\n- `getProductionTotal` derives volumes from meter readings with the spec's rollover and gap rules ([volume derivation](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#volume-derivation-normative)).\n\n::note\nFunctions return `undefined` when the data is not there: no test, no pump, no meter. That is the format's \"absent means unknown\" rule carried into code. `formatNumber` shows `—` for it.\n::\n\n## Next\n\n- [Geometry and volumes](\u002Futils\u002Fguides\u002Fgeometry-and-volumes)\n- [Water levels and pumping tests](\u002Futils\u002Fguides\u002Fpumping-tests)\n- [API reference](\u002Futils\u002Fapi)\n",{"title":7,"description":867},"utils\u002F1.getting-started\u002F2.first-use","IA3rygrUq_ol2Y4WOgHqV2e6M_xQWZWa9hrS77_yGps",{"docs_en":876,"spec":1184,"changelogs":1234},[877,897,916,970,1079,1133],{"title":878,"path":879,"stem":880,"children":881},"Ai","\u002Fai","ai",[882,885,889,893],{"title":883,"path":879,"stem":884},"Introduction","ai\u002Findex",{"title":886,"path":887,"stem":888},"Converting reports with an assistant","\u002Fai\u002Fconversion-skill","ai\u002Fconversion-skill",{"title":890,"path":891,"stem":892},"llms.txt and Markdown pages","\u002Fai\u002Fllms","ai\u002Fllms",{"title":894,"path":895,"stem":896},"MCP server","\u002Fai\u002Fmcp","ai\u002Fmcp",{"title":898,"path":899,"stem":900,"children":901},"Contributing","\u002Fcontributing","contributing",[902,904,908,912],{"title":883,"path":899,"stem":903},"contributing\u002Findex",{"title":905,"path":906,"stem":907},"Writing docs","\u002Fcontributing\u002Fwriting-docs","contributing\u002F1.writing-docs",{"title":909,"path":910,"stem":911},"Update rules","\u002Fcontributing\u002Fupdate-rules","contributing\u002F2.update-rules",{"title":913,"path":914,"stem":915},"Content components","\u002Fcontributing\u002Fcomponents","contributing\u002Fcomponents",{"title":917,"path":918,"stem":919,"children":920},"Core","\u002Fcore","core",[921,923,936,965],{"title":883,"path":918,"stem":922},"core\u002Findex",{"title":924,"path":925,"stem":926,"children":927,"page":935},"Getting Started","\u002Fcore\u002Fgetting-started","core\u002F1.getting-started",[928,932],{"title":929,"path":930,"stem":931},"Installation","\u002Fcore\u002Fgetting-started\u002Finstallation","core\u002F1.getting-started\u002F1.installation",{"title":7,"path":933,"stem":934},"\u002Fcore\u002Fgetting-started\u002Ffirst-use","core\u002F1.getting-started\u002F2.first-use",false,{"title":937,"path":938,"stem":939,"children":940,"page":935},"Guides","\u002Fcore\u002Fguides","core\u002F2.guides",[941,945,949,953,957,961],{"title":942,"path":943,"stem":944},"Parsing and validating","\u002Fcore\u002Fguides\u002Fparsing-and-validating","core\u002F2.guides\u002F1.parsing-and-validating",{"title":946,"path":947,"stem":948},"Serializing and sharing","\u002Fcore\u002Fguides\u002Fserializing-and-sharing","core\u002F2.guides\u002F2.serializing-and-sharing",{"title":950,"path":951,"stem":952},"Unit conversion","\u002Fcore\u002Fguides\u002Funit-conversion","core\u002F2.guides\u002F3.unit-conversion",{"title":954,"path":955,"stem":956},"Vocabularies and textures","\u002Fcore\u002Fguides\u002Fvocabularies-and-textures","core\u002F2.guides\u002F4.vocabularies-and-textures",{"title":958,"path":959,"stem":960},"Water quality vocabulary","\u002Fcore\u002Fguides\u002Fwater-quality-vocabulary","core\u002F2.guides\u002F5.water-quality-vocabulary",{"title":962,"path":963,"stem":964},"Versions and time zones","\u002Fcore\u002Fguides\u002Fversions-and-time-zones","core\u002F2.guides\u002F6.versions-and-time-zones",{"title":859,"path":966,"stem":967,"children":968},"\u002Fcore\u002Fapi","core\u002Fapi\u002Findex",[969],{"title":859,"path":966,"stem":967},{"title":971,"path":972,"stem":973,"children":974},"Format","\u002Fformat","format",[975,977,997,1026,1050,1069,1075],{"title":883,"path":972,"stem":976},"format\u002Findex",{"title":924,"path":978,"stem":979,"children":980,"page":935},"\u002Fformat\u002Fgetting-started","format\u002F1.getting-started",[981,985,989,993],{"title":982,"path":983,"stem":984},"What is .well?","\u002Fformat\u002Fgetting-started\u002Fwhat-is-well","format\u002F1.getting-started\u002F1.what-is-well",{"title":986,"path":987,"stem":988},"For geologists","\u002Fformat\u002Fgetting-started\u002Ffor-geologists","format\u002F1.getting-started\u002F2.for-geologists",{"title":990,"path":991,"stem":992},"For developers","\u002Fformat\u002Fgetting-started\u002Ffor-developers","format\u002F1.getting-started\u002F3.for-developers",{"title":994,"path":995,"stem":996},"Your first .well file","\u002Fformat\u002Fgetting-started\u002Ffirst-well-file","format\u002F1.getting-started\u002F4.first-well-file",{"title":998,"path":999,"stem":1000,"children":1001,"page":935},"Concepts","\u002Fformat\u002Fconcepts","format\u002F2.concepts",[1002,1006,1010,1014,1018,1022],{"title":1003,"path":1004,"stem":1005},"Depths and intervals","\u002Fformat\u002Fconcepts\u002Fdepths-and-intervals","format\u002F2.concepts\u002F1.depths-and-intervals",{"title":1007,"path":1008,"stem":1009},"Units and precision","\u002Fformat\u002Fconcepts\u002Funits-and-precision","format\u002F2.concepts\u002F2.units-and-precision",{"title":1011,"path":1012,"stem":1013},"Vocabularies","\u002Fformat\u002Fconcepts\u002Fvocabularies","format\u002F2.concepts\u002F3.vocabularies",{"title":1015,"path":1016,"stem":1017},"Profiles","\u002Fformat\u002Fconcepts\u002Fprofiles","format\u002F2.concepts\u002F4.profiles",{"title":1019,"path":1020,"stem":1021},"Versions and deprecation","\u002Fformat\u002Fconcepts\u002Fversions-and-deprecation","format\u002F2.concepts\u002F5.versions-and-deprecation",{"title":1023,"path":1024,"stem":1025},"Extensibility","\u002Fformat\u002Fconcepts\u002Fextensibility","format\u002F2.concepts\u002F6.extensibility",{"title":937,"path":1027,"stem":1028,"children":1029,"page":935},"\u002Fformat\u002Fguides","format\u002F3.guides",[1030,1034,1038,1042,1046],{"title":1031,"path":1032,"stem":1033},"Writing a .well by hand","\u002Fformat\u002Fguides\u002Fwriting-by-hand","format\u002F3.guides\u002F1.writing-by-hand",{"title":1035,"path":1036,"stem":1037},"Converting a report","\u002Fformat\u002Fguides\u002Fconverting-a-report","format\u002F3.guides\u002F2.converting-a-report",{"title":1039,"path":1040,"stem":1041},"Validating","\u002Fformat\u002Fguides\u002Fvalidating","format\u002F3.guides\u002F3.validating",{"title":1043,"path":1044,"stem":1045},"Extending for your own needs","\u002Fformat\u002Fguides\u002Fextending","format\u002F3.guides\u002F4.extending",{"title":1047,"path":1048,"stem":1049},"Building an editor or database on .well","\u002Fformat\u002Fguides\u002Fbuilding-on-well","format\u002F3.guides\u002F5.building-on-well",{"title":1051,"path":1052,"stem":1053,"children":1054},"Overview","\u002Fformat\u002Freference","format\u002F4.reference\u002Findex",[1055,1056,1060,1063],{"title":1051,"path":1052,"stem":1053},{"title":1057,"path":1058,"stem":1059},"JSON Schema","\u002Fformat\u002Freference\u002Fjson-schema","format\u002F4.reference\u002F1.json-schema",{"title":1061,"path":18,"stem":1062},"Example wells","format\u002F4.reference\u002F2.examples",{"title":1064,"path":1065,"stem":1066,"children":1067},"Object reference","\u002Fformat\u002Freference\u002Fobjects","format\u002Freference\u002Fobjects\u002Findex",[1068],{"title":1064,"path":1065,"stem":1066},{"title":1070,"path":1071,"stem":1072,"children":1073},"About the spec","\u002Fformat\u002Fspec","format\u002F5.spec\u002Findex",[1074],{"title":1070,"path":1071,"stem":1072},{"title":1076,"path":1077,"stem":1078},"Changelog","\u002Fformat\u002Fchangelog","format\u002F6.changelog",{"title":1080,"path":1081,"stem":1082,"children":1083},"Render","\u002Frender","render",[1084,1086,1096,1128],{"title":883,"path":1081,"stem":1085},"render\u002Findex",{"title":924,"path":1087,"stem":1088,"children":1089,"page":935},"\u002Frender\u002Fgetting-started","render\u002F1.getting-started",[1090,1093],{"title":929,"path":1091,"stem":1092},"\u002Frender\u002Fgetting-started\u002Finstallation","render\u002F1.getting-started\u002F1.installation",{"title":7,"path":1094,"stem":1095},"\u002Frender\u002Fgetting-started\u002Ffirst-use","render\u002F1.getting-started\u002F2.first-use",{"title":937,"path":1097,"stem":1098,"children":1099,"page":935},"\u002Frender\u002Fguides","render\u002F2.guides",[1100,1104,1108,1112,1116,1120,1124],{"title":1101,"path":1102,"stem":1103},"Panels and layout","\u002Frender\u002Fguides\u002Fpanels-and-layout","render\u002F2.guides\u002F1.panels-and-layout",{"title":1105,"path":1106,"stem":1107},"Layers and labels","\u002Frender\u002Fguides\u002Flayers-and-labels","render\u002F2.guides\u002F2.layers-and-labels",{"title":1109,"path":1110,"stem":1111},"Theming","\u002Frender\u002Fguides\u002Ftheming","render\u002F2.guides\u002F3.theming",{"title":1113,"path":1114,"stem":1115},"Locale and units","\u002Frender\u002Fguides\u002Flocale-and-units","render\u002F2.guides\u002F4.locale-and-units",{"title":1117,"path":1118,"stem":1119},"Legends","\u002Frender\u002Fguides\u002Flegends","render\u002F2.guides\u002F5.legends",{"title":1121,"path":1122,"stem":1123},"Zoom, pan and highlights","\u002Frender\u002Fguides\u002Finteraction","render\u002F2.guides\u002F6.interaction",{"title":1125,"path":1126,"stem":1127},"Using it in a framework","\u002Frender\u002Fguides\u002Fframeworks","render\u002F2.guides\u002F7.frameworks",{"title":859,"path":1129,"stem":1130,"children":1131},"\u002Frender\u002Fapi","render\u002Fapi\u002Findex",[1132],{"title":859,"path":1129,"stem":1130},{"title":1134,"path":1135,"stem":1136,"children":1137},"Utils","\u002Futils","utils",[1138,1140,1148,1180],{"title":883,"path":1135,"stem":1139},"utils\u002Findex",{"title":924,"path":1141,"stem":1142,"children":1143,"page":935},"\u002Futils\u002Fgetting-started","utils\u002F1.getting-started",[1144,1147],{"title":929,"path":1145,"stem":1146},"\u002Futils\u002Fgetting-started\u002Finstallation","utils\u002F1.getting-started\u002F1.installation",{"title":7,"path":870,"stem":873},{"title":937,"path":1149,"stem":1150,"children":1151,"page":935},"\u002Futils\u002Fguides","utils\u002F2.guides",[1152,1154,1156,1160,1164,1168,1172,1176],{"title":847,"path":846,"stem":1153},"utils\u002F2.guides\u002F1.geometry-and-volumes",{"title":853,"path":852,"stem":1155},"utils\u002F2.guides\u002F2.pumping-tests",{"title":1157,"path":1158,"stem":1159},"Permits","\u002Futils\u002Fguides\u002Fpermits","utils\u002F2.guides\u002F3.permits",{"title":1161,"path":1162,"stem":1163},"Operation and production","\u002Futils\u002Fguides\u002Foperation","utils\u002F2.guides\u002F4.operation",{"title":1165,"path":1166,"stem":1167},"Water quality","\u002Futils\u002Fguides\u002Fwater-quality","utils\u002F2.guides\u002F5.water-quality",{"title":1169,"path":1170,"stem":1171},"Logger import","\u002Futils\u002Fguides\u002Flogger-import","utils\u002F2.guides\u002F6.logger-import",{"title":1173,"path":1174,"stem":1175},"SIAGAS import","\u002Futils\u002Fguides\u002Fsiagas-import","utils\u002F2.guides\u002F7.siagas-import",{"title":1177,"path":1178,"stem":1179},"Formatting","\u002Futils\u002Fguides\u002Fformatting","utils\u002F2.guides\u002F8.formatting",{"title":859,"path":858,"stem":1181,"children":1182},"utils\u002Fapi\u002Findex",[1183],{"title":859,"path":858,"stem":1181},[1185],{"title":971,"path":972,"stem":973,"children":1186,"page":935},[1187],{"title":1188,"path":1071,"stem":1189,"children":1190,"page":935},"Spec","format\u002Fspec",[1191,1200,1209],{"title":1192,"path":1193,"stem":1194,"children":1195,"page":935},"Reference","\u002Fformat\u002Fspec\u002Freference","format\u002Fspec\u002Freference",[1196],{"title":1197,"path":1198,"stem":1199},"FGDC Texture Patterns Reference","\u002Fformat\u002Fspec\u002Freference\u002Ffgdc-textures","format\u002Fspec\u002Freference\u002Ffgdc-textures",{"title":1201,"path":1202,"stem":1203,"children":1204,"page":935},"V1","\u002Fformat\u002Fspec\u002Fv1","format\u002Fspec\u002Fv1",[1205],{"title":1206,"path":1207,"stem":1208},".well File Format Specification","\u002Fformat\u002Fspec\u002Fv1\u002Fwell-format","format\u002Fspec\u002Fv1\u002Fwell-format",{"title":1210,"path":1211,"stem":1212,"children":1213,"page":935},"V2","\u002Fformat\u002Fspec\u002Fv2","format\u002Fspec\u002Fv2",[1214,1218,1222,1226,1230],{"title":1215,"path":1216,"stem":1217},".well File Format Specification — Version 2.4: Format Reference","\u002Fformat\u002Fspec\u002Fv2\u002Fformat-reference","format\u002Fspec\u002Fv2\u002Fformat-reference",{"title":1219,"path":1220,"stem":1221},".well File Format Specification — Version 2.4: Interoperability","\u002Fformat\u002Fspec\u002Fv2\u002Finteroperability","format\u002Fspec\u002Fv2\u002Finteroperability",{"title":1223,"path":1224,"stem":1225},".well File Format Specification — Version 2.4: Object Schemas","\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas","format\u002Fspec\u002Fv2\u002Fobject-schemas",{"title":1227,"path":1228,"stem":1229},".well File Format Specification — Version 2.4: Overview","\u002Fformat\u002Fspec\u002Fv2\u002Foverview","format\u002Fspec\u002Fv2\u002Foverview",{"title":1231,"path":1232,"stem":1233},".well File Format Specification — Version 2.4: Water Quality","\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality","format\u002Fspec\u002Fv2\u002Fwater-quality",[1235,1240,1246],{"title":917,"path":918,"stem":919,"children":1236,"page":935},[1237],{"title":115,"path":1238,"stem":1239},"\u002Fcore\u002Fchangelog","core\u002FCHANGELOG",{"title":1080,"path":1081,"stem":1082,"children":1241,"page":935},[1242],{"title":1243,"path":1244,"stem":1245},"@welldot\u002Frender","\u002Frender\u002Fchangelog","render\u002FCHANGELOG",{"title":1134,"path":1135,"stem":1136,"children":1247,"page":935},[1248],{"title":213,"path":1249,"stem":1250},"\u002Futils\u002Fchangelog","utils\u002FCHANGELOG",1793050495116]