@@ -283,6 +283,40 @@ def test_collapse_settings_era_merges_tied_start_dates_into_one_group():
283283 assert str (result .iloc [0 ]["end_date" ])[:10 ] == "2020-01-05"
284284
285285
286+ def test_collapse_settings_era_merges_contained_intervals_after_tied_start_dates ():
287+ ibis = pytest .importorskip ("ibis" )
288+ _ = pytest .importorskip ("duckdb" )
289+
290+ conn = ibis .duckdb .connect ()
291+ _seed_common_tables (conn , ibis )
292+ conn .create_table (
293+ "condition_occurrence" ,
294+ obj = ibis .memtable (
295+ {
296+ "person_id" : [1 , 1 , 1 ],
297+ "condition_occurrence_id" : [100 , 101 , 102 ],
298+ "condition_concept_id" : [111 , 111 , 111 ],
299+ "condition_start_date" : ["2020-01-01" , "2020-01-01" , "2020-01-10" ],
300+ "condition_end_date" : ["2020-01-02" , "2020-02-01" , "2020-01-15" ],
301+ "visit_occurrence_id" : [10 , 10 , 10 ],
302+ }
303+ ),
304+ overwrite = True ,
305+ )
306+
307+ expression = CohortExpression (
308+ concept_sets = [_make_concept_set (1 , 111 )],
309+ primary_criteria = PrimaryCriteria (criteria_list = [ConditionOccurrence (codeset_id = 1 )]),
310+ end_strategy = DateOffsetStrategy (offset = 0 , date_field = "end_date" ),
311+ collapse_settings = CollapseSettings (era_pad = 0 ),
312+ )
313+
314+ result = build_cohort (expression , backend = conn , cdm_schema = "main" ).execute ()
315+ assert len (result ) == 1
316+ assert str (result .iloc [0 ]["start_date" ])[:10 ] == "2020-01-01"
317+ assert str (result .iloc [0 ]["end_date" ])[:10 ] == "2020-02-01"
318+
319+
286320def test_apply_end_strategy_rejects_invalid_date_field_and_preserves_fallback_semantics ():
287321 ibis_mod = pytest .importorskip ("ibis" )
288322 _ = pytest .importorskip ("duckdb" )
0 commit comments