44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from civilplan_mcp.db.bootstrap import load_json_data
|
|
from civilplan_mcp.models import ProjectDomain
|
|
from civilplan_mcp.tools._base import wrap_response
|
|
|
|
|
|
def get_unit_prices(*, category: str | None = None, item_name: str | None = None, region: str = "경기도", year: int = 2026) -> dict[str, Any]:
|
|
prices = load_json_data("unit_prices_2026.json")["items"]
|
|
region_factors = load_json_data("region_factors.json")
|
|
factor = region_factors[region]["factor"]
|
|
|
|
filtered = []
|
|
for item in prices:
|
|
if category and item["category"] != category:
|
|
continue
|
|
if item_name and item_name not in item["item"]:
|
|
continue
|
|
filtered.append(
|
|
{
|
|
"category": item["category"],
|
|
"item": item["item"],
|
|
"spec": item["spec"],
|
|
"unit": item["unit"],
|
|
"base_price": item["base_price"],
|
|
"region_factor": factor,
|
|
"adjusted_price": round(item["base_price"] * factor),
|
|
"source": item["source"],
|
|
"note": f"{region} 지역계수 {factor:.2f} 적용",
|
|
"year": year,
|
|
}
|
|
)
|
|
|
|
return wrap_response(
|
|
{
|
|
"query": {"category": category, "item_name": item_name, "region": region, "year": year},
|
|
"results": filtered,
|
|
"region_factor_note": f"{region}: {factor:.2f}",
|
|
},
|
|
ProjectDomain.복합,
|
|
)
|