Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
from scipy import stats
defsafety_stock_service_level(demand_std: float, lead_time_mean: float,
lead_time_std: float = 0, service_level: float = 0.95):
"""
Calculate safety stock for desired service level
Accounts for variability in both demand and lead time
"""# Z-score for service level
z = stats.norm.ppf(service_level)
if lead_time_std > 0:
# Combined variability# SS = z * sqrt(LT * sigma_d^2 + d_avg^2 * sigma_LT^2)# Simplified: SS = z * sigma_d * sqrt(LT)
combined_std = np.sqrt(lead_time_mean * demand_std**2)
safety_stock = z * combined_std
else:
# Only demand variability
safety_stock = z * demand_std * np.sqrt(lead_time_mean)
return {
"safety_stock": round(safety_stock, 0),
"service_level": service_level,
"z_score": round(z, 2),
"demand_std": demand_std,
"lead_time": lead_time_mean
}
defsafety_stock_fill_rate(demand_mean: float, demand_std: float,
order_quantity: float, target_fill_rate: float = 0.98):
"""
Calculate safety stock for target fill rate
Fill rate: proportion of demand satisfied from stock
"""# Expected shortage per cycle (using loss function)
target_shortage = (1 - target_fill_rate) * order_quantity
# Iterative search for safety stockfor ss inrange(0, int(demand_std * 10), 1):
z = ss / demand_std
loss = demand_std * (stats.norm.pdf(z) - z * (1 - stats.norm.cdf(z)))
if loss <= target_shortage:
return {
"safety_stock": ss,
"target_fill_rate": target_fill_rate,
"achieved_fill_rate": 1 - loss / order_quantity
}
return {"safety_stock": int(demand_std * 10), "note": "Max safety stock reached"}
4. Reorder Point Determination
defcalculate_reorder_point(average_demand_per_period: float,
lead_time_periods: float,
safety_stock: float):
"""
Calculate reorder point (r)
r = d * L + SS
d: Average demand per period
L: Lead time in periods
SS: Safety stock
"""
lead_time_demand = average_demand_per_period * lead_time_periods
reorder_point = lead_time_demand + safety_stock
return {
"reorder_point": round(reorder_point, 0),
"lead_time_demand": round(lead_time_demand, 0),
"safety_stock": round(safety_stock, 0),
"interpretation": f"Order when inventory reaches {round(reorder_point, 0)} units"
}
defoptimize_RS_policy(annual_demand: float, demand_std_per_period: float,
review_period_periods: float, lead_time_periods: float,
holding_cost_per_unit: float, service_level: float = 0.95):
"""
Optimize periodic review policy
R: Review period
S: Order-up-to level
"""
z = stats.norm.ppf(service_level)
# Protection period = review period + lead time
protection_period = review_period_periods + lead_time_periods
# Average demand during protection period
periods_per_year = 12
avg_demand_per_period = annual_demand / periods_per_year
avg_demand_protection = avg_demand_per_period * protection_period
# Standard deviation during protection period
std_protection = demand_std_per_period * np.sqrt(protection_period)
# Safety stock
SS = z * std_protection
# Order-up-to level
S = avg_demand_protection + SS
# Average inventory (approximation)
avg_order_qty = avg_demand_per_period * review_period_periods
avg_inventory = avg_order_qty / 2 + SS
return {
"policy": "(R, S)",
"review_period": review_period_periods,
"order_up_to_level": round(S, 0),
"safety_stock": round(SS, 0),
"service_level": service_level,
"average_inventory": round(avg_inventory, 0),
"annual_holding_cost": round(avg_inventory * holding_cost_per_unit, 2)
}
Process Integration
This skill integrates with the following processes:
inventory-optimization-analysis.js
demand-forecasting-model-development.js
warehouse-layout-slotting-optimization.js
Output Format
{"item":"SKU-12345","abc_class":"A","xyz_class":"X","policy":"(r, Q)","reorder_point":450,"order_quantity":200,"safety_stock":85,"service_level":0.95,"average_inventory":185,"annual_cost":5420.50,"recommendations":["Consider vendor-managed inventory given high volume"]}
Best Practices
Classify items first - Use ABC/XYZ to prioritize
Match policy to class - More sophisticated for A items