@@ -354,7 +354,8 @@ def initialise_simulation(self, sim):
354354 )
355355
356356 if data is not None :
357- sim .modules ['HealthSystem' ].parameters ['availability_estimates' ] = data
357+ sim .modules ['HealthSystem' ].parameters ['data_source_for_cons_availability_estimates' ] = 'data'
358+ sim .modules ['HealthSystem' ].parameters ['availability_estimates' ] = {'data' :data }
358359
359360 sim .make_initial_population (n = 100 )
360361
@@ -707,3 +708,61 @@ def test_consumables_availability_modes_that_depend_on_designations(seed):
707708 assert isinstance (comparison , bool ), 'Comparison went wrong: {availability=}'
708709 assert not consumables ._prob_item_codes_available .equals (default_consumables_availability ), \
709710 f"No change in actual avaialbility when: { availability = } "
711+
712+
713+ def test_switch_between_different_cons_availability_databases (seed ):
714+ """Check that option to change consumable availability data source works as expected"""
715+
716+ # Import the 'raw' datasets for consumables availability
717+ path_to_files = resourcefilepath / 'healthsystem' / 'consumables'
718+ options_for_availability = {
719+ 'original' : pd .read_csv (path_to_files / 'ResourceFile_Consumables_availability_small_original.csv' ),
720+ 'updated' : pd .read_csv (path_to_files / 'ResourceFile_Consumables_availability_small.csv' ),
721+ }
722+
723+ # Sample availability of the raw datasets, where we know they are different:
724+ _facility_id = 2
725+ _month = 1
726+ def get_sample_availability (df ):
727+ return df .loc [
728+ (df .Facility_ID == _facility_id ) & (df .month == _month ),
729+ ['item_code' , 'available_prop' ]
730+ ].set_index ('item_code' )['available_prop' ].to_dict ()
731+ sample_availability_in_raw_data = {k : get_sample_availability (v ) for k , v in options_for_availability .items ()}
732+
733+ # Confirm that the samples from these two raw datasets are different
734+ assert sample_availability_in_raw_data ['original' ] != sample_availability_in_raw_data ['updated' ]
735+
736+ # Use different options (swithced after module registration) and confirm that the live data being used in the
737+ # module matches the intended raw data
738+ for which_option in options_for_availability .keys ():
739+ sim = Simulation (
740+ start_date = Date (2010 , 1 , 1 ),
741+ seed = seed ,
742+ resourcefilepath = resourcefilepath
743+ )
744+
745+
746+ # Register the core modules
747+ sim .register (
748+ demography .Demography (),
749+ healthsystem .HealthSystem (),
750+ )
751+
752+ # Make the decision to switch following module registration
753+ sim .modules ['HealthSystem' ].parameters ['cons_availability' ] = 'default'
754+ sim .modules ['HealthSystem' ].parameters ['data_source_for_cons_availability_estimates' ] = which_option
755+
756+ # Initialise the simulation and capture the 'live' data being used in the Consumables module
757+ sim .make_initial_population (n = 100 )
758+ sim .simulate (end_date = sim .start_date )
759+ hs = sim .modules ['HealthSystem' ]
760+ consumables_live_data = hs .consumables ._availability_data
761+
762+ # check availability actually held by consumables class during simulation matches intended data source
763+ sample_availability_in_live_data = consumables_live_data .loc [
764+ (consumables_live_data .Facility_ID == _facility_id ) & (consumables_live_data .month == _month ),
765+ ['item_code' , 'available_prop' ]
766+ ].set_index ('item_code' )['available_prop' ].to_dict ()
767+
768+ assert sample_availability_in_live_data == sample_availability_in_raw_data [which_option ]
0 commit comments