HaLim commited on
Commit
e892a6b
ยท
1 Parent(s): 0825791

Refactor configuration management to use dynamic calls for optimization parameters. Added a helper function to refresh module-level variables after configuration changes. Introduced new CSV files for kit composition and real data, while cleaning up old demand files.

Browse files
config_page.py CHANGED
@@ -257,13 +257,22 @@ def initialize_session_state():
257
  # Import the actual computed values, not just constants
258
  EVENING_SHIFT_MODE, EVENING_SHIFT_DEMAND_THRESHOLD,
259
  FIXED_STAFF_CONSTRAINT_MODE, DAILY_WEEKLY_SCHEDULE,
260
- MAX_HOUR_PER_PERSON_PER_DAY, MAX_HOUR_PER_SHIFT_PER_PERSON,
261
- MAX_PARALLEL_WORKERS, COST_LIST_PER_EMP_SHIFT,
262
- PAYMENT_MODE_CONFIG, LINE_CNT_PER_TYPE,
263
- MAX_EMPLOYEE_PER_TYPE_ON_DAY, start_date, end_date,
264
- shift_code_to_name, line_code_to_name, FIXED_MIN_UNICEF_PER_DAY
265
  )
266
 
 
 
 
 
 
 
 
 
 
267
  # Get the actual computed default values from optimization_config.py
268
  defaults = {
269
  # Schedule configuration - from optimization_config.py
@@ -806,6 +815,14 @@ def save_configuration():
806
  # Store complete configuration
807
  st.session_state.optimization_config = config
808
 
 
 
 
 
 
 
 
 
809
  # Return config for use in main function
810
  return config
811
 
 
257
  # Import the actual computed values, not just constants
258
  EVENING_SHIFT_MODE, EVENING_SHIFT_DEMAND_THRESHOLD,
259
  FIXED_STAFF_CONSTRAINT_MODE, DAILY_WEEKLY_SCHEDULE,
260
+ MAX_HOUR_PER_PERSON_PER_DAY, get_max_hour_per_shift_per_person,
261
+ get_max_parallel_workers, get_cost_list_per_emp_shift,
262
+ get_payment_mode_config, get_line_cnt_per_type,
263
+ get_max_employee_per_type_on_day, start_date, end_date,
264
+ shift_code_to_name, line_code_to_name, get_fixed_min_unicef_per_day
265
  )
266
 
267
+ # Get current dynamic values
268
+ MAX_HOUR_PER_SHIFT_PER_PERSON = get_max_hour_per_shift_per_person()
269
+ MAX_PARALLEL_WORKERS = get_max_parallel_workers()
270
+ COST_LIST_PER_EMP_SHIFT = get_cost_list_per_emp_shift()
271
+ PAYMENT_MODE_CONFIG = get_payment_mode_config()
272
+ LINE_CNT_PER_TYPE = get_line_cnt_per_type()
273
+ MAX_EMPLOYEE_PER_TYPE_ON_DAY = get_max_employee_per_type_on_day()
274
+ FIXED_MIN_UNICEF_PER_DAY = get_fixed_min_unicef_per_day()
275
+
276
  # Get the actual computed default values from optimization_config.py
