Spaces:
Sleeping
Sleeping
| """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 | |