1212from data_pipeline .stages .validate_raw_data import apply_validation
1313from data_pipeline .stages .apply_raw_data_contract import apply_contract
1414from data_pipeline .stages .assemble_validated_events import assemble_events
15+ from data_pipeline .stages .build_bi_semantic_layer import build_semantic_layer
1516
1617
1718def snapshot_raw (run_context : RunContext ) -> None :
@@ -45,22 +46,22 @@ def main() -> None:
4546 # Create raw snapshot at runtime
4647 snapshot_raw (run_context )
4748
48- report_validation_1 = []
49+ report_validation_initial = []
4950
5051 # Initial validation
51- validation_1 = apply_validation (run_context )
52- report_validation_1 .append (validation_1 )
52+ validation_initial = apply_validation (run_context )
53+ report_validation_initial .append (validation_initial )
5354
5455 persist_json (
55- run_context .logs_path / "validation_1 .json" ,
56+ run_context .logs_path / "validation_initial .json" ,
5657 {
5758 "run_id" : run_context .run_id ,
58- "report" : report_validation_1 ,
59+ "report" : report_validation_initial ,
5960 },
6061 )
6162
6263 # Early exit for structural errors else apply contract
63- if validation_1 ["errors" ]:
64+ if validation_initial ["errors" ]:
6465 sys .exit (1 )
6566
6667 report_contract = []
@@ -89,26 +90,26 @@ def main() -> None:
8990 },
9091 )
9192
92- report_validation_2 = []
93+ report_validation_post_contract = []
9394
9495 # Rerun validation on CONTRACTED data
95- validation_2 = apply_validation (
96+ validation_post_contract = apply_validation (
9697 run_context ,
9798 base_path = run_context .contracted_path ,
9899 )
99100
100- report_validation_2 .append (validation_2 )
101+ report_validation_post_contract .append (validation_post_contract )
101102
102103 persist_json (
103- run_context .logs_path / "validation_2 .json" ,
104+ run_context .logs_path / "validation_post_contract .json" ,
104105 {
105106 "run_id" : run_context .run_id ,
106- "report" : report_validation_2 ,
107+ "report" : report_validation_post_contract ,
107108 },
108109 )
109110
110111 # Intervention: Either manual fixing or escalate the data to source owner
111- if validation_2 ["errors" ] or validation_2 ["warnings" ]:
112+ if validation_post_contract ["errors" ] or validation_post_contract ["warnings" ]:
112113 sys .exit (1 )
113114
114115 report_assemble = []
@@ -128,6 +129,23 @@ def main() -> None:
128129 if assemble ["status" ] == "failed" :
129130 sys .exit (1 )
130131
132+ report_semantic = []
133+
134+ # Semantic modeling
135+ semantic = build_semantic_layer (run_context )
136+ report_semantic .append (semantic )
137+
138+ persist_json (
139+ run_context .logs_path / "semantic_report.json" ,
140+ {
141+ "run_id" : run_context .run_id ,
142+ "report" : report_semantic ,
143+ },
144+ )
145+
146+ if semantic ["status" ] == "failed" :
147+ sys .exit (1 )
148+
131149 sys .exit (0 )
132150
133151
0 commit comments