{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://aikstockdata.com/data/public/schemas/stock.schema.json", "title": "per-stock JSON (/data/public/s/{code}.json)", "type": "object", "required": [ "schema_version", "code", "name_ko", "quote", "signals" ], "properties": { "$schema": { "type": "string", "description": "이 파일을 설명하는 JSON Schema 주소" }, "schema_version": { "type": "string" }, "name": { "type": "string" }, "as_of": { "type": [ "string", "null" ], "description": "YYYYMMDD" }, "as_of_iso": { "type": [ "string", "null" ], "description": "as_of 를 YYYY-MM-DD 로 정규화한 값. 형식이 하나뿐이라 파싱에 이것만 쓰면 됩니다. 원본 as_of 는 하위호환을 위해 그대로 둡니다. 날짜를 못 읽으면 null(추측하지 않음)." }, "generated_kst": { "type": "string" }, "snapshot_id": { "type": [ "string", "null" ], "description": "이 발행 배치 식별자. 인용할 때 이 값을 함께 적으세요 — latest 는 매 거래일 덮어쓰입니다." }, "limitations": { "type": "array", "items": { "type": "string" }, "description": "이 데이터셋으로 **무엇을 할 수 없는가**. 개별 파일의 note 필드에 흩어져 있던 것을 한 자리에 모은 것이며 새 사실이 아닙니다(원문이 더 자세합니다). 메타를 아직 안 쓴 파일에는 이 키가 없습니다 — '한계가 없다'는 뜻이 아니라 '아직 안 적었다'는 뜻입니다." }, "code_rev": { "type": [ "string", "null" ], "description": "이 파일을 만든 코드의 git 커밋(짧은 SHA). generated_kst 는 데이터 시각, 이것은 코드 버전." }, "source": { "type": [ "string", "object" ], "description": "집계 파일은 한 줄 문자열 · 종목 파일은 원천별 객체", "properties": { "quote": { "type": [ "object", "null" ], "properties": { "provider": { "type": "string" }, "dataset": { "type": "string" }, "note": { "type": [ "string", "null" ] } } }, "financials_disclosures": { "type": [ "object", "null" ], "properties": { "provider": { "type": "string" }, "dataset": { "type": "string" }, "note": { "type": [ "string", "null" ] } } } } }, "license": { "type": [ "string", "object" ], "description": "집계 파일은 전문 문자열 · 종목 파일은 {name, url} 객체", "properties": { "name": { "type": "string" }, "url": { "type": "string" } } }, "citation": { "type": "string" }, "disclaimer": { "type": "string" }, "@type": { "type": "string", "description": "schema.org 표지(Dataset). 검색엔진과 AI 가 이 파일을 데이터셋으로 인식하게 합니다." }, "description": { "type": "string", "description": "이 파일이 무엇인지 한 문단. 사람이 읽는 설명이며 데이터 값이 아닙니다." }, "notes": { "type": [ "string", "object" ], "description": "이 파일을 쓸 때 틀리기 쉬운 지점에 대한 주의. 집계 전에 읽으세요." }, "generated_at": { "type": "string", "description": "생성 시각(ISO 8601·KST). generated_kst 와 같은 시각의 다른 표기입니다." }, "generated": { "type": "string", "description": "생성 시각(사람용 표기). generated_kst·generated_at 과 같은 시각입니다 — 한 파일에 세 표기가 함께 있는 것은 구 소비자 호환 때문입니다." }, "code": { "type": "string", "pattern": "^[0-9]{6}$" }, "name_ko": { "type": "string" }, "market": { "type": [ "string", "null" ] }, "security_class": { "type": [ "string", "null" ], "description": "common·preferred·etf·etn·reit·spac·foreign" }, "issuer": { "type": [ "object", "null" ], "description": "이 수치가 누구 것인가. inference=true 면 추정입니다", "properties": { "is_representative_listing": { "type": [ "boolean", "null" ] }, "issuer_common_code_guess": { "type": [ "string", "null" ] }, "inference": { "type": [ "boolean", "null" ] }, "inference_basis": { "type": [ "string", "null" ] }, "issuer_note": { "type": [ "string", "null" ] } } }, "quote": { "type": [ "object", "null" ], "properties": { "close": { "type": [ "number", "null" ] }, "open": { "type": [ "number", "null" ] }, "high": { "type": [ "number", "null" ] }, "low": { "type": [ "number", "null" ] }, "change_pct": { "type": [ "number", "null" ] }, "volume": { "type": [ "number", "null" ] }, "market_cap_krw": { "type": [ "number", "null" ] }, "has_trade": { "type": [ "boolean", "null" ] }, "trading_status": { "type": [ "string", "null" ], "enum": [ "traded", "no_trade", null ] } } }, "financials": { "type": [ "object", "null" ], "properties": { "basis": { "type": [ "string", "null" ], "description": "연결/별도" }, "period": { "type": [ "string", "null" ] }, "period_ko": { "type": [ "string", "null" ] }, "source": { "type": [ "string", "null" ] }, "unit": { "type": [ "string", "null" ] }, "revenue": { "type": [ "object", "null" ], "properties": { "current": { "type": [ "number", "null" ] }, "prior_year": { "type": [ "number", "null" ] }, "yoy_pct": { "type": [ "number", "null" ] } } }, "operating_income": { "type": [ "object", "null" ], "properties": { "current": { "type": [ "number", "null" ] }, "prior_year": { "type": [ "number", "null" ] }, "yoy_pct": { "type": [ "number", "null" ] } } }, "net_income": { "type": [ "object", "null" ], "properties": { "current": { "type": [ "number", "null" ] }, "prior_year": { "type": [ "number", "null" ] }, "yoy_pct": { "type": [ "number", "null" ] } } }, "newer_available": { "type": [ "object", "null" ], "properties": { "kind": { "type": [ "string", "null" ] }, "label": { "type": [ "string", "null" ] }, "period": { "type": [ "string", "null" ] }, "period_status": { "type": [ "string", "null" ] }, "period_note": { "type": [ "string", "null" ] }, "value_note": { "type": [ "string", "null" ] }, "value_status": { "type": [ "string", "null" ] }, "basis": { "type": [ "string", "null" ] }, "fact": { "type": [ "string", "null" ] }, "note": { "type": [ "string", "null" ] }, "rcept_no": { "type": [ "string", "null" ] }, "rcept_dt": { "type": [ "string", "null" ] }, "dart_url": { "type": [ "string", "null" ] }, "data_url": { "type": [ "string", "null" ] }, "revenue_yoy_pct": { "type": [ "number", "null" ] }, "op_income_yoy_pct": { "type": [ "number", "null" ] } } } } }, "recent_disclosures": { "type": "array", "items": { "type": "object", "properties": { "rcept_dt": { "type": [ "string", "null" ] }, "title": { "type": [ "string", "null" ] }, "type": { "type": [ "string", "null" ] }, "meaning": { "type": [ "string", "null" ] }, "fact": { "type": [ "string", "null" ] }, "basis": { "type": [ "string", "null" ] }, "score": { "type": [ "number", "null" ] }, "is_correction": { "type": [ "boolean", "null" ] }, "dart_url": { "type": [ "string", "null" ] } } } }, "signals": { "type": "object", "properties": { "growth_score": { "type": [ "number", "null" ] }, "quiet_score": { "type": [ "number", "null" ] }, "growth_top8": { "type": [ "boolean", "null" ] }, "quiet_top": { "type": [ "boolean", "null" ] }, "score_basis": { "type": [ "string", "null" ] } } }, "valuation": { "type": [ "object", "null" ], "properties": { "pe_ttm": { "type": [ "number", "null" ] }, "pb": { "type": [ "number", "null" ] }, "ttm_net_income_krw": { "type": [ "number", "null" ] }, "equity_krw": { "type": [ "number", "null" ] }, "basis": { "type": [ "object", "null" ], "properties": { "market_cap_asof": { "type": [ "string", "null" ] }, "financial_period": { "type": [ "string", "null" ] }, "fs": { "type": [ "string", "null" ] }, "pe_periods": { "type": [ "string", "null" ] } } }, "pe_note": { "type": [ "string", "null" ] }, "pb_note": { "type": [ "string", "null" ] }, "method": { "type": [ "string", "null" ] } }, "description": "PER(TTM)·PBR — 금융위 시가총액 + DART 주요계정만. 적자·자본잠식·재료 부족이면 null 이고 pe_note/pb_note 가 이유를 말한다. 증권사 EPS·컨센서스는 쓰지 않는다. 기계 산정, 추천 아님." }, "status": { "type": [ "string", "null" ], "enum": [ "not_collected", null ], "description": "이 키가 있으면 **묘비**입니다 — 현재 수집 대상이 아닌 종목이라 quote·signals·financials 가 마지막 관측 시점에 멈춰 있습니다. 주소는 기존 링크·인용이 깨지지 않도록 살려 둡니다. 정상 종목 파일에는 이 키 자체가 없습니다." }, "status_note": { "type": [ "string", "null" ], "description": "수집이 끊긴 사유의 **추정**. 상장폐지·거래정지· 코드 변경 등으로 추정하며 공식 확인이 아닙니다." }, "last_seen": { "type": [ "string", "null" ], "description": "우리 수집분에서 마지막으로 관측된 날(YYYYMMDD). 상장폐지일이 아닙니다." }, "first_seen": { "type": [ "string", "null" ], "description": "보유한 시세 파일 범위 안의 최초 관측일(YYYYMMDD) — **상장일이 아닙니다.** 그 범위 밖은 알 수 없습니다(build_universe_fsc 의 first_seen_note 와 같은 한계입니다)." }, "page_url": { "type": "string", "description": "사람이 보는 종목 페이지" }, "dart_url": { "type": "string", "description": "DART 원문 검색 — 값이 의심되면 여기가 최종 근거입니다" }, "field_definitions": { "type": [ "object", "null" ], "description": "이 파일 안의 각 필드가 무엇인지 파일 스스로 담은 정의표. 스키마를 따로 받지 않아도 값을 해석할 수 있습니다. 값은 설명 문자열이거나, 하위 필드를 더 가른 표입니다.", "additionalProperties": { "type": [ "string", "object" ] } } } }