277
  defaults = {
278
  # Schedule configuration - from optimization_config.py
 
815
  # Store complete configuration
816
  st.session_state.optimization_config = config
817
 
818
+ # Refresh module-level variables to pick up new configuration
819
+ try:
820
+ from src.config.optimization_config import _ensure_fresh_config
821
+ _ensure_fresh_config()
822
+ print("โœ… Refreshed module-level configuration variables")
823
+ except Exception as e:
824
+ print(f"โš ๏ธ Could not refresh module-level variables: {e}")
825
+
826
  # Return config for use in main function
827
  return config
828
 
data/real_data_excel/converted_csv/COOIS_Planned_and_Released.csv CHANGED
@@ -1,32 +1,4 @@
1
  Order,Material Number,Material description,Order quantity (GMEIN),Basic start date,Basic finish date,GOS Text display for CPH production orde
2
- 100035188,S9910000,"Surg.inst.,abdominal /SET",150,2025-07-07,2025-07-11,
3
- 100035218,S9999126,AWD Periphery kit Drug S9903004 sub 3/4,287,2025-07-07,2025-07-11,
4
- 100035228,S9935065,"ECD kit-in-a-carton, 2016",800,2025-07-07,2025-07-11,
5
- 100035234,S9975020,First aid kit class A,780,2025-07-07,2025-07-11,
6
- 100035451,S9999987,Prepack for ECD Kits 2016,800,2025-07-07,2025-07-11,
7
- 100035503,S9991052,"SUB 1/6 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,
8
- 100035513,S9999945,"Prepack 2/2 Obstetric,surgical kit,suppl",44,2025-07-07,2025-07-11,
9
- 100035525,S9991145,"SUB 1/5 IEHK 2024,Suppl. Medicine Inj.",30,2025-07-07,2025-07-11,
10
- 100035539,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-07,2025-07-11,
11
- 100035564,S9935064,"Early Childhood Dvt (ECD) kit, 2016",800,2025-07-07,2025-07-11,
12
- 100035584,S9999501,"Prepack 1/2 Sudan Co. Midwife kit, 2016",600,2025-07-07,2025-07-11,
13
- 100035693,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-07,2025-07-11,
14
- 100035694,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-07,2025-07-11,
15
- 100035699,S9999125,AWD Periphery kit Drug S9903004 sub 2/4,184,2025-07-07,2025-07-11,
16
- 100035703,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
17
- 100035704,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
18
- 100035705,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
19
- 100035706,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
20
- 100035707,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
21
- 100035708,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
22
- 100035732,S9998508,"Sub 7/7 SD IMCI Med. kit, 2016",150,2025-07-07,2025-07-11,
23
- 100035745,S9999490,Sub 4/4 SD Primary Healthcare2016,500,2025-07-07,2025-07-11,
24
- 100035759,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-07,2025-07-11,
25
- 100035769,S9999944,"Prepack 1/2 Obstetric,surgical kit,suppl",44,2025-07-07,2025-07-11,
26
- 100035780,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-07,2025-07-11,
27
- 100035797,S9999842,"Subkit 2/4 S9902217 Midwifery kit,1-drug",200,2025-07-07,2025-07-11,
28
- 100035799,S9999844,"Subkit 4/4 S9902217 Midwifery kit,1-drug",200,2025-07-07,2025-07-11,
29
- 100035857,S9902219,"Midwifery kit,3-renewable",241,2025-07-07,2025-07-11,
30
  100035861,S9906806,"Yemen PHC kit 2025, Consumables",1,2025-07-07,2025-07-11,
31
  100035870,S9999147,"PP 1/1 AWD Periphery, Equipment",300,2025-07-07,2025-07-11,
32
  100035872,S9935019,"School-in-a-bag kit,40 student,1 teacher",900,2025-07-07,2025-07-11,
@@ -275,35 +247,9 @@ Order,Material Number,Material description,Order quantity (GMEIN),Basic start da
275
  100035920,S9935024,"Recreation kit, 2016",800,2025-06-30,2025-07-04,REL PRC MACM SETC
276
  100034021,S9901042,"IEHK 2024,Basic Equipment UNIT",800,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
277
  100034121,S9910005,"Surg.inst.,dressing /SET",1200,2025-07-07,2025-07-11,REL PRC MACM SETC
278
- 100034819,S9991043,"IEHK 2024,Basic Medicine&Renewabl SUB3/3",800,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
279
  100034917,S9906742,Mozambique Community Health Worker Kit,948,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
280
  100035189,S9999857,"Bag 1/3 Surg.inst.,abdominal S9910000",150,2025-07-07,2025-07-11,REL PRC MANC SETC
281
  100035191,S9999859,"Bag 3/3 Surg.inst.,abdominal S9910000",150,2025-07-07,2025-07-11,REL PRC MANC SETC
282
- 100035380,S9991055,"SUB 4/6 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
283
- 100035382,S9991056,"SUB 5/6 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
284
- 100035504,S9991059,"PP 2/2 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
285
- 100035527,S9991150,"PP 1/2 ml IEHK 2024,Suppl. Medicine Inj.",100,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
286
- 100035529,S9991147,"SUB 3/5 IEHK 2024,Suppl. Medicine Inj.",113,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
287
- 100035571,S9999938,Prepack 1/2 Obstetric 3-renew. S9908302,100,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
288
- 100035572,S9999939,Prepack 2/2 Obstetric 3-renew. S9908302,100,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
289
- 100035588,S9999502,"Prepack 2/2 Sudan Co. Midwife kit, 2016",600,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
290
- 100035609,S9999495,"Prepack 2/3 SD,Primary Healthcare2016",474,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
291
- 100035629,S9999898,"Subkit 1/2 Midwifery ,3-renew S9902219",241,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
292
- 100035639,S9999986,Prepack for Recreation kits 2016,696,2025-07-07,2025-07-11,REL PRC MACM SETC
293
- 100035656,S9999933,Prepack 1/1 School in a Bag,800,2025-07-07,2025-07-11,REL PRC MACM SETC
294
- 100035671,S9910003,"Surg.inst.,delivery /SET",1200,2025-07-07,2025-07-11,REL PRC MACM SETC
295
- 100035673,S9999149,"AWD BAG 1/1 Periphery,Renewable S9903003",125,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
296
- 100035680,S9999143,"PP 3/3 Periphery,Renewable",425,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
297
- 100035724,S9999505,"Sub 1/7 SD IMCI Med. kit, 2016",150,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
298
- 100035728,S9999504,"Prepack 1/1 Sudan IMCI Med. kit, 2016",768,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
299
- 100035741,S9999494,"Prepack 1/3 SD,Primary Healthcare2016",110,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
300
- 100035752,S9999923,"Subkit 1/2 Sterilization, kit C S9908200",200,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
301
- 100035753,S9999924,"Subkit 2/2 Sterilization, kit C S9908200",200,2025-07-07,2025-07-11,REL PRC MACM SETC
302
- 100035855,S9991057,"SUB 6/6 IEHK 2024,Suppl. Renewable UNIT",120,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
303
- 100035873,S9991059,"PP 2/2 IEHK 2024,Suppl. Renewable UNIT",10,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
304
- 100035902,S7993033,"AWD, Periphery kit, Renewable sub 3/3",19,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
305
- 100035923,S9999503,"Bag 1/1 Sudan, IMCI Med. kit, 2016",708,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
306
- 100035924,S9906807,"Yemen PHC kit 2025, Supp. HC Medicines",1,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
307
  100035568,S9999881,Subkit 1/6 Obstetric 3-renew.S9908302,50,2025-07-14,2025-07-18,REL PRC BCRQ MANC SETC
308
  100035569,S9999882,Subkit 2/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
309
  100035574,S9999885,Subkit 5/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
 
1
  Order,Material Number,Material description,Order quantity (GMEIN),Basic start date,Basic finish date,GOS Text display for CPH production orde
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  100035861,S9906806,"Yemen PHC kit 2025, Consumables",1,2025-07-07,2025-07-11,
3
  100035870,S9999147,"PP 1/1 AWD Periphery, Equipment",300,2025-07-07,2025-07-11,
4
  100035872,S9935019,"School-in-a-bag kit,40 student,1 teacher",900,2025-07-07,2025-07-11,
 
247
  100035920,S9935024,"Recreation kit, 2016",800,2025-06-30,2025-07-04,REL PRC MACM SETC
248
  100034021,S9901042,"IEHK 2024,Basic Equipment UNIT",800,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
249
  100034121,S9910005,"Surg.inst.,dressing /SET",1200,2025-07-07,2025-07-11,REL PRC MACM SETC
 
250
  100034917,S9906742,Mozambique Community Health Worker Kit,948,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
251
  100035189,S9999857,"Bag 1/3 Surg.inst.,abdominal S9910000",150,2025-07-07,2025-07-11,REL PRC MANC SETC
252
  100035191,S9999859,"Bag 3/3 Surg.inst.,abdominal S9910000",150,2025-07-07,2025-07-11,REL PRC MANC SETC
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  100035568,S9999881,Subkit 1/6 Obstetric 3-renew.S9908302,50,2025-07-14,2025-07-18,REL PRC BCRQ MANC SETC
254
  100035569,S9999882,Subkit 2/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
255
  100035574,S9999885,Subkit 5/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
data/real_data_excel/converted_csv/COOIS_Planned_and_Released_real.csv ADDED
@@ -0,0 +1,335 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Order,Material Number,Material description,Order quantity (GMEIN),Basic start date,Basic finish date,GOS Text display for CPH production orde
2
+ 100035188,S9910000,"Surg.inst.,abdominal /SET",150,2025-07-07,2025-07-11,
3
+ 100035218,S9999126,AWD Periphery kit Drug S9903004 sub 3/4,287,2025-07-07,2025-07-11,
4
+ 100035228,S9935065,"ECD kit-in-a-carton, 2016",800,2025-07-07,2025-07-11,
5
+ 100035234,S9975020,First aid kit class A,780,2025-07-07,2025-07-11,
6
+ 100035451,S9999987,Prepack for ECD Kits 2016,800,2025-07-07,2025-07-11,
7
+ 100035503,S9991052,"SUB 1/6 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,
8
+ 100035513,S9999945,"Prepack 2/2 Obstetric,surgical kit,suppl",44,2025-07-07,2025-07-11,
9
+ 100035525,S9991145,"SUB 1/5 IEHK 2024,Suppl. Medicine Inj.",30,2025-07-07,2025-07-11,
10
+ 100035539,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-07,2025-07-11,
11
+ 100035564,S9935064,"Early Childhood Dvt (ECD) kit, 2016",800,2025-07-07,2025-07-11,
12
+ 100035584,S9999501,"Prepack 1/2 Sudan Co. Midwife kit, 2016",600,2025-07-07,2025-07-11,
13
+ 100035693,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-07,2025-07-11,
14
+ 100035694,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-07,2025-07-11,
15
+ 100035699,S9999125,AWD Periphery kit Drug S9903004 sub 2/4,184,2025-07-07,2025-07-11,
16
+ 100035703,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
17
+ 100035704,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
18
+ 100035705,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
19
+ 100035706,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
20
+ 100035707,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
21
+ 100035708,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-07-07,2025-07-11,
22
+ 100035732,S9998508,"Sub 7/7 SD IMCI Med. kit, 2016",150,2025-07-07,2025-07-11,
23
+ 100035745,S9999490,Sub 4/4 SD Primary Healthcare2016,500,2025-07-07,2025-07-11,
24
+ 100035759,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-07,2025-07-11,
25
+ 100035769,S9999944,"Prepack 1/2 Obstetric,surgical kit,suppl",44,2025-07-07,2025-07-11,
26
+ 100035780,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-07,2025-07-11,
27
+ 100035797,S9999842,"Subkit 2/4 S9902217 Midwifery kit,1-drug",200,2025-07-07,2025-07-11,
28
+ 100035799,S9999844,"Subkit 4/4 S9902217 Midwifery kit,1-drug",200,2025-07-07,2025-07-11,
29
+ 100035857,S9902219,"Midwifery kit,3-renewable",241,2025-07-07,2025-07-11,
30
+ 100035861,S9906806,"Yemen PHC kit 2025, Consumables",1,2025-07-07,2025-07-11,
31
+ 100035870,S9999147,"PP 1/1 AWD Periphery, Equipment",300,2025-07-07,2025-07-11,
32
+ 100035872,S9935019,"School-in-a-bag kit,40 student,1 teacher",900,2025-07-07,2025-07-11,
33
+ 100035921,S9935097,"School-in-a-box,40 students, 2016",800,2025-07-07,2025-07-11,
34
+ 100035796,S9999841,"Subkit 1/4 S9902217 Midwifery kit,1-drug",200,2025-07-08,2025-07-11,
35
+ 100034031,S9901045,"IEHK 2024,Suppl. Med Mental Health UNIT",100,2025-07-14,2025-07-18,
36
+ 100034813,S9991045,"PP 2/2 IEHK 2024,Basic Medicine&Renewabl",100,2025-07-14,2025-07-18,
37
+ 100035182,S9975020,First aid kit class A,780,2025-07-14,2025-07-18,
38
+ 100035515,S9999993,Sub 3/10 Obstetric S9908300(i) part 3,44,2025-07-14,2025-07-18,
39
+ 100035516,S9999974,Sub 10/10 Obstetric S9908300 part 10-42,40,2025-07-14,2025-07-18,
40
+ 100035520,S9999976,Sub 7/10 Obstetric S9908300(i) part 7,44,2025-07-14,2025-07-18,
41
+ 100035521,S9999977,Sub 8/10 Obstetric S9908300(i) part 8,44,2025-07-14,2025-07-18,
42
+ 100035522,S9999971,Sub 9/10 Obstetric S9908300(i) part 9,44,2025-07-14,2025-07-18,
43
+ 100035570,S9999883,Subkit 3/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,
44
+ 100035573,S9999884,Subkit 4/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,
45
+ 100035576,S9999886,Subkit 6/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,
46
+ 100035582,S9906714,"SD, Community Midwife kit, 2016",600,2025-07-14,2025-07-18,
47
+ 100035596,S9999957,Prepack 1/1 Midwifery 2-Equip S9902221,400,2025-07-14,2025-07-18,
48
+ 100035607,S9999491,"Sub 1/4, SD SD,Primary Healthcare2016",138,2025-07-14,2025-07-18,
49
+ 100035618,S9999493,"Sub 3/4 , SD Primary Healthcare2016",110,2025-07-14,2025-07-18,
50
+ 100035626,S9996722,DRC Measles Kit 2021 SUB 2/5,7,2025-07-14,2025-07-18,
51
+ 100035631,S9935019,"School-in-a-bag kit,40 student,1 teacher",1600,2025-07-14,2025-07-18,
52
+ 100035633,S9999990,Education prepack 1 for new SIB (I),800,2025-07-14,2025-07-18,
53
+ 100035634,S9999989,prepack 3 system-wise (not physical),1526,2025-07-14,2025-07-18,
54
+ 100035678,S9999145,"AWD SUB 2/3 Periphery,Renewable",106,2025-07-14,2025-07-18,
55
+ 100035716,S9999995,Sub 1/10 Obstetric S9908300(i) part 1,50,2025-07-14,2025-07-18,
56
+ 100035717,S9999994,Sub 2/10 Obstetric S9908300(i) part 2,44,2025-07-14,2025-07-18,
57
+ 100035718,S9999975,Sub 4/10 Obstetric S9908300(i) part 4,50,2025-07-14,2025-07-18,
58
+ 100035719,S9999973,Sub 5/10 Obstetric S9908300(i) part 5,44,2025-07-14,2025-07-18,
59
+ 100035721,S9935034,"Recreation kit-in-a-carton, 2016",800,2025-07-14,2025-07-18,
60
+ 100035725,S9999506,"Sub 2/7 SD IMCI Med. kit, 2016",500,2025-07-14,2025-07-18,
61
+ 100035727,S9999507,"Sub 3/7 SD IMCI Med. kit, 2016",500,2025-07-14,2025-07-18,
62
+ 100035729,S9998505,"Sub 4/7 SD IMCI Med. kit, 2016",500,2025-07-14,2025-07-18,
63
+ 100035730,S9998506,"Sub 5/7 SD IMCI Med. kit, 2016",375,2025-07-14,2025-07-18,
64
+ 100035731,S9998507,"Sub 6/7 SD IMCI Med. kit, 2016",375,2025-07-14,2025-07-18,
65
+ 100035737,S9991048,"IEHK 2024,Suppl. Malaria UNIT SUB 1/4",40,2025-07-14,2025-07-18,
66
+ 100035738,S9991049,"IEHK 2024,Suppl. Malaria UNIT SUB 2/4",40,2025-07-14,2025-07-18,
67
+ 100035739,S9991050,"IEHK 2024,Suppl. Malaria UNIT SUB 3/4",40,2025-07-14,2025-07-18,
68
+ 100035755,S9903002,"AWD, Periphery kit, Equipment",300,2025-07-14,2025-07-18,
69
+ 100035770,S9906742,Mozambique Community Health Worker Kit,800,2025-07-14,2025-07-18,
70
+ 100035773,S9991150,"PP 1/2 ml IEHK 2024,Suppl. Medicine Inj.",30,2025-07-14,2025-07-18,
71
+ 100035781,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-14,2025-07-18,
72
+ 100035782,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-14,2025-07-18,
73
+ 100035794,S9908200,"Sterilization, kit C",200,2025-07-14,2025-07-18,
74
+ 100035798,S9999843,"Subkit 3/4 S9902217 Midwifery kit,1-drug",200,2025-07-14,2025-07-18,
75
+ 100035812,S9999987,Prepack for ECD Kits 2016,800,2025-07-14,2025-07-18,
76
+ 100035820,S9991051,"IEHK 2024,Suppl. Malaria UNIT SUB 4/4",40,2025-07-14,2025-07-18,
77
+ 100035838,S9991053,"SUB 2/6 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-14,2025-07-18,
78
+ 100035871,S9901050,"IEHK 2024,Suppl. Renewable UNIT",400,2025-07-14,2025-07-18,
79
+ 100035885,S9935051,"School-in-a-carton, Yemen",175,2025-07-14,2025-07-18,
80
+ 100035918,S9992451,"SUB 1/5 NBK, Clinic, Module 3, Equipment",10,2025-07-14,2025-07-18,
81
+ 100035919,S9992452,"SUB 2/5 NBK, Clinic, Module 3, Equipment",10,2025-07-14,2025-07-18,
82
+ 100035940,S9992453,"SUB 3/5 NBK, Clinic, Module 3, Equipment",10,2025-07-14,2025-07-18,
83
+ 100035941,S9992454,"SUB 4/5 NBK, Clinic, Module 3, Equipment",10,2025-07-14,2025-07-18,
84
+ 100035942,S9992458,"SUB 5/5 NBK, Clinic, Module 3, Equipment",10,2025-07-14,2025-07-18,
85
+ 100035774,S9991149,"IEHK 2024,Suppl. Medicine Inj. S9901044",70,2025-07-16,2025-07-23,
86
+ 100034557,S9991044,"PP 1/2 IEHK 2024,Basic Medicine&Renewabl",800,2025-07-21,2025-07-25,
87
+ 100035146,S9935011,"School-in-a-carton,40 students, 2016",800,2025-07-21,2025-07-25,
88
+ 100035372,S9991054,"SUB 3/6 IEHK 2024,Suppl. Renewable UNIT",240,2025-07-21,2025-07-25,
89
+ 100035388,S9991042,"IEHK 2024,Basic Medicine&Renewabl SUB2/3",800,2025-07-21,2025-07-25,
90
+ 100035444,S9999146,"AWD SUB 3/3 Periphery,Renewable",300,2025-07-21,2025-07-25,
91
+ 100035517,S9999975,Sub 4/10 Obstetric S9908300(i) part 4,25,2025-07-21,2025-07-25,
92
+ 100035523,S9901044,"IEHK 2024,Suppl. Medicine Inj. UNIT",30,2025-07-21,2025-07-25,
93
+ 100035531,S9991149,"IEHK 2024,Suppl. Medicine Inj. S9901044",33,2025-07-21,2025-07-25,
94
+ 100035567,S9908302,"Obstetric,surgical kit,suppl.3-renewable",100,2025-07-21,2025-07-25,
95
+ 100035594,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,
96
+ 100035595,S9902221,"Midwifery kit โ€“ equipment, 2",400,2025-07-21,2025-07-25,
97
+ 100035600,S9991041,"IEHK 2024,Basic Medicine&Renewabl SUB1/3",800,2025-07-21,2025-07-25,
98
+ 100035601,S9999150,Prepack 1/1 Mozambique Kit 2016,156,2025-07-21,2025-07-25,
99
+ 100035627,S9996721,DRC Measles Kit 2021 SUB 1/5,7,2025-07-21,2025-07-25,
100
+ 100035632,S9935011,"School-in-a-carton,40 students, 2016",800,2025-07-21,2025-07-25,
101
+ 100035635,S9902217,"Midwifery kit,1-drugs",200,2025-07-21,2025-07-25,
102
+ 100035645,S9999505,"Sub 1/7 SD IMCI Med. kit, 2016",350,2025-07-21,2025-07-25,
103
+ 100035651,S9998506,"Sub 5/7 SD IMCI Med. kit, 2016",333,2025-07-21,2025-07-25,
104
+ 100035652,S9998507,"Sub 6/7 SD IMCI Med. kit, 2016",333,2025-07-21,2025-07-25,
105
+ 100035672,S9999144,"AWD SUB 1/3 Periphery,Renewable",106,2025-07-21,2025-07-25,
106
+ 100035688,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-21,2025-07-25,
107
+ 100035689,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-21,2025-07-25,
108
+ 100035723,S9906713,"SD, IMCI Medicine kit, 2016",150,2025-07-21,2025-07-25,
109
+ 100035736,S9901048,"IEHK 2024,Suppl. Malaria UNIT",40,2025-07-21,2025-07-25,
110
+ 100035750,S9935065,"ECD kit-in-a-carton, 2016",800,2025-07-21,2025-07-25,
111
+ 100035768,S9908300,"Obstetric,surgical kit,suppl.1-drugs",50,2025-07-21,2025-07-25,
112
+ 100035772,S9991145,"SUB 1/5 IEHK 2024,Suppl. Medicine Inj.",70,2025-07-21,2025-07-25,
113
+ 100035783,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-21,2025-07-25,
114
+ 100035784,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-21,2025-07-25,
115
+ 100035800,S9996725,DRC Measles Kit 2021 SUB 5/5,7,2025-07-21,2025-07-25,
116
+ 100035801,S9996724,DRC Measles Kit 2021 SUB 4/5,7,2025-07-21,2025-07-25,
117
+ 100035802,S9996723,DRC Measles Kit 2021 SUB 3/5,7,2025-07-21,2025-07-25,
118
+ 100035874,S9902219,"Midwifery kit,3-renewable",459,2025-07-21,2025-07-25,
119
+ 100035875,S9935090,"Syria Paediatric Kit, 2019",26,2025-07-21,2025-07-25,
120
+ 100035888,S9999492,"Sub 2/4 , SD Primary Healthcare2016",37,2025-07-21,2025-07-25,
121
+ 100034907,S9994921,"IEHK 2024,Suppl. PEP Unit sub1/3 Child",500,2025-07-28,2025-08-01,
122
+ 100034908,S9994922,"IEHK 2024,Suppl. PEP Unit sub2/3 Adult",200,2025-07-28,2025-08-01,
123
+ 100034909,S9994923,"IEHK 2024,Suppl. PEP Unit sub3/3 Adult",200,2025-07-28,2025-08-01,
124
+ 100034976,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",323,2025-07-28,2025-08-01,
125
+ 100035171,S9901047,"IEHK 2024,Suppl Medicine Cold Chain UNIT",7,2025-07-28,2025-08-01,
126
+ 100035533,S9903003,"AWD, Periphery kit, Renewable",300,2025-07-28,2025-08-01,
127
+ 100035548,S9999506,"Sub 2/7 SD IMCI Med. kit, 2016",208,2025-07-28,2025-08-01,
128
+ 100035552,S9999507,"Sub 3/7 SD IMCI Med. kit, 2016",208,2025-07-28,2025-08-01,
129
+ 100035556,S9998505,"Sub 4/7 SD IMCI Med. kit, 2016",208,2025-07-28,2025-08-01,
130
+ 100035559,S9998508,"Sub 7/7 SD IMCI Med. kit, 2016",558,2025-07-28,2025-08-01,
131
+ 100035603,S9906712,"SD, Primary Healthcare kit, 2016",110,2025-07-28,2025-08-01,
132
+ 100035610,S9999495,"Prepack 2/3 SD,Primary Healthcare2016",286,2025-07-28,2025-08-01,
133
+ 100035613,S9999496,"Prepack 3/3 SD,Primary Healthcare2016",314,2025-07-28,2025-08-01,
134
+ 100035628,S9906729,DRC Measles Kit 2021,7,2025-07-28,2025-08-01,
135
+ 100035661,S9906742,Mozambique Community Health Worker Kit,140,2025-07-28,2025-08-01,
136
+ 100035670,S9901041,"IEHK 2024,Basic Malaria UNIT",20,2025-07-28,2025-08-01,
137
+ 100035690,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-28,2025-08-01,
138
+ 100035691,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-28,2025-08-01,
139
+ 100035692,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-28,2025-08-01,
140
+ 100035695,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-28,2025-08-01,
141
+ 100035696,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-28,2025-08-01,
142
+ 100035697,S9999124,AWD Periphery kit Drug S9903004,33,2025-07-28,2025-08-01,
143
+ 100035746,S9901040,"IEHK 2024,Basic Medicine&Renewable UNIT",800,2025-07-28,2025-08-01,
144
+ 100035757,S9975020,First aid kit class A,780,2025-07-28,2025-08-01,
145
+ 100035761,S9999933,Prepack 1/1 School in a Bag,800,2025-07-28,2025-08-01,
146
+ 100035771,S9901044,"IEHK 2024,Suppl. Medicine Inj. UNIT",70,2025-07-28,2025-08-01,
147
+ 100035785,S9999992,First Aid kit-prepack for S9975020 (I),780,2025-07-28,2025-08-01,
148
+ 100035789,S9975020,First aid kit class A,780,2025-07-28,2025-08-01,
149
+ 100035790,S9975020,First aid kit class A,780,2025-07-28,2025-08-01,
150
+ 100035916,S9903004,AWD Periphery kit Drug,300,2025-07-28,2025-08-01,
151
+ 100035917,S9902450,"NBK, Clinic, Module 3, Equipment",10,2025-07-28,2025-08-01,
152
+ 100034032,S9901045,"IEHK 2024,Suppl. Med Mental Health UNIT",100,2025-08-04,2025-08-08,
153
+ 100034042,S9901049,"IEHK 2024,Suppl. PEP Unit",200,2025-08-04,2025-08-08,
154
+ 100034979,S9935090,"Syria Paediatric Kit, 2019",643,2025-08-04,2025-08-08,
155
+ 100035546,S9999505,"Sub 1/7 SD IMCI Med. kit, 2016",208,2025-08-04,2025-08-08,
156
+ 100035597,S9935034,"Recreation kit-in-a-carton, 2016",800,2025-08-04,2025-08-08,
157
+ 100035677,S9999149,"AWD BAG 1/1 Periphery,Renewable S9903003",300,2025-08-04,2025-08-08,
158
+ 100035709,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-08-04,2025-08-08,
159
+ 100035710,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-08-04,2025-08-08,
160
+ 100035711,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-08-04,2025-08-08,
161
+ 100035744,S9999490,Sub 4/4 SD Primary Healthcare2016,1160,2025-08-04,2025-08-08,
162
+ 100034715,S9935082,Arabic Teacher's Kit,792,2025-08-11,2025-08-15,
163
+ 100034867,S9992412,"SUB 2/3 NBK,Community,Part B,Module1,Med",41,2025-08-11,2025-08-15,
164
+ 100035089,S9906729,DRC Measles Kit 2021,17,2025-08-11,2025-08-15,
165
+ 100035091,S9996722,DRC Measles Kit 2021 SUB 2/5,17,2025-08-11,2025-08-15,
166
+ 100035092,S9996726,DRC Measles Kit 2021 PP 1/1,17,2025-08-11,2025-08-15,
167
+ 100035239,S9901041,"IEHK 2024,Basic Malaria UNIT",90,2025-08-11,2025-08-15,
168
+ 100035302,S9992431,"SUB 1/8 NBK, Clinic, Module 1, Medicines",20,2025-08-11,2025-08-15,
169
+ 100035305,S9992434,"SUB 4/8 NBK, Clinic, Module 1, Medicines",20,2025-08-11,2025-08-15,
170
+ 100035544,S9906713,"SD, IMCI Medicine kit, 2016",208,2025-08-11,2025-08-15,
171
+ 100035561,S9935034,"Recreation kit-in-a-carton, 2016",800,2025-08-11,2025-08-15,
172
+ 100035615,S9999492,"Sub 2/4 , SD Primary Healthcare2016",650,2025-08-11,2025-08-15,
173
+ 100035712,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-08-11,2025-08-15,
174
+ 100035713,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-08-11,2025-08-15,
175
+ 100035714,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-08-11,2025-08-15,
176
+ 100035715,S9999127,AWD Periphery kit Drug S9903004 sub 4/4,48,2025-08-11,2025-08-15,
177
+ 100035722,S9906713,"SD, IMCI Medicine kit, 2016",350,2025-08-11,2025-08-15,
178
+ 100035810,S9935064,"Early Childhood Dvt (ECD) kit, 2016",800,2025-08-11,2025-08-14,
179
+ 100035904,S9999138,PP 2/3 (old 2/7)Periphery Renew S9903003,19,2025-08-11,2025-08-15,
180
+ 100035905,S9999137,PP 1/3 (old 1/7)Periphery Renew S9903003,19,2025-08-11,2025-08-15,
181
+ 100034977,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",792,2025-08-18,2025-08-22,
182
+ 100034978,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",96,2025-08-18,2025-08-22,
183
+ 100035606,S9999491,"Sub 1/4, SD SD,Primary Healthcare2016",622,2025-08-18,2025-08-22,
184
+ 100035619,S9999493,"Sub 3/4 , SD Primary Healthcare2016",650,2025-08-18,2025-08-22,
185
+ 100035676,S9999144,"AWD SUB 1/3 Periphery,Renewable",300,2025-08-18,2025-08-22,
186
+ 100035679,S9999145,"AWD SUB 2/3 Periphery,Renewable",300,2025-08-18,2025-08-22,
187
+ 100035684,S9999146,"AWD SUB 3/3 Periphery,Renewable",300,2025-08-18,2025-08-22,
188
+ 100035742,S9999494,"Prepack 1/3 SD,Primary Healthcare2016",650,2025-08-18,2025-08-22,
189
+ 100035811,S9935064,"Early Childhood Dvt (ECD) kit, 2016",800,2025-08-18,2025-08-22,
190
+ 100035813,S9999987,Prepack for ECD Kits 2016,800,2025-08-18,2025-08-22,
191
+ 100035581,S9901047,"IEHK 2024,Suppl Medicine Cold Chain UNIT",7,2025-08-25,2025-08-29,
192
+ 100035605,S9906712,"SD, Primary Healthcare kit, 2016",650,2025-08-25,2025-08-29,
193
+ 100035675,S9903003,"AWD, Periphery kit, Renewable",300,2025-08-25,2025-08-29,
194
+ 100035698,S9999124,AWD Periphery kit Drug S9903004,187,2025-08-25,2025-08-29,
195
+ 100035791,S9975020,First aid kit class A,780,2025-08-25,2025-08-29,
196
+ 100035021,S9935090,"Syria Paediatric Kit, 2019",215,2025-09-01,2025-09-05,
197
+ 100035373,S9992413,"SUB 3/3 NBK,Community,Part B,Module1,Med",57,2025-09-01,2025-09-05,
198
+ 100035787,S9975020,First aid kit class A,780,2025-09-01,2025-09-05,
199
+ 100035788,S9975020,First aid kit class A,780,2025-09-01,2025-09-05,
200
+ 100035925,S9999503,"Bag 1/1 Sudan, IMCI Med. kit, 2016",60,2025-09-01,2025-09-05,
201
+ 100035926,S9998508,"Sub 7/7 SD IMCI Med. kit, 2016",60,2025-09-01,2025-09-05,
202
+ 100035927,S9998507,"Sub 6/7 SD IMCI Med. kit, 2016",60,2025-09-01,2025-09-05,
203
+ 100035928,S9998506,"Sub 5/7 SD IMCI Med. kit, 2016",60,2025-09-01,2025-09-05,
204
+ 100035929,S9999507,"Sub 3/7 SD IMCI Med. kit, 2016",60,2025-09-01,2025-09-05,
205
+ 100035930,S9999506,"Sub 2/7 SD IMCI Med. kit, 2016",60,2025-09-01,2025-09-05,
206
+ 100035786,S9975020,First aid kit class A,780,2025-09-08,2025-09-12,
207
+ 100035792,S9975020,First aid kit class A,780,2025-09-08,2025-09-12,
208
+ 100035793,S9975020,First aid kit class A,780,2025-09-08,2025-09-12,
209
+ 100035867,S9906806,"Yemen PHC kit 2025, Consumables",200,2025-09-08,2025-09-12,
210
+ 100035880,S9906804,"Yemen PHC kit 2025, Basic Medicines",60,2025-09-15,2025-09-19,
211
+ 100034015,S9901042,"IEHK 2024,Basic Equipment UNIT",800,2025-09-22,2025-09-26,
212
+ 100034030,S9901045,"IEHK 2024,Suppl. Med Mental Health UNIT",150,2025-09-22,2025-09-26,
213
+ 100035482,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
214
+ 100035483,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
215
+ 100035485,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
216
+ 100035488,S9999592,"2/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
217
+ 100035489,S9999592,"2/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
218
+ 100035490,S9999592,"2/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
219
+ 100035491,S9999592,"2/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
220
+ 100035494,S9999593,"3/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
221
+ 100035495,S9999593,"3/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
222
+ 100035497,S9999593,"3/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
223
+ 100035498,S9999593,"3/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-22,2025-09-26,
224
+ 100035537,S9999124,AWD Periphery kit Drug S9903004,33,2025-09-22,2025-09-26,
225
+ 100035538,S9999124,AWD Periphery kit Drug S9903004,33,2025-09-22,2025-09-26,
226
+ 100035864,S9906805,"Yemen PHC kit 2025, Supp. Medicines",150,2025-09-22,2025-09-26,
227
+ 100035907,S9999505,"Sub 1/7 SD IMCI Med. kit, 2016",60,2025-09-22,2025-09-26,
228
+ 100035476,S9935090,"Syria Paediatric Kit, 2019",792,2025-09-29,2025-10-03,
229
+ 100035477,S9935090,"Syria Paediatric Kit, 2019",792,2025-09-29,2025-10-03,
230
+ 100035478,S9935090,"Syria Paediatric Kit, 2019",792,2025-09-29,2025-10-03,
231
+ 100035486,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-29,2025-10-03,
232
+ 100035487,S9999591,"1/3PP Syria Paediatric Kit,2019 S9935090",470,2025-09-29,2025-10-03,
233
+ 100035492,S9999592,"2/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-29,2025-10-03,
234
+ 100035493,S9999592,"2/3PP Syria Paediatric Kit,2019 S9935090",440,2025-09-29,2025-10-03,
235
+ 100035496,S9999593,"3/3PP Syria Paediatric Kit,2019 S9935090",792,2025-09-29,2025-10-03,
236
+ 100035499,S9999593,"3/3PP Syria Paediatric Kit,2019 S9935090",440,2025-09-29,2025-10-03,
237
+ 100035479,S9935090,"Syria Paediatric Kit, 2019",524,2025-10-06,2025-10-10,
238
+ 100035480,S9935090,"Syria Paediatric Kit, 2019",792,2025-10-06,2025-10-10,
239
+ 100035481,S9935090,"Syria Paediatric Kit, 2019",716,2025-10-06,2025-10-10,
240
+ 100035614,S9999496,"Prepack 3/3 SD,Primary Healthcare2016",900,2025-10-06,2025-10-10,
241
+ 100035906,S9906713,"SD, IMCI Medicine kit, 2016",60,2025-10-06,2025-10-10,
242
+ 100035611,S9999495,"Prepack 2/3 SD,Primary Healthcare2016",900,2025-10-13,2025-10-17,
243
+ 100035617,S9999492,"Sub 2/4 , SD Primary Healthcare2016",900,2025-10-13,2025-10-17,
244
+ 100035743,S9999494,"Prepack 1/3 SD,Primary Healthcare2016",900,2025-10-13,2025-10-17,
245
+ 100035608,S9999491,"Sub 1/4, SD SD,Primary Healthcare2016",900,2025-10-20,2025-10-24,
246
+ 100035740,S9999493,"Sub 3/4 , SD Primary Healthcare2016",900,2025-10-20,2025-10-24,
247
+ 100035869,S9906807,"Yemen PHC kit 2025, Supp. HC Medicines",149,2025-10-20,2025-10-24,
248
+ 100035604,S9906712,"SD, Primary Healthcare kit, 2016",900,2025-10-27,2025-10-31,
249
+ 100035868,S9906806,"Yemen PHC kit 2025, Consumables",829,2025-10-27,2025-10-31,
250
+ 100035910,S9999496,"Prepack 3/3 SD,Primary Healthcare2016",45,2025-11-10,2025-11-14,
251
+ 100035911,S9999495,"Prepack 2/3 SD,Primary Healthcare2016",45,2025-11-10,2025-11-14,
252
+ 100035912,S9999492,"Sub 2/4 , SD Primary Healthcare2016",45,2025-11-10,2025-11-14,
253
+ 100035913,S9999494,"Prepack 1/3 SD,Primary Healthcare2016",45,2025-11-10,2025-11-14,
254
+ 100035881,S9906804,"Yemen PHC kit 2025, Basic Medicines",300,2025-11-17,2025-11-21,
255
+ 100035909,S9999491,"Sub 1/4, SD SD,Primary Healthcare2016",45,2025-11-17,2025-11-21,
256
+ 100035914,S9999493,"Sub 3/4 , SD Primary Healthcare2016",45,2025-11-17,2025-11-21,
257
+ 100035915,S9999490,Sub 4/4 SD Primary Healthcare2016,45,2025-11-17,2025-11-21,
258
+ 100035865,S9906805,"Yemen PHC kit 2025, Supp. Medicines",300,2025-11-24,2025-11-28,
259
+ 100035908,S9906712,"SD, Primary Healthcare kit, 2016",45,2025-11-24,2025-11-28,
260
+ 100035630,S9992451,"SUB 1/5 NBK, Clinic, Module 3, Equipment",100,2025-12-29,2026-01-02,
261
+ 100035882,S9906804,"Yemen PHC kit 2025, Basic Medicines",300,2025-12-29,2026-01-02,
262
+ 100035866,S9906805,"Yemen PHC kit 2025, Supp. Medicines",580,2026-01-05,2026-01-09,
263
+ 100035883,S9906804,"Yemen PHC kit 2025, Basic Medicines",370,2026-01-05,2026-01-09,
264
+ 100035417,S9906742,Mozambique Community Health Worker Kit,800,2025-06-23,2025-06-27,REL PRC BCRQ MANC SETC
265
+ 100034757,S9908305,"Obstetric,surgical kit,suppl.2-equipment",30,2025-06-30,2025-07-04,REL PRC BCRQ MANC SETC
266
+ 100035436,S9999899,"Subkit 2/2 Midwifery ,3-renew S9902219",700,2025-07-01,2025-07-04,REL PRC BCRQ MANC SETC
267
+ 100035449,S9999987,Prepack for ECD Kits 2016,800,2025-06-30,2025-07-04,REL PRC MANC SETC
268
+ 100035450,S9999987,Prepack for ECD Kits 2016,800,2025-06-30,2025-07-04,REL PRC MACM SETC
269
+ 100035663,S9908402,"Resuscitation kit,basic",400,2025-06-30,2025-07-04,REL PRC BCRQ MANC SETC
270
+ 100035758,S9999992,First Aid kit-prepack for S9975020 (I),120,2025-06-30,2025-07-04,REL PRC BCRQ MACM SETC
271
+ 100035809,S7901045,"ECHO IEHK 2024,Suppl Mental Health UNIT",10,2025-06-30,2025-07-04,REL PRC BCRQ GMPS MACM SETC
272
+ 100035835,S7901042,"ECHO IEHK 2024,Basic Equipment UNIT",100,2025-06-30,2025-07-04,REL PRC BCRQ MACM SETC
273
+ 100035842,S7998051,"ECHO IEHK 2024,Suppl Equipment UNIT S1/2",10,2025-06-30,2025-07-04,REL PRC BCRQ MACM SETC
274
+ 100035848,S7991054,"ECHO IEHK 2024,Suppl Renewable UNIT S3/6",10,2025-06-30,2025-07-04,REL PRC BCRQ MACM SETC
275
+ 100035920,S9935024,"Recreation kit, 2016",800,2025-06-30,2025-07-04,REL PRC MACM SETC
276
+ 100034021,S9901042,"IEHK 2024,Basic Equipment UNIT",800,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
277
+ 100034121,S9910005,"Surg.inst.,dressing /SET",1200,2025-07-07,2025-07-11,REL PRC MACM SETC
278
+ 100034819,S9991043,"IEHK 2024,Basic Medicine&Renewabl SUB3/3",800,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
279
+ 100034917,S9906742,Mozambique Community Health Worker Kit,948,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
280
+ 100035189,S9999857,"Bag 1/3 Surg.inst.,abdominal S9910000",150,2025-07-07,2025-07-11,REL PRC MANC SETC
281
+ 100035191,S9999859,"Bag 3/3 Surg.inst.,abdominal S9910000",150,2025-07-07,2025-07-11,REL PRC MANC SETC
282
+ 100035380,S9991055,"SUB 4/6 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
283
+ 100035382,S9991056,"SUB 5/6 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
284
+ 100035504,S9991059,"PP 2/2 IEHK 2024,Suppl. Renewable UNIT",400,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
285
+ 100035527,S9991150,"PP 1/2 ml IEHK 2024,Suppl. Medicine Inj.",100,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
286
+ 100035529,S9991147,"SUB 3/5 IEHK 2024,Suppl. Medicine Inj.",113,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
287
+ 100035571,S9999938,Prepack 1/2 Obstetric 3-renew. S9908302,100,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
288
+ 100035572,S9999939,Prepack 2/2 Obstetric 3-renew. S9908302,100,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
289
+ 100035588,S9999502,"Prepack 2/2 Sudan Co. Midwife kit, 2016",600,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
290
+ 100035609,S9999495,"Prepack 2/3 SD,Primary Healthcare2016",474,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
291
+ 100035629,S9999898,"Subkit 1/2 Midwifery ,3-renew S9902219",241,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
292
+ 100035639,S9999986,Prepack for Recreation kits 2016,696,2025-07-07,2025-07-11,REL PRC MACM SETC
293
+ 100035656,S9999933,Prepack 1/1 School in a Bag,800,2025-07-07,2025-07-11,REL PRC MACM SETC
294
+ 100035671,S9910003,"Surg.inst.,delivery /SET",1200,2025-07-07,2025-07-11,REL PRC MACM SETC
295
+ 100035673,S9999149,"AWD BAG 1/1 Periphery,Renewable S9903003",125,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
296
+ 100035680,S9999143,"PP 3/3 Periphery,Renewable",425,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
297
+ 100035724,S9999505,"Sub 1/7 SD IMCI Med. kit, 2016",150,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
298
+ 100035728,S9999504,"Prepack 1/1 Sudan IMCI Med. kit, 2016",768,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
299
+ 100035741,S9999494,"Prepack 1/3 SD,Primary Healthcare2016",110,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
300
+ 100035752,S9999923,"Subkit 1/2 Sterilization, kit C S9908200",200,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
301
+ 100035753,S9999924,"Subkit 2/2 Sterilization, kit C S9908200",200,2025-07-07,2025-07-11,REL PRC MACM SETC
302
+ 100035855,S9991057,"SUB 6/6 IEHK 2024,Suppl. Renewable UNIT",120,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
303
+ 100035873,S9991059,"PP 2/2 IEHK 2024,Suppl. Renewable UNIT",10,2025-07-07,2025-07-11,REL PRC BCRQ MANC SETC
304
+ 100035902,S7993033,"AWD, Periphery kit, Renewable sub 3/3",19,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
305
+ 100035923,S9999503,"Bag 1/1 Sudan, IMCI Med. kit, 2016",708,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
306
+ 100035924,S9906807,"Yemen PHC kit 2025, Supp. HC Medicines",1,2025-07-07,2025-07-11,REL PRC BCRQ MACM SETC
307
+ 100035568,S9999881,Subkit 1/6 Obstetric 3-renew.S9908302,50,2025-07-14,2025-07-18,REL PRC BCRQ MANC SETC
308
+ 100035569,S9999882,Subkit 2/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
309
+ 100035574,S9999885,Subkit 5/6 Obstetric 3-renew.S9908302,100,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
310
+ 100035598,S9910006,"Surg.inst.,exam/sut,vaginal/cervical/SET",400,2025-07-14,2025-07-18,REL PRC MANC SETC
311
+ 100035616,S9999492,"Sub 2/4 , SD Primary Healthcare2016",73,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
312
+ 100035659,S9999933,Prepack 1/1 School in a Bag,800,2025-07-14,2025-07-18,REL PRC MACM SETC
313
+ 100035803,S9996726,DRC Measles Kit 2021 PP 1/1,7,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
314
+ 100035814,S9999199,Education PP 2 for SIC/SIB no globe,175,2025-07-14,2025-07-18,REL PRC MACM SETC
315
+ 100035862,S9991058,"PP 1/2 IEHK 2024,Suppl. Renewable UNIT",240,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
316
+ 100035886,S9935081,Arabic Student Kit Grade 5-8,792,2025-07-14,2025-07-18,REL PRC MACM SETC
317
+ 100035889,S9999496,"Prepack 3/3 SD,Primary Healthcare2016",446,2025-07-14,2025-07-18,REL PRC BCRQ MACM SETC
318
+ 100034412,S9999989,prepack 3 system-wise (not physical),400,2025-07-21,2025-07-25,REL DLV PRC MANC SETC
319
+ 100034413,S9999989,prepack 3 system-wise (not physical),326,2025-07-21,2025-07-25,REL DLV PRC MANC SETC
320
+ 100035438,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,REL PRC BCRQ MANC SETC
321
+ 100035439,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,REL PRC BCRQ MANC SETC
322
+ 100035550,S9999503,"Bag 1/1 Sudan, IMCI Med. kit, 2016",708,2025-07-21,2025-07-25,REL DLV PRC BCRQ MANC SETC
323
+ 100035590,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,REL PRC BCRQ MANC SETC
324
+ 100035591,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,REL PRC BCRQ MANC SETC
325
+ 100035592,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,REL PRC BCRQ MANC SETC
326
+ 100035765,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,REL PRC BCRQ MANC SETC
327
+ 100035766,S9902600,Clean Delivery Kit,4500,2025-07-21,2025-07-25,REL PRC BCRQ MANC SETC
328
+ 100035876,S9910003,"Surg.inst.,delivery /SET",1200,2025-07-21,2025-07-25,REL PRC MACM SETC
329
+ 100035877,S9910004,"Surg.inst.,suture /SET",1200,2025-07-21,2025-07-25,REL PRC MACM SETC
330
+ 100035878,S9910006,"Surg.inst.,exam/sut,vaginal/cervical/SET",400,2025-07-18,2025-07-25,REL PRC MACM SETC
331
+ 100035188,S9910000,"Surg.inst.,abdominal /SET",150,2025-12-07,2025-12-11,
332
+ 100035218,S9999126,AWD Periphery kit Drug S9903004 sub 3/4,287,2025-12-07,2025-12-11,
333
+ 100035228,S9935065,"ECD kit-in-a-carton, 2016",800,2025-12-07,2025-12-11,
334
+ 100035234,S9975020,First aid kit class A,780,2025-12-07,2025-12-11,
335
+ 100035451,S9999987,Prepack for ECD Kits 2016,800,2025-12-07,2025-12-11,
data/real_data_excel/converted_csv/Kit_Composition_and_relatio_2.csv ADDED
The diff for this file is too large to render. See raw diff
 
optimization_results.py CHANGED
@@ -222,7 +222,8 @@ def display_daily_deep_dive(results):
222
 
223
  # Add capacity information
224
  try:
225
- from src.config.optimization_config import MAX_EMPLOYEE_PER_TYPE_ON_DAY
 
226
 
227
  # Add capacity columns (removed utilization percentage)
228
  for emp_type in ['UNICEF Fixed term', 'Humanizer']:
@@ -542,7 +543,8 @@ def display_cost_analysis(results):
542
 
543
  # Calculate cost breakdown
544
  sys.path.append('src')
545
- from config.optimization_config import COST_LIST_PER_EMP_SHIFT, get_team_requirements, shift_code_to_name, line_code_to_name
 
546
  TEAM_REQ_PER_PRODUCT = get_team_requirements()
547
 
548
  # Get the mapping dictionaries
@@ -560,7 +562,9 @@ def display_cost_analysis(results):
560
  line_name = line_names.get(row['line_type_id'], f"Line {row['line_type_id']}")
561
 
562
  # Calculate costs for this production run (accounting for payment mode)
563
- from config.optimization_config import PAYMENT_MODE_CONFIG, MAX_HOUR_PER_SHIFT_PER_PERSON
 
 
564
 
565
  for emp_type in ['UNICEF Fixed term', 'Humanizer']:
566
  workers_needed = TEAM_REQ_PER_PRODUCT.get(emp_type, {}).get(product, 0)
@@ -601,7 +605,7 @@ def display_cost_analysis(results):
601
 
602
  # Add idle employee costs to the breakdown
603
  if 'idle_employees' in results:
604
- from config.optimization_config import COST_LIST_PER_EMP_SHIFT
605
 
606
  for idle in results['idle_employees']:
607
  if idle['idle_count'] > 0:
 
222
 
223
  # Add capacity information
224
  try:
225
+ from src.config.optimization_config import get_max_employee_per_type_on_day
226
+ MAX_EMPLOYEE_PER_TYPE_ON_DAY = get_max_employee_per_type_on_day() # Dynamic call
227
 
228
  # Add capacity columns (removed utilization percentage)
229
  for emp_type in ['UNICEF Fixed term', 'Humanizer']:
 
543
 
544
  # Calculate cost breakdown
545
  sys.path.append('src')
546
+ from config.optimization_config import get_cost_list_per_emp_shift, get_team_requirements, shift_code_to_name, line_code_to_name
547
+ COST_LIST_PER_EMP_SHIFT = get_cost_list_per_emp_shift() # Dynamic call
548
  TEAM_REQ_PER_PRODUCT = get_team_requirements()
549
 
550
  # Get the mapping dictionaries
 
562
  line_name = line_names.get(row['line_type_id'], f"Line {row['line_type_id']}")
563
 
564
  # Calculate costs for this production run (accounting for payment mode)
565
+ from config.optimization_config import get_payment_mode_config, get_max_hour_per_shift_per_person
566
+ PAYMENT_MODE_CONFIG = get_payment_mode_config() # Dynamic call
567
+ MAX_HOUR_PER_SHIFT_PER_PERSON = get_max_hour_per_shift_per_person() # Dynamic call
568
 
569
  for emp_type in ['UNICEF Fixed term', 'Humanizer']:
570
  workers_needed = TEAM_REQ_PER_PRODUCT.get(emp_type, {}).get(product, 0)
 
605
 
606
  # Add idle employee costs to the breakdown
607
  if 'idle_employees' in results:
608
+ # COST_LIST_PER_EMP_SHIFT already loaded above as dynamic call
609
 
610
  for idle in results['idle_employees']:
611
  if idle['idle_count'] > 0:
src/config/optimization_config.py CHANGED
@@ -115,8 +115,8 @@ def get_employee_type_list():
115
  emp_type_list = employee_type_list["employment_type"].unique()
116
  return emp_type_list
117
 
118
- EMPLOYEE_TYPE_LIST = get_employee_type_list()
119
- # print("employee type list",EMPLOYEE_TYPE_LIST)
120
 
121
  def get_shift_list():
122
  """Get shift list - try from streamlit session state first, then from data files"""
@@ -174,8 +174,8 @@ def get_active_shift_list():
174
 
175
  return active_shifts
176
 
177
- SHIFT_LIST = get_active_shift_list()
178
- # print("shift list",SHIFT_LIST)
179
 
180
 
181
  def get_line_list():
@@ -195,8 +195,8 @@ def get_line_list():
195
  line_list = line_df["id"].unique().tolist()
196
  return line_list
197
 
198
- LINE_LIST = get_line_list()
199
- # print("line list",LINE_LIST)
200
 
201
 
202
  def get_kit_line_match():
@@ -252,8 +252,8 @@ def get_line_cnt_per_type():
252
  print("line cnt per type", line_cnt_per_type)
253
  return line_cnt_per_type
254
 
255
- LINE_CNT_PER_TYPE = get_line_cnt_per_type()
256
- print("line cnt per type",LINE_CNT_PER_TYPE)
257
 
258
  def get_demand_dictionary(force_reload=False):
259
  """
@@ -300,8 +300,8 @@ def line_code_to_name():
300
  """Convert line type IDs to readable names"""
301
  return LineType.get_all_names()
302
 
303
- COST_LIST_PER_EMP_SHIFT = get_cost_list_per_emp_shift()
304
- # print("cost list per emp shift",COST_LIST_PER_EMP_SHIFT)
305
 
306
 
307
 
@@ -389,8 +389,8 @@ def get_max_employee_per_type_on_day():
389
  }
390
  return max_employee_per_type_on_day
391
 
392
- MAX_EMPLOYEE_PER_TYPE_ON_DAY = get_max_employee_per_type_on_day()
393
- print("max employee per type on day",MAX_EMPLOYEE_PER_TYPE_ON_DAY)
394
 
395
  # available employee but for fixed in shift 1, it is mandatory employment
396
 
@@ -407,7 +407,8 @@ def get_max_hour_per_shift_per_person():
407
  # Fallback to default only if not configured by user
408
  return DefaultConfig.MAX_HOUR_PER_SHIFT_PER_PERSON
409
 
410
- MAX_HOUR_PER_SHIFT_PER_PERSON = get_max_hour_per_shift_per_person()
 
411
 
412
  # Removed unnecessary getter functions - use direct imports instead:
413
  # - MAX_HOUR_PER_PERSON_PER_DAY
@@ -456,10 +457,36 @@ def get_per_product_speed():
456
  return per_product_speed
457
 
458
 
459
- # Get per product speed - will use actual product names from PRODUCT_LIST
460
- PER_PRODUCT_SPEED = get_per_product_speed()
461
- # number of products that can be produced per hour per line
462
- #This information is critical and it should not rely on the productivity information
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
463
 
464
  # ---- Kit Hierarchy for Production Ordering ----
465
  def get_kit_hierarchy_data():
@@ -491,7 +518,8 @@ def get_max_parallel_workers():
491
  # Fallback to default only if not configured by user
492
  return DefaultConfig.MAX_PARALLEL_WORKERS
493
 
494
- MAX_PARALLEL_WORKERS = get_max_parallel_workers()
 
495
  # maximum number of workers that can work on a line at the same time
496
 
497
  DAILY_WEEKLY_SCHEDULE = "daily" # daily or weekly ,this needs to be implementedin in if F_x1_day is not None... F_x1_week is not None... also need to change x1 to Fixedstaff_first_shift
@@ -521,7 +549,8 @@ def get_fixed_min_unicef_per_day():
521
  return 2
522
 
523
  # Set the constant for backward compatibility
524
- FIXED_MIN_UNICEF_PER_DAY = get_fixed_min_unicef_per_day()
 
525
 
526
 
527
  def get_payment_mode_config():
@@ -546,6 +575,32 @@ def get_payment_mode_config():
546
 
547
  return payment_mode_config
548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
549
  PAYMENT_MODE_CONFIG = get_payment_mode_config()
550
- print("Payment mode configuration:", PAYMENT_MODE_CONFIG)
 
 
 
 
 
 
 
551
 
 
115
  emp_type_list = employee_type_list["employment_type"].unique()
116
  return emp_type_list
117
 
118
+ # DO NOT load at import time - always call get_employee_type_list() dynamically
119
+ # EMPLOYEE_TYPE_LIST = get_employee_type_list() # REMOVED - was causing stale data!
120
 
121
  def get_shift_list():
122
  """Get shift list - try from streamlit session state first, then from data files"""
 
174
 
175
  return active_shifts
176
 
177
+ # DO NOT load at import time - always call get_active_shift_list() dynamically
178
+ # SHIFT_LIST = get_active_shift_list() # REMOVED - was causing stale data!
179
 
180
 
181
  def get_line_list():
 
195
  line_list = line_df["id"].unique().tolist()
196
  return line_list
197
 
198
+ # DO NOT load at import time - always call get_line_list() dynamically
199
+ # LINE_LIST = get_line_list() # REMOVED - was causing stale data!
200
 
201
 
202
  def get_kit_line_match():
 
252
  print("line cnt per type", line_cnt_per_type)
253
  return line_cnt_per_type
254
 
255
+ # DO NOT load at import time - always call get_line_cnt_per_type() dynamically
256
+ # LINE_CNT_PER_TYPE = get_line_cnt_per_type() # REMOVED - was causing stale data!
257
 
258
  def get_demand_dictionary(force_reload=False):
259
  """
 
300
  """Convert line type IDs to readable names"""
301
  return LineType.get_all_names()
302
 
303
+ # DO NOT load at import time - always call get_cost_list_per_emp_shift() dynamically
304
+ # COST_LIST_PER_EMP_SHIFT = get_cost_list_per_emp_shift() # REMOVED - was causing stale data!
305
 
306
 
307
 
 
389
  }
