"""Seed database with sample Niger Delta production data.""" import numpy as np from datetime import datetime, timedelta from app.core.database import insert_production OMLS = ["OML-14","OML-18","OML-22","OML-29","OML-58"] FIELDS = {"OML-14":["Obagi","Erema"],"OML-18":["Nembe Creek","Cough Creek"], "OML-22":["Odidi","Batton"],"OML-29":["Agbada","Agbada West"],"OML-58":["Akri","Ogoda"]} WELL_PREFIX = {"OML-14":"OBG","OML-18":"NCR","OML-22":"ODD","OML-29":"AGB","OML-58":"AKR"} def seed_production(days: int = 30): np.random.seed(42) records = 0 for oml in OMLS: for field in FIELDS[oml]: for w in range(4): wid = f"{WELL_PREFIX[oml]}-{w+1:02d}" base_oil = np.random.uniform(500, 4000) base_gas = base_oil * np.random.uniform(0.3, 1.2) / 1000 base_wc = np.random.uniform(20, 80) for d in range(days): date = (datetime.now() - timedelta(days=days-d)).strftime("%Y-%m-%d") decline = 1 - (d * 0.001) noise = np.random.uniform(0.92, 1.08) status = np.random.choice(["active","active","active","active","shut-in"], p=[0.9,0.025,0.025,0.025,0.025]) insert_production({ "oml_id": oml, "well_id": wid, "field_name": field, "oil_rate_bpd": round(base_oil * decline * noise, 1) if status == "active" else 0, "gas_rate_mmscfd": round(base_gas * decline * noise, 3) if status == "active" else 0, "water_cut_pct": round(base_wc + d * 0.1 + np.random.uniform(-2, 2), 1), "wellhead_pressure_psi": round(np.random.uniform(800, 3000), 0), "temperature_f": round(np.random.uniform(120, 220), 1), "status": status, "record_date": date }) records += 1 return records