[{"data":1,"prerenderedAt":1102},["ShallowReactive",2],{"page-\u002Futils\u002Fguides\u002Foperation":3,"navigation":719},{"collection":4,"page":5},"docs_en",{"id":6,"title":7,"body":8,"description":711,"extension":712,"meta":713,"navigation":151,"path":714,"rawbody":715,"seo":716,"stem":717,"__hash__":718},"docs_en\u002Futils\u002F2.guides\u002F4.operation.md","Operation and production",{"type":9,"value":10,"toc":704},"minimark",[11,32,37,54,96,224,241,244,315,319,332,431,434,438,468,544,554,558,574,639,643,685,700],[12,13,14,15,19,20,23,24,27,28,31],"p",{},"The operational blocks record how a well is used: meters (",[16,17,18],"code",{},"meters","), their readings and estimated volumes (",[16,21,22],{},"production","), the declared pumping regime (",[16,25,26],{},"operating_regime",") and the well's status changes in ",[16,29,30],{},"history_logs",". Volumes and the current state are derived from these records, following the spec's normative rules.",[33,34,36],"h2",{"id":35},"production-volumes","Production volumes",[12,38,39,40,44,45,48,49,53],{},"A meter (hidrômetro) is a totalizer: the file stores its register readings, and volumes are the differences between consecutive readings (",[41,42,22],"a",{"href":43},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#production-since-v23","). ",[16,46,47],{},"@welldot\u002Futils"," implements the ",[41,50,52],{"href":51},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#volume-derivation-normative","volume derivation",":",[55,56,57,65,71,81,84],"ul",{},[58,59,60,61,64],"li",{},"readings of each meter are ordered by instant, then ",[16,62,63],{},"sequence",";",[58,66,67,68,64],{},"each pair of consecutive readings gives ",[16,69,70],{},"r₂ − r₁",[58,72,73,74,77,78,80],{},"a decrease means the register rolled over at ",[16,75,76],{},"max_reading",", or, without ",[16,79,76],{},", an unknown volume, never a negative one;",[58,82,83],{},"an interval never spans two meters, so the gap between a meter's removal and the next one's installation is unmetered;",[58,85,86,87,90,91,95],{},"an ",[16,88,89],{},"estimated_volume"," entry counts only for the part of its period that no meter interval covers (",[41,92,94],{"href":93},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#precedence","precedence",").",[97,98,103],"pre",{"className":99,"code":100,"language":101,"meta":102,"style":102},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { getProductionByPeriod, getProductionTotal } from '@welldot\u002Futils';\n\ngetProductionTotal(well);\n\u002F\u002F { metered: 1238406, estimated: 0, total: 1238406, unknown_intervals: 0 }\n\ngetProductionByPeriod(well, 'year').at(-1);\n\u002F\u002F { period: '2026', metered: 52067.3, estimated: 0, total: 52067.3, unknown_intervals: 0 }\n","ts","",[16,104,105,146,153,165,172,177,218],{"__ignoreMap":102},[106,107,110,114,118,122,125,128,131,134,137,140,143],"span",{"class":108,"line":109},"line",1,[106,111,113],{"class":112},"s7zQu","import",[106,115,117],{"class":116},"sMK4o"," {",[106,119,121],{"class":120},"sTEyZ"," getProductionByPeriod",[106,123,124],{"class":116},",",[106,126,127],{"class":120}," getProductionTotal",[106,129,130],{"class":116}," }",[106,132,133],{"class":112}," from",[106,135,136],{"class":116}," '",[106,138,47],{"class":139},"sfazB",[106,141,142],{"class":116},"'",[106,144,145],{"class":116},";\n",[106,147,149],{"class":108,"line":148},2,[106,150,152],{"emptyLinePlaceholder":151},true,"\n",[106,154,156,160,163],{"class":108,"line":155},3,[106,157,159],{"class":158},"s2Zo4","getProductionTotal",[106,161,162],{"class":120},"(well)",[106,164,145],{"class":116},[106,166,168],{"class":108,"line":167},4,[106,169,171],{"class":170},"sHwdD","\u002F\u002F { metered: 1238406, estimated: 0, total: 1238406, unknown_intervals: 0 }\n",[106,173,175],{"class":108,"line":174},5,[106,176,152],{"emptyLinePlaceholder":151},[106,178,180,183,186,188,190,193,195,198,201,204,207,210,214,216],{"class":108,"line":179},6,[106,181,182],{"class":158},"getProductionByPeriod",[106,184,185],{"class":120},"(well",[106,187,124],{"class":116},[106,189,136],{"class":116},[106,191,192],{"class":139},"year",[106,194,142],{"class":116},[106,196,197],{"class":120},")",[106,199,200],{"class":116},".",[106,202,203],{"class":158},"at",[106,205,206],{"class":120},"(",[106,208,209],{"class":116},"-",[106,211,213],{"class":212},"sbssI","1",[106,215,197],{"class":120},[106,217,145],{"class":116},[106,219,221],{"class":108,"line":220},7,[106,222,223],{"class":170},"\u002F\u002F { period: '2026', metered: 52067.3, estimated: 0, total: 52067.3, unknown_intervals: 0 }\n",[12,225,226,229,230,233,234,233,237,240],{},[16,227,228],{},"getProductionByPeriod(well, 'day' | 'month' | 'year')"," buckets by local date (",[16,231,232],{},"YYYY-MM-DD",", ",[16,235,236],{},"YYYY-MM",[16,238,239],{},"YYYY",") and prorates each interval by time across period boundaries, so the buckets add up to the total. Volumes are in m³.",[12,242,243],{},"Lower-level helpers:",[245,246,247,260],"table",{},[248,249,250],"thead",{},[251,252,253,257],"tr",{},[254,255,256],"th",{},"Function",[254,258,259],{},"Returns",[261,262,263,278,292,305],"tbody",{},[251,264,265,271],{},[266,267,268],"td",{},[16,269,270],{},"getMeterIntervals(well)",[266,272,273,274,277],{},"Each interval between consecutive readings of a meter, with ",[16,275,276],{},"volume: null"," when unknown.",[251,279,280,285],{},[266,281,282],{},[16,283,284],{},"getCurrentMeters(well)",[266,286,287,288,291],{},"Meters without ",[16,289,290],{},"removed_at",", newest first.",[251,293,294,299],{},[266,295,296],{},[16,297,298],{},"getEffectiveProduction(well)",[266,300,301,302,200],{},"Production entries not retracted by ",[16,303,304],{},"corrects",[251,306,307,312],{},[266,308,309],{},[16,310,311],{},"getRetractedProductionIds(well)",[266,313,314],{},"The retracted ids.",[33,316,318],{"id":317},"operating-regime","Operating regime",[12,320,321,323,324,327,328,95],{},[16,322,26],{}," entries declare a flow rate, daily hours and days per week, each in force from ",[16,325,326],{},"effective_from"," (",[41,329,331],{"href":330},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#operating_regime-since-v23","operating regime",[97,333,335],{"className":99,"code":334,"language":101,"meta":102,"style":102},"import { getCurrentRegime, normalizeDailyOperatingTime } from '@welldot\u002Futils';\n\ngetCurrentRegime(well); \u002F\u002F the entry in force now\ngetCurrentRegime(well, new Date('2015-06-01T00:00:00-03:00')); \u002F\u002F the entry in force then (a Date)\n\nnormalizeDailyOperatingTime(26); \u002F\u002F 24: values above 24 h count as 24 in derivations\n",[16,336,337,363,367,379,410,414],{"__ignoreMap":102},[106,338,339,341,343,346,348,351,353,355,357,359,361],{"class":108,"line":109},[106,340,113],{"class":112},[106,342,117],{"class":116},[106,344,345],{"class":120}," getCurrentRegime",[106,347,124],{"class":116},[106,349,350],{"class":120}," normalizeDailyOperatingTime",[106,352,130],{"class":116},[106,354,133],{"class":112},[106,356,136],{"class":116},[106,358,47],{"class":139},[106,360,142],{"class":116},[106,362,145],{"class":116},[106,364,365],{"class":108,"line":148},[106,366,152],{"emptyLinePlaceholder":151},[106,368,369,372,374,376],{"class":108,"line":155},[106,370,371],{"class":158},"getCurrentRegime",[106,373,162],{"class":120},[106,375,64],{"class":116},[106,377,378],{"class":170}," \u002F\u002F the entry in force now\n",[106,380,381,383,385,387,390,393,395,397,400,402,405,407],{"class":108,"line":167},[106,382,371],{"class":158},[106,384,185],{"class":120},[106,386,124],{"class":116},[106,388,389],{"class":116}," new",[106,391,392],{"class":158}," Date",[106,394,206],{"class":120},[106,396,142],{"class":116},[106,398,399],{"class":139},"2015-06-01T00:00:00-03:00",[106,401,142],{"class":116},[106,403,404],{"class":120},"))",[106,406,64],{"class":116},[106,408,409],{"class":170}," \u002F\u002F the entry in force then (a Date)\n",[106,411,412],{"class":108,"line":174},[106,413,152],{"emptyLinePlaceholder":151},[106,415,416,419,421,424,426,428],{"class":108,"line":179},[106,417,418],{"class":158},"normalizeDailyOperatingTime",[106,420,206],{"class":120},[106,422,423],{"class":212},"26",[106,425,197],{"class":120},[106,427,64],{"class":116},[106,429,430],{"class":170}," \u002F\u002F 24: values above 24 h count as 24 in derivations\n",[12,432,433],{},"The stored value is never rewritten; the spec makes values above 24 a warning and normalizes them only for calculation.",[33,435,437],{"id":436},"well-status","Well status",[12,439,440,441,233,444,233,447,233,450,233,453,456,457,460,461,327,463,467],{},"The status is a closed vocabulary (",[16,442,443],{},"active",[16,445,446],{},"maintenance",[16,448,449],{},"inactive",[16,451,452],{},"decommissioned",[16,454,455],{},"abandoned",") written by ",[16,458,459],{},"status_change"," entries in ",[16,462,30],{},[41,464,466],{"href":465},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#status_change","status change","). Without one, the status is unknown.",[97,469,471],{"className":99,"code":470,"language":101,"meta":102,"style":102},"import {\n  getCurrentWellStatus,\n  getCurrentWellStatusEntry,\n} from '@welldot\u002Futils';\n\ngetCurrentWellStatus(well); \u002F\u002F 'active', or undefined when no status_change exists\ngetCurrentWellStatusEntry(well)?.datetime; \u002F\u002F when it changed\n",[16,472,473,480,488,495,510,514,526],{"__ignoreMap":102},[106,474,475,477],{"class":108,"line":109},[106,476,113],{"class":112},[106,478,479],{"class":116}," {\n",[106,481,482,485],{"class":108,"line":148},[106,483,484],{"class":120},"  getCurrentWellStatus",[106,486,487],{"class":116},",\n",[106,489,490,493],{"class":108,"line":155},[106,491,492],{"class":120},"  getCurrentWellStatusEntry",[106,494,487],{"class":116},[106,496,497,500,502,504,506,508],{"class":108,"line":167},[106,498,499],{"class":116},"}",[106,501,133],{"class":112},[106,503,136],{"class":116},[106,505,47],{"class":139},[106,507,142],{"class":116},[106,509,145],{"class":116},[106,511,512],{"class":108,"line":174},[106,513,152],{"emptyLinePlaceholder":151},[106,515,516,519,521,523],{"class":108,"line":179},[106,517,518],{"class":158},"getCurrentWellStatus",[106,520,162],{"class":120},[106,522,64],{"class":116},[106,524,525],{"class":170}," \u002F\u002F 'active', or undefined when no status_change exists\n",[106,527,528,531,533,536,539,541],{"class":108,"line":220},[106,529,530],{"class":158},"getCurrentWellStatusEntry",[106,532,162],{"class":120},[106,534,535],{"class":116},"?.",[106,537,538],{"class":120},"datetime",[106,540,64],{"class":116},[106,542,543],{"class":170}," \u002F\u002F when it changed\n",[12,545,546,547,550,551,200],{},"Label it with ",[16,548,549],{},"WELL_STATUSES"," from ",[16,552,553],{},"@welldot\u002Fcore",[33,555,557],{"id":556},"pumps","Pumps",[12,559,560,563,564,567,568,327,570,95],{},[16,561,562],{},"pump_installations"," is an installation block: each entry is one installation, from ",[16,565,566],{},"installed_at"," to ",[16,569,290],{},[41,571,573],{"href":572},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#pump_installations-since-v23","pump installations",[245,575,576,584],{},[248,577,578],{},[251,579,580,582],{},[254,581,256],{},[254,583,259],{},[261,585,586,599,609,619,629],{},[251,587,588,593],{},[266,589,590],{},[16,591,592],{},"getCurrentPump(well)",[266,594,595,596,598],{},"The installation without ",[16,597,290],{}," (the latest if several).",[251,600,601,606],{},[266,602,603],{},[16,604,605],{},"getPumpInstalledAt(well, instant)",[266,607,608],{},"The installation in place at an instant.",[251,610,611,616],{},[266,612,613],{},[16,614,615],{},"getPumpServiceTime(well, serial, now?)",[266,617,618],{},"Total minutes in service of the installations that share a serial number.",[251,620,621,626],{},[266,622,623],{},[16,624,625],{},"calculateSubmergence(well)",[266,627,628],{},"Intake depth below the latest dynamic level.",[251,630,631,636],{},[266,632,633],{},[16,634,635],{},"getPumpInstallationWarnings(well)",[266,637,638],{},"Intake below the bottom of the well or inside a screen, several open installations, removal not after installation.",[33,640,642],{"id":641},"warnings","Warnings",[97,644,646],{"className":99,"code":645,"language":101,"meta":102,"style":102},"import { getOperationWarnings } from '@welldot\u002Futils';\n\ngetOperationWarnings(well); \u002F\u002F [{ code, ids }, …]\n",[16,647,648,669,673],{"__ignoreMap":102},[106,649,650,652,654,657,659,661,663,665,667],{"class":108,"line":109},[106,651,113],{"class":112},[106,653,117],{"class":116},[106,655,656],{"class":120}," getOperationWarnings",[106,658,130],{"class":116},[106,660,133],{"class":112},[106,662,136],{"class":116},[106,664,47],{"class":139},[106,666,142],{"class":116},[106,668,145],{"class":116},[106,670,671],{"class":108,"line":148},[106,672,152],{"emptyLinePlaceholder":151},[106,674,675,678,680,682],{"class":108,"line":155},[106,676,677],{"class":158},"getOperationWarnings",[106,679,162],{"class":120},[106,681,64],{"class":116},[106,683,684],{"class":170}," \u002F\u002F [{ code, ids }, …]\n",[12,686,687,688,691,692,233,696,95],{},"Covers meters, production, operating regime, structured history entries and analyses that cite retracted events, plus the 2.4 checks for logger series (an analysis citing a ",[16,689,690],{},"logger_series",", readings deeper than the sensor). Each is a warning in the spec, never a reason to reject the file (",[41,693,695],{"href":694},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#validation-warnings-never-rejection-2","meter validation",[41,697,699],{"href":698},"\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#validation-warnings-never-rejection-3","production validation",[701,702,703],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":102,"searchDepth":148,"depth":148,"links":705},[706,707,708,709,710],{"id":35,"depth":148,"text":36},{"id":317,"depth":148,"text":318},{"id":436,"depth":148,"text":437},{"id":556,"depth":148,"text":557},{"id":641,"depth":148,"text":642},"Derive production volumes from meter readings, total them by period, read the operating regime and the well's current status, and collect operation warnings with @welldot\u002Futils.","md",{},"\u002Futils\u002Fguides\u002Foperation","---\ntitle: Operation and production\ndescription: Derive production volumes from meter readings, total them by period, read the operating regime and the well's current status, and collect operation warnings with @welldot\u002Futils.\n---\n\nThe operational blocks record how a well is used: meters (`meters`), their readings and estimated volumes (`production`), the declared pumping regime (`operating_regime`) and the well's status changes in `history_logs`. Volumes and the current state are derived from these records, following the spec's normative rules.\n\n## Production volumes\n\nA meter (hidrômetro) is a totalizer: the file stores its register readings, and volumes are the differences between consecutive readings ([production](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#production-since-v23)). `@welldot\u002Futils` implements the [volume derivation](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#volume-derivation-normative):\n\n- readings of each meter are ordered by instant, then `sequence`;\n- each pair of consecutive readings gives `r₂ − r₁`;\n- a decrease means the register rolled over at `max_reading`, or, without `max_reading`, an unknown volume, never a negative one;\n- an interval never spans two meters, so the gap between a meter's removal and the next one's installation is unmetered;\n- an `estimated_volume` entry counts only for the part of its period that no meter interval covers ([precedence](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#precedence)).\n\n```ts\nimport { getProductionByPeriod, getProductionTotal } from '@welldot\u002Futils';\n\ngetProductionTotal(well);\n\u002F\u002F { metered: 1238406, estimated: 0, total: 1238406, unknown_intervals: 0 }\n\ngetProductionByPeriod(well, 'year').at(-1);\n\u002F\u002F { period: '2026', metered: 52067.3, estimated: 0, total: 52067.3, unknown_intervals: 0 }\n```\n\n`getProductionByPeriod(well, 'day' | 'month' | 'year')` buckets by local date (`YYYY-MM-DD`, `YYYY-MM`, `YYYY`) and prorates each interval by time across period boundaries, so the buckets add up to the total. Volumes are in m³.\n\nLower-level helpers:\n\n| Function                          | Returns                                                                                  |\n| --------------------------------- | ---------------------------------------------------------------------------------------- |\n| `getMeterIntervals(well)`         | Each interval between consecutive readings of a meter, with `volume: null` when unknown. |\n| `getCurrentMeters(well)`          | Meters without `removed_at`, newest first.                                               |\n| `getEffectiveProduction(well)`    | Production entries not retracted by `corrects`.                                          |\n| `getRetractedProductionIds(well)` | The retracted ids.                                                                       |\n\n## Operating regime\n\n`operating_regime` entries declare a flow rate, daily hours and days per week, each in force from `effective_from` ([operating regime](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#operating_regime-since-v23)).\n\n```ts\nimport { getCurrentRegime, normalizeDailyOperatingTime } from '@welldot\u002Futils';\n\ngetCurrentRegime(well); \u002F\u002F the entry in force now\ngetCurrentRegime(well, new Date('2015-06-01T00:00:00-03:00')); \u002F\u002F the entry in force then (a Date)\n\nnormalizeDailyOperatingTime(26); \u002F\u002F 24: values above 24 h count as 24 in derivations\n```\n\nThe stored value is never rewritten; the spec makes values above 24 a warning and normalizes them only for calculation.\n\n## Well status\n\nThe status is a closed vocabulary (`active`, `maintenance`, `inactive`, `decommissioned`, `abandoned`) written by `status_change` entries in `history_logs` ([status change](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#status_change)). Without one, the status is unknown.\n\n```ts\nimport {\n  getCurrentWellStatus,\n  getCurrentWellStatusEntry,\n} from '@welldot\u002Futils';\n\ngetCurrentWellStatus(well); \u002F\u002F 'active', or undefined when no status_change exists\ngetCurrentWellStatusEntry(well)?.datetime; \u002F\u002F when it changed\n```\n\nLabel it with `WELL_STATUSES` from `@welldot\u002Fcore`.\n\n## Pumps\n\n`pump_installations` is an installation block: each entry is one installation, from `installed_at` to `removed_at` ([pump installations](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#pump_installations-since-v23)).\n\n| Function                                 | Returns                                                                                                             |\n| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |\n| `getCurrentPump(well)`                   | The installation without `removed_at` (the latest if several).                                                      |\n| `getPumpInstalledAt(well, instant)`      | The installation in place at an instant.                                                                            |\n| `getPumpServiceTime(well, serial, now?)` | Total minutes in service of the installations that share a serial number.                                           |\n| `calculateSubmergence(well)`             | Intake depth below the latest dynamic level.                                                                        |\n| `getPumpInstallationWarnings(well)`      | Intake below the bottom of the well or inside a screen, several open installations, removal not after installation. |\n\n## Warnings\n\n```ts\nimport { getOperationWarnings } from '@welldot\u002Futils';\n\ngetOperationWarnings(well); \u002F\u002F [{ code, ids }, …]\n```\n\nCovers meters, production, operating regime, structured history entries and analyses that cite retracted events, plus the 2.4 checks for logger series (an analysis citing a `logger_series`, readings deeper than the sensor). Each is a warning in the spec, never a reason to reject the file ([meter validation](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#validation-warnings-never-rejection-2), [production validation](\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas#validation-warnings-never-rejection-3)).\n",{"title":7,"description":711},"utils\u002F2.guides\u002F4.operation","jeu5tRICP73dLv0c9altPq2KI-jD7QuOQJVKdKsQlbc",{"docs_en":720,"spec":1035,"changelogs":1085},[721,741,760,816,926,980],{"title":722,"path":723,"stem":724,"children":725},"Ai","\u002Fai","ai",[726,729,733,737],{"title":727,"path":723,"stem":728},"Introduction","ai\u002Findex",{"title":730,"path":731,"stem":732},"Converting reports with an assistant","\u002Fai\u002Fconversion-skill","ai\u002Fconversion-skill",{"title":734,"path":735,"stem":736},"llms.txt and Markdown pages","\u002Fai\u002Fllms","ai\u002Fllms",{"title":738,"path":739,"stem":740},"MCP server","\u002Fai\u002Fmcp","ai\u002Fmcp",{"title":742,"path":743,"stem":744,"children":745},"Contributing","\u002Fcontributing","contributing",[746,748,752,756],{"title":727,"path":743,"stem":747},"contributing\u002Findex",{"title":749,"path":750,"stem":751},"Writing docs","\u002Fcontributing\u002Fwriting-docs","contributing\u002F1.writing-docs",{"title":753,"path":754,"stem":755},"Update rules","\u002Fcontributing\u002Fupdate-rules","contributing\u002F2.update-rules",{"title":757,"path":758,"stem":759},"Content components","\u002Fcontributing\u002Fcomponents","contributing\u002Fcomponents",{"title":761,"path":762,"stem":763,"children":764},"Core","\u002Fcore","core",[765,767,781,810],{"title":727,"path":762,"stem":766},"core\u002Findex",{"title":768,"path":769,"stem":770,"children":771,"page":780},"Getting Started","\u002Fcore\u002Fgetting-started","core\u002F1.getting-started",[772,776],{"title":773,"path":774,"stem":775},"Installation","\u002Fcore\u002Fgetting-started\u002Finstallation","core\u002F1.getting-started\u002F1.installation",{"title":777,"path":778,"stem":779},"First use","\u002Fcore\u002Fgetting-started\u002Ffirst-use","core\u002F1.getting-started\u002F2.first-use",false,{"title":782,"path":783,"stem":784,"children":785,"page":780},"Guides","\u002Fcore\u002Fguides","core\u002F2.guides",[786,790,794,798,802,806],{"title":787,"path":788,"stem":789},"Parsing and validating","\u002Fcore\u002Fguides\u002Fparsing-and-validating","core\u002F2.guides\u002F1.parsing-and-validating",{"title":791,"path":792,"stem":793},"Serializing and sharing","\u002Fcore\u002Fguides\u002Fserializing-and-sharing","core\u002F2.guides\u002F2.serializing-and-sharing",{"title":795,"path":796,"stem":797},"Unit conversion","\u002Fcore\u002Fguides\u002Funit-conversion","core\u002F2.guides\u002F3.unit-conversion",{"title":799,"path":800,"stem":801},"Vocabularies and textures","\u002Fcore\u002Fguides\u002Fvocabularies-and-textures","core\u002F2.guides\u002F4.vocabularies-and-textures",{"title":803,"path":804,"stem":805},"Water quality vocabulary","\u002Fcore\u002Fguides\u002Fwater-quality-vocabulary","core\u002F2.guides\u002F5.water-quality-vocabulary",{"title":807,"path":808,"stem":809},"Versions and time zones","\u002Fcore\u002Fguides\u002Fversions-and-time-zones","core\u002F2.guides\u002F6.versions-and-time-zones",{"title":811,"path":812,"stem":813,"children":814},"API reference","\u002Fcore\u002Fapi","core\u002Fapi\u002Findex",[815],{"title":811,"path":812,"stem":813},{"title":817,"path":818,"stem":819,"children":820},"Format","\u002Fformat","format",[821,823,843,872,896,916,922],{"title":727,"path":818,"stem":822},"format\u002Findex",{"title":768,"path":824,"stem":825,"children":826,"page":780},"\u002Fformat\u002Fgetting-started","format\u002F1.getting-started",[827,831,835,839],{"title":828,"path":829,"stem":830},"What is .well?","\u002Fformat\u002Fgetting-started\u002Fwhat-is-well","format\u002F1.getting-started\u002F1.what-is-well",{"title":832,"path":833,"stem":834},"For geologists","\u002Fformat\u002Fgetting-started\u002Ffor-geologists","format\u002F1.getting-started\u002F2.for-geologists",{"title":836,"path":837,"stem":838},"For developers","\u002Fformat\u002Fgetting-started\u002Ffor-developers","format\u002F1.getting-started\u002F3.for-developers",{"title":840,"path":841,"stem":842},"Your first .well file","\u002Fformat\u002Fgetting-started\u002Ffirst-well-file","format\u002F1.getting-started\u002F4.first-well-file",{"title":844,"path":845,"stem":846,"children":847,"page":780},"Concepts","\u002Fformat\u002Fconcepts","format\u002F2.concepts",[848,852,856,860,864,868],{"title":849,"path":850,"stem":851},"Depths and intervals","\u002Fformat\u002Fconcepts\u002Fdepths-and-intervals","format\u002F2.concepts\u002F1.depths-and-intervals",{"title":853,"path":854,"stem":855},"Units and precision","\u002Fformat\u002Fconcepts\u002Funits-and-precision","format\u002F2.concepts\u002F2.units-and-precision",{"title":857,"path":858,"stem":859},"Vocabularies","\u002Fformat\u002Fconcepts\u002Fvocabularies","format\u002F2.concepts\u002F3.vocabularies",{"title":861,"path":862,"stem":863},"Profiles","\u002Fformat\u002Fconcepts\u002Fprofiles","format\u002F2.concepts\u002F4.profiles",{"title":865,"path":866,"stem":867},"Versions and deprecation","\u002Fformat\u002Fconcepts\u002Fversions-and-deprecation","format\u002F2.concepts\u002F5.versions-and-deprecation",{"title":869,"path":870,"stem":871},"Extensibility","\u002Fformat\u002Fconcepts\u002Fextensibility","format\u002F2.concepts\u002F6.extensibility",{"title":782,"path":873,"stem":874,"children":875,"page":780},"\u002Fformat\u002Fguides","format\u002F3.guides",[876,880,884,888,892],{"title":877,"path":878,"stem":879},"Writing a .well by hand","\u002Fformat\u002Fguides\u002Fwriting-by-hand","format\u002F3.guides\u002F1.writing-by-hand",{"title":881,"path":882,"stem":883},"Converting a report","\u002Fformat\u002Fguides\u002Fconverting-a-report","format\u002F3.guides\u002F2.converting-a-report",{"title":885,"path":886,"stem":887},"Validating","\u002Fformat\u002Fguides\u002Fvalidating","format\u002F3.guides\u002F3.validating",{"title":889,"path":890,"stem":891},"Extending for your own needs","\u002Fformat\u002Fguides\u002Fextending","format\u002F3.guides\u002F4.extending",{"title":893,"path":894,"stem":895},"Building an editor or database on .well","\u002Fformat\u002Fguides\u002Fbuilding-on-well","format\u002F3.guides\u002F5.building-on-well",{"title":897,"path":898,"stem":899,"children":900},"Overview","\u002Fformat\u002Freference","format\u002F4.reference\u002Findex",[901,902,906,910],{"title":897,"path":898,"stem":899},{"title":903,"path":904,"stem":905},"JSON Schema","\u002Fformat\u002Freference\u002Fjson-schema","format\u002F4.reference\u002F1.json-schema",{"title":907,"path":908,"stem":909},"Example wells","\u002Fformat\u002Freference\u002Fexamples","format\u002F4.reference\u002F2.examples",{"title":911,"path":912,"stem":913,"children":914},"Object reference","\u002Fformat\u002Freference\u002Fobjects","format\u002Freference\u002Fobjects\u002Findex",[915],{"title":911,"path":912,"stem":913},{"title":917,"path":918,"stem":919,"children":920},"About the spec","\u002Fformat\u002Fspec","format\u002F5.spec\u002Findex",[921],{"title":917,"path":918,"stem":919},{"title":923,"path":924,"stem":925},"Changelog","\u002Fformat\u002Fchangelog","format\u002F6.changelog",{"title":927,"path":928,"stem":929,"children":930},"Render","\u002Frender","render",[931,933,943,975],{"title":727,"path":928,"stem":932},"render\u002Findex",{"title":768,"path":934,"stem":935,"children":936,"page":780},"\u002Frender\u002Fgetting-started","render\u002F1.getting-started",[937,940],{"title":773,"path":938,"stem":939},"\u002Frender\u002Fgetting-started\u002Finstallation","render\u002F1.getting-started\u002F1.installation",{"title":777,"path":941,"stem":942},"\u002Frender\u002Fgetting-started\u002Ffirst-use","render\u002F1.getting-started\u002F2.first-use",{"title":782,"path":944,"stem":945,"children":946,"page":780},"\u002Frender\u002Fguides","render\u002F2.guides",[947,951,955,959,963,967,971],{"title":948,"path":949,"stem":950},"Panels and layout","\u002Frender\u002Fguides\u002Fpanels-and-layout","render\u002F2.guides\u002F1.panels-and-layout",{"title":952,"path":953,"stem":954},"Layers and labels","\u002Frender\u002Fguides\u002Flayers-and-labels","render\u002F2.guides\u002F2.layers-and-labels",{"title":956,"path":957,"stem":958},"Theming","\u002Frender\u002Fguides\u002Ftheming","render\u002F2.guides\u002F3.theming",{"title":960,"path":961,"stem":962},"Locale and units","\u002Frender\u002Fguides\u002Flocale-and-units","render\u002F2.guides\u002F4.locale-and-units",{"title":964,"path":965,"stem":966},"Legends","\u002Frender\u002Fguides\u002Flegends","render\u002F2.guides\u002F5.legends",{"title":968,"path":969,"stem":970},"Zoom, pan and highlights","\u002Frender\u002Fguides\u002Finteraction","render\u002F2.guides\u002F6.interaction",{"title":972,"path":973,"stem":974},"Using it in a framework","\u002Frender\u002Fguides\u002Fframeworks","render\u002F2.guides\u002F7.frameworks",{"title":811,"path":976,"stem":977,"children":978},"\u002Frender\u002Fapi","render\u002Fapi\u002Findex",[979],{"title":811,"path":976,"stem":977},{"title":981,"path":982,"stem":983,"children":984},"Utils","\u002Futils","utils",[985,987,997,1030],{"title":727,"path":982,"stem":986},"utils\u002Findex",{"title":768,"path":988,"stem":989,"children":990,"page":780},"\u002Futils\u002Fgetting-started","utils\u002F1.getting-started",[991,994],{"title":773,"path":992,"stem":993},"\u002Futils\u002Fgetting-started\u002Finstallation","utils\u002F1.getting-started\u002F1.installation",{"title":777,"path":995,"stem":996},"\u002Futils\u002Fgetting-started\u002Ffirst-use","utils\u002F1.getting-started\u002F2.first-use",{"title":782,"path":998,"stem":999,"children":1000,"page":780},"\u002Futils\u002Fguides","utils\u002F2.guides",[1001,1005,1009,1013,1014,1018,1022,1026],{"title":1002,"path":1003,"stem":1004},"Geometry and volumes","\u002Futils\u002Fguides\u002Fgeometry-and-volumes","utils\u002F2.guides\u002F1.geometry-and-volumes",{"title":1006,"path":1007,"stem":1008},"Water levels and pumping tests","\u002Futils\u002Fguides\u002Fpumping-tests","utils\u002F2.guides\u002F2.pumping-tests",{"title":1010,"path":1011,"stem":1012},"Permits","\u002Futils\u002Fguides\u002Fpermits","utils\u002F2.guides\u002F3.permits",{"title":7,"path":714,"stem":717},{"title":1015,"path":1016,"stem":1017},"Water quality","\u002Futils\u002Fguides\u002Fwater-quality","utils\u002F2.guides\u002F5.water-quality",{"title":1019,"path":1020,"stem":1021},"Logger import","\u002Futils\u002Fguides\u002Flogger-import","utils\u002F2.guides\u002F6.logger-import",{"title":1023,"path":1024,"stem":1025},"SIAGAS import","\u002Futils\u002Fguides\u002Fsiagas-import","utils\u002F2.guides\u002F7.siagas-import",{"title":1027,"path":1028,"stem":1029},"Formatting","\u002Futils\u002Fguides\u002Fformatting","utils\u002F2.guides\u002F8.formatting",{"title":811,"path":1031,"stem":1032,"children":1033},"\u002Futils\u002Fapi","utils\u002Fapi\u002Findex",[1034],{"title":811,"path":1031,"stem":1032},[1036],{"title":817,"path":818,"stem":819,"children":1037,"page":780},[1038],{"title":1039,"path":918,"stem":1040,"children":1041,"page":780},"Spec","format\u002Fspec",[1042,1051,1060],{"title":1043,"path":1044,"stem":1045,"children":1046,"page":780},"Reference","\u002Fformat\u002Fspec\u002Freference","format\u002Fspec\u002Freference",[1047],{"title":1048,"path":1049,"stem":1050},"FGDC Texture Patterns Reference","\u002Fformat\u002Fspec\u002Freference\u002Ffgdc-textures","format\u002Fspec\u002Freference\u002Ffgdc-textures",{"title":1052,"path":1053,"stem":1054,"children":1055,"page":780},"V1","\u002Fformat\u002Fspec\u002Fv1","format\u002Fspec\u002Fv1",[1056],{"title":1057,"path":1058,"stem":1059},".well File Format Specification","\u002Fformat\u002Fspec\u002Fv1\u002Fwell-format","format\u002Fspec\u002Fv1\u002Fwell-format",{"title":1061,"path":1062,"stem":1063,"children":1064,"page":780},"V2","\u002Fformat\u002Fspec\u002Fv2","format\u002Fspec\u002Fv2",[1065,1069,1073,1077,1081],{"title":1066,"path":1067,"stem":1068},".well File Format Specification — Version 2.4: Format Reference","\u002Fformat\u002Fspec\u002Fv2\u002Fformat-reference","format\u002Fspec\u002Fv2\u002Fformat-reference",{"title":1070,"path":1071,"stem":1072},".well File Format Specification — Version 2.4: Interoperability","\u002Fformat\u002Fspec\u002Fv2\u002Finteroperability","format\u002Fspec\u002Fv2\u002Finteroperability",{"title":1074,"path":1075,"stem":1076},".well File Format Specification — Version 2.4: Object Schemas","\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas","format\u002Fspec\u002Fv2\u002Fobject-schemas",{"title":1078,"path":1079,"stem":1080},".well File Format Specification — Version 2.4: Overview","\u002Fformat\u002Fspec\u002Fv2\u002Foverview","format\u002Fspec\u002Fv2\u002Foverview",{"title":1082,"path":1083,"stem":1084},".well File Format Specification — Version 2.4: Water Quality","\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality","format\u002Fspec\u002Fv2\u002Fwater-quality",[1086,1091,1097],{"title":761,"path":762,"stem":763,"children":1087,"page":780},[1088],{"title":553,"path":1089,"stem":1090},"\u002Fcore\u002Fchangelog","core\u002FCHANGELOG",{"title":927,"path":928,"stem":929,"children":1092,"page":780},[1093],{"title":1094,"path":1095,"stem":1096},"@welldot\u002Frender","\u002Frender\u002Fchangelog","render\u002FCHANGELOG",{"title":981,"path":982,"stem":983,"children":1098,"page":780},[1099],{"title":47,"path":1100,"stem":1101},"\u002Futils\u002Fchangelog","utils\u002FCHANGELOG",1793050495419]