{
  "ticker": "064400.KS",
  "ticker_name": "LG CNS",
  "status": "success",
  "trade_date": "2026-04-15",
  "analysis_date": "2026-04-15",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.64,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"064400.KS는 중기 배분 관점에서 비중 확대 후보로 유지한다. 공격적 분석가가 강조한 TTM 매출 약 KRW 6.13조, 영업이익률 10.95%, ROE 17.34%, 유동비율 2.131, 현금 및 단기투자 KRW 1.68조, Forward PE 12.1배, 배당수익률 2.98%는 투자 가능한 기본 체력을 뒷받침한다. 또한 Modex 2026의 냉동창고 모바일 셔틀, Paris Baguette 미국 공장 계약, 2026-04-01 공급계약 공시 2건은 북미 물류 자동화 옵션을 만든다. 다만 보수적·중립 분석가의 지적처럼 2026-04-14 종가 KRW 62,000은 KRW 63,300 돌파 기준과 50일선 KRW 64,713, 200일선 KRW 65,791 아래에 있고, MACD는 -896.73으로 아직 음수이며, 2026-04-14 거래량 279,402주는 2026-04-09 반등 거래량 748,764주보다 크게 낮다. 따라서 방향성은 BULLISH이나 오늘 즉시 추격 매수하지 않고 WAIT가 맞다. KRW 63,300 종가 돌파와 거래량 회복, 이후 지지 확인이 나오면 소규모 진입을 허용하고, KRW 64,700~65,800 회복과 지지 전환이 확인되면 추가 배정을 검토한다. KRW 60,800~60,000 재테스트가 지지되고 RSI와 거래량이 개선될 때만 방어적 starter가 정당화된다.\",\n  \"exit_logic\": \"기존 보유자는 064400.KS가 KRW 60,800~60,000 지지대를 유지하고 수주·뉴스 파이프라인이 훼손되지 않는 동안 핵심 보유를 유지한다. KRW 64,700~65,800은 50일선과 200일선 저항대이므로, 거래량 확장 없이 접근하면 일부 차익 실현 또는 리밸런싱을 우선한다. 종가 기준 KRW 59,500 이탈, KRW 60,000 지지 실패, 지지 이탈 시 매도 거래량 증가, MACD 재악화와 함께 KRW 63,300 아래 반복 실패가 나타나면 감축 또는 청산한다. 계약 규모·마진·반복 매출 기여가 미미하거나 다음 실적에서 매출채권 부담으로 영업현금흐름이 악화되면 투자 논리를 재검토한다.\",\n  \"position_sizing\": \"확인 전 신규 풀사이즈 진입은 금지한다. KRW 63,300 종가 돌파와 최근 평균을 웃도는 거래량, 눌림 지지가 확인되면 정상 위험 예산의 1/4~1/3로 시작한다. KRW 64,700과 KRW 65,800을 거래량과 함께 회복하고 그 구간이 지지로 전환되면 추가 1/3을 검토한다. 계약 경제성, 반복 매출, 다음 분기 현금 전환 개선이 확인될 때만 잔여 비중 확대를 고려한다. ATR이 약 KRW 2,943, 주가 대비 약 4.7%로 높으므로 레버리지는 피하고 손절 폭은 과도하게 좁히지 않는다.\",\n  \"risk_limits\": \"종가 기준 KRW 59,500 이탈은 강한 방어 행동 기준으로 둔다. KRW 60,000 아래 종가는 즉시 노출 재검토 및 감축 기준이며, KRW 60,800~60,000 지지 확인 없이 KRW 63,300 아래에서 추가 매수하지 않는다. 변동성, 거래량 둔화, 미공개 계약 규모·마진, 2025년 12월 분기 매출채권 변화 -KRW 5,234억, 2026-04-03 지분 관련 공시의 수급 불확실성을 반영해 단일 종목 위험은 보수적으로 제한한다.\",\n  \"catalysts\": [\n    \"064400.KS가 KRW 63,300을 종가 기준 돌파하고 거래량이 최근 평균을 웃돈 뒤 눌림에서 지지 확인.\",\n    \"KRW 64,700과 KRW 65,800을 거래량 증가와 함께 회복해 50일선·200일선 저항대를 지지대로 전환.\",\n    \"Paris Baguette 미국 공장 계약의 규모, 마진, 구축 일정, 유지보수 또는 소프트웨어 반복 매출 구조 공개.\",\n    \"모바일 셔틀 또는 콜드체인 물류 자동화에서 비LG·북미 고객 추가 수주 확인.\",\n    \"다음 분기 실적에서 매출 성장, 영업이익률 안정, 영업현금흐름 회복이 함께 확인.\",\n    \"2026-04-03 최대주주·임원·주요주주 지분 공시가 의미 있는 오버행이나 매물 압박이 아님이 확인.\"\n  ],\n  \"invalidators\": [\n    \"종가 기준 KRW 59,500 이탈 또는 KRW 60,800~60,000 지지대 재테스트 실패.\",\n    \"상승 시 거래량이 계속 약하고 KRW 63,300~64,700 구간에서 반복적으로 거절.\",\n    \"MACD 개선이 멈추고 RSI가 55~60 구간으로 확장되지 못한 채 재하락.\",\n    \"공급계약과 Paris Baguette 미국 공장 프로젝트가 소규모, 저마진, 긴 회수 기간, 2026년 실적 기여 제한으로 확인.\",\n    \"매출채권 증가와 운전자본 부담으로 영업현금흐름이 이익을 따라가지 못함.\",\n    \"주요주주, 보호예수, 기관 물량 또는 지분 공시 관련 공급이 지속적인 매도 압력으로 확인.\"\n  ],\n  \"watchlist_triggers\": [\n    \"KRW 63,300 종가 돌파와 최근 평균 이상 거래량 동반.\",\n    \"KRW 64,700 위 일봉 종가 후 성공적인 눌림 지지 확인.\",\n    \"KRW 65,800 돌파와 거래량 확장으로 200일선 회복 확인.\",\n    \"RSI가 55~60 구간으로 확장되고 MACD가 양수권 전환에 접근.\",\n    \"상승일 거래량이 2026-04-14의 279,402주를 넘고, 가능하면 2026-04-09의 748,764주에 근접 또는 초과.\",\n    \"KRW 60,800~60,000 재테스트에서 KRW 59,500 종가 이탈 없이 지지 확인.\",\n    \"2026-04-01 공급계약 2건과 Paris Baguette 미국 공장 자동화 프로젝트의 정량 정보 공개.\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 2,\n    \"disclosures_count\": 5,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 5\n  }\n}",
  "started_at": "2026-04-15T13:33:59.779613+09:00",
  "finished_at": "2026-04-15T13:46:34.439969+09:00",
  "duration_seconds": 754.66,
  "metrics": {
    "llm_calls": 56,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 56
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 22,
    "vendor_calls": {
      "yfinance": 15,
      "naver": 3,
      "ecos": 1,
      "opendart": 1,
      "alpha_vantage": 2
    },
    "fallback_count": 4,
    "events": [
      {
        "method": "get_stock_data",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_company_news",
        "vendor": "naver",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_social_sentiment",
        "vendor": "naver",
        "status": "fallback",
        "fallback": true,
        "note": "naver: empty or unusable result"
      },
      {
        "method": "get_social_sentiment",
        "vendor": "yfinance",
        "status": "fallback",
        "fallback": true,
        "note": "yfinance: empty or unusable result"
      },
      {
        "method": "get_macro_news",
        "vendor": "ecos",
        "status": "fallback",
        "fallback": true,
        "note": "ecos: ECOS API key is not configured."
      },
      {
        "method": "get_disclosures",
        "vendor": "opendart",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_company_news",
        "vendor": "naver",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_macro_news",
        "vendor": "alpha_vantage",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_income_statement",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_cashflow",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_balance_sheet",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_insider_transactions",
        "vendor": "yfinance",
        "status": "fallback",
        "fallback": true,
        "note": "yfinance: empty or unusable result"
      },
      {
        "method": "get_fundamentals",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_insider_transactions",
        "vendor": "alpha_vantage",
        "status": "success",
        "fallback": false,
        "note": null
      }
    ]
  },
  "quality_flags": [
    "token_usage_unavailable"
  ],
  "report_writer": {
    "status": "success",
    "scope": "ticker",
    "provider": "codex",
    "model": "gpt-5.4"
  },
  "provider": "codex",
  "models": {
    "quick_model": "gpt-5.4",
    "deep_model": "gpt-5.4",
    "output_model": "gpt-5.4"
  }
}