390
  return max_employee_per_type_on_day
391
 
392
+ # DO NOT load at import time - always call get_max_employee_per_type_on_day() dynamically
393
+ # MAX_EMPLOYEE_PER_TYPE_ON_DAY = get_max_employee_per_type_on_day() # REMOVED - was causing stale data!
394
 
395
  # available employee but for fixed in shift 1, it is mandatory employment
396
 
 
407
  # Fallback to default only if not configured by user
408
  return DefaultConfig.MAX_HOUR_PER_SHIFT_PER_PERSON
409
 
410
+ # DO NOT load at import time - always call get_max_hour_per_shift_per_person() dynamically
411
+ # MAX_HOUR_PER_SHIFT_PER_PERSON = get_max_hour_per_shift_per_person() # REMOVED - was causing stale data!
412
 
413
  # Removed unnecessary getter functions - use direct imports instead:
414
  # - MAX_HOUR_PER_PERSON_PER_DAY
 
457
  return per_product_speed
458
 
459
 
460
+ # ============================================================================
461
+ # BETTER APPROACH: Explicit module-level variables with clear documentation
462
+ # These variables provide backward compatibility while being explicit and clear
463
+ # ============================================================================
464
+
465
+ def _ensure_fresh_config():
466
+ """
467
+ Helper function to refresh module-level variables when configuration changes.
468
+ Call this after updating Streamlit session state to ensure fresh values.
469
+ """
470
+ global PER_PRODUCT_SPEED, LINE_LIST, EMPLOYEE_TYPE_LIST, SHIFT_LIST
471
+ global LINE_CNT_PER_TYPE, COST_LIST_PER_EMP_SHIFT, MAX_EMPLOYEE_PER_TYPE_ON_DAY
472
+ global MAX_HOUR_PER_SHIFT_PER_PERSON, MAX_PARALLEL_WORKERS, FIXED_MIN_UNICEF_PER_DAY
473
+ global PAYMENT_MODE_CONFIG
474
+
475
+ # Refresh all cached values
476
+ PER_PRODUCT_SPEED = get_per_product_speed()
477
+ LINE_LIST = get_line_list()
478
+ EMPLOYEE_TYPE_LIST = get_employee_type_list()
479
+ SHIFT_LIST = get_active_shift_list()
480
+ LINE_CNT_PER_TYPE = get_line_cnt_per_type()
481
+ COST_LIST_PER_EMP_SHIFT = get_cost_list_per_emp_shift()
482
+ MAX_EMPLOYEE_PER_TYPE_ON_DAY = get_max_employee_per_type_on_day()
483
+ MAX_HOUR_PER_SHIFT_PER_PERSON = get_max_hour_per_shift_per_person()
484
+ MAX_PARALLEL_WORKERS = get_max_parallel_workers()
485
+ FIXED_MIN_UNICEF_PER_DAY = get_fixed_min_unicef_per_day()
486
+ PAYMENT_MODE_CONFIG = get_payment_mode_config()
487
+
488
+ # Note: Module-level variables will be initialized at the end of this file
489
+ # after all functions are defined. This ensures all getter functions are available.
490
 
