import%20marimo%0A%0A__generated_with%20%3D%20%220.23.9%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20OEWS%20%E2%80%94%20pipeline%20reconciliation%20(companion%20to%20docs%2Fpipelines%2Foews.md)%0A%0A%20%20%20%20The%20%60oews_occupation%60%20table%20covers%20**22%20SOC%20major%20groups%20%2B%20detail%20%2B%20wage%20distribution%0A%20%20%20%20(58%20rows%20%2F%2029%20SOC%20per%20area)**.%20Verification%20primitives%20at%20each%20transform%20boundary%2C%0A%20%20%20%20live%20against%20%60analytics.db%60%3A%0A%20%20%20%20**row-count%20%C2%B7%20grain%20uniqueness%20%C2%B7%20coverage%20%C2%B7%20wage-ordering%20%C2%B7%20null%2Fsuppression**%2C%20plus%20a%0A%20%20%20%20**cross-source%20check**%20(our%20computed%20occupation-LQ%20vs%20BLS-published%20LQ).%20Read-only%3B%20ingest%0A%20%20%20%20is%20%60scripts%2Fingest_oews.py%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20import%20duckdb%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20Path%2C%20duckdb%2C%20mo%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20duckdb)%3A%0A%20%20%20%20def%20_find_db()%3A%0A%20%20%20%20%20%20%20%20for%20d%20in%20%5BPath.cwd()%2C%20*Path.cwd().parents%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(d%20%2F%20%22analytics.db%22).exists()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20str(d%20%2F%20%22analytics.db%22)%0A%20%20%20%20%20%20%20%20raise%20FileNotFoundError(%22analytics.db%20not%20found%22)%0A%20%20%20%20conn%20%3D%20duckdb.connect(_find_db()%2C%20read_only%3DTrue)%0A%20%20%20%20def%20q(sql)%3A%0A%20%20%20%20%20%20%20%20return%20conn.execute(sql).fetchdf()%0A%0A%20%20%20%20return%20(q%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%20Stage%201%20%E2%80%94%20%60oews_occupation%60%20(area%20%C3%97%20year%20%C3%97%20soc)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(q)%3A%0A%20%20%20%20%23%20row-count%20%C2%B7%20grain%20%C2%B7%20coverage%20%C2%B7%20non-negativity%20%C2%B7%20wage-ordering%20%C2%B7%20prse-bounds%20%C2%B7%20null%0A%20%20%20%20q(%22%22%22%0A%20%20%20%20SELECT%0A%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20oews_occupation)%20AS%20rows%2C%0A%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20(SELECT%20area_fips%2Cyear%2Csoc_code%20FROM%20oews_occupation%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20GROUP%20BY%201%2C2%2C3%20HAVING%20count(*)%3E1))%20AS%20grain_violations%2C%0A%20%20%20%20%20%20(SELECT%20count(DISTINCT%20n)%20FROM%20(SELECT%20area_fips%2C%20count(DISTINCT%20soc_code)%20n%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20FROM%20oews_occupation%20GROUP%20BY%201))%20-%201%20AS%20coverage_gaps%2C%0A%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20oews_occupation%20WHERE%20tot_emp%3C0)%20AS%20negative_emp%2C%0A%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20oews_occupation%0A%20%20%20%20%20%20%20%20%20WHERE%20a_pct10%20IS%20NOT%20NULL%20AND%20a_pct90%20IS%20NOT%20NULL%0A%20%20%20%20%20%20%20%20%20%20%20AND%20NOT%20(a_pct10%3C%3Da_median%20AND%20a_median%3C%3Da_pct90))%20AS%20wage_order_violations%2C%0A%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20oews_occupation%20WHERE%20emp_prse%3C0%20OR%20emp_prse%3E100)%20AS%20prse_out_of_band%2C%0A%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20oews_occupation%20WHERE%20disclosure%3C%3E'')%20AS%20suppressed_cells%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%20Stage%202%20%E2%80%94%20%60stg_oews%60%20passthrough%20(must%20be%20exact%201%3A1)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(q)%3A%0A%20%20%20%20q(%22%22%22%0A%20%20%20%20SELECT%20(SELECT%20count(*)%20FROM%20oews_occupation)%20AS%20source_rows%2C%0A%20%20%20%20%20%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20stg_oews)%20AS%20staged_rows%2C%0A%20%20%20%20%20%20%20%20%20%20%20(SELECT%20count(*)%20FROM%20oews_occupation)%3D(SELECT%20count(*)%20FROM%20stg_oews)%20AS%20rowcount_match%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%20Stage%203%20%E2%80%94%20cross-source%20check%3A%20computed%20occ-LQ%20vs%20BLS-published%20LQ%20(dt-17)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(q)%3A%0A%20%20%20%20%23%20Our%20LQ%20from%20tot_emp%20shares%20must%20match%20BLS's%20occ_lq_bls%20within%20tolerance.%0A%20%20%20%20q(%22%22%22%0A%20%20%20%20WITH%20e%20AS%20(%0A%20%20%20%20%20%20SELECT%20area_fips%2C%0A%20%20%20%20%20%20%20%20sum(tot_emp)%20FILTER%20(WHERE%20soc_code%3D'15-0000')%20AS%20tech%2C%0A%20%20%20%20%20%20%20%20sum(tot_emp)%20FILTER%20(WHERE%20soc_code%3D'00-0000')%20AS%20tot%0A%20%20%20%20%20%20FROM%20oews_occupation%20WHERE%20year%3D(SELECT%20max(year)%20FROM%20oews_occupation)%20GROUP%20BY%201%0A%20%20%20%20)%2C%0A%20%20%20%20computed%20AS%20(%0A%20%20%20%20%20%20SELECT%20round(((SELECT%20tech%20FROM%20e%20WHERE%20area_fips%3D'0045300')*1.0%2F(SELECT%20tot%20FROM%20e%20WHERE%20area_fips%3D'0045300'))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F((SELECT%20tech%20FROM%20e%20WHERE%20area_fips%3D'0000000')*1.0%2F(SELECT%20tot%20FROM%20e%20WHERE%20area_fips%3D'0000000'))%2C3)%20AS%20computed_lq%0A%20%20%20%20)%0A%20%20%20%20SELECT%0A%20%20%20%20%20%20(SELECT%20computed_lq%20FROM%20computed)%20AS%20computed_lq%2C%0A%20%20%20%20%20%20(SELECT%20occ_lq_bls%20FROM%20oews_occupation%20WHERE%20area_fips%3D'0045300'%20AND%20soc_code%3D'15-0000'%20AND%20year%3D(SELECT%20max(year)%20FROM%20oews_occupation))%20AS%20bls_lq%2C%0A%20%20%20%20%20%20abs((SELECT%20computed_lq%20FROM%20computed)%0A%20%20%20%20%20%20%20%20%20%20-(SELECT%20occ_lq_bls%20FROM%20oews_occupation%20WHERE%20area_fips%3D'0045300'%20AND%20soc_code%3D'15-0000'%20AND%20year%3D(SELECT%20max(year)%20FROM%20oews_occupation)))%20%3C%200.02%20AS%20match%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
d0aa0484655ddf13cd325ee1f2fa47bb