[{"data":1,"prerenderedAt":1393},["ShallowReactive",2],{"page-\u002Futils\u002Fguides\u002Fwater-quality":3,"navigation":1013},{"collection":4,"page":5},"docs_en",{"id":6,"title":7,"body":8,"description":1005,"extension":1006,"meta":1007,"navigation":127,"path":1008,"rawbody":1009,"seo":1010,"stem":1011,"__hash__":1012},"docs_en\u002Futils\u002F2.guides\u002F5.water-quality.md","Water quality",{"type":9,"value":10,"toc":996},"minimark",[11,30,46,51,71,218,222,278,285,289,301,417,438,448,452,612,622,626,717,772,776,789,793,989,992],[12,13,14,18,19,24,25,29],"p",{},[15,16,17],"code",{},"water_samples"," is a ledger of samples, each with its field and laboratory results (",[20,21,23],"a",{"href":22},"\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#water_samples","water samples","). The file records only what was measured. Exceedances, ion balance and facies are derived on demand, and drinking water limits are chosen by the reader, never stored (",[20,26,28],{"href":27},"\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#limit-sets-are-not-part-of-the-file","limit sets",").",[12,31,32,33,37,38,41,42,45],{},"The outputs below come from two ",[20,34,36],{"href":35},"\u002Fformat\u002Freference\u002Fexamples","example wells",": ",[15,39,40],{},"extremoz-rn-barreiras-raso"," (nitrate rising in a shallow well) and ",[15,43,44],{},"quixeramobim-ce-cristalino-salobro"," (brackish water in crystalline rock).",[47,48,50],"h2",{"id":49},"which-samples-count","Which samples count",[12,52,53,54,57,58,61,62,65,66,70],{},"A corrected laboratory report is a new sample whose ",[15,55,56],{},"corrects"," points to the old one, and a result whose ",[15,59,60],{},"validation.status"," is ",[15,63,64],{},"rejected"," is excluded from every derivation (",[20,67,69],{"href":68},"\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#result-rules","result rules","). Start from the effective list:",[72,73,78],"pre",{"className":74,"code":75,"language":76,"meta":77,"style":77},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { getEffectiveWaterSamples, isResultUsable } from '@welldot\u002Futils';\n\nconst samples = getEffectiveWaterSamples(well); \u002F\u002F not retracted, sorted by datetime, sequence, file order\nconst latest = samples.at(-1)!;\nconst usable = latest.results.filter(isResultUsable);\n","ts","",[15,79,80,122,129,155,190],{"__ignoreMap":77},[81,82,85,89,93,97,100,103,106,109,112,116,119],"span",{"class":83,"line":84},"line",1,[81,86,88],{"class":87},"s7zQu","import",[81,90,92],{"class":91},"sMK4o"," {",[81,94,96],{"class":95},"sTEyZ"," getEffectiveWaterSamples",[81,98,99],{"class":91},",",[81,101,102],{"class":95}," isResultUsable",[81,104,105],{"class":91}," }",[81,107,108],{"class":87}," from",[81,110,111],{"class":91}," '",[81,113,115],{"class":114},"sfazB","@welldot\u002Futils",[81,117,118],{"class":91},"'",[81,120,121],{"class":91},";\n",[81,123,125],{"class":83,"line":124},2,[81,126,128],{"emptyLinePlaceholder":127},true,"\n",[81,130,132,136,139,142,145,148,151],{"class":83,"line":131},3,[81,133,135],{"class":134},"spNyl","const",[81,137,138],{"class":95}," samples ",[81,140,141],{"class":91},"=",[81,143,96],{"class":144},"s2Zo4",[81,146,147],{"class":95},"(well)",[81,149,150],{"class":91},";",[81,152,154],{"class":153},"sHwdD"," \u002F\u002F not retracted, sorted by datetime, sequence, file order\n",[81,156,158,160,163,165,168,171,174,177,180,184,187],{"class":83,"line":157},4,[81,159,135],{"class":134},[81,161,162],{"class":95}," latest ",[81,164,141],{"class":91},[81,166,167],{"class":95}," samples",[81,169,170],{"class":91},".",[81,172,173],{"class":144},"at",[81,175,176],{"class":95},"(",[81,178,179],{"class":91},"-",[81,181,183],{"class":182},"sbssI","1",[81,185,186],{"class":95},")",[81,188,189],{"class":91},"!;\n",[81,191,193,195,198,200,203,205,208,210,213,216],{"class":83,"line":192},5,[81,194,135],{"class":134},[81,196,197],{"class":95}," usable ",[81,199,141],{"class":91},[81,201,202],{"class":95}," latest",[81,204,170],{"class":91},[81,206,207],{"class":95},"results",[81,209,170],{"class":91},[81,211,212],{"class":144},"filter",[81,214,215],{"class":95},"(isResultUsable)",[81,217,121],{"class":91},[47,219,221],{"id":220},"latest-value-of-a-parameter","Latest value of a parameter",[72,223,225],{"className":74,"code":224,"language":76,"meta":77,"style":77},"import { getLatestResult } from '@welldot\u002Futils';\n\ngetLatestResult(well, 'nitrate_as_n');\n\u002F\u002F { sample: { id: 'am-2025', … }, result: { parameter: {…}, value: 12.6, measured_in: 'lab' } }\n",[15,226,227,248,252,273],{"__ignoreMap":77},[81,228,229,231,233,236,238,240,242,244,246],{"class":83,"line":84},[81,230,88],{"class":87},[81,232,92],{"class":91},[81,234,235],{"class":95}," getLatestResult",[81,237,105],{"class":91},[81,239,108],{"class":87},[81,241,111],{"class":91},[81,243,115],{"class":114},[81,245,118],{"class":91},[81,247,121],{"class":91},[81,249,250],{"class":83,"line":124},[81,251,128],{"emptyLinePlaceholder":127},[81,253,254,257,260,262,264,267,269,271],{"class":83,"line":131},[81,255,256],{"class":144},"getLatestResult",[81,258,259],{"class":95},"(well",[81,261,99],{"class":91},[81,263,111],{"class":91},[81,265,266],{"class":114},"nitrate_as_n",[81,268,118],{"class":91},[81,270,186],{"class":95},[81,272,121],{"class":91},[81,274,275],{"class":83,"line":157},[81,276,277],{"class":153},"\u002F\u002F { sample: { id: 'am-2025', … }, result: { parameter: {…}, value: 12.6, measured_in: 'lab' } }\n",[12,279,280,281,284],{},"It skips blanks and rejected results, and matches CAS numbers to their ",[15,282,283],{},"welldot"," code.",[47,286,288],{"id":287},"exceedances","Exceedances",[12,290,291,292,295,296,300],{},"Pick a limit set from ",[15,293,294],{},"@welldot\u002Fcore"," (",[20,297,299],{"href":298},"\u002Fcore\u002Fguides\u002Fwater-quality-vocabulary","Water quality vocabulary",") and compare:",[72,302,304],{"className":74,"code":303,"language":76,"meta":77,"style":77},"import { BR_GM_MS_888_2021, WHO_GDWQ_2022 } from '@welldot\u002Fcore';\nimport { getExceedances } from '@welldot\u002Futils';\n\ngetExceedances(latest, BR_GM_MS_888_2021);\n\u002F\u002F [\n\u002F\u002F   { result_index: 0, parameter: { code: 'ph', … }, limit: { min: 6, max: 9, … }, kind: 'below_min' },\n\u002F\u002F   { result_index: 3, parameter: { code: 'nitrate_as_n', … }, limit: { max: 10, … }, kind: 'above_max' }\n\u002F\u002F ]\n\ngetExceedances(latest, WHO_GDWQ_2022); \u002F\u002F [] (WHO limits nitrate as NO₃, not as N)\n",[15,305,306,332,353,357,372,377,383,389,395,400],{"__ignoreMap":77},[81,307,308,310,312,315,317,320,322,324,326,328,330],{"class":83,"line":84},[81,309,88],{"class":87},[81,311,92],{"class":91},[81,313,314],{"class":95}," BR_GM_MS_888_2021",[81,316,99],{"class":91},[81,318,319],{"class":95}," WHO_GDWQ_2022",[81,321,105],{"class":91},[81,323,108],{"class":87},[81,325,111],{"class":91},[81,327,294],{"class":114},[81,329,118],{"class":91},[81,331,121],{"class":91},[81,333,334,336,338,341,343,345,347,349,351],{"class":83,"line":124},[81,335,88],{"class":87},[81,337,92],{"class":91},[81,339,340],{"class":95}," getExceedances",[81,342,105],{"class":91},[81,344,108],{"class":87},[81,346,111],{"class":91},[81,348,115],{"class":114},[81,350,118],{"class":91},[81,352,121],{"class":91},[81,354,355],{"class":83,"line":131},[81,356,128],{"emptyLinePlaceholder":127},[81,358,359,362,365,367,370],{"class":83,"line":157},[81,360,361],{"class":144},"getExceedances",[81,363,364],{"class":95},"(latest",[81,366,99],{"class":91},[81,368,369],{"class":95}," BR_GM_MS_888_2021)",[81,371,121],{"class":91},[81,373,374],{"class":83,"line":192},[81,375,376],{"class":153},"\u002F\u002F [\n",[81,378,380],{"class":83,"line":379},6,[81,381,382],{"class":153},"\u002F\u002F   { result_index: 0, parameter: { code: 'ph', … }, limit: { min: 6, max: 9, … }, kind: 'below_min' },\n",[81,384,386],{"class":83,"line":385},7,[81,387,388],{"class":153},"\u002F\u002F   { result_index: 3, parameter: { code: 'nitrate_as_n', … }, limit: { max: 10, … }, kind: 'above_max' }\n",[81,390,392],{"class":83,"line":391},8,[81,393,394],{"class":153},"\u002F\u002F ]\n",[81,396,398],{"class":83,"line":397},9,[81,399,128],{"emptyLinePlaceholder":127},[81,401,403,405,407,409,412,414],{"class":83,"line":402},10,[81,404,361],{"class":144},[81,406,364],{"class":95},[81,408,99],{"class":91},[81,410,411],{"class":95}," WHO_GDWQ_2022)",[81,413,150],{"class":91},[81,415,416],{"class":153}," \u002F\u002F [] (WHO limits nitrate as NO₃, not as N)\n",[12,418,419,420,295,423,426,427,430,431,434,435,170],{},"Each exceedance has the result's index, the parameter, the limit and its ",[15,421,422],{},"kind",[15,424,425],{},"above_max",", ",[15,428,429],{},"below_min",", or a presence where absence is required). Censored values are handled: ",[15,432,433],{},"\u003C 5"," cannot exceed a limit of 10. Turbidity in FAU is never compared with nephelometric limits. You can also pass your own ",[15,436,437],{},"Limit[]",[439,440,441],"note",{},[12,442,443,444,29],{},"The same sample can pass one standard and fail another. That is why limits stay out of the file: the reader chooses the standard (",[20,445,447],{"href":446},"\u002Fformat\u002Fspec\u002Fv2\u002Foverview#design-principles","jurisdiction neutrality",[47,449,451],{"id":450},"hydrochemistry","Hydrochemistry",[72,453,455],{"className":74,"code":454,"language":76,"meta":77,"style":77},"import {\n  getEffectiveWaterSamples,\n  getHydrochemicalFacies,\n  getIonBalance,\n  getPiperCoordinates,\n  getStiffValues,\n} from '@welldot\u002Futils';\n\nconst sample = getEffectiveWaterSamples(brackishWell).at(-1)!;\n\ngetIonBalance(sample);\n\u002F\u002F { cations_meq: 44.29, anions_meq: 44.51, error_pct: -0.26 }\n\ngetHydrochemicalFacies(sample); \u002F\u002F { cation: 'mixed', anion: 'chloride' }\ngetStiffValues(sample); \u002F\u002F meq\u002FL of Na+K, Ca, Mg, Cl, HCO₃+CO₃, SO₄\ngetPiperCoordinates(sample); \u002F\u002F meq % in each triangle and the diamond point\n",[15,456,457,464,472,479,486,493,500,515,519,547,551,562,568,573,586,599],{"__ignoreMap":77},[81,458,459,461],{"class":83,"line":84},[81,460,88],{"class":87},[81,462,463],{"class":91}," {\n",[81,465,466,469],{"class":83,"line":124},[81,467,468],{"class":95},"  getEffectiveWaterSamples",[81,470,471],{"class":91},",\n",[81,473,474,477],{"class":83,"line":131},[81,475,476],{"class":95},"  getHydrochemicalFacies",[81,478,471],{"class":91},[81,480,481,484],{"class":83,"line":157},[81,482,483],{"class":95},"  getIonBalance",[81,485,471],{"class":91},[81,487,488,491],{"class":83,"line":192},[81,489,490],{"class":95},"  getPiperCoordinates",[81,492,471],{"class":91},[81,494,495,498],{"class":83,"line":379},[81,496,497],{"class":95},"  getStiffValues",[81,499,471],{"class":91},[81,501,502,505,507,509,511,513],{"class":83,"line":385},[81,503,504],{"class":91},"}",[81,506,108],{"class":87},[81,508,111],{"class":91},[81,510,115],{"class":114},[81,512,118],{"class":91},[81,514,121],{"class":91},[81,516,517],{"class":83,"line":391},[81,518,128],{"emptyLinePlaceholder":127},[81,520,521,523,526,528,530,533,535,537,539,541,543,545],{"class":83,"line":397},[81,522,135],{"class":134},[81,524,525],{"class":95}," sample ",[81,527,141],{"class":91},[81,529,96],{"class":144},[81,531,532],{"class":95},"(brackishWell)",[81,534,170],{"class":91},[81,536,173],{"class":144},[81,538,176],{"class":95},[81,540,179],{"class":91},[81,542,183],{"class":182},[81,544,186],{"class":95},[81,546,189],{"class":91},[81,548,549],{"class":83,"line":402},[81,550,128],{"emptyLinePlaceholder":127},[81,552,554,557,560],{"class":83,"line":553},11,[81,555,556],{"class":144},"getIonBalance",[81,558,559],{"class":95},"(sample)",[81,561,121],{"class":91},[81,563,565],{"class":83,"line":564},12,[81,566,567],{"class":153},"\u002F\u002F { cations_meq: 44.29, anions_meq: 44.51, error_pct: -0.26 }\n",[81,569,571],{"class":83,"line":570},13,[81,572,128],{"emptyLinePlaceholder":127},[81,574,576,579,581,583],{"class":83,"line":575},14,[81,577,578],{"class":144},"getHydrochemicalFacies",[81,580,559],{"class":95},[81,582,150],{"class":91},[81,584,585],{"class":153}," \u002F\u002F { cation: 'mixed', anion: 'chloride' }\n",[81,587,589,592,594,596],{"class":83,"line":588},15,[81,590,591],{"class":144},"getStiffValues",[81,593,559],{"class":95},[81,595,150],{"class":91},[81,597,598],{"class":153}," \u002F\u002F meq\u002FL of Na+K, Ca, Mg, Cl, HCO₃+CO₃, SO₄\n",[81,600,602,605,607,609],{"class":83,"line":601},16,[81,603,604],{"class":144},"getPiperCoordinates",[81,606,559],{"class":95},[81,608,150],{"class":91},[81,610,611],{"class":153}," \u002F\u002F meq % in each triangle and the diamond point\n",[12,613,614,615,617,618,621],{},"The ion balance error is the usual check on a complete major-ion analysis: within about ±5 % it is considered consistent. Molar masses and charges come from the parameter vocabulary in ",[15,616,294],{},". ",[15,619,620],{},"getAcidDrainageIndicators(sample)"," returns net alkalinity and the sulfate\u002Fchloride ratio when the analysis has them.",[47,623,625],{"id":624},"field-qaqc","Field QA\u002FQC",[627,628,629,642],"table",{},[630,631,632],"thead",{},[633,634,635,639],"tr",{},[636,637,638],"th",{},"Function",[636,640,641],{},"Checks",[643,644,645,659,669,679,693,703],"tbody",{},[633,646,647,653],{},[648,649,650],"td",{},[15,651,652],{},"getRelativePercentDifferences(well, sampleId)",[648,654,655,656,170],{},"Relative percent difference per parameter between a field duplicate or split and its ",[15,657,658],{},"parent_sample_id",[633,660,661,666],{},[648,662,663],{},[15,664,665],{},"getBlankContamination(well)",[648,667,668],{},"Substances detected in field, trip and equipment blanks, with their campaign.",[633,670,671,676],{},[648,672,673],{},[15,674,675],{},"getHoldingTimes(sample)",[648,677,678],{},"Hours from collection to analysis per result, honoring day-resolution dates.",[633,680,681,686],{},[648,682,683],{},[15,684,685],{},"getReceivedTemperatureCompliance(sample, maxC?)",[648,687,688,689,692],{},"Whether the sample arrived at the lab at or below ",[15,690,691],{},"maxC"," (6 °C by default).",[633,694,695,700],{},[648,696,697],{},[15,698,699],{},"getPurgeStabilization(purge, criteria?, window?)",[648,701,702],{},"Whether the purge readings stabilized, per parameter, over the last readings.",[633,704,705,714],{},[648,706,707,710,711],{},[15,708,709],{},"getSampleDepth(well, sample)"," \u002F ",[15,712,713],{},"isFormationWater(well, sample)",[648,715,716],{},"The sampling depth, and whether it lies in a screened interval below the static level.",[72,718,720],{"className":74,"code":719,"language":76,"meta":77,"style":77},"import { getRelativePercentDifferences } from '@welldot\u002Futils';\n\ngetRelativePercentDifferences(well, 'am-2025-dup');\n\u002F\u002F [{ key: 'nitrate_as_n', original: 2.8, duplicate: 2.7, rpd_pct: 3.64 }, …]\n",[15,721,722,743,747,767],{"__ignoreMap":77},[81,723,724,726,728,731,733,735,737,739,741],{"class":83,"line":84},[81,725,88],{"class":87},[81,727,92],{"class":91},[81,729,730],{"class":95}," getRelativePercentDifferences",[81,732,105],{"class":91},[81,734,108],{"class":87},[81,736,111],{"class":91},[81,738,115],{"class":114},[81,740,118],{"class":91},[81,742,121],{"class":91},[81,744,745],{"class":83,"line":124},[81,746,128],{"emptyLinePlaceholder":127},[81,748,749,752,754,756,758,761,763,765],{"class":83,"line":131},[81,750,751],{"class":144},"getRelativePercentDifferences",[81,753,259],{"class":95},[81,755,99],{"class":91},[81,757,111],{"class":91},[81,759,760],{"class":114},"am-2025-dup",[81,762,118],{"class":91},[81,764,186],{"class":95},[81,766,121],{"class":91},[81,768,769],{"class":83,"line":157},[81,770,771],{"class":153},"\u002F\u002F [{ key: 'nitrate_as_n', original: 2.8, duplicate: 2.7, rpd_pct: 3.64 }, …]\n",[47,773,775],{"id":774},"warnings","Warnings",[12,777,778,781,782,784,785,29],{},[15,779,780],{},"getWaterSampleWarnings(well)"," lists the water quality conditions the spec marks as warnings, such as a field duplicate without ",[15,783,658],{},", a sampling depth outside the screens, a result analyzed before it was collected or a duplicated result, with the sample ids and result indexes (",[20,786,788],{"href":787},"\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#validation-warnings-never-rejection","validation warnings",[47,790,792],{"id":791},"display","Display",[72,794,796],{"className":74,"code":795,"language":76,"meta":77,"style":77},"import { formatWaterQualityResult, parameterUnitSymbol } from '@welldot\u002Futils';\n\nconst labels = {\n  notDetected: 'n.d.',\n  present: 'present',\n  absent: 'absent',\n  estimated: 'est.',\n};\n\nfor (const r of latest.results) {\n  console.log(formatWaterQualityResult(r, labels), parameterUnitSymbol(r));\n  \u002F\u002F '\u003C 5' 'mg\u002FL', '0.004 (est.)' 'mg\u002FL', 'absent' '', …\n}\n",[15,797,798,824,828,839,857,873,889,905,910,914,939,979,984],{"__ignoreMap":77},[81,799,800,802,804,807,809,812,814,816,818,820,822],{"class":83,"line":84},[81,801,88],{"class":87},[81,803,92],{"class":91},[81,805,806],{"class":95}," formatWaterQualityResult",[81,808,99],{"class":91},[81,810,811],{"class":95}," parameterUnitSymbol",[81,813,105],{"class":91},[81,815,108],{"class":87},[81,817,111],{"class":91},[81,819,115],{"class":114},[81,821,118],{"class":91},[81,823,121],{"class":91},[81,825,826],{"class":83,"line":124},[81,827,128],{"emptyLinePlaceholder":127},[81,829,830,832,835,837],{"class":83,"line":131},[81,831,135],{"class":134},[81,833,834],{"class":95}," labels ",[81,836,141],{"class":91},[81,838,463],{"class":91},[81,840,841,845,848,850,853,855],{"class":83,"line":157},[81,842,844],{"class":843},"swJcz","  notDetected",[81,846,847],{"class":91},":",[81,849,111],{"class":91},[81,851,852],{"class":114},"n.d.",[81,854,118],{"class":91},[81,856,471],{"class":91},[81,858,859,862,864,866,869,871],{"class":83,"line":192},[81,860,861],{"class":843},"  present",[81,863,847],{"class":91},[81,865,111],{"class":91},[81,867,868],{"class":114},"present",[81,870,118],{"class":91},[81,872,471],{"class":91},[81,874,875,878,880,882,885,887],{"class":83,"line":379},[81,876,877],{"class":843},"  absent",[81,879,847],{"class":91},[81,881,111],{"class":91},[81,883,884],{"class":114},"absent",[81,886,118],{"class":91},[81,888,471],{"class":91},[81,890,891,894,896,898,901,903],{"class":83,"line":385},[81,892,893],{"class":843},"  estimated",[81,895,847],{"class":91},[81,897,111],{"class":91},[81,899,900],{"class":114},"est.",[81,902,118],{"class":91},[81,904,471],{"class":91},[81,906,907],{"class":83,"line":391},[81,908,909],{"class":91},"};\n",[81,911,912],{"class":83,"line":397},[81,913,128],{"emptyLinePlaceholder":127},[81,915,916,919,921,923,926,929,931,933,936],{"class":83,"line":402},[81,917,918],{"class":87},"for",[81,920,295],{"class":95},[81,922,135],{"class":134},[81,924,925],{"class":95}," r ",[81,927,928],{"class":91},"of",[81,930,202],{"class":95},[81,932,170],{"class":91},[81,934,935],{"class":95},"results) ",[81,937,938],{"class":91},"{\n",[81,940,941,944,946,949,951,954,956,959,961,964,966,968,970,972,974,977],{"class":83,"line":553},[81,942,943],{"class":95},"  console",[81,945,170],{"class":91},[81,947,948],{"class":144},"log",[81,950,176],{"class":843},[81,952,953],{"class":144},"formatWaterQualityResult",[81,955,176],{"class":843},[81,957,958],{"class":95},"r",[81,960,99],{"class":91},[81,962,963],{"class":95}," labels",[81,965,186],{"class":843},[81,967,99],{"class":91},[81,969,811],{"class":144},[81,971,176],{"class":843},[81,973,958],{"class":95},[81,975,976],{"class":843},"))",[81,978,121],{"class":91},[81,980,981],{"class":83,"line":564},[81,982,983],{"class":153},"  \u002F\u002F '\u003C 5' 'mg\u002FL', '0.004 (est.)' 'mg\u002FL', 'absent' '', …\n",[81,985,986],{"class":83,"line":570},[81,987,988],{"class":91},"}\n",[12,990,991],{},"Labels are passed in, so you keep your own translations.",[993,994,995],"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 .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);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":77,"searchDepth":124,"depth":124,"links":997},[998,999,1000,1001,1002,1003,1004],{"id":49,"depth":124,"text":50},{"id":220,"depth":124,"text":221},{"id":287,"depth":124,"text":288},{"id":450,"depth":124,"text":451},{"id":624,"depth":124,"text":625},{"id":774,"depth":124,"text":775},{"id":791,"depth":124,"text":792},"Compare water samples with WHO, EU or Brazilian limits, compute ion balance, hydrochemical facies and Piper and Stiff values, and check field QA\u002FQC with @welldot\u002Futils.","md",{},"\u002Futils\u002Fguides\u002Fwater-quality","---\ntitle: Water quality\ndescription: Compare water samples with WHO, EU or Brazilian limits, compute ion balance, hydrochemical facies and Piper and Stiff values, and check field QA\u002FQC with @welldot\u002Futils.\n---\n\n`water_samples` is a ledger of samples, each with its field and laboratory results ([water samples](\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#water_samples)). The file records only what was measured. Exceedances, ion balance and facies are derived on demand, and drinking water limits are chosen by the reader, never stored ([limit sets](\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#limit-sets-are-not-part-of-the-file)).\n\nThe outputs below come from two [example wells](\u002Fformat\u002Freference\u002Fexamples): `extremoz-rn-barreiras-raso` (nitrate rising in a shallow well) and `quixeramobim-ce-cristalino-salobro` (brackish water in crystalline rock).\n\n## Which samples count\n\nA corrected laboratory report is a new sample whose `corrects` points to the old one, and a result whose `validation.status` is `rejected` is excluded from every derivation ([result rules](\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#result-rules)). Start from the effective list:\n\n```ts\nimport { getEffectiveWaterSamples, isResultUsable } from '@welldot\u002Futils';\n\nconst samples = getEffectiveWaterSamples(well); \u002F\u002F not retracted, sorted by datetime, sequence, file order\nconst latest = samples.at(-1)!;\nconst usable = latest.results.filter(isResultUsable);\n```\n\n## Latest value of a parameter\n\n```ts\nimport { getLatestResult } from '@welldot\u002Futils';\n\ngetLatestResult(well, 'nitrate_as_n');\n\u002F\u002F { sample: { id: 'am-2025', … }, result: { parameter: {…}, value: 12.6, measured_in: 'lab' } }\n```\n\nIt skips blanks and rejected results, and matches CAS numbers to their `welldot` code.\n\n## Exceedances\n\nPick a limit set from `@welldot\u002Fcore` ([Water quality vocabulary](\u002Fcore\u002Fguides\u002Fwater-quality-vocabulary)) and compare:\n\n```ts\nimport { BR_GM_MS_888_2021, WHO_GDWQ_2022 } from '@welldot\u002Fcore';\nimport { getExceedances } from '@welldot\u002Futils';\n\ngetExceedances(latest, BR_GM_MS_888_2021);\n\u002F\u002F [\n\u002F\u002F   { result_index: 0, parameter: { code: 'ph', … }, limit: { min: 6, max: 9, … }, kind: 'below_min' },\n\u002F\u002F   { result_index: 3, parameter: { code: 'nitrate_as_n', … }, limit: { max: 10, … }, kind: 'above_max' }\n\u002F\u002F ]\n\ngetExceedances(latest, WHO_GDWQ_2022); \u002F\u002F [] (WHO limits nitrate as NO₃, not as N)\n```\n\nEach exceedance has the result's index, the parameter, the limit and its `kind` (`above_max`, `below_min`, or a presence where absence is required). Censored values are handled: `\u003C 5` cannot exceed a limit of 10. Turbidity in FAU is never compared with nephelometric limits. You can also pass your own `Limit[]`.\n\n::note\nThe same sample can pass one standard and fail another. That is why limits stay out of the file: the reader chooses the standard ([jurisdiction neutrality](\u002Fformat\u002Fspec\u002Fv2\u002Foverview#design-principles)).\n::\n\n## Hydrochemistry\n\n```ts\nimport {\n  getEffectiveWaterSamples,\n  getHydrochemicalFacies,\n  getIonBalance,\n  getPiperCoordinates,\n  getStiffValues,\n} from '@welldot\u002Futils';\n\nconst sample = getEffectiveWaterSamples(brackishWell).at(-1)!;\n\ngetIonBalance(sample);\n\u002F\u002F { cations_meq: 44.29, anions_meq: 44.51, error_pct: -0.26 }\n\ngetHydrochemicalFacies(sample); \u002F\u002F { cation: 'mixed', anion: 'chloride' }\ngetStiffValues(sample); \u002F\u002F meq\u002FL of Na+K, Ca, Mg, Cl, HCO₃+CO₃, SO₄\ngetPiperCoordinates(sample); \u002F\u002F meq % in each triangle and the diamond point\n```\n\nThe ion balance error is the usual check on a complete major-ion analysis: within about ±5 % it is considered consistent. Molar masses and charges come from the parameter vocabulary in `@welldot\u002Fcore`. `getAcidDrainageIndicators(sample)` returns net alkalinity and the sulfate\u002Fchloride ratio when the analysis has them.\n\n## Field QA\u002FQC\n\n| Function                                                          | Checks                                                                                                   |\n| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |\n| `getRelativePercentDifferences(well, sampleId)`                   | Relative percent difference per parameter between a field duplicate or split and its `parent_sample_id`. |\n| `getBlankContamination(well)`                                     | Substances detected in field, trip and equipment blanks, with their campaign.                            |\n| `getHoldingTimes(sample)`                                         | Hours from collection to analysis per result, honoring day-resolution dates.                             |\n| `getReceivedTemperatureCompliance(sample, maxC?)`                 | Whether the sample arrived at the lab at or below `maxC` (6 °C by default).                              |\n| `getPurgeStabilization(purge, criteria?, window?)`                | Whether the purge readings stabilized, per parameter, over the last readings.                            |\n| `getSampleDepth(well, sample)` \u002F `isFormationWater(well, sample)` | The sampling depth, and whether it lies in a screened interval below the static level.                   |\n\n```ts\nimport { getRelativePercentDifferences } from '@welldot\u002Futils';\n\ngetRelativePercentDifferences(well, 'am-2025-dup');\n\u002F\u002F [{ key: 'nitrate_as_n', original: 2.8, duplicate: 2.7, rpd_pct: 3.64 }, …]\n```\n\n## Warnings\n\n`getWaterSampleWarnings(well)` lists the water quality conditions the spec marks as warnings, such as a field duplicate without `parent_sample_id`, a sampling depth outside the screens, a result analyzed before it was collected or a duplicated result, with the sample ids and result indexes ([validation warnings](\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality#validation-warnings-never-rejection)).\n\n## Display\n\n```ts\nimport { formatWaterQualityResult, parameterUnitSymbol } from '@welldot\u002Futils';\n\nconst labels = {\n  notDetected: 'n.d.',\n  present: 'present',\n  absent: 'absent',\n  estimated: 'est.',\n};\n\nfor (const r of latest.results) {\n  console.log(formatWaterQualityResult(r, labels), parameterUnitSymbol(r));\n  \u002F\u002F '\u003C 5' 'mg\u002FL', '0.004 (est.)' 'mg\u002FL', 'absent' '', …\n}\n```\n\nLabels are passed in, so you keep your own translations.\n",{"title":7,"description":1005},"utils\u002F2.guides\u002F5.water-quality","w80CnrAblMDsoIi70clPDSYDG0Y4vNN5tKfYNSr_HMw",{"docs_en":1014,"spec":1326,"changelogs":1376},[1015,1035,1054,1108,1217,1271],{"title":1016,"path":1017,"stem":1018,"children":1019},"Ai","\u002Fai","ai",[1020,1023,1027,1031],{"title":1021,"path":1017,"stem":1022},"Introduction","ai\u002Findex",{"title":1024,"path":1025,"stem":1026},"Converting reports with an assistant","\u002Fai\u002Fconversion-skill","ai\u002Fconversion-skill",{"title":1028,"path":1029,"stem":1030},"llms.txt and Markdown pages","\u002Fai\u002Fllms","ai\u002Fllms",{"title":1032,"path":1033,"stem":1034},"MCP server","\u002Fai\u002Fmcp","ai\u002Fmcp",{"title":1036,"path":1037,"stem":1038,"children":1039},"Contributing","\u002Fcontributing","contributing",[1040,1042,1046,1050],{"title":1021,"path":1037,"stem":1041},"contributing\u002Findex",{"title":1043,"path":1044,"stem":1045},"Writing docs","\u002Fcontributing\u002Fwriting-docs","contributing\u002F1.writing-docs",{"title":1047,"path":1048,"stem":1049},"Update rules","\u002Fcontributing\u002Fupdate-rules","contributing\u002F2.update-rules",{"title":1051,"path":1052,"stem":1053},"Content components","\u002Fcontributing\u002Fcomponents","contributing\u002Fcomponents",{"title":1055,"path":1056,"stem":1057,"children":1058},"Core","\u002Fcore","core",[1059,1061,1075,1102],{"title":1021,"path":1056,"stem":1060},"core\u002Findex",{"title":1062,"path":1063,"stem":1064,"children":1065,"page":1074},"Getting Started","\u002Fcore\u002Fgetting-started","core\u002F1.getting-started",[1066,1070],{"title":1067,"path":1068,"stem":1069},"Installation","\u002Fcore\u002Fgetting-started\u002Finstallation","core\u002F1.getting-started\u002F1.installation",{"title":1071,"path":1072,"stem":1073},"First use","\u002Fcore\u002Fgetting-started\u002Ffirst-use","core\u002F1.getting-started\u002F2.first-use",false,{"title":1076,"path":1077,"stem":1078,"children":1079,"page":1074},"Guides","\u002Fcore\u002Fguides","core\u002F2.guides",[1080,1084,1088,1092,1096,1098],{"title":1081,"path":1082,"stem":1083},"Parsing and validating","\u002Fcore\u002Fguides\u002Fparsing-and-validating","core\u002F2.guides\u002F1.parsing-and-validating",{"title":1085,"path":1086,"stem":1087},"Serializing and sharing","\u002Fcore\u002Fguides\u002Fserializing-and-sharing","core\u002F2.guides\u002F2.serializing-and-sharing",{"title":1089,"path":1090,"stem":1091},"Unit conversion","\u002Fcore\u002Fguides\u002Funit-conversion","core\u002F2.guides\u002F3.unit-conversion",{"title":1093,"path":1094,"stem":1095},"Vocabularies and textures","\u002Fcore\u002Fguides\u002Fvocabularies-and-textures","core\u002F2.guides\u002F4.vocabularies-and-textures",{"title":299,"path":298,"stem":1097},"core\u002F2.guides\u002F5.water-quality-vocabulary",{"title":1099,"path":1100,"stem":1101},"Versions and time zones","\u002Fcore\u002Fguides\u002Fversions-and-time-zones","core\u002F2.guides\u002F6.versions-and-time-zones",{"title":1103,"path":1104,"stem":1105,"children":1106},"API reference","\u002Fcore\u002Fapi","core\u002Fapi\u002Findex",[1107],{"title":1103,"path":1104,"stem":1105},{"title":1109,"path":1110,"stem":1111,"children":1112},"Format","\u002Fformat","format",[1113,1115,1135,1164,1188,1207,1213],{"title":1021,"path":1110,"stem":1114},"format\u002Findex",{"title":1062,"path":1116,"stem":1117,"children":1118,"page":1074},"\u002Fformat\u002Fgetting-started","format\u002F1.getting-started",[1119,1123,1127,1131],{"title":1120,"path":1121,"stem":1122},"What is .well?","\u002Fformat\u002Fgetting-started\u002Fwhat-is-well","format\u002F1.getting-started\u002F1.what-is-well",{"title":1124,"path":1125,"stem":1126},"For geologists","\u002Fformat\u002Fgetting-started\u002Ffor-geologists","format\u002F1.getting-started\u002F2.for-geologists",{"title":1128,"path":1129,"stem":1130},"For developers","\u002Fformat\u002Fgetting-started\u002Ffor-developers","format\u002F1.getting-started\u002F3.for-developers",{"title":1132,"path":1133,"stem":1134},"Your first .well file","\u002Fformat\u002Fgetting-started\u002Ffirst-well-file","format\u002F1.getting-started\u002F4.first-well-file",{"title":1136,"path":1137,"stem":1138,"children":1139,"page":1074},"Concepts","\u002Fformat\u002Fconcepts","format\u002F2.concepts",[1140,1144,1148,1152,1156,1160],{"title":1141,"path":1142,"stem":1143},"Depths and intervals","\u002Fformat\u002Fconcepts\u002Fdepths-and-intervals","format\u002F2.concepts\u002F1.depths-and-intervals",{"title":1145,"path":1146,"stem":1147},"Units and precision","\u002Fformat\u002Fconcepts\u002Funits-and-precision","format\u002F2.concepts\u002F2.units-and-precision",{"title":1149,"path":1150,"stem":1151},"Vocabularies","\u002Fformat\u002Fconcepts\u002Fvocabularies","format\u002F2.concepts\u002F3.vocabularies",{"title":1153,"path":1154,"stem":1155},"Profiles","\u002Fformat\u002Fconcepts\u002Fprofiles","format\u002F2.concepts\u002F4.profiles",{"title":1157,"path":1158,"stem":1159},"Versions and deprecation","\u002Fformat\u002Fconcepts\u002Fversions-and-deprecation","format\u002F2.concepts\u002F5.versions-and-deprecation",{"title":1161,"path":1162,"stem":1163},"Extensibility","\u002Fformat\u002Fconcepts\u002Fextensibility","format\u002F2.concepts\u002F6.extensibility",{"title":1076,"path":1165,"stem":1166,"children":1167,"page":1074},"\u002Fformat\u002Fguides","format\u002F3.guides",[1168,1172,1176,1180,1184],{"title":1169,"path":1170,"stem":1171},"Writing a .well by hand","\u002Fformat\u002Fguides\u002Fwriting-by-hand","format\u002F3.guides\u002F1.writing-by-hand",{"title":1173,"path":1174,"stem":1175},"Converting a report","\u002Fformat\u002Fguides\u002Fconverting-a-report","format\u002F3.guides\u002F2.converting-a-report",{"title":1177,"path":1178,"stem":1179},"Validating","\u002Fformat\u002Fguides\u002Fvalidating","format\u002F3.guides\u002F3.validating",{"title":1181,"path":1182,"stem":1183},"Extending for your own needs","\u002Fformat\u002Fguides\u002Fextending","format\u002F3.guides\u002F4.extending",{"title":1185,"path":1186,"stem":1187},"Building an editor or database on .well","\u002Fformat\u002Fguides\u002Fbuilding-on-well","format\u002F3.guides\u002F5.building-on-well",{"title":1189,"path":1190,"stem":1191,"children":1192},"Overview","\u002Fformat\u002Freference","format\u002F4.reference\u002Findex",[1193,1194,1198,1201],{"title":1189,"path":1190,"stem":1191},{"title":1195,"path":1196,"stem":1197},"JSON Schema","\u002Fformat\u002Freference\u002Fjson-schema","format\u002F4.reference\u002F1.json-schema",{"title":1199,"path":35,"stem":1200},"Example wells","format\u002F4.reference\u002F2.examples",{"title":1202,"path":1203,"stem":1204,"children":1205},"Object reference","\u002Fformat\u002Freference\u002Fobjects","format\u002Freference\u002Fobjects\u002Findex",[1206],{"title":1202,"path":1203,"stem":1204},{"title":1208,"path":1209,"stem":1210,"children":1211},"About the spec","\u002Fformat\u002Fspec","format\u002F5.spec\u002Findex",[1212],{"title":1208,"path":1209,"stem":1210},{"title":1214,"path":1215,"stem":1216},"Changelog","\u002Fformat\u002Fchangelog","format\u002F6.changelog",{"title":1218,"path":1219,"stem":1220,"children":1221},"Render","\u002Frender","render",[1222,1224,1234,1266],{"title":1021,"path":1219,"stem":1223},"render\u002Findex",{"title":1062,"path":1225,"stem":1226,"children":1227,"page":1074},"\u002Frender\u002Fgetting-started","render\u002F1.getting-started",[1228,1231],{"title":1067,"path":1229,"stem":1230},"\u002Frender\u002Fgetting-started\u002Finstallation","render\u002F1.getting-started\u002F1.installation",{"title":1071,"path":1232,"stem":1233},"\u002Frender\u002Fgetting-started\u002Ffirst-use","render\u002F1.getting-started\u002F2.first-use",{"title":1076,"path":1235,"stem":1236,"children":1237,"page":1074},"\u002Frender\u002Fguides","render\u002F2.guides",[1238,1242,1246,1250,1254,1258,1262],{"title":1239,"path":1240,"stem":1241},"Panels and layout","\u002Frender\u002Fguides\u002Fpanels-and-layout","render\u002F2.guides\u002F1.panels-and-layout",{"title":1243,"path":1244,"stem":1245},"Layers and labels","\u002Frender\u002Fguides\u002Flayers-and-labels","render\u002F2.guides\u002F2.layers-and-labels",{"title":1247,"path":1248,"stem":1249},"Theming","\u002Frender\u002Fguides\u002Ftheming","render\u002F2.guides\u002F3.theming",{"title":1251,"path":1252,"stem":1253},"Locale and units","\u002Frender\u002Fguides\u002Flocale-and-units","render\u002F2.guides\u002F4.locale-and-units",{"title":1255,"path":1256,"stem":1257},"Legends","\u002Frender\u002Fguides\u002Flegends","render\u002F2.guides\u002F5.legends",{"title":1259,"path":1260,"stem":1261},"Zoom, pan and highlights","\u002Frender\u002Fguides\u002Finteraction","render\u002F2.guides\u002F6.interaction",{"title":1263,"path":1264,"stem":1265},"Using it in a framework","\u002Frender\u002Fguides\u002Fframeworks","render\u002F2.guides\u002F7.frameworks",{"title":1103,"path":1267,"stem":1268,"children":1269},"\u002Frender\u002Fapi","render\u002Fapi\u002Findex",[1270],{"title":1103,"path":1267,"stem":1268},{"title":1272,"path":1273,"stem":1274,"children":1275},"Utils","\u002Futils","utils",[1276,1278,1288,1321],{"title":1021,"path":1273,"stem":1277},"utils\u002Findex",{"title":1062,"path":1279,"stem":1280,"children":1281,"page":1074},"\u002Futils\u002Fgetting-started","utils\u002F1.getting-started",[1282,1285],{"title":1067,"path":1283,"stem":1284},"\u002Futils\u002Fgetting-started\u002Finstallation","utils\u002F1.getting-started\u002F1.installation",{"title":1071,"path":1286,"stem":1287},"\u002Futils\u002Fgetting-started\u002Ffirst-use","utils\u002F1.getting-started\u002F2.first-use",{"title":1076,"path":1289,"stem":1290,"children":1291,"page":1074},"\u002Futils\u002Fguides","utils\u002F2.guides",[1292,1296,1300,1304,1308,1309,1313,1317],{"title":1293,"path":1294,"stem":1295},"Geometry and volumes","\u002Futils\u002Fguides\u002Fgeometry-and-volumes","utils\u002F2.guides\u002F1.geometry-and-volumes",{"title":1297,"path":1298,"stem":1299},"Water levels and pumping tests","\u002Futils\u002Fguides\u002Fpumping-tests","utils\u002F2.guides\u002F2.pumping-tests",{"title":1301,"path":1302,"stem":1303},"Permits","\u002Futils\u002Fguides\u002Fpermits","utils\u002F2.guides\u002F3.permits",{"title":1305,"path":1306,"stem":1307},"Operation and production","\u002Futils\u002Fguides\u002Foperation","utils\u002F2.guides\u002F4.operation",{"title":7,"path":1008,"stem":1011},{"title":1310,"path":1311,"stem":1312},"Logger import","\u002Futils\u002Fguides\u002Flogger-import","utils\u002F2.guides\u002F6.logger-import",{"title":1314,"path":1315,"stem":1316},"SIAGAS import","\u002Futils\u002Fguides\u002Fsiagas-import","utils\u002F2.guides\u002F7.siagas-import",{"title":1318,"path":1319,"stem":1320},"Formatting","\u002Futils\u002Fguides\u002Fformatting","utils\u002F2.guides\u002F8.formatting",{"title":1103,"path":1322,"stem":1323,"children":1324},"\u002Futils\u002Fapi","utils\u002Fapi\u002Findex",[1325],{"title":1103,"path":1322,"stem":1323},[1327],{"title":1109,"path":1110,"stem":1111,"children":1328,"page":1074},[1329],{"title":1330,"path":1209,"stem":1331,"children":1332,"page":1074},"Spec","format\u002Fspec",[1333,1342,1351],{"title":1334,"path":1335,"stem":1336,"children":1337,"page":1074},"Reference","\u002Fformat\u002Fspec\u002Freference","format\u002Fspec\u002Freference",[1338],{"title":1339,"path":1340,"stem":1341},"FGDC Texture Patterns Reference","\u002Fformat\u002Fspec\u002Freference\u002Ffgdc-textures","format\u002Fspec\u002Freference\u002Ffgdc-textures",{"title":1343,"path":1344,"stem":1345,"children":1346,"page":1074},"V1","\u002Fformat\u002Fspec\u002Fv1","format\u002Fspec\u002Fv1",[1347],{"title":1348,"path":1349,"stem":1350},".well File Format Specification","\u002Fformat\u002Fspec\u002Fv1\u002Fwell-format","format\u002Fspec\u002Fv1\u002Fwell-format",{"title":1352,"path":1353,"stem":1354,"children":1355,"page":1074},"V2","\u002Fformat\u002Fspec\u002Fv2","format\u002Fspec\u002Fv2",[1356,1360,1364,1368,1372],{"title":1357,"path":1358,"stem":1359},".well File Format Specification — Version 2.4: Format Reference","\u002Fformat\u002Fspec\u002Fv2\u002Fformat-reference","format\u002Fspec\u002Fv2\u002Fformat-reference",{"title":1361,"path":1362,"stem":1363},".well File Format Specification — Version 2.4: Interoperability","\u002Fformat\u002Fspec\u002Fv2\u002Finteroperability","format\u002Fspec\u002Fv2\u002Finteroperability",{"title":1365,"path":1366,"stem":1367},".well File Format Specification — Version 2.4: Object Schemas","\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas","format\u002Fspec\u002Fv2\u002Fobject-schemas",{"title":1369,"path":1370,"stem":1371},".well File Format Specification — Version 2.4: Overview","\u002Fformat\u002Fspec\u002Fv2\u002Foverview","format\u002Fspec\u002Fv2\u002Foverview",{"title":1373,"path":1374,"stem":1375},".well File Format Specification — Version 2.4: Water Quality","\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality","format\u002Fspec\u002Fv2\u002Fwater-quality",[1377,1382,1388],{"title":1055,"path":1056,"stem":1057,"children":1378,"page":1074},[1379],{"title":294,"path":1380,"stem":1381},"\u002Fcore\u002Fchangelog","core\u002FCHANGELOG",{"title":1218,"path":1219,"stem":1220,"children":1383,"page":1074},[1384],{"title":1385,"path":1386,"stem":1387},"@welldot\u002Frender","\u002Frender\u002Fchangelog","render\u002FCHANGELOG",{"title":1272,"path":1273,"stem":1274,"children":1389,"page":1074},[1390],{"title":115,"path":1391,"stem":1392},"\u002Futils\u002Fchangelog","utils\u002FCHANGELOG",1793050495493]