491
  # ---- Kit Hierarchy for Production Ordering ----
492
  def get_kit_hierarchy_data():
 
518
  # Fallback to default only if not configured by user
519
  return DefaultConfig.MAX_PARALLEL_WORKERS
520
 
521
+ # DO NOT load at import time - always call get_max_parallel_workers() dynamically
522
+ # MAX_PARALLEL_WORKERS = get_max_parallel_workers() # REMOVED - was causing stale data!
523
  # maximum number of workers that can work on a line at the same time
524
 
525
  DAILY_WEEKLY_SCHEDULE = "daily" # daily or weekly ,this needs to be implementedin in if F_x1_day is not None... F_x1_week is not None... also need to change x1 to Fixedstaff_first_shift
 
549
  return 2
550
 
551
  # Set the constant for backward compatibility
552
+ # DO NOT load at import time - always call get_fixed_min_unicef_per_day() dynamically
553
+ # FIXED_MIN_UNICEF_PER_DAY = get_fixed_min_unicef_per_day() # REMOVED - was causing stale data!
554
 
555
 
556
  def get_payment_mode_config():
 
575
 
576
  return payment_mode_config
577
 
578
+ # DO NOT load at import time - always call get_payment_mode_config() dynamically
579
+ # PAYMENT_MODE_CONFIG = get_payment_mode_config() # REMOVED - was causing stale data!
580
+
581
+ # ============================================================================
582
+ # INITIALIZE MODULE-LEVEL VARIABLES
583
+ # This section is at the end to ensure all functions are defined first
584
+ # ============================================================================
585
+
586
+ # Initialize with default values (will use fallback data when no Streamlit session)
587
+ PER_PRODUCT_SPEED = get_per_product_speed()
588
+ LINE_LIST = get_line_list()
589
+ EMPLOYEE_TYPE_LIST = get_employee_type_list()
590
+ SHIFT_LIST = get_active_shift_list()
591
+ LINE_CNT_PER_TYPE = get_line_cnt_per_type()
592
+ COST_LIST_PER_EMP_SHIFT = get_cost_list_per_emp_shift()
593
+ MAX_EMPLOYEE_PER_TYPE_ON_DAY = get_max_employee_per_type_on_day()
594
+ MAX_HOUR_PER_SHIFT_PER_PERSON = get_max_hour_per_shift_per_person()
595
+ MAX_PARALLEL_WORKERS = get_max_parallel_workers()
596
+ FIXED_MIN_UNICEF_PER_DAY = get_fixed_min_unicef_per_day()
597
  PAYMENT_MODE_CONFIG = get_payment_mode_config()
