85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
from civilplan_mcp.config import get_settings
|
|
from civilplan_mcp.updater.common import (
|
|
build_log_entry,
|
|
check_update_flags,
|
|
clear_update_flag,
|
|
extract_marker,
|
|
fetch_source_text,
|
|
flag_manual_update_required,
|
|
write_update_log,
|
|
)
|
|
|
|
|
|
WAGE_SOURCE_URL = "https://gwangju.cak.or.kr/lay1/bbs/S1T41C42/A/14/list.do"
|
|
WAGE_MARKER_PATTERNS = [
|
|
r"20\d{2}년\s*(상반기|하반기)\s*적용\s*건설업\s*임금실태조사",
|
|
r"20\d{2}년\s*건설업\s*임금실태조사",
|
|
]
|
|
|
|
|
|
def update_wage_rates(period: str = "상반기") -> dict[str, Any]:
|
|
data_dir = get_settings().data_dir
|
|
try:
|
|
text = fetch_source_text(WAGE_SOURCE_URL)
|
|
marker = extract_marker(text, WAGE_MARKER_PATTERNS)
|
|
if not marker:
|
|
detail = f"Fetched wage source, but no recognizable wage bulletin marker was found for {period}."
|
|
flag_manual_update_required("wage", detail, data_dir=data_dir)
|
|
write_update_log(
|
|
build_log_entry(
|
|
update_type="wage",
|
|
period=period,
|
|
status="pending_manual_review",
|
|
source_url=WAGE_SOURCE_URL,
|
|
detail=detail,
|
|
),
|
|
data_dir=data_dir,
|
|
)
|
|
return {"status": "pending_manual_review", "period": period, "source_url": WAGE_SOURCE_URL}
|
|
|
|
clear_update_flag("wage", data_dir=data_dir)
|
|
write_update_log(
|
|
build_log_entry(
|
|
update_type="wage",
|
|
period=period,
|
|
status="fetched",
|
|
source_url=WAGE_SOURCE_URL,
|
|
detail="Recognized wage bulletin marker from source page.",
|
|
marker=marker,
|
|
),
|
|
data_dir=data_dir,
|
|
)
|
|
return {
|
|
"status": "fetched",
|
|
"period": period,
|
|
"marker": marker,
|
|
"source_url": WAGE_SOURCE_URL,
|
|
}
|
|
except Exception as exc:
|
|
detail = f"Wage update fetch failed for {period}: {exc}"
|
|
flag_manual_update_required("wage", detail, data_dir=data_dir)
|
|
write_update_log(
|
|
build_log_entry(
|
|
update_type="wage",
|
|
period=period,
|
|
status="pending_manual_review",
|
|
source_url=WAGE_SOURCE_URL,
|
|
detail=detail,
|
|
),
|
|
data_dir=data_dir,
|
|
)
|
|
return {
|
|
"status": "pending_manual_review",
|
|
"period": period,
|
|
"message": detail,
|
|
"source_url": WAGE_SOURCE_URL,
|
|
}
|
|
|
|
|
|
__all__ = ["check_update_flags", "flag_manual_update_required", "update_wage_rates"]
|