---
id: wiki-2026-0508-finished-goods
title: Finished Goods (제품 완성품)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [finished goods, FG, finished inventory, supply chain, MRP, ERP]
duplicate_of: none
source_trust_level: A
confidence_score: 0.88
verification_status: applied
tags: [supply-chain, inventory, manufacturing, erp, mrp, finished-goods]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: ERP / Supply Chain
  applicable_to: [Manufacturing, Logistics, Forecast]
---

# Finished Goods

## 매 한 줄
> **"매 manufacturing 의 의 의 sale-ready inventory"**. Raw material → WIP → Finished Goods. 매 inventory turnover, 매 demand forecast, 매 safety stock 의 critical. 매 modern: 매 ML demand forecast + 매 real-time visibility.

## 매 핵심

### 매 inventory tier
- **Raw material**.
- **WIP** (Work in Progress).
- **Finished Goods** (FG).
- **MRO** (maintenance, repair, ops).

### 매 metric
- **Inventory turnover** = COGS / avg FG.
- **Days of inventory** = 365 / turnover.
- **Stockout rate**.
- **Service level**.
- **Carrying cost** (보관, capital, obsolete).

### 매 strategy
- **MTS** (Make-to-stock).
- **MTO** (Make-to-order).
- **ATO** (Assemble-to-order).
- **ETO** (Engineer-to-order).
- **JIT** (Just-in-time).

### 매 응용
1. **Demand forecast**: 매 ML.
2. **Safety stock**.
3. **Reorder point**.
4. **EOQ** (Economic Order Quantity).
5. **ABC analysis**: 매 80/20 importance.

## 💻 패턴

### Inventory turnover
```python
def turnover(cogs_year, avg_inventory_value):
    return cogs_year / avg_inventory_value

def days_of_inventory(turnover):
    return 365 / turnover  # 매 lower = leaner
```

### EOQ (Wilson formula)
```python
import math
def eoq(annual_demand, order_cost, holding_cost_per_unit):
    return math.sqrt(2 * annual_demand * order_cost / holding_cost_per_unit)
```

### Safety stock
```python
from scipy.stats import norm
def safety_stock(service_level, std_demand_during_lead, lead_time_days):
    z = norm.ppf(service_level)
    return z * std_demand_during_lead * math.sqrt(lead_time_days)

def reorder_point(avg_demand_per_day, lead_time_days, safety_stk):
    return avg_demand_per_day * lead_time_days + safety_stk
```

### ABC analysis
```python
import pandas as pd
def abc(df):
    """매 80/20 importance."""
    df = df.sort_values('annual_value', ascending=False)
    df['cum_pct'] = df.annual_value.cumsum() / df.annual_value.sum()
    df['class'] = df.cum_pct.apply(lambda p: 'A' if p < 0.8 else 'B' if p < 0.95 else 'C')
    return df
```

### Demand forecast (ML)
```python
import xgboost as xgb
def forecast_demand(history, exog):
    """매 history: time series. exog: promo, season, price."""
    X = create_features(history, exog)  # 매 lag, rolling, seasonality
    y = history.shift(-7)  # 매 1-week ahead
    model = xgb.XGBRegressor().fit(X[:-7], y[:-7])
    return model.predict(X[-7:])
```

### Bill of Materials (BOM)
```python
@dataclass
class BOM:
    finished_good: str
    components: dict[str, int]  # 매 part: qty
    
    def total_components(self, n_units):
        return {part: qty * n_units for part, qty in self.components.items()}
```

### MRP run (simplified)
```python
def mrp_run(forecast_fg, on_hand, bom, lead_time):
    """매 매 component 의 의 의 plan."""
    plan = {}
    for fg, qty in forecast_fg.items():
        net_need = max(0, qty - on_hand.get(fg, 0))
        if net_need > 0:
            for part, ratio in bom[fg].items():
                plan[part] = plan.get(part, 0) + net_need * ratio
    return {part: {'order_qty': q, 'order_by': today() - timedelta(days=lead_time[part])} for part, q in plan.items()}
```

### Inventory carrying cost
```python
def carrying_cost(unit_cost, holding_rate=0.25, qty=1, time_year=1):
    """매 holding rate = 매 storage + capital + obsolete."""
    return unit_cost * holding_rate * qty * time_year
```

### Stockout cost
```python
def stockout_cost(unit_lost_margin, prob_stockout, expected_demand_during_stockout):
    return unit_lost_margin * prob_stockout * expected_demand_during_stockout
```

### JIT signal (kanban)
```python
class KanbanCard:
    """매 trigger production / replenish."""
    def __init__(self, part, qty, supplier):
        self.part = part; self.qty = qty; self.supplier = supplier
    
    def consume(self): self.send_signal_to(self.supplier)
```

### ERP integration (SAP-like)
```python
def sync_to_erp(fg_movement):
    erp_api.post('/inventory/movement', json={
        'material': fg_movement.sku,
        'plant': fg_movement.plant,
        'storage_loc': fg_movement.bin,
        'qty': fg_movement.qty,
        'movement_type': fg_movement.type,
    })
```

### Real-time visibility (RFID / IoT)
```python
def rfid_event_handler(event):
    update_inventory(event.sku, event.location, event.timestamp)
    if get_quantity(event.sku) < reorder_point(event.sku):
        trigger_replenishment(event.sku)
```

### Forecast accuracy (MAPE, WAPE)
```python
def mape(actual, forecast):
    return abs((actual - forecast) / actual).mean() * 100

def wape(actual, forecast):
    return abs(actual - forecast).sum() / actual.sum() * 100
```

### LLM-aided demand sensing
```python
def demand_sense(news_signals, social_trends, llm):
    prompt = f"""You are a supply chain expert.
News: {news_signals}
Social: {social_trends}

Output JSON with demand impact predictions for these SKUs..."""
    return json.loads(llm.generate(prompt))
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| Stable demand | EOQ + safety stock |
| Variable demand | ML forecast + dynamic |
| Seasonal | + seasonality features |
| Custom product | MTO / ETO |
| Mass | MTS + JIT |
| Critical SKU | A class — tight monitor |

**기본값**: 매 ML forecast + 매 ABC class + 매 dynamic safety stock + 매 ERP/MRP integration + 매 RFID visibility.

## 🔗 Graph
- 부모: [[Supply-Chain]]
- 응용: [[ERP]] · [[MRP]]
- Adjacent: [[Dynamic Pricing & Offers]] · [[E-commerce-Optimization]]

## 🤖 LLM 활용
**언제**: 매 manufacturing. 매 retail FG planning. 매 supply chain.
**언제 X**: 매 service-only.

## ❌ 안티패턴
- **No safety stock**: 매 stockout cascade.
- **Fixed reorder regardless demand**: 매 over/under.
- **A/B/C uniform treatment**: 매 efficiency lose.
- **No forecast eval**: 매 bias accumulate.
- **JIT without supplier reliability**: 매 risk.

## 🧪 검증 / 중복
- Verified (APICS, Sahin OR textbook, ERP standards).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-04-20 | Auto-reinforced |
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — inventory + 매 EOQ / safety / ABC / MRP / forecast code |
