@welldot/core 0.3.0 → 0.4.0-next.20261015.d7c7365
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +288 -75
- package/dist/index.cjs +2342 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14060 -4206
- package/dist/index.d.ts +14060 -4206
- package/dist/index.js +2220 -43
- package/dist/index.js.map +1 -1
- package/docs/schema/v2/well.schema.json +1043 -17
- package/docs/spec/v2/format-reference.md +507 -41
- package/docs/spec/v2/interoperability.md +44 -27
- package/docs/spec/v2/object-schemas.md +983 -113
- package/docs/spec/v2/overview.md +122 -6
- package/docs/spec/v2/water-quality.md +483 -0
- package/examples/README.md +83 -0
- package/examples/belem-pa-condominio-outorga.well +961 -0
- package/examples/belem-pa-monitoramento-posto.well +1141 -0
- package/examples/belem-pa-pirabas-abastecimento.well +1751 -0
- package/examples/belem-pa-poco-colmatado.well +496 -0
- package/examples/belem-pa-poco-raso-abandonado.well +388 -0
- package/examples/belem-pa-qualidade-agua-acida.well +895 -0
- package/examples/colatina-es-gnaisse-rural.well +1047 -0
- package/examples/coluna-mg-cristalino-abastecimento.well +1437 -0
- package/examples/estrela-doeste-sp-bauru-serra-geral.well +919 -0
- package/examples/extremoz-rn-barreiras-raso.well +623 -0
- package/examples/gastao-vidigal-sp-dados-inconsistentes.well +222 -0
- package/examples/index.json +452 -0
- package/examples/irece-ba-carste-bambui.well +861 -0
- package/examples/lagoa-santa-mg-carste-abastecimento.well +1087 -0
- package/examples/minas-novas-mg-cadastro-incompleto.well +157 -0
- package/examples/quixeramobim-ce-cristalino-salobro.well +989 -0
- package/examples/rinopolis-sp-estratigrafico-guarani.well +287 -0
- package/examples/santarem-pa-jorrante-alter-do-chao.well +554 -0
- package/examples/sao-gabriel-rs-cacimba.well +360 -0
- package/examples/sete-lagoas-mg-carste-industrial.well +410 -0
- package/examples/thumbs/belem-pa-condominio-outorga.svg +1 -0
- package/examples/thumbs/belem-pa-monitoramento-posto.svg +1 -0
- package/examples/thumbs/belem-pa-pirabas-abastecimento.svg +1 -0
- package/examples/thumbs/belem-pa-poco-colmatado.svg +1 -0
- package/examples/thumbs/belem-pa-poco-raso-abandonado.svg +1 -0
- package/examples/thumbs/belem-pa-qualidade-agua-acida.svg +1 -0
- package/examples/thumbs/colatina-es-gnaisse-rural.svg +1 -0
- package/examples/thumbs/coluna-mg-cristalino-abastecimento.svg +1 -0
- package/examples/thumbs/estrela-doeste-sp-bauru-serra-geral.svg +1 -0
- package/examples/thumbs/extremoz-rn-barreiras-raso.svg +1 -0
- package/examples/thumbs/gastao-vidigal-sp-dados-inconsistentes.svg +1 -0
- package/examples/thumbs/irece-ba-carste-bambui.svg +1 -0
- package/examples/thumbs/lagoa-santa-mg-carste-abastecimento.svg +1 -0
- package/examples/thumbs/minas-novas-mg-cadastro-incompleto.svg +1 -0
- package/examples/thumbs/quixeramobim-ce-cristalino-salobro.svg +1 -0
- package/examples/thumbs/rinopolis-sp-estratigrafico-guarani.svg +1 -0
- package/examples/thumbs/santarem-pa-jorrante-alter-do-chao.svg +1 -0
- package/examples/thumbs/sao-gabriel-rs-cacimba.svg +1 -0
- package/examples/thumbs/sete-lagoas-mg-carste-industrial.svg +1 -0
- package/package.json +5 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# `.well` File Format Specification — Version 2.
|
|
1
|
+
# `.well` File Format Specification — Version 2.3: Format Reference
|
|
2
2
|
|
|
3
|
-
**See also:** [overview.md](./overview.md) · [object-schemas.md](./object-schemas.md) · [interoperability.md](./interoperability.md)
|
|
3
|
+
**See also:** [overview.md](./overview.md) · [object-schemas.md](./object-schemas.md) · [interoperability.md](./interoperability.md) · [water-quality.md](./water-quality.md)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
"name": "...",
|
|
18
18
|
"well_type": "...",
|
|
19
|
+
"well_purpose": [ ... ],
|
|
19
20
|
"well_driller": "...",
|
|
20
21
|
"construction_date": "YYYY-MM-DD",
|
|
21
22
|
"obs": "...",
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
"well_screen": [ ... ],
|
|
29
30
|
"surface_case": [ ... ],
|
|
30
31
|
"hole_fill": [ ... ],
|
|
32
|
+
"centralizers": [ ... ],
|
|
31
33
|
"cement_pad": { ... },
|
|
32
34
|
|
|
33
35
|
"lithology": [ ... ],
|
|
@@ -36,7 +38,16 @@
|
|
|
36
38
|
|
|
37
39
|
"hydrodynamic_events": [ ... ],
|
|
38
40
|
"aquifer_analysis": [ ... ],
|
|
39
|
-
"history_logs": [ ... ]
|
|
41
|
+
"history_logs": [ ... ],
|
|
42
|
+
|
|
43
|
+
"attachments": [ ... ],
|
|
44
|
+
"pump_installations": [ ... ],
|
|
45
|
+
"permits": [ ... ],
|
|
46
|
+
"meters": [ ... ],
|
|
47
|
+
"production": [ ... ],
|
|
48
|
+
"operating_regime": [ ... ],
|
|
49
|
+
|
|
50
|
+
"water_samples": [ ... ]
|
|
40
51
|
}
|
|
41
52
|
```
|
|
42
53
|
|
|
@@ -49,7 +60,9 @@
|
|
|
49
60
|
| `1` | Initial release — constructive and geologic data only |
|
|
50
61
|
| `2` | Adds location, well_id (array), profiles, texture object, hydrodynamic_events, aquifer_analysis, history_logs, optional @context, \*\_precision fields, and extensibility conventions. Tightens unit semantics: all values are canonical SI, no per-file declaration. |
|
|
51
62
|
|
|
52
|
-
Minor revisions (`2.1`, …) are additive and do not change the `version` integer: a v2.
|
|
63
|
+
Minor revisions (`2.1`, `2.3`, …) are additive and do not change the `version` integer: a v2.3 document still declares `"version": 2`. A v2.0 parser reading a v2.1 document sees the v2.1 fields (`well_purpose`, `centralizers`) as unrecognized members without the `x-` prefix. Per § Extensibility it MUST preserve them and MUST NOT reject the file, and it SHOULD emit a warning.
|
|
64
|
+
|
|
65
|
+
The same rule applies to v2.3: a v2.0 or v2.1 parser reading a v2.3 document sees `attachments`, `pump_installations`, `permits`, `meters`, `production`, `operating_regime`, `water_samples`, `hydrodynamic_events[].corrects`, the `history_logs` data links (`hydrodynamic_event_ids`, `sample_ids`) and category-specific fields (`maintenance`, `status_change`) and the nested `attachments` arrays as unrecognized members. It MUST preserve them, MUST NOT reject the file, and SHOULD emit a warning. Such a parser does not know `corrects`, so it may still count a retracted event; this is the expected degradation.
|
|
53
66
|
|
|
54
67
|
### Parser version handling
|
|
55
68
|
|
|
@@ -60,7 +73,7 @@ The `version` field is an integer and must always be present.
|
|
|
60
73
|
- Either parser encountering an unrecognized integer version MUST reject the file with a clear error.
|
|
61
74
|
- A file without a `version` field SHOULD be rejected. Parsers MAY emit a warning and attempt to read the file as v1 if all required v1 fields are present and no v2-specific blocks are detected, but this fallback behavior is implementation-specific and not guaranteed by the spec.
|
|
62
75
|
|
|
63
|
-
Files with `version: 1` MUST NOT contain any v2-only blocks (`hydrodynamic_events`, `aquifer_analysis`, `history_logs`, `profiles`, `well_id` as array, `location` object, `@context`). A v1 file containing such fields is malformed.
|
|
76
|
+
Files with `version: 1` MUST NOT contain any v2-only blocks (`hydrodynamic_events`, `aquifer_analysis`, `history_logs`, `attachments`, `pump_installations`, `permits`, `meters`, `production`, `operating_regime`, `water_samples`, `profiles`, `well_id` as array, `location` object, `@context`). A v1 file containing such fields is malformed.
|
|
64
77
|
|
|
65
78
|
---
|
|
66
79
|
|
|
@@ -144,13 +157,54 @@ Each minor revision of this spec MUST include a "Deprecations" subsection in its
|
|
|
144
157
|
| `well_purpose` | string[] | no | Intended use(s) of the well. See § well_purpose. |
|
|
145
158
|
| `centralizers` | `Centralizer[]` | no | Casing/screen centralizers. See object-schemas.md § Centralizer. |
|
|
146
159
|
|
|
160
|
+
### v2.3 additions
|
|
161
|
+
|
|
162
|
+
| Field | Type | Required | Description |
|
|
163
|
+
| -------------------- | -------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
164
|
+
| `attachments` | `Attachment[]` | no | Documents about the well as a whole, not tied to any record. See object-schemas.md § Attachment. |
|
|
165
|
+
| `pump_installations` | `PumpInstallation[]` | no | Pump installation history (installation block). See object-schemas.md § `pump_installations[]`. |
|
|
166
|
+
| `permits` | `Permit[]` | no | Legal instruments governing abstraction (mutable record block). See object-schemas.md § `permits[]`. |
|
|
167
|
+
| `meters` | `Meter[]` | no | Totalizer (hidrômetro) installation history (installation block). See object-schemas.md § `meters[]`. |
|
|
168
|
+
| `production` | `ProductionEntry[]` | no | Append-only ledger of meter readings and declared volumes (ledger block). See object-schemas.md § `production[]`. |
|
|
169
|
+
| `operating_regime` | `OperatingRegime[]` | no | Declared operating regimes, each in force from `effective_from` (mutable record block). See object-schemas.md § `operating_regime[]`. |
|
|
170
|
+
| `water_samples` | `WaterSample[]` | no | Water samples and their field and laboratory results (ledger block). See water-quality.md. |
|
|
171
|
+
|
|
172
|
+
### Block kinds _(since v2.3)_
|
|
173
|
+
|
|
174
|
+
Every top-level array is one of three kinds. The kind decides how records are corrected.
|
|
175
|
+
|
|
176
|
+
| Kind | Blocks | Correction | Edit tracking |
|
|
177
|
+
| -------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------- |
|
|
178
|
+
| Ledger | `hydrodynamic_events`, `production`, `water_samples` | Append a new entry with `corrects` pointing to the retracted entry. Never edit in place. | None needed; the ledger is the history. |
|
|
179
|
+
| Mutable record | `history_logs`, `permits`, `operating_regime` | Edit in place. | `updated_at` (instant) on the record. |
|
|
180
|
+
| Installation | `pump_installations`, `meters` | Edit in place. | `updated_at` (instant) on the record. |
|
|
181
|
+
|
|
182
|
+
Constructive and geologic arrays describe the well as built and are edited in place. `aquifer_analysis` entries are interpretations: a new interpretation is a new entry, and earlier ones coexist.
|
|
183
|
+
|
|
184
|
+
**Ledger corrections.** A ledger entry referenced by any `corrects` field is excluded from every derivation but stays in the file. Chains are allowed (C corrects B, which corrected A); only the last uncorrected entry counts. A `corrects` cycle is malformed and emits a warning. An `aquifer_analysis` whose `source_event_ids` or `static_level_source_id` points to a retracted event emits a warning naming both ids.
|
|
185
|
+
|
|
186
|
+
**Installation pattern.** Installation blocks describe equipment present in the well for a period, with `installed_at` (required) and `removed_at` (absent means currently installed).
|
|
187
|
+
|
|
188
|
+
- `removed_at` earlier than or equal to `installed_at` is malformed and emits a warning.
|
|
189
|
+
- Each entry is one installation, not one piece of equipment. A unit pulled and reinstalled gets a new entry with the same `serial`.
|
|
190
|
+
- Overlapping open installations in the same block emit a warning, not an error. Standby pumps and secondary meters exist.
|
|
191
|
+
|
|
192
|
+
### Naming rules _(since v2.3)_
|
|
193
|
+
|
|
194
|
+
- No unit in a field name. Units are bound by the field-to-unit table (§ Units).
|
|
195
|
+
- `flow_rate` is the canonical name for a volumetric rate; nameplate values use the `rated_` prefix (`rated_flow_rate`, `rated_head`, `rated_power`).
|
|
196
|
+
- `from` / `to` are reserved for depth intervals in meters. Time intervals use `period_start` / `period_end`.
|
|
197
|
+
- References to another array end in `_id` (single) or `_ids` (array), plus the two relationship fields `corrects` and `supersedes`.
|
|
198
|
+
|
|
199
|
+
**`supersedes` vs `corrects`.** `supersedes` expresses legal succession between two valid permits and appears only on `permits`. It is not a correction mechanism: `corrects` retracts ledger entries.
|
|
200
|
+
|
|
147
201
|
---
|
|
148
202
|
|
|
149
203
|
## Datetime Conventions
|
|
150
204
|
|
|
151
205
|
The `.well` format distinguishes two kinds of temporal values:
|
|
152
206
|
|
|
153
|
-
**Calendar dates** — `YYYY-MM-DD`, no time, no offset. Used for `construction_date`
|
|
207
|
+
**Calendar dates** — `YYYY-MM-DD`, no time, no offset. Used for `construction_date` and, since v2.3, for legal documents: `permits[].issued_at`, `valid_from`, `valid_until`, `renewal_requested_at`; `permits[].conditions[].first_due`, `last_due`; `permits[].conditions[].fulfillments[].due_date`; and `permits[].history[].date`, `due_date`. Interpreted as the local civil date at the well site. The well site's timezone is not stored separately; calendar dates are sortable lexicographically and applications MUST NOT attempt to derive an instant from them.
|
|
154
208
|
|
|
155
209
|
**Instants** — RFC 3339 datetime strings with a mandatory UTC offset (e.g. `2006-03-14T08:00:00-03:00` or `2006-03-14T11:00:00Z`). Used for all event, analysis, and log timestamps:
|
|
156
210
|
|
|
@@ -158,6 +212,28 @@ The `.well` format distinguishes two kinds of temporal values:
|
|
|
158
212
|
- `aquifer_analysis[].datetime`
|
|
159
213
|
- `history_logs[].datetime`
|
|
160
214
|
- `history_logs[].updated_at`
|
|
215
|
+
- `pump_installations[].installed_at`, `removed_at`, `updated_at` _(since v2.3)_
|
|
216
|
+
- `permits[].updated_at`, `permits[].history[].updated_at`, `permits[].conditions[].fulfillments[].datetime`, `updated_at` _(since v2.3)_
|
|
217
|
+
- `meters[].installed_at`, `removed_at`, `updated_at` _(since v2.3)_
|
|
218
|
+
- `production[].datetime` (`meter_reading`); `production[].period_start`, `period_end` (`estimated_volume`) _(since v2.3)_
|
|
219
|
+
- `operating_regime[].effective_from`, `updated_at` _(since v2.3)_
|
|
220
|
+
- `water_samples[].datetime`, `laboratory.received_at`, `results[].analyzed_at`, `results[].validation.validated_at` _(since v2.3)_
|
|
221
|
+
|
|
222
|
+
Validity and deadline checks compare calendar dates, never UTC instants. When an instant must be compared with a calendar date — for example a condition fulfillment's `datetime` against its `due_date` — the instant's local date is the date part of the string, in the offset it carries. Producers SHOULD therefore write such instants in the well site's local offset.
|
|
223
|
+
|
|
224
|
+
Relative deadlines and recurrences are ISO 8601 date durations (`P90D`, `P6M`, `P1Y6M`); see object-schemas.md § Date duration.
|
|
225
|
+
|
|
226
|
+
### Instants known only by date _(since v2.3)_
|
|
227
|
+
|
|
228
|
+
Laboratory reports often give only the date of receipt or analysis. Such an instant is written at 00:00 local time at the well site, and a sibling field named after it with the `_resolution` suffix is set to `"day"`:
|
|
229
|
+
|
|
230
|
+
```json
|
|
231
|
+
{ "analyzed_at": "2026-09-17T00:00:00-03:00", "analyzed_at_resolution": "day" }
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
- Consumers MUST ignore the time of day when `_resolution` is `day`. Ordering, holding-time and deadline calculations on that field use day resolution.
|
|
235
|
+
- `day` is the only allowed value; any other value is malformed. An absent `_resolution` means the instant is exact.
|
|
236
|
+
- In v2.3 the convention applies to `water_samples[].laboratory.received_at` and `water_samples[].results[].analyzed_at`. It is the candidate general convention for any instant known only by its date.
|
|
161
237
|
|
|
162
238
|
A datetime without an offset (naked `YYYY-MM-DDTHH:MM:SS`) is malformed and parsers MUST reject it. Time zone abbreviations (`EST`, `BRT`) are not RFC 3339 and MUST NOT be used.
|
|
163
239
|
|
|
@@ -169,6 +245,12 @@ When two events share the same instant, the optional `sequence` integer breaks t
|
|
|
169
245
|
|
|
170
246
|
---
|
|
171
247
|
|
|
248
|
+
## Recommended vocabularies
|
|
249
|
+
|
|
250
|
+
Many string fields are **open**: they accept any value, but recommend a vocabulary for interoperability. The sections below list each one. Non-canonical values SHOULD use the `x-` prefix, and tools MUST preserve unrecognized values and display them as-is.
|
|
251
|
+
|
|
252
|
+
Every recommended vocabulary is also published as data by `@welldot/core` (e.g. `PERMIT_TYPES`, `CONSTRUCTION_MATERIALS`, `SAMPLE_TYPES`), each entry carrying its `value` and display labels keyed by BCP 47 language tag (at least `en` and `pt`). The field types use the `OpenVocab<T>` pattern (`T | (string & {})`): the recommended values are typed while any other string stays valid. The Portuguese column in the tables below may be more descriptive than the short display label.
|
|
253
|
+
|
|
172
254
|
## `well_type` — Recommended values
|
|
173
255
|
|
|
174
256
|
The `well_type` field accepts any string and describes the well's **construction method**. The values below are the recommended vocabulary for interoperability. Tools should treat unrecognized values gracefully.
|
|
@@ -189,7 +271,7 @@ Non-canonical values SHOULD use the `x-` prefix (e.g. `x-radial_collector`).
|
|
|
189
271
|
|
|
190
272
|
## `well_purpose` — Recommended values _(since v2.1)_
|
|
191
273
|
|
|
192
|
-
`well_purpose` is an optional array of strings giving the well's current intended use(s). A well may have more than one purpose (e.g. `["production", "monitoring"]`). Changes of use over time belong in `history_logs` (category `
|
|
274
|
+
`well_purpose` is an optional array of strings giving the well's current intended use(s). A well may have more than one purpose (e.g. `["production", "monitoring"]`). Changes of use over time belong in `history_logs` (category `event`). Non-canonical values SHOULD use the `x-` prefix.
|
|
193
275
|
|
|
194
276
|
| Value | Portuguese (BR) | Description |
|
|
195
277
|
| ----------------------- | ------------------------------- | ---------------------------------------------------------------- |
|
|
@@ -204,6 +286,284 @@ Non-canonical values SHOULD use the `x-` prefix (e.g. `x-radial_collector`).
|
|
|
204
286
|
|
|
205
287
|
---
|
|
206
288
|
|
|
289
|
+
## `bore_hole[].drilling_method` — Recommended values _(since v2.3)_
|
|
290
|
+
|
|
291
|
+
| Value | English | Portuguese (BR) |
|
|
292
|
+
| ------------ | ---------- | ------------------ |
|
|
293
|
+
| `rotary` | Rotary | Rotativo |
|
|
294
|
+
| `percussion` | Percussion | Percussão |
|
|
295
|
+
| `cable_tool` | Cable tool | Percussão a cabo |
|
|
296
|
+
| `auger` | Auger | Trado |
|
|
297
|
+
| `air_hammer` | Air hammer | Martelo pneumático |
|
|
298
|
+
|
|
299
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
300
|
+
|
|
301
|
+
## Construction materials — Recommended values _(since v2.3)_
|
|
302
|
+
|
|
303
|
+
Shared by `well_case[].type`, `well_screen[].type`, `reduction[].type` and `pump_installations[].riser_material`.
|
|
304
|
+
|
|
305
|
+
| Value | English | Portuguese (BR) |
|
|
306
|
+
| ------------------- | ----------------- | --------------- |
|
|
307
|
+
| `pvc` | PVC | PVC |
|
|
308
|
+
| `geomechanical_pvc` | Geomechanical PVC | PVC geomecânico |
|
|
309
|
+
| `carbon_steel` | Carbon steel | Aço carbono |
|
|
310
|
+
| `galvanized_steel` | Galvanized steel | Aço galvanizado |
|
|
311
|
+
| `stainless_steel` | Stainless steel | Aço inox |
|
|
312
|
+
| `fiberglass` | Fiberglass | Fibra de vidro |
|
|
313
|
+
|
|
314
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
315
|
+
|
|
316
|
+
## `well_screen[].slot_type` — Recommended values _(since v2.3)_
|
|
317
|
+
|
|
318
|
+
The screen design, independent of its material (`well_screen[].type`).
|
|
319
|
+
|
|
320
|
+
| Value | English | Portuguese (BR) |
|
|
321
|
+
| ----------------- | --------------- | ------------------------- |
|
|
322
|
+
| `continuous_slot` | Continuous slot | Espiralado (tipo Johnson) |
|
|
323
|
+
| `slotted` | Slotted | Ranhurado |
|
|
324
|
+
| `bridge_slot` | Bridge slot | Tipo ponte |
|
|
325
|
+
| `louver` | Louver | Veneziana |
|
|
326
|
+
| `perforated` | Perforated | Perfurado |
|
|
327
|
+
| `nold` | Nold type | Tipo Nold |
|
|
328
|
+
|
|
329
|
+
`continuous_slot` is the wire-wrapped (wire-wound) screen. `nold` is the steel screen sold under that trade designation (_filtro tipo Nold_). Non-canonical values SHOULD use the `x-` prefix.
|
|
330
|
+
|
|
331
|
+
## `centralizers[].type` — Recommended values _(since v2.1)_
|
|
332
|
+
|
|
333
|
+
| Value | English | Portuguese (BR) |
|
|
334
|
+
| ------------------ | ---------------- | ----------------- |
|
|
335
|
+
| `spring_bow` | Spring bow | Mola (spring bow) |
|
|
336
|
+
| `rigid` | Rigid | Rígido |
|
|
337
|
+
| `semi_rigid` | Semi-rigid | Semirrígido |
|
|
338
|
+
| `polymer` | Polymer | Polimérico |
|
|
339
|
+
| `carbon_steel` | Carbon steel | Aço carbono |
|
|
340
|
+
| `galvanized_steel` | Galvanized steel | Aço galvanizado |
|
|
341
|
+
| `stainless_steel` | Stainless steel | Aço inox |
|
|
342
|
+
|
|
343
|
+
The steel values name rigid centralizers by their material. Non-canonical values SHOULD use the `x-` prefix.
|
|
344
|
+
|
|
345
|
+
## `cement_pad.type` — Recommended values _(since v2.3)_
|
|
346
|
+
|
|
347
|
+
| Value | English | Portuguese (BR) |
|
|
348
|
+
| --------------------- | ------------------- | --------------- |
|
|
349
|
+
| `concrete` | Concrete | Concreto |
|
|
350
|
+
| `reinforced_concrete` | Reinforced concrete | Concreto armado |
|
|
351
|
+
| `cement` | Cement | Cimento |
|
|
352
|
+
| `mortar` | Mortar | Argamassa |
|
|
353
|
+
|
|
354
|
+
`type` describes the pad material; other free text (e.g. a shape) remains valid.
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## `pump_installations[].type` — Recommended values _(since v2.3)_
|
|
359
|
+
|
|
360
|
+
| Value | Portuguese (BR) | Description |
|
|
361
|
+
| -------------------- | ---------------------- | ------------------------------------------------- |
|
|
362
|
+
| `submersible` | Bomba submersa | Electric submersible pump. |
|
|
363
|
+
| `vertical_turbine` | Bomba de eixo vertical | Surface motor with line shaft. |
|
|
364
|
+
| `jet` | Bomba injetora | Surface jet pump. |
|
|
365
|
+
| `progressive_cavity` | Bomba helicoidal | Progressive cavity pump, common with solar power. |
|
|
366
|
+
| `hand_pump` | Bomba manual | |
|
|
367
|
+
| `compressor_airlift` | Compressor (air-lift) | Permanent airlift production. |
|
|
368
|
+
|
|
369
|
+
Solar is a `power_source`, never a `type`. Non-canonical values SHOULD use the `x-` prefix.
|
|
370
|
+
|
|
371
|
+
## `pump_installations[].power_source` — Recommended values _(since v2.3)_
|
|
372
|
+
|
|
373
|
+
| Value | Portuguese (BR) |
|
|
374
|
+
| -------- | -------------------- |
|
|
375
|
+
| `grid` | Rede elétrica |
|
|
376
|
+
| `solar` | Solar (fotovoltaico) |
|
|
377
|
+
| `diesel` | Gerador a diesel |
|
|
378
|
+
| `hybrid` | Híbrido |
|
|
379
|
+
|
|
380
|
+
## `permits[].type` — Recommended values _(since v2.3)_
|
|
381
|
+
|
|
382
|
+
| Value | Portuguese (BR) | Description |
|
|
383
|
+
| -------------------- | -------------------------------------- | ----------------------------------- |
|
|
384
|
+
| `abstraction_permit` | Outorga de direito de uso | Grant to abstract groundwater. |
|
|
385
|
+
| `preliminary_permit` | Outorga prévia / declaração de reserva | Permission before drilling. |
|
|
386
|
+
| `exemption` | Dispensa / uso insignificante | Formal exemption for small users. |
|
|
387
|
+
| `registration` | Cadastro (e.g. CNARH) | Registration without a grant. |
|
|
388
|
+
| `dewatering_permit` | Outorga para rebaixamento | Mining and construction dewatering. |
|
|
389
|
+
| `drilling_permit` | Autorização de perfuração | Authorization to drill the well. |
|
|
390
|
+
|
|
391
|
+
`renewal` is not a type: a renewal is a new permit of the same type whose `supersedes` points to the previous one. Non-canonical values SHOULD use the `x-` prefix.
|
|
392
|
+
|
|
393
|
+
## `permits[].water_use` — Recommended values _(since v2.3)_
|
|
394
|
+
|
|
395
|
+
| Value | Portuguese (BR) |
|
|
396
|
+
| -------------- | -------------------------------------- |
|
|
397
|
+
| `human_supply` | Abastecimento público / consumo humano |
|
|
398
|
+
| `industrial` | Industrial |
|
|
399
|
+
| `mining` | Mineração |
|
|
400
|
+
| `irrigation` | Irrigação |
|
|
401
|
+
| `livestock` | Dessedentação animal |
|
|
402
|
+
| `commercial` | Comercial / serviços |
|
|
403
|
+
|
|
404
|
+
`water_use` describes what the abstracted water is for; `well_purpose` describes the well's role.
|
|
405
|
+
|
|
406
|
+
## `permits[].conditions[].category` — Recommended values _(since v2.3)_
|
|
407
|
+
|
|
408
|
+
| Value | Portuguese (BR) | Covers |
|
|
409
|
+
| ------------------------ | -------------------------- | -------------------------------------------------------------------------- |
|
|
410
|
+
| `monitoring` | Monitoramento | Water level, flow, abstracted volume and water quality monitoring/sampling |
|
|
411
|
+
| `reporting` | Relatórios e declarações | Periodic reports and volume/flow declarations submitted to the authority |
|
|
412
|
+
| `equipment_installation` | Instalação de equipamentos | Meters (hidrômetro), level gauges, sampling taps, telemetry |
|
|
413
|
+
| `well_protection` | Proteção do poço | Sanitary slab, seal, protection perimeter, wellhead closure |
|
|
414
|
+
| `environmental` | Ambiental | Environmental measures, compensation, licensing of the activity |
|
|
415
|
+
| `legal` | Legal / administrativo | Renewal request, fees, registrations, document submissions |
|
|
416
|
+
|
|
417
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
418
|
+
|
|
419
|
+
## `permits[].history[].type` — Recommended values _(since v2.3)_
|
|
420
|
+
|
|
421
|
+
| Value | Portuguese (BR) |
|
|
422
|
+
| -------------- | -------------------------------- |
|
|
423
|
+
| `filing` | Protocolo / requerimento |
|
|
424
|
+
| `process` | Andamento do processo / despacho |
|
|
425
|
+
| `notification` | Notificação / ofício |
|
|
426
|
+
| `fee` | Taxa / emolumento |
|
|
427
|
+
| `inspection` | Vistoria |
|
|
428
|
+
| `decision` | Decisão / publicação |
|
|
429
|
+
| `renewal` | Renovação |
|
|
430
|
+
|
|
431
|
+
Non-canonical values SHOULD use the `x-` prefix. The administrative `status` of a permit is a closed vocabulary; see object-schemas.md § `permits[]` — Administrative status.
|
|
432
|
+
|
|
433
|
+
## `meters[].type` — Recommended values _(since v2.3)_
|
|
434
|
+
|
|
435
|
+
| Value | Portuguese (BR) |
|
|
436
|
+
| ----------------- | ----------------------- |
|
|
437
|
+
| `mechanical` | Hidrômetro mecânico |
|
|
438
|
+
| `electromagnetic` | Medidor eletromagnético |
|
|
439
|
+
| `ultrasonic` | Medidor ultrassônico |
|
|
440
|
+
|
|
441
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
442
|
+
|
|
443
|
+
## `production[]` — Recommended values _(since v2.3)_
|
|
444
|
+
|
|
445
|
+
**`type`** — the entry discriminator: `meter_reading` (a totalizer register value) or `estimated_volume` (a volume estimated for a period, without a meter). Non-canonical entry types SHOULD use the `x-` prefix; parsers preserve them and exclude them from volume derivations.
|
|
446
|
+
|
|
447
|
+
**`source`** (`meter_reading`):
|
|
448
|
+
|
|
449
|
+
| Value | Portuguese (BR) |
|
|
450
|
+
| ----------- | --------------- |
|
|
451
|
+
| `manual` | Leitura manual |
|
|
452
|
+
| `telemetry` | Telemetria |
|
|
453
|
+
|
|
454
|
+
**`method`** (`estimated_volume`) — the basis of the estimate. Descriptive only: it never changes how the volume is counted.
|
|
455
|
+
|
|
456
|
+
| Value | Portuguese (BR) | Description |
|
|
457
|
+
| ---------------- | ------------------------- | ------------------------------------------------------------------ |
|
|
458
|
+
| `flow_time` | Vazão × tempo de operação | Flow rate times operating time (hour meter, operating regime). |
|
|
459
|
+
| `energy` | Consumo de energia | Derived from the pump's energy consumption. |
|
|
460
|
+
| `user_statement` | Informado pelo usuário | Stated by the owner or operator, without a documented calculation. |
|
|
461
|
+
|
|
462
|
+
## `water_samples[]` — Recommended values _(since v2.3)_
|
|
463
|
+
|
|
464
|
+
Recommended values for `sample_type`, `sampling_method`, `sampling_point.type` and `sampling_point.device` are listed in [water-quality.md](water-quality.md) § Recommended values.
|
|
465
|
+
|
|
466
|
+
## `hydrodynamic_events[].measurement_method` — Recommended values
|
|
467
|
+
|
|
468
|
+
Used by `spot_measurement` events.
|
|
469
|
+
|
|
470
|
+
| Value | English | Portuguese (BR) |
|
|
471
|
+
| --------------------- | ------------------- | --------------------- |
|
|
472
|
+
| `electric_probe` | Electric probe | Sonda elétrica |
|
|
473
|
+
| `pressure_transducer` | Pressure transducer | Transdutor de pressão |
|
|
474
|
+
| `air_line` | Air line | Linha de ar |
|
|
475
|
+
| `tape` | Tape | Trena |
|
|
476
|
+
|
|
477
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
478
|
+
|
|
479
|
+
## `aquifer_analysis[].method` — Recommended values
|
|
480
|
+
|
|
481
|
+
| Value | English | Portuguese (BR) |
|
|
482
|
+
| ------------------- | ----------------- | --------------- |
|
|
483
|
+
| `cooper_jacob` | Cooper-Jacob | Cooper-Jacob |
|
|
484
|
+
| `theis` | Theis | Theis |
|
|
485
|
+
| `neuman` | Neuman | Neuman |
|
|
486
|
+
| `hantush` | Hantush | Hantush |
|
|
487
|
+
| `birsoy_summers` | Birsoy-Summers | Birsoy-Summers |
|
|
488
|
+
| `eden_hazel` | Eden-Hazel | Eden-Hazel |
|
|
489
|
+
| `visual_inspection` | Visual inspection | Inspeção visual |
|
|
490
|
+
|
|
491
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
492
|
+
|
|
493
|
+
## `history_logs[].category` — Recommended values
|
|
494
|
+
|
|
495
|
+
| Value | Portuguese (BR) | Category-specific fields |
|
|
496
|
+
| --------------- | ------------------- | --------------------------------------------------------------------- |
|
|
497
|
+
| `maintenance` | Manutenção | `maintenance_type`, `pump_installation_id`, `meter_id` _(since v2.3)_ |
|
|
498
|
+
| `inspection` | Inspeção | — |
|
|
499
|
+
| `incident` | Incidente | — |
|
|
500
|
+
| `event` | Evento | — |
|
|
501
|
+
| `status_change` | Mudança de situação | `status` _(since v2.3)_ |
|
|
502
|
+
|
|
503
|
+
Descriptions are in object-schemas.md § `history_logs[]`. Category-specific fields MUST be absent on entries of other categories; their presence emits a warning. Non-canonical values SHOULD use the `x-` prefix.
|
|
504
|
+
|
|
505
|
+
## `history_logs[].severity` — Recommended values
|
|
506
|
+
|
|
507
|
+
| Value | English | Portuguese (BR) |
|
|
508
|
+
| ---------- | -------- | --------------- |
|
|
509
|
+
| `low` | Low | Baixa |
|
|
510
|
+
| `medium` | Medium | Média |
|
|
511
|
+
| `high` | High | Alta |
|
|
512
|
+
| `critical` | Critical | Crítica |
|
|
513
|
+
|
|
514
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
515
|
+
|
|
516
|
+
## `history_logs[].maintenance_type` — Recommended values _(since v2.3)_
|
|
517
|
+
|
|
518
|
+
| Value | Portuguese (BR) |
|
|
519
|
+
| ------------------- | --------------------------- |
|
|
520
|
+
| `inspection` | Inspeção |
|
|
521
|
+
| `cleaning` | Limpeza |
|
|
522
|
+
| `redevelopment` | Redesenvolvimento |
|
|
523
|
+
| `disinfection` | Desinfecção |
|
|
524
|
+
| `pump_service` | Manutenção da bomba |
|
|
525
|
+
| `meter_calibration` | Aferição do hidrômetro |
|
|
526
|
+
| `video_inspection` | Filmagem / perfilagem ótica |
|
|
527
|
+
| `level_measurement` | Medição de nível |
|
|
528
|
+
| `pump_test` | Teste de bombeamento |
|
|
529
|
+
| `water_sampling` | Coleta de água |
|
|
530
|
+
|
|
531
|
+
Non-canonical values SHOULD use the `x-` prefix.
|
|
532
|
+
|
|
533
|
+
## `history_logs[].status` — Allowed values _(since v2.3)_
|
|
534
|
+
|
|
535
|
+
Used by entries of category `status_change`. This is a **closed vocabulary**: `status` MUST be one of the five values below. Any other value, including an `x-` value, is a schema error and the file is rejected.
|
|
536
|
+
|
|
537
|
+
| Value | Portuguese (BR) | Semantics |
|
|
538
|
+
| ---------------- | ---------------------- | --------------------------------------- |
|
|
539
|
+
| `active` | Ativo / em operação | Normal operation. |
|
|
540
|
+
| `maintenance` | Em manutenção | Temporarily out of service for work. |
|
|
541
|
+
| `inactive` | Paralisado | Out of service, recoverable. |
|
|
542
|
+
| `decommissioned` | Desativado / tamponado | Permanently closed and properly sealed. |
|
|
543
|
+
| `abandoned` | Abandonado | Left without proper sealing. |
|
|
544
|
+
|
|
545
|
+
The well's current status is the `status` of the `status_change` entry with the latest `datetime`; with no such entry, the status is unknown.
|
|
546
|
+
|
|
547
|
+
## `Attachment.document_type` — Recommended values _(since v2.3)_
|
|
548
|
+
|
|
549
|
+
| Value | Portuguese (BR) | Typical location |
|
|
550
|
+
| -------------------- | ------------------------------------------- | --------------------- |
|
|
551
|
+
| `drilling_report` | Relatório de perfuração / relatório técnico | Root |
|
|
552
|
+
| `as_built_drawing` | Perfil construtivo as-built | Root |
|
|
553
|
+
| `registry_record` | Ficha cadastral (SIAGAS, CNARH) | Root |
|
|
554
|
+
| `photo` | Fotografia | Any |
|
|
555
|
+
| `permit_document` | Portaria / certificado de outorga | `permits` |
|
|
556
|
+
| `condition_evidence` | Comprovante de cumprimento de condicionante | `history_logs` |
|
|
557
|
+
| `pump_curve` | Curva da bomba | `pump_installations` |
|
|
558
|
+
| `field_sheet` | Planilha de campo | `hydrodynamic_events` |
|
|
559
|
+
| `test_report` | Relatório de teste de bombeamento | `aquifer_analysis` |
|
|
560
|
+
| `lab_report` | Laudo laboratorial | `water_samples` |
|
|
561
|
+
| `invoice` | Nota fiscal | Any |
|
|
562
|
+
|
|
563
|
+
The vocabulary is open; non-canonical values SHOULD use the `x-` prefix.
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
207
567
|
## `well_id`
|
|
208
568
|
|
|
209
569
|
Array of authority-scoped identifiers linking the well to external registries. A well may be registered in multiple national, regional, or institutional registries simultaneously.
|
|
@@ -299,19 +659,33 @@ All numeric values in a `.well` file are in **SI**. The format does not encode u
|
|
|
299
659
|
|
|
300
660
|
### Canonical units
|
|
301
661
|
|
|
302
|
-
| Quantity | Unit
|
|
303
|
-
| ------------------------ |
|
|
304
|
-
| Depth, length, elevation | meter
|
|
305
|
-
| Diameter | millimeter
|
|
306
|
-
| Volumetric flow rate | cubic meter per hour
|
|
307
|
-
| Elapsed time, duration | minute
|
|
308
|
-
|
|
|
309
|
-
|
|
|
310
|
-
|
|
|
311
|
-
|
|
|
312
|
-
|
|
|
313
|
-
|
|
|
314
|
-
|
|
|
662
|
+
| Quantity | Unit | UCUM | Stored as |
|
|
663
|
+
| ------------------------ | -------------------------------------------------- | ---------------------------------------------- | ---------------------------------------- |
|
|
664
|
+
| Depth, length, elevation | meter | `m` | number |
|
|
665
|
+
| Diameter | millimeter | `mm` | number |
|
|
666
|
+
| Volumetric flow rate | cubic meter per hour | `m3/h` | number |
|
|
667
|
+
| Elapsed time, duration | minute | `min` | number |
|
|
668
|
+
| Daily operating time | hour | `h` | number (0–24) |
|
|
669
|
+
| Volume | cubic meter | `m3` | number |
|
|
670
|
+
| Power | kilowatt | `kW` | number |
|
|
671
|
+
| Voltage | volt | `V` | number |
|
|
672
|
+
| Cross-sectional area | square millimeter | `mm2` | number |
|
|
673
|
+
| Mass concentration | milligram per liter | `mg/L` | number _(since v2.3)_ |
|
|
674
|
+
| Electrical conductivity | microsiemens per centimeter at 25 °C | `uS/cm` | number _(since v2.3)_ |
|
|
675
|
+
| Temperature | degree Celsius | `Cel` | number _(since v2.3)_ |
|
|
676
|
+
| Redox potential | millivolt | `mV` | number _(since v2.3)_ |
|
|
677
|
+
| Turbidity | NTU, FNU, FAU, FTU (by parameter code) | — | number _(since v2.3)_ |
|
|
678
|
+
| Color | Hazen unit (uH = mg Pt-Co/L) | — | number _(since v2.3)_ |
|
|
679
|
+
| Microbiological count | MPN/100 mL, CFU/100 mL, CFU/mL (by parameter code) | `{MPN}/(100.mL)`, `{CFU}/(100.mL)`, `{CFU}/mL` | number _(since v2.3)_ |
|
|
680
|
+
| Activity concentration | becquerel per liter | `Bq/L` | number _(since v2.3)_ |
|
|
681
|
+
| Filter pore size | micrometer | `um` | number _(since v2.3)_ |
|
|
682
|
+
| Transmissivity | square meter per second | `m2/s` | number |
|
|
683
|
+
| Hydraulic conductivity | meter per second | `m/s` | number |
|
|
684
|
+
| Pressure | kilopascal | `kPa` | number |
|
|
685
|
+
| Angle (azimuth, dip) | degree | `deg` | number (0–360 for azimuth, 0–90 for dip) |
|
|
686
|
+
| Geographic coordinates | decimal degree (WGS84) | `deg` | number |
|
|
687
|
+
| Calendar date | ISO 8601 | — | string `YYYY-MM-DD` |
|
|
688
|
+
| Instant | RFC 3339 with UTC offset | — | string |
|
|
315
689
|
|
|
316
690
|
UCUM is the **Unified Code for Units of Measure**, the international machine-parseable unit standard used by OGC SWE and the scientific community. The UCUM column above documents the canonical encoding of each unit for use in JSON-LD contexts, profile schemas, and downstream interoperability — it is not encoded in `.well` files themselves.
|
|
317
691
|
|
|
@@ -338,6 +712,8 @@ UCUM is the **Unified Code for Units of Measure**, the international machine-par
|
|
|
338
712
|
- `aquifer_analysis[].dynamic_level`, `dynamic_level_precision`
|
|
339
713
|
- `aquifer_analysis[].aquifer_thickness`
|
|
340
714
|
- `location.elevation`, `location.properties.elevation_precision`
|
|
715
|
+
- `pump_installations[].intake_depth`, `rated_head`, `electrical.cable_length` _(since v2.3)_
|
|
716
|
+
- `water_samples[].sampling_point.depth`, `depth_precision`, `from`, `to` _(since v2.3)_
|
|
341
717
|
|
|
342
718
|
**Millimeter (`mm`)** — all diameters and slot openings:
|
|
343
719
|
|
|
@@ -348,18 +724,39 @@ UCUM is the **Unified Code for Units of Measure**, the international machine-par
|
|
|
348
724
|
- `surface_case[].diameter`
|
|
349
725
|
- `hole_fill[].diameter`
|
|
350
726
|
- `centralizers[].diameter`
|
|
727
|
+
- `pump_installations[].riser_diameter` _(since v2.3)_
|
|
728
|
+
- `meters[].nominal_diameter` _(since v2.3)_
|
|
351
729
|
|
|
352
730
|
**Cubic meter per hour (`m3/h`)** — all volumetric flow rates:
|
|
353
731
|
|
|
354
732
|
- `PumpingStep.rate`, `rate_precision`
|
|
355
733
|
- `aquifer_analysis[].flow_rate`, `flow_rate_precision`
|
|
356
734
|
- `recovery_only.pumping_rate`
|
|
735
|
+
- `pump_installations[].rated_flow_rate` _(since v2.3)_
|
|
736
|
+
- `permits[].flow_rate`, `permits[].monthly_schedule[].flow_rate` _(since v2.3)_
|
|
737
|
+
- `operating_regime[].flow_rate` _(since v2.3)_
|
|
738
|
+
- `water_samples[].purge.flow_rate` _(since v2.3)_
|
|
357
739
|
|
|
358
740
|
**Minute (`min`)** — all elapsed times and durations:
|
|
359
741
|
|
|
360
742
|
- `PumpingStep.duration`
|
|
361
743
|
- `LevelReading.elapsed`
|
|
362
744
|
- `recovery_only.pumping_duration`
|
|
745
|
+
- `water_samples[].purge.duration`, `purge.readings[].elapsed` _(since v2.3)_
|
|
746
|
+
|
|
747
|
+
**Cubic meter (`m3`)** — volume _(since v2.3)_:
|
|
748
|
+
|
|
749
|
+
- `permits[].volume_limits[].volume`
|
|
750
|
+
- `meters[].max_reading`
|
|
751
|
+
- `production[].reading` (`meter_reading`), `production[].volume` (`estimated_volume`)
|
|
752
|
+
- `water_samples[].purge.volume`
|
|
753
|
+
|
|
754
|
+
**Hour (`h`)** — daily operating time _(since v2.3)_:
|
|
755
|
+
|
|
756
|
+
- `permits[].daily_operating_time`, `permits[].monthly_schedule[].daily_operating_time`
|
|
757
|
+
- `operating_regime[].daily_operating_time`
|
|
758
|
+
|
|
759
|
+
The minute remains the canonical unit for elapsed time and durations. The hour is bound only to `daily_operating_time`, which regulators always express in hours.
|
|
363
760
|
|
|
364
761
|
**Square meter per second (`m2/s`)** — transmissivity:
|
|
365
762
|
|
|
@@ -373,6 +770,28 @@ UCUM is the **Unified Code for Units of Measure**, the international machine-par
|
|
|
373
770
|
|
|
374
771
|
- `LevelReading.pressure`
|
|
375
772
|
|
|
773
|
+
**Kilowatt (`kW`)** — power _(since v2.3)_:
|
|
774
|
+
|
|
775
|
+
- `pump_installations[].rated_power`
|
|
776
|
+
|
|
777
|
+
**Volt (`V`)** — voltage _(since v2.3)_:
|
|
778
|
+
|
|
779
|
+
- `pump_installations[].electrical.voltage`
|
|
780
|
+
|
|
781
|
+
**Square millimeter (`mm2`)** — cross-sectional area _(since v2.3)_:
|
|
782
|
+
|
|
783
|
+
- `pump_installations[].electrical.cable_section`
|
|
784
|
+
|
|
785
|
+
**Degree Celsius (`Cel`)** — temperature _(since v2.3)_:
|
|
786
|
+
|
|
787
|
+
- `water_samples[].laboratory.received_temperature`
|
|
788
|
+
|
|
789
|
+
**Micrometer (`um`)** — filter pore size _(since v2.3)_:
|
|
790
|
+
|
|
791
|
+
- `water_samples[].results[].filtration.pore_size`
|
|
792
|
+
|
|
793
|
+
**Unit by parameter code** _(since v2.3)_ — `water_samples[].results[].value`, `detection_limit`, `quantification_limit`, `value_precision` and `purge.readings[].value` are in the canonical unit of the result's parameter (see water-quality.md § Units).
|
|
794
|
+
|
|
376
795
|
**Degree (`deg`)** — angles and geographic coordinates:
|
|
377
796
|
|
|
378
797
|
- `fractures[].azimuth`, `fractures[].dip`
|
|
@@ -385,10 +804,17 @@ UCUM is the **Unified Code for Units of Measure**, the international machine-par
|
|
|
385
804
|
- `aquifer_analysis[].well_efficiency_pct` (percentage, 0–100)
|
|
386
805
|
- `aquifer_analysis[].specific_capacity` (derived ratio in m³/h per m, i.e. `m2/h`)
|
|
387
806
|
- Lithology `color` (CSS hex string)
|
|
807
|
+
- `pump_installations[].stages`, `electrical.phases` (counts)
|
|
808
|
+
- `permits[].monthly_schedule[].month`, `days`; `permits[].conditions[].occurrences` (counts)
|
|
809
|
+
- `operating_regime[].days_per_week` (count, 1–7)
|
|
810
|
+
|
|
811
|
+
### Water quality units _(since v2.3)_
|
|
812
|
+
|
|
813
|
+
Water quality results take their unit from the parameter code; only `x-` vocabulary codes declare `unit` (UCUM). The unit-by-code rule and regional unit normalization are specified in [water-quality.md](water-quality.md) § Units.
|
|
388
814
|
|
|
389
815
|
### Level sign convention
|
|
390
816
|
|
|
391
|
-
Depths are measured from ground level (0) and increase downward. Water levels above ground level are therefore **negative**. This applies to `static_level`, `LevelReading.depth`, and `aquifer_analysis[].static_level` / `dynamic_level`. A negative static level is how a flowing artesian condition is recorded (see § `well_type`). This convention was implicit in v2.0 and is made explicit in v2.1 without changing semantics.
|
|
817
|
+
Depths are measured from ground level (0) and increase downward. Water levels above ground level are therefore **negative**. This applies to `static_level`, `LevelReading.depth`, and `aquifer_analysis[].static_level` / `dynamic_level`. A negative static level is how a flowing artesian condition is recorded (see § `well_type`). This convention was implicit in v2.0 and is made explicit in v2.1 without changing semantics. It does not apply to `pump_installations[].intake_depth`, which is an equipment depth and is always positive.
|
|
392
818
|
|
|
393
819
|
### Diameter and the as-built convention
|
|
394
820
|
|
|
@@ -404,7 +830,13 @@ An interchange format with configurable units multiplies the number of valid enc
|
|
|
404
830
|
|
|
405
831
|
Producers receiving non-SI source data (imperial drilling reports, US gpm flow measurements, inch casing designations, slot-number screens) MUST convert to SI before writing. Consumers presenting the data to users in non-SI units MUST convert on read.
|
|
406
832
|
|
|
407
|
-
Conversion utilities for the common transformations are provided in `@welldot/core` under the `units` module — m ↔ ft, mm ↔ in, m³/h ↔ L/s, m³/h ↔ US gpm, m²/s ↔ m²/d, DD ↔ DMS, slot-number ↔ mm, and similar.
|
|
833
|
+
Conversion utilities for the common transformations are provided in `@welldot/core` under the `units` module — m ↔ ft, mm ↔ in, m³/h ↔ L/s, m³/h ↔ US gpm, m²/s ↔ m²/d, DD ↔ DMS, slot-number ↔ mm, cv/hp ↔ kW, L / ft³ / US gal ↔ m³, µg/L ↔ mg/L, mS/m ↔ µS/cm, and similar.
|
|
834
|
+
|
|
835
|
+
---
|
|
836
|
+
|
|
837
|
+
## Water quality parameter vocabulary _(since v2.3)_
|
|
838
|
+
|
|
839
|
+
The `welldot` parameter vocabulary (98 codes), its rules, the CAS equivalences and the treatment of limit sets are specified in [water-quality.md](water-quality.md) § Parameter vocabulary.
|
|
408
840
|
|
|
409
841
|
---
|
|
410
842
|
|
|
@@ -426,6 +858,10 @@ An optional array of HTTPS URLs declaring formal extensions to the spec that the
|
|
|
426
858
|
- The schema MAY link to human documentation via its `description` field or a custom `x-documentation` field pointing to a Markdown or PDF URL.
|
|
427
859
|
- Profiles MAY impose additional required fields, constrain vocabulary values, or mandate the use of specific `x-` extensions for a regulatory context.
|
|
428
860
|
|
|
861
|
+
### Example: a regulatory water quality profile _(since v2.3)_
|
|
862
|
+
|
|
863
|
+
See [water-quality.md](water-quality.md) § Regulatory profiles.
|
|
864
|
+
|
|
429
865
|
### Profile validation
|
|
430
866
|
|
|
431
867
|
- If a profile URL is unreachable, returns a non-JSON document, or fails to parse as JSON Schema, the profile is silently ignored. Parsers MUST NOT reject files whose profile URLs are unavailable.
|
|
@@ -461,20 +897,20 @@ Top-level blocks not defined in this spec MUST use the `x-` prefix. Parsers MUST
|
|
|
461
897
|
```json
|
|
462
898
|
{
|
|
463
899
|
"version": 2,
|
|
464
|
-
"x-
|
|
900
|
+
"x-gas_monitoring": [ ... ],
|
|
465
901
|
"x-geophysical_logs": [ ... ]
|
|
466
902
|
}
|
|
467
903
|
```
|
|
468
904
|
|
|
469
905
|
### Custom vocabulary values — `x-` prefix
|
|
470
906
|
|
|
471
|
-
Open vocabulary fields in this spec (`type` in `hydrodynamic_events`, `category` in `history_logs`, `vocabulary` in `texture
|
|
907
|
+
Open vocabulary fields in this spec (`type` in `hydrodynamic_events`, `category` in `history_logs`, `vocabulary` in `texture` and in water quality `parameter` (as `x-…` vocabularies), `method` in `aquifer_analysis`, `well_type`, and any other field documented as accepting any string; not closed vocabularies such as `history_logs[].status`) SHOULD use the `x-` prefix when the value is non-canonical — i.e. not listed in the recommended vocabulary of this spec.
|
|
472
908
|
|
|
473
909
|
Parsers MUST treat `x-` prefixed vocabulary values as valid. Promotion from `x-` form to canonical form follows the Deprecation Policy (see § Deprecation Policy — Vocabulary value promotion).
|
|
474
910
|
|
|
475
911
|
```json
|
|
476
912
|
{ "type": "x-slug_test" }
|
|
477
|
-
{ "category": "x-
|
|
913
|
+
{ "category": "x-site_visit" }
|
|
478
914
|
{ "method": "x-theis_recovery" }
|
|
479
915
|
```
|
|
480
916
|
|
|
@@ -491,7 +927,17 @@ Each ID-bearing array maintains its **own uniqueness scope**. The ID namespaces
|
|
|
491
927
|
- `hydrodynamic_events[].id` — unique within `hydrodynamic_events`
|
|
492
928
|
- `aquifer_analysis[].id` — unique within `aquifer_analysis`
|
|
493
929
|
- `history_logs[].id` — unique within `history_logs`
|
|
494
|
-
- `
|
|
930
|
+
- `pump_installations[].id` — unique within `pump_installations` _(since v2.3)_
|
|
931
|
+
- `permits[].id` — unique within `permits` _(since v2.3)_
|
|
932
|
+
- `permits[].conditions[].id` — unique within the `conditions` array of one permit _(since v2.3)_
|
|
933
|
+
- `permits[].conditions[].fulfillments[].id` — unique within the `fulfillments` array of one condition _(since v2.3)_
|
|
934
|
+
- `permits[].history[].id` — unique within the `history` array of one permit _(since v2.3)_
|
|
935
|
+
- `permits[].monthly_schedule[].month` and `permits[].volume_limits[].period` — unique within one permit _(since v2.3)_
|
|
936
|
+
- `meters[].id` — unique within `meters` _(since v2.3)_
|
|
937
|
+
- `production[].id` — unique within `production` _(since v2.3)_
|
|
938
|
+
- `operating_regime[].id` — unique within `operating_regime`; `operating_regime[].effective_from` is also unique within the block _(since v2.3)_
|
|
939
|
+
- `water_samples[].id` — unique within `water_samples` _(since v2.3)_
|
|
940
|
+
- `attachments[].id` — unique within its owning array: the root `attachments`, or the `attachments` array of one record (`history_logs`, `permits`, `pump_installations`, `hydrodynamic_events`, `aquifer_analysis`, `water_samples`). The same id may appear under different records.
|
|
495
941
|
- `well_id[]` — uniqueness is on the composite key `(authority, id)`, not on `id` alone
|
|
496
942
|
|
|
497
943
|
An ID value MAY repeat across different arrays without conflict (e.g. an event and an analysis MAY both use the ID `"001"`), though distinct values are recommended for clarity.
|
|
@@ -500,10 +946,26 @@ An ID value MAY repeat across different arrays without conflict (e.g. an event a
|
|
|
500
946
|
|
|
501
947
|
The following fields hold references to IDs in other arrays:
|
|
502
948
|
|
|
503
|
-
| Reference field
|
|
504
|
-
|
|
|
505
|
-
| `aquifer_analysis[].source_event_ids[]`
|
|
506
|
-
| `aquifer_analysis[].static_level_source_id`
|
|
949
|
+
| Reference field | Points to | Resolution scope |
|
|
950
|
+
| ----------------------------------------------------- | -------------------------- | ---------------- |
|
|
951
|
+
| `aquifer_analysis[].source_event_ids[]` | `hydrodynamic_events[].id` | Same file only |
|
|
952
|
+
| `aquifer_analysis[].static_level_source_id` | `hydrodynamic_events[].id` | Same file only |
|
|
953
|
+
| `hydrodynamic_events[].corrects` | `hydrodynamic_events[].id` | Same file only |
|
|
954
|
+
| `production[].corrects` | `production[].id` | Same file only |
|
|
955
|
+
| `production[].meter_id` | `meters[].id` | Same file only |
|
|
956
|
+
| `permits[].supersedes` | `permits[].id` | Same file only |
|
|
957
|
+
| `history_logs[].pump_installation_id` | `pump_installations[].id` | Same file only |
|
|
958
|
+
| `history_logs[].meter_id` | `meters[].id` | Same file only |
|
|
959
|
+
| `history_logs[].hydrodynamic_event_ids[]` | `hydrodynamic_events[].id` | Same file only |
|
|
960
|
+
| `history_logs[].sample_ids[]` | `water_samples[].id` | Same file only |
|
|
961
|
+
| `permits[].conditions[].fulfillments[].event_id` | `hydrodynamic_events[].id` | Same file only |
|
|
962
|
+
| `permits[].conditions[].fulfillments[].sample_id` | `water_samples[].id` | Same file only |
|
|
963
|
+
| `water_samples[].corrects` | `water_samples[].id` | Same file only |
|
|
964
|
+
| `water_samples[].parent_sample_id` | `water_samples[].id` | Same file only |
|
|
965
|
+
| `water_samples[].static_level_event_id` | `hydrodynamic_events[].id` | Same file only |
|
|
966
|
+
| `water_samples[].sampling_point.pump_installation_id` | `pump_installations[].id` | Same file only |
|
|
967
|
+
|
|
968
|
+
Root `attachments` is not a registry: records never reference root attachments by id. Nor is it an aggregate: it holds only general files about the well as a whole (e.g. the drilling report), never copies of the attachments of `history_logs`, `permits`, `pump_installations`, `hydrodynamic_events`, `aquifer_analysis` or `water_samples` entries. A document that concerns several records is repeated on each; `sha256` guarantees both copies point to the same file.
|
|
507
969
|
|
|
508
970
|
Cross-file references are not supported in v2.
|
|
509
971
|
|
|
@@ -546,23 +1008,27 @@ The precision field name is the measurement field name suffixed with `_precision
|
|
|
546
1008
|
|
|
547
1009
|
### Supported precision fields
|
|
548
1010
|
|
|
549
|
-
| Measurement | Precision field | Defined on
|
|
550
|
-
| --------------- | ------------------------- |
|
|
551
|
-
| `lat` | `lat_precision` | `LocationProperties`
|
|
552
|
-
| `lng` | `lng_precision` | `LocationProperties`
|
|
553
|
-
| `elevation` | `elevation_precision` | `LocationProperties`
|
|
554
|
-
| `static_level` | `static_level_precision` | events, `AquiferAnalysis`
|
|
555
|
-
| `dynamic_level` | `dynamic_level_precision` | `AquiferAnalysis`
|
|
556
|
-
| `depth` | `depth_precision` | `LevelReading`, `Fracture`
|
|
557
|
-
| `rate` | `rate_precision` | `PumpingStep`
|
|
558
|
-
| `flow_rate` | `flow_rate_precision` | `AquiferAnalysis`
|
|
1011
|
+
| Measurement | Precision field | Defined on |
|
|
1012
|
+
| --------------- | ------------------------- | ------------------------------------- |
|
|
1013
|
+
| `lat` | `lat_precision` | `LocationProperties` |
|
|
1014
|
+
| `lng` | `lng_precision` | `LocationProperties` |
|
|
1015
|
+
| `elevation` | `elevation_precision` | `LocationProperties` |
|
|
1016
|
+
| `static_level` | `static_level_precision` | events, `AquiferAnalysis` |
|
|
1017
|
+
| `dynamic_level` | `dynamic_level_precision` | `AquiferAnalysis` |
|
|
1018
|
+
| `depth` | `depth_precision` | `LevelReading`, `Fracture` |
|
|
1019
|
+
| `rate` | `rate_precision` | `PumpingStep` |
|
|
1020
|
+
| `flow_rate` | `flow_rate_precision` | `AquiferAnalysis` |
|
|
1021
|
+
| `depth` | `depth_precision` | `SamplingPoint` _(since v2.3)_ |
|
|
1022
|
+
| `value` | `value_precision` | water quality `Result` _(since v2.3)_ |
|
|
559
1023
|
|
|
560
1024
|
All precision fields are optional. When omitted, the measurement value carries no documented precision. Precision is the one-sigma standard deviation in the same unit as the measurement.
|
|
561
1025
|
|
|
1026
|
+
Laboratory reports usually give an expanded uncertainty U with a coverage factor k (typically k = 2). Converters store `value_precision = U / k`, never U itself.
|
|
1027
|
+
|
|
562
1028
|
```json
|
|
563
1029
|
{ "depth": 44.8, "depth_precision": 0.01 }
|
|
564
1030
|
```
|
|
565
1031
|
|
|
566
1032
|
---
|
|
567
1033
|
|
|
568
|
-
|
|
1034
|
+
_`.well` Format Specification v2.3_
|