598
+
599
+ print("โœ… Module-level configuration variables initialized")
600
+
601
+ # Note: These variables are initialized once at import time with default/fallback values.
602
+ # To get fresh values after changing Streamlit configuration, either:
603
+ # 1. Call the get_*() functions directly (RECOMMENDED for dynamic use)
604
+ # 2. Call _ensure_fresh_config() to refresh all module-level variables
605
+ # 3. Use importlib.reload() to reload the entire module
606
 
src/models/optimizer_real.py CHANGED
@@ -15,21 +15,21 @@ from src.config.constants import ShiftType, LineType, KitLevel
15
  from src.config.optimization_config import (
16
  DATE_SPAN, # [1..N]
17
  get_product_list, # DYNAMIC: list of products (e.g., ['A','B',...])
18
- EMPLOYEE_TYPE_LIST, # e.g., ['UNICEF Fixed term','Humanizer']
19
- SHIFT_LIST, # e.g., [1,2,3]
20
- LINE_LIST, # e.g., [6,7] (line type ids)
21
- LINE_CNT_PER_TYPE, # {6: count_of_long_lines, 7: count_of_short_lines}
22
  get_demand_dictionary, # DYNAMIC: {product: total_units_over_period}
23
- COST_LIST_PER_EMP_SHIFT, # {emp_type: {shift: cost_per_hour}}
24
- MAX_EMPLOYEE_PER_TYPE_ON_DAY, # {emp_type: {t: headcount}}
25
  MAX_HOUR_PER_PERSON_PER_DAY, # e.g., 14
26
- MAX_HOUR_PER_SHIFT_PER_PERSON, # {1: hours, 2: hours, 3: hours}
27
- PER_PRODUCT_SPEED, # {6: cap_units_per_hour, 7: cap_units_per_hour}
28
- MAX_PARALLEL_WORKERS, # {6: max_workers, 7: max_workers}
29
  DAILY_WEEKLY_SCHEDULE, # 'daily' or 'weekly'
30
  FIXED_STAFF_CONSTRAINT_MODE, # not used in fixed-team model (๋™์‹œ ํˆฌ์ž…์ด๋ผ ๋ฌด์˜๋ฏธ)
31
  get_team_requirements, # DYNAMIC: {emp_type: {product: team_size}} from Kits_Calculation.csv
32
- PAYMENT_MODE_CONFIG, # {shift: 'bulk'/'partial'} payment mode configuration
33
  KIT_LINE_MATCH_DICT,
34
  EVENING_SHIFT_MODE,
35
  EVENING_SHIFT_DEMAND_THRESHOLD,
@@ -38,7 +38,7 @@ from src.config.optimization_config import (
38
  KIT_DEPENDENCIES, # {kit_id: [dependency_list]}
39
  PRODUCTION_PRIORITY_ORDER, # [kit_ids] sorted by production priority
40
  # Fixed staffing requirements
41
- FIXED_MIN_UNICEF_PER_DAY, # Minimum UNICEF employees required per day
42
  )
43
 
44
  # -----------------------------------------
@@ -60,6 +60,9 @@ def build_lines():
60
  L elements are (line_type_id, idx) tuples. e.g., (6,1), (6,2), (7,1), ...
61
  """
62
  L = []
 
 
 
63
  for lt in LINE_LIST: # lt: 6 or 7
64
  cnt = int(LINE_CNT_PER_TYPE.get(lt, 0))
65
  for i in range(1, cnt + 1):
@@ -68,6 +71,7 @@ def build_lines():
68
 
69
  L=build_lines()
70
  print("L",L)
 
71
  print("PER_PRODUCT_SPEED",PER_PRODUCT_SPEED)
72
 
73
  def sort_products_by_hierarchy(product_list):
@@ -179,8 +183,8 @@ def solve_fixed_team_weekly():
179
  # --- Sets ---
180
  D = list(DATE_SPAN)
181
  # print("D",D)
182
- S = sorted(list(SHIFT_LIST))
183
- E = list(EMPLOYEE_TYPE_LIST) # e.g., ['UNICEF Fixed term','Humanizer']
184
  print("E",E)
185
  # *** HIERARCHY SORTING: Sort products by production priority ***
186
  print("\n" + "="*60)
@@ -190,13 +194,14 @@ def solve_fixed_team_weekly():
190
  P = P_sorted # Use sorted product list
191
 
192
  L = build_lines()
 
193
 
194
  # --- Short aliases for parameters ---
195
- Hmax_s = dict(MAX_HOUR_PER_SHIFT_PER_PERSON) # per-shift hours
196
- Hmax_daily = MAX_HOUR_PER_PERSON_PER_DAY # {6:cap, 7:cap}
197
- max_workers_line = dict(MAX_PARALLEL_WORKERS) # per line type
198
- N_day = MAX_EMPLOYEE_PER_TYPE_ON_DAY # {emp_type:{t:headcount}}
199
- cost = COST_LIST_PER_EMP_SHIFT # {emp_type:{shift:cost}}
200
  d_week = DEMAND_DICTIONARY # {product: demand over period}
201
  print("d_week",d_week)
202
  # --- Feasibility quick checks ---
@@ -277,6 +282,7 @@ def solve_fixed_team_weekly():
277
  # Note: Binary variables for bulk payment are now created inline in the cost calculation
278
 
279
  # --- Objective: total labor cost with payment modes + hierarchy timing penalty ---
 
280
  print(f"Payment mode configuration: {PAYMENT_MODE_CONFIG}")
281
 
282
  # Build cost terms based on payment mode
@@ -464,6 +470,7 @@ def solve_fixed_team_weekly():
464
 
465
  # 7.6) *** FIXED MINIMUM UNICEF EMPLOYEES CONSTRAINT ***
466
  # Ensure minimum UNICEF fixed-term staff are present every working day
 
467
  if 'UNICEF Fixed term' in E and FIXED_MIN_UNICEF_PER_DAY > 0:
468
  print(f"\n[FIXED STAFFING] Adding constraint for minimum {FIXED_MIN_UNICEF_PER_DAY} UNICEF employees per day...")
469
 
 
15
  from src.config.optimization_config import (
16
  DATE_SPAN, # [1..N]
17
  get_product_list, # DYNAMIC: list of products (e.g., ['A','B',...])
18
+ get_employee_type_list, # DYNAMIC: e.g., ['UNICEF Fixed term','Humanizer']
19
+ get_active_shift_list, # DYNAMIC: e.g., [1,2,3]
20
+ get_line_list, # DYNAMIC: e.g., [6,7] (line type ids)
21
+ get_line_cnt_per_type, # DYNAMIC: {6: count_of_long_lines, 7: count_of_short_lines}
22
  get_demand_dictionary, # DYNAMIC: {product: total_units_over_period}
23
+ get_cost_list_per_emp_shift, # DYNAMIC: {emp_type: {shift: cost_per_hour}}
24
+ get_max_employee_per_type_on_day, # DYNAMIC: {emp_type: {t: headcount}}
25
  MAX_HOUR_PER_PERSON_PER_DAY, # e.g., 14
26
+ get_max_hour_per_shift_per_person, # DYNAMIC: {1: hours, 2: hours, 3: hours}
27
+ get_per_product_speed, # DYNAMIC: {6: cap_units_per_hour, 7: cap_units_per_hour}
28
+ get_max_parallel_workers, # DYNAMIC: {6: max_workers, 7: max_workers}
29
  DAILY_WEEKLY_SCHEDULE, # 'daily' or 'weekly'
30
  FIXED_STAFF_CONSTRAINT_MODE, # not used in fixed-team model (๋™์‹œ ํˆฌ์ž…์ด๋ผ ๋ฌด์˜๋ฏธ)
31
  get_team_requirements, # DYNAMIC: {emp_type: {product: team_size}} from Kits_Calculation.csv
32
+ get_payment_mode_config, # DYNAMIC: {shift: 'bulk'/'partial'} payment mode configuration
33
  KIT_LINE_MATCH_DICT,
34
  EVENING_SHIFT_MODE,
35
  EVENING_SHIFT_DEMAND_THRESHOLD,
 
38
  KIT_DEPENDENCIES, # {kit_id: [dependency_list]}
39
  PRODUCTION_PRIORITY_ORDER, # [kit_ids] sorted by production priority
40
  # Fixed staffing requirements
41
+ get_fixed_min_unicef_per_day, # DYNAMIC: Minimum UNICEF employees required per day
42
  )
43
 
44
  # -----------------------------------------
 
60
  L elements are (line_type_id, idx) tuples. e.g., (6,1), (6,2), (7,1), ...
61
  """
62
  L = []
63
+ LINE_LIST = get_line_list() # Dynamic call
64
+ LINE_CNT_PER_TYPE = get_line_cnt_per_type() # Dynamic call
65
+
66
  for lt in LINE_LIST: # lt: 6 or 7
67
  cnt = int(LINE_CNT_PER_TYPE.get(lt, 0))
68
  for i in range(1, cnt + 1):
 
71
 
72
  L=build_lines()
73
  print("L",L)
74
+ PER_PRODUCT_SPEED = get_per_product_speed() # Dynamic call
75
  print("PER_PRODUCT_SPEED",PER_PRODUCT_SPEED)
76
 
77
  def sort_products_by_hierarchy(product_list):
 
183
  # --- Sets ---
184
  D = list(DATE_SPAN)
185
  # print("D",D)
186
+ S = sorted(list(get_active_shift_list())) # Dynamic call
187
+ E = list(get_employee_type_list()) # Dynamic call - e.g., ['UNICEF Fixed term','Humanizer']
188
  print("E",E)
189
  # *** HIERARCHY SORTING: Sort products by production priority ***
190
  print("\n" + "="*60)
 
194
  P = P_sorted # Use sorted product list
195
 
196
  L = build_lines()
197
+ print("Lines",L)
198
 
199
  # --- Short aliases for parameters ---
200
+ Hmax_s = dict(get_max_hour_per_shift_per_person()) # Dynamic call - per-shift hours
201
+ Hmax_daily = MAX_HOUR_PER_PERSON_PER_DAY # {6:cap, 7:cap}
202
+ max_workers_line = dict(get_max_parallel_workers()) # Dynamic call - per line type
203
+ N_day = get_max_employee_per_type_on_day() # Dynamic call - {emp_type:{t:headcount}}
204
+ cost = get_cost_list_per_emp_shift() # Dynamic call - {emp_type:{shift:cost}}
205
  d_week = DEMAND_DICTIONARY # {product: demand over period}
206
  print("d_week",d_week)
207
  # --- Feasibility quick checks ---
 
282
  # Note: Binary variables for bulk payment are now created inline in the cost calculation
283
 
284
  # --- Objective: total labor cost with payment modes + hierarchy timing penalty ---
285
+ PAYMENT_MODE_CONFIG = get_payment_mode_config() # Dynamic call
286
  print(f"Payment mode configuration: {PAYMENT_MODE_CONFIG}")
287
 
288
  # Build cost terms based on payment mode
 
470
 
471
  # 7.6) *** FIXED MINIMUM UNICEF EMPLOYEES CONSTRAINT ***
472
  # Ensure minimum UNICEF fixed-term staff are present every working day
473
+ FIXED_MIN_UNICEF_PER_DAY = get_fixed_min_unicef_per_day() # Dynamic call
474
  if 'UNICEF Fixed term' in E and FIXED_MIN_UNICEF_PER_DAY > 0:
475
  print(f"\n[FIXED STAFFING] Adding constraint for minimum {FIXED_MIN_UNICEF_PER_DAY} UNICEF employees per day...")
476