3333 source_row_to_mapping ,
3434)
3535
36- ARCH_DB_SCHEMA_VERSION = "arch.relational.v1 "
36+ ARCH_DB_SCHEMA_VERSION = "arch.relational.v2 "
3737
3838
3939@dataclass (frozen = True )
@@ -77,9 +77,7 @@ def build_arch_db(
7777 columns = source_columns_from_source_rows (rows )
7878 source_row_values_count = sum (len (row .values ) for row in rows )
7979 resolved_build_id = build_id or _build_id (facts , cells , rows )
80- fact_constraints = [
81- (fact , build_aggregate_constraints (fact )) for fact in facts
82- ]
80+ fact_constraints = [(fact , build_aggregate_constraints (fact )) for fact in facts ]
8381 source_record_ids = {
8482 fact .source_record_id for fact in facts if fact .source_record_id is not None
8583 }
@@ -117,9 +115,7 @@ def build_arch_db(
117115 return ArchDbBuildReport (
118116 build_id = resolved_build_id ,
119117 facts_count = len (facts ),
120- constraints_count = sum (
121- len (constraints ) for _ , constraints in fact_constraints
122- ),
118+ constraints_count = sum (len (constraints ) for _ , constraints in fact_constraints ),
123119 source_records_count = len (source_record_ids ),
124120 source_rows_count = len (rows ),
125121 source_columns_count = len (columns ),
@@ -244,13 +240,25 @@ def _create_schema(connection: sqlite3.Connection) -> None:
244240 legal_vintage TEXT,
245241 period_type TEXT,
246242 period_value TEXT,
243+ period_start_date TEXT,
244+ period_end_date TEXT,
245+ period_basis TEXT,
246+ period_authority TEXT,
247+ period_source_label TEXT,
248+ period_accounting_basis TEXT,
247249 PRIMARY KEY (
248250 source_concept,
249251 canonical_concept,
250252 relation,
251253 legal_vintage,
252254 period_type,
253- period_value
255+ period_value,
256+ period_start_date,
257+ period_end_date,
258+ period_basis,
259+ period_authority,
260+ period_source_label,
261+ period_accounting_basis
254262 )
255263 );
256264
@@ -278,6 +286,12 @@ def _create_schema(connection: sqlite3.Connection) -> None:
278286 value_numeric REAL,
279287 period_type TEXT NOT NULL,
280288 period_value TEXT NOT NULL,
289+ period_start_date TEXT,
290+ period_end_date TEXT,
291+ period_basis TEXT,
292+ period_authority TEXT,
293+ period_source_label TEXT,
294+ period_accounting_basis TEXT,
281295 geography_level TEXT NOT NULL,
282296 geography_id TEXT NOT NULL,
283297 geography_vintage TEXT,
@@ -740,7 +754,7 @@ def _insert_concept_alignments(
740754 facts : list [AggregateFact ],
741755 build_id : str ,
742756) -> None :
743- seen : set [tuple [str , str , str , str | None , str , str ]] = set ()
757+ seen : set [tuple [Any , ... ]] = set ()
744758 for fact in facts :
745759 measure = fact .measure
746760 if not measure .source_concept or not measure .concept_relation :
@@ -752,6 +766,12 @@ def _insert_concept_alignments(
752766 measure .legal_vintage ,
753767 fact .period .type ,
754768 str (fact .period .value ),
769+ fact .period .start_date ,
770+ fact .period .end_date ,
771+ fact .period .basis ,
772+ fact .period .authority ,
773+ fact .period .source_label ,
774+ fact .period .accounting_basis ,
755775 )
756776 if key in seen :
757777 continue
@@ -768,9 +788,15 @@ def _insert_concept_alignments(
768788 evidence_notes,
769789 legal_vintage,
770790 period_type,
771- period_value
791+ period_value,
792+ period_start_date,
793+ period_end_date,
794+ period_basis,
795+ period_authority,
796+ period_source_label,
797+ period_accounting_basis
772798 )
773- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
799+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
774800 """ ,
775801 (
776802 measure .source_concept ,
@@ -783,6 +809,12 @@ def _insert_concept_alignments(
783809 measure .legal_vintage ,
784810 fact .period .type ,
785811 str (fact .period .value ),
812+ fact .period .start_date ,
813+ fact .period .end_date ,
814+ fact .period .basis ,
815+ fact .period .authority ,
816+ fact .period .source_label ,
817+ fact .period .accounting_basis ,
786818 ),
787819 )
788820
@@ -820,6 +852,12 @@ def _insert_aggregate_fact(
820852 value_numeric,
821853 period_type,
822854 period_value,
855+ period_start_date,
856+ period_end_date,
857+ period_basis,
858+ period_authority,
859+ period_source_label,
860+ period_accounting_basis,
823861 geography_level,
824862 geography_id,
825863 geography_vintage,
@@ -849,7 +887,7 @@ def _insert_aggregate_fact(
849887 source_extraction_method,
850888 source_method_notes
851889 )
852- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
890+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
853891 """ ,
854892 (
855893 fact_key ,
@@ -875,6 +913,12 @@ def _insert_aggregate_fact(
875913 _numeric_value (fact .value ),
876914 fact .period .type ,
877915 str (fact .period .value ),
916+ fact .period .start_date ,
917+ fact .period .end_date ,
918+ fact .period .basis ,
919+ fact .period .authority ,
920+ fact .period .source_label ,
921+ fact .period .accounting_basis ,
878922 fact .geography .level ,
879923 fact .geography .id ,
880924 fact .geography .vintage ,
0 commit comments