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 +22 -5
- data/real_data_excel/converted_csv/COOIS_Planned_and_Released.csv +0 -54
- data/real_data_excel/converted_csv/COOIS_Planned_and_Released_real.csv +335 -0
- data/real_data_excel/converted_csv/Kit_Composition_and_relatio_2.csv +0 -0
- optimization_results.py +8 -4
- src/config/optimization_config.py +75 -20
- src/models/optimizer_real.py +25 -18
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,
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
shift_code_to_name, line_code_to_name,
|
| 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
|
|
|
|
| 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
|
|
|
|
| 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
|
|
|
|
|
|
|
| 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 |
-
|
| 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 |
-
|
| 119 |
-
#
|
| 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 |
-
|
| 178 |
-
#
|
| 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 |
-
|
| 199 |
-
#
|
| 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 |
-
|
| 256 |
-
|
| 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 |
-
|
| 304 |
-
#
|
| 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 |
-
|
| 393 |
-
|
| 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 |
-
|
|
|
|
| 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 |
-
#
|
| 460 |
-
|
| 461 |
-
#
|
| 462 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
| 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 |
-
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
get_demand_dictionary, # DYNAMIC: {product: total_units_over_period}
|
| 23 |
-
|
| 24 |
-
|
| 25 |
MAX_HOUR_PER_PERSON_PER_DAY, # e.g., 14
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 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 |
-
|
| 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 |
-
|
| 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(
|
| 183 |
-
E = list(
|
| 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(
|
| 196 |
-
Hmax_daily = MAX_HOUR_PER_PERSON_PER_DAY
|
| 197 |
-
max_workers_line = dict(
|
| 198 |
-
N_day =
|
| 199 |
-
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 |
|