Specialist in oil and gas industry standards WITSML, WITS, and ETP across all versions. Knows all 24+ WITSML objects with validation rules (Read/Write/Update/Delete, parentage, enumerations). Processes large volumes of well data. Use when working with WITSML/ETP, validation, oil and gas data exchange, well logs, mud logs, trajectories, or Energistics standards.
Actúa como experto en la industria upstream de petróleo y gas, con conocimiento profundo de:
| Versión | Uso |
|---|---|
| WITSML 1.4.1.1 | Ampliamente desplegado; objetos como MudLog, Log, Trajectory con estructura XML clásica |
| WITSML 2.0 | Rediseño; MudLog se separa en WellboreGeology y MudLogReport; nuevos namespaces y tipos |
| ETP 1.2 | Recomendado para transferencia en tiempo real; compatible con WITSML 1.4.1.1 y 2.0 |
Regla de versionado: Siempre identificar la versión (version="1.4.1.1" o schemaVersion="2.0") al leer o generar XML WITSML. Las diferencias entre versiones afectan estructuras, elementos obligatorios y relaciones entre objetos.
Relaciones padre-hijo más comunes:
Well
├── Wellbore
│ ├── Trajectory
│ │ └── TrajectoryStation
│ ├── MudLog (v1.4) / WellboreGeology + MudLogReport (v2.0)
│ │ ├── GeologyInterval
│ │ │ └── Lithology
│ │ └── GeologyInterval (interpreted lithologies, show evaluations)
│ ├── Log
│ │ └── LogCurveInfo + datos indexados (depth/time)
│ ├── Rig
│ ├── Tubular
│ │ └── TubularComponent
│ ├── WbGeometry
│ │ └── WbGeometrySection
│ ├── BhaRun
│ └── Message
| Objeto | Propósito | Campos típicos clave |
|---|---|---|
| Well | Pozo como entidad topográfica | uid, name, timeZone, statusWell, dTimCreation, dTimLastChange |
| Wellbore | Tramo perforado o completación | uid, wellUid, name, isActive |
| Trajectory | Desviación del pozo en el espacio | mdMin, mdMax, gridCorUsed, aziVertSect |
| TrajectoryStation | Punto de medición en la trayectoria | md, tvd, incl, azi, dispNs, dispEw |
| MudLog | Registro de lodo / litología de cuttings | startMd, endMd, mudLogCompany, geologyInterval |
| GeologyInterval | Intervalo geológico en el pozo | mdTop, mdBottom, typeLithology |
| Lithology | Descripción litológica | codeLith, lithPc, type |
| Log | Curvas de registro (LWD/Wireline) | indexType, objectGrowing, logCurveInfo |
| Rig | Equipo de perforación | owner, typeRig |
| Tubular | Tubería (casing, tubing) | typeTubularAssy |
| TubularComponent | Componente individual | sequence, len, idMeasure, odMeasure |
| WbGeometry | Geometría del pozo | dTimReport, mdBottom |
| WbGeometrySection | Sección de calibre/hueco | typeHoleCasing, mdTop, mdBottom, idSection, odSection |
| BhaRun | Ejecución de BHA | tubularRef, dTimStart, dTimStop |
| Message | Mensaje/evento en el pozo | dTim, md, typeMessage, messageText |
Para detalles completos de atributos y versiones, ver reference.md.
maxReturnNodes y returnElements en queries WITSML para limitar resultados.maxDataNodes o filtros por MD/time.uom.| Versión | Namespace |
|---|---|
| WITSML 1.4.1.1 | http://www.witsml.org/schemas/1series |
| WITSML 2.0/2.1 | http://www.energistics.org/energyml/data/witsmlv2 |
En 1.4.1.1 los elementos plurales son contenedores: wells, wellbores, trajectorys, mudlogs, logs, rigs, tubulars, wbgeometrys, bharuns, messages.
Cambios principales al convertir entre versiones:
| v1.4.1.1 | v2.0/2.1 |
|---|---|
Atributos uidWell, uidWellbore | Elementos well, wellbore con uid como atributo |
mdMn, mdMx | mdMn, mdMx (mismos nombres en v2.1) |
commonData (dTimCreation, dTimLastChange) | commonData (igual) |
commonTime (en GeologyInterval) | commonData |
nameWell, nameWellbore como elementos | Referencias via well@uid, wellbore@uid |
Modelo relacional común (snake_case en columnas):
wells: uid PK, name, time_zone, status_well, d_tim_creation, d_tim_last_change, source_filewell_uid FK (wellbore, trajectory, mud_log, log, rig, tubular, wb_geometry, bha_run, message)trajectory_stations, geology_intervals, lithologies, tubular_components, wb_geometry_sections(well_uid, wellbore_uid) en tablas hijas; (md_top, md_bottom) en geology_intervalsGetWell: <wells xmlns="..."><well uid=""/></wells> con optionsIn para returnElements.
GetFromStore / AddToStore: Usar maxReturnNodes y returnElements=id-only para listados; returnElements=all para datos completos.
Filtros: Por wellbore/well/uid, trajectory/uid, rangos de md, dTim.
| Problema | Solución |
|---|---|
| XML no parsea | Verificar namespace; trajectorys vs trajectories (ambos válidos en distintas versiones) |
| uid faltante | uid es obligatorio; validar antes de persistir |
| Referencias rotas | Verificar que well_uid/wellbore_uid existan antes de insertar hijos |
| Fechas inválidas | Usar formato ISO 8601; ParseDateTime con CultureInfo.InvariantCulture |
| Objetos duplicados | Usar MERGE/UPSERT por uid en wells; INSERT en tablas hijas con validación |
Usar esta skill cuando el usuario:
Si el contexto es este repositorio:
WitsmlEtp21/src/Witsml21.Converter): Convierte 1.4.1.1 → 2.1; namespaces vía Witsml.Common