# Orcaflex Enrichment

> Convert OrcaFlex .dat binary model files to enriched YAML fixtures using worldenergydata public databases (vessel fleet, riser components, pipe schedules). All stages run on licensed-win-1. Output committed to digitalmodel as test fixtures.

- Skill: `vamseeachanta/orcaflex-enrichment` (Agent Skill)
- Install (CLI): `npx skillmds@latest add vamseeachanta/orcaflex-enrichment`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vamseeachanta/orcaflex-enrichment/raw
- Safety review: PASS (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: vamseeachanta (https://skillmd.com/u/vamseeachanta)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/vamseeachanta/orcaflex-enrichment

---


# OrcaFlex Enrichment Skill

Converts binary OrcaFlex `.dat` model files to **enriched, client-clean YAML
test fixtures** using worldenergydata public databases.

## Pipeline (all on licensed-win-1)

```
Stage 1  Extract    .dat + OrcFxAPI → raw YAML params
Stage 2  Enrich     raw YAML + worldenergydata lookups → enriched YAML → client-c/
Stage 3  Clean      enriched YAML → strip client names → legal scan → digitalmodel/
```

## Stage 1 — Extract

```cmd
python scripts\data\orcaflex\dat-to-yaml.py ^
    --input "\\dev-secondary\dde\Orcaflex\0000 Drilling Riser Development\Latest" ^
    --output "client-c\data\raw\orcaflex-extracted\drilling-riser-development" ^
    --project drilling-riser-development
```

Extracts: `general`, `environment`, `lines[]`, `vessels[]` per .dat file.

## Stage 2 — Enrich + Stage (client-c)

```cmd
python scripts\data\orcaflex\enrich-and-clean.py ^
    --input  client-c\data\raw\orcaflex-extracted\ ^
    --output digitalmodel\data\orcaflex\ ^
    --dry-run
```

### Enrichment lookups performed

| Object | OrcaFlex field | worldenergydata lookup | Result field |
|--------|---------------|----------------------|--------------|
| Line | OD (m→in) | `DrillingRiserLoader.filter_by_size(od_in)` | `component_type`, `grade_range`, `api_standard` |
| Line | OD + WT | `PipelineSpecLookup.match_od_wt(od_m, wt_m)` | `nps_in`, `schedule`, `grade_range` |
| Vessel | type hint from context | BSEE rig fleet `.bin` | `vessel_class`, `water_depth_rating_m`, `dp_class` |

### Enriched YAML output example (line object)

```yaml
lines:
- component_type: marine_drilling_riser_joint
  nps_in: 21.0
  public_match:
    grade_range: [G105, S135]
    api_standard: API-STD-16F
    source: worldenergydata.vessel_fleet.DrillingRiserLoader
  dat_properties:      # numeric props from .dat — unchanged
    OD: [0.5334]
    WallThickness: [0.025]
    Length: [15.24, 15.24, 15.24]
    CDt: 0.01
    CDn: 1.0
  # name: stripped (client-specific)
```

### Enriched YAML output example (vessel object)

```yaml
vessels:
- vessel_class: drillship
  water_depth_rating_m: 3658
  dp_class: DP3
  public_source: worldenergydata.vessel_fleet.BSEE_rig_fleet
  dat_properties:
    InitialX: 0.0
    InitialY: 0.0
    InitialZ: 0.0
  # name: stripped
```

## Stage 3 — Clean + Commit

```cmd
bash scripts/legal/legal-sanity-scan.sh digitalmodel/data/orcaflex/
cd digitalmodel
git add data/orcaflex/
git commit -m "data(orcaflex): enriched fixtures from public vessel/riser databases"
```

## Priority Extraction Order

| Project | .dat count | Standards | worldenergydata lookup |
|---------|-----------|-----------|------------------------|
| `0000 Drilling Riser Dev/Latest` | 31 | DNV-OS-F201 | DrillingRiserLoader (21" joints) |
| `31290 WellHead Fatigue/BOP on Wellhead` | 240 | API-RP-2A-WSD | DrillingRiserLoader (BOP) |
| `611 Mecor S Lay/Reference` | 3 | DNV-OS-F101 | PipelineSpecLookup (pipe OD) |
| `5 - OrcaFlex API Check` | 1 | — | minimal fixture |

## worldenergydata Database Status

| Dataset | Status | Location |
|---------|--------|----------|
| `drilling_riser_components.csv` | 24 rows (partial) | `data/modules/vessel_fleet/curated/` |
| `rig_fleet_full.bin` | 2,320 rigs (Feb 2026) | `data/modules/bsee/.local/rig_fleet/` |
| `construction_vessels.csv` | missing — see WRK-593 | `data/modules/vessel_fleet/curated/` |
| `api_5l_pipe_schedule.csv` | missing — see WRK-594 | `data/modules/pipeline/` |

## Key worldenergydata API Calls

```python
from worldenergydata.vessel_fleet import DrillingRiserLoader

loader = DrillingRiserLoader()
# Match riser joint by OD
joints = loader.filter_by_size(od_in=21.0)

# Get all riser joints
all_joints = loader.get_riser_joints()

# Get BOPs
bops = loader.get_bops()
```

```python
# Pipeline spec lookup (after WRK-594)
from worldenergydata.bsee.pipeline import PipelineSpecLookup

lookup = PipelineSpecLookup()
spec = lookup.match_od_wt(od_m=0.2731, wt_m=0.012)
# → {nps_in: 10.75, schedule: "XS", grade_range: ["X60", "X65"], ...}
```

## Blocked By

- WRK-593: expand drilling_riser_components.csv + add construction_vessels.csv
- WRK-594: create api_5l_pipe_schedule.csv + PipelineSpecLookup class


## Documentation Reference

llm-wiki base: `data/llm-wiki/orcaflex/`

Relevant OrcaFlex topics:
- `Textdatafiles.md` -- YAML/text data file format for .dat extraction
- `Vesseldata.md`, `Vesseltypes.md` -- vessel object properties extracted in Stage 1
- `Lines.md`, `Linedata.md`, `Linetypes,Geometry,massexpansiondata.md` -- line object properties (OD, WT)
- `Environment.md`, `Generaldata.md` -- general/environment parameters

OrcFxAPI topics (`data/llm-wiki/orcfxapi/`):
- `Modelbuilding,Settingthedata.md` -- programmatic data extraction via OrcFxAPI
- `Pythoninterface,Objectdata.md` -- Python object data access for .dat reading

