// SEIBro 데이터 도메인 타입 — Backend Application/Features/Api/Stocks/{GetDividendCalendar,GetStockDividends, // GetLendingHistory,GetLockupCalendar,GetMeetingCalendar,GetCbExercises,GetBondDetail,GetElsRiskBoard, // GetForeignCustody}/Response.cs 대응. // 직렬화 주의: 필드명은 camelCase. Web.Api 는 JsonStringEnumConverter 미등록이나, 아래 응답들의 코드값은 // 전부 C# string(원문 코드 문자열)이므로 문자열로 옴 → 라벨맵으로 표시. // DateOnly 는 "yyyy-MM-dd" 문자열, decimal 은 number 로 직렬화됨. // ── 코드 라벨맵 (SEIBro 원문 코드 문자열 → 한글 라벨) ── // 배당 세부유형 (SORT_CODE) — 01주식 02현금 03동시 04무배당 export const DIVIDEND_SORT_LABEL: Record = { '01': '주식', '02': '현금', '03': '동시', '04': '무배당' }; // 확정구분 (FIX_TYPE / FIX_TPCD) — 1확정 2예고 3미정 export const DIVIDEND_FIX_LABEL: Record = { '1': '확정', '2': '예고', '3': '미정' }; // 결산구분 (SETTLE_TYPE) — 1결산 2반기 3분기 export const DIVIDEND_SETTLE_LABEL: Record = { '1': '결산', '2': '반기', '3': '분기' }; // 락업 업무구분 (OCCR_SEQ) — 1예수 2반환 export const LOCKUP_OCCR_LABEL: Record = { '1': '예수', '2': '반환' }; // 보호예수 사유코드 (DUTY_SAFEDP_RACD) — SEIBro 원본 전체 코드표 (미매칭 시 원문 코드 노출) export const LOCKUP_REASON_LABEL: Record = { '00': '해당없음', '01': '일반', '02': '모집(전매제한)', '03': '최대주주(상장)', '04': '최대주주(코스닥)', '05': '투자회사(상장)', '06': '초과유상증자', '07': '지정취소', '08': '질권담보', '09': '등록주선인', '10': '외국인양수(변동제한)', '11': '벤처금융', '12': '기관투자가', '13': '합병(상장)', '14': '합병(코스닥)', '15': '부동산(상장)', '16': '부동산(코스닥)', '17': '법원M&A', '18': '주식교환(코스닥)', '19': '벤처금융(주식교환)', '20': '벤처금융(합병)', '21': '기관투자가(합병)', '22': '기관투자가(주식교환)', '23': '제3자배정최대주주(코스닥)', '24': '선박(상장)', '25': '채권기관협의회', '26': '주식교환(상장)', '27': '영업자산양도&제3자배정(상장)', '28': '영업자산양도&제3자배정(코스닥)', '29': '제3자배정유상증자(상장)', '30': '제3자배정유상증자(코스닥)', '31': '최대주주(제3자배정)', '32': 'SPAC(상장)', '33': 'SPAC(코스닥)', '34': 'SPAC 합병(상장)', '35': 'SPAC 합병(코스닥)', '36': '명목회사(상장)', '37': '명목회사(코스닥)', '38': '자발적보호예수', '39': '우회상장', '40': '상장주선인(국내기업)', '41': '전매제한', '42': '기타(특정금전신탁편입 등)', '43': '최대주주(기술성장기업)', '44': '기관투자가(코넥스)', '45': '크라우드펀딩', '46': '크라우드펀딩(최대주주)', '47': '주관회사(금투협)', '48': '상장주선인(외국기업)', '49': '모집(전매제한)-크라우드펀딩전문투자자', '50': '상장주선인(50%미만)', '51': '상장주선인(50%이상)', '52': '최대주주변경(법인 또는 조합)', '53': '상장적격성 실질심사', '54': '기타 보호예수 필요 주주', '55': '주식매수선택권', '90': '기타의무예수', '99': '기타' }; // 주총 종류코드 (GMET_KACD) — 001정기 002임시 003종류 009기타 export const MEETING_KIND_LABEL: Record = { '001': '정기', '002': '임시', '003': '종류', '009': '기타' }; // ELS/DLS 종목구분코드 (SECN_TPCD) export const ELS_SECN_TPCD_LABEL: Record = { '41': 'ELS', '43': 'DLS' }; // 외화증권 종목구분코드 (SECN_TPCD) — SEIBro 스펙 코드표 (docs/SEIBro/외화증권.md) export const FOREIGN_SECN_TPCD_LABEL: Record = { '71': '외화주식', '72': '외화DR', '73': '외화WRTS', '74': '외화RGTS', '75': '외화채권', '76': '외화CD', '77': '외화CP', '78': '외화수익증권' }; // 국가코드 (NATION_CD) — 주요국 (미매칭 시 원문 코드 노출) export const NATION_LABEL: Record = { US: '미국', JP: '일본', HK: '홍콩', CN: '중국', GB: '영국', DE: '독일', FR: '프랑스', VN: '베트남', SG: '싱가포르', CH: '스위스', E1: '유로클리어(ICSD)' }; // 채권 옵션구분코드 (OPTION_TPCD) — 9401CALL 9402PUT 9403CALL+PUT 9404NOTE 0000해당없음 export const BOND_OPTION_LABEL: Record = { '9401': 'Call', '9402': 'Put', '9403': 'Call+Put', '9404': 'Note', '0000': '해당없음' }; // 채권 금리변동구분코드 (MR_CHG_TPCD) — 1고정 2변동 3고정+변동 export const BOND_RATE_CHG_LABEL: Record = { '1': '고정금리', '2': '변동금리', '3': '고정+변동' }; // 채권 보증구분코드 (GRTY_TPCD) — 1보증 2무보증 3담보부 4일반 export const BOND_GUARANTEE_LABEL: Record = { '1': '보증', '2': '무보증', '3': '담보부', '4': '일반' }; // 채권 순위구분코드 (RANK_TPCD) — 1선순위 2후순위 3중순위 9해당없음 export const BOND_RANK_LABEL: Record = { '1': '선순위', '2': '후순위', '3': '중순위', '9': '해당없음' }; // 채권 이자지급방법구분코드 (INT_PAY_WAY_TPCD) — 1이표 2할인 3복리 4단리 export const BOND_INT_PAY_WAY_LABEL: Record = { '1': '이표채', '2': '할인채', '3': '복리채', '4': '단리채' }; // 채권 이자지급주기구분코드 (INT_PAY_CYCLE_TPCD) — 23개월 24분기 25반기 26년 export const BOND_INT_CYCLE_LABEL: Record = { '23': '월', '24': '분기', '25': '반기', '26': '년' }; // 채권 이자지급시기구분코드 (INT_PAY_TIMS_TPCD) — 01후급 02선급 export const BOND_INT_TIMING_LABEL: Record = { '01': '후급', '02': '선급' }; // 특이채권종류구분코드 (PARTICUL_BOND_KIND_TPCD) — 1전환 2교환 3신주인수권 4분리형신주인수권 6이익참가 9해당없음 export const BOND_PARTICUL_KIND_LABEL: Record = { '1': '전환사채(CB)', '2': '교환사채(EB)', '3': '신주인수권부사채(BW)', '4': '분리형 신주인수권부사채', '6': '이익참가부사채', '9': '해당없음' }; // 종목종류코드 (SECN_KACD) — 대표값 (미매칭 시 원문 코드 노출) export const BOND_SECN_KACD_LABEL: Record = { '1108': '일반회사채', '1105': '국채', '1106': '지방채', '1107': '특수채', '1110': '금융채' }; // ── GET /api/market/dividend-calendar ── export interface DividendCalendarRow { issucoCustno: number; name: string; rgtStdDt: string; xrgtDt: string|null; sortCode: string; fixType: string|null; settleType: string|null; } export interface DividendCalendarResponse { total: number; list: DividendCalendarRow[]; } // ── GET /api/market/lockup-calendar ── export interface LockupCalendarRow { issucoCustno: number; shortCode: string; name: string; occrSeq: string; safedpDt: string; safedpQty: number|null; reasonCode: string; returnDt: string|null; returnQty: number|null; totalStkCnt: number|null; } export interface LockupCalendarResponse { total: number; list: LockupCalendarRow[]; } // ── GET /api/market/meeting-calendar ── export interface MeetingCalendarRow { issucoCustno: number; name: string|null; code: string|null; rgtStdDt: string; gmetDt: string|null; gmetTtm: string|null; meetingKind: string; place: string|null; evote: boolean|null; deferred: boolean|null; agendaCount: number; } export interface MeetingCalendarResponse { total: number; list: MeetingCalendarRow[]; } // ── GET /api/market/els-risk ── export interface ElsRiskPoint { stdDt: string; unredeemedCount: number|null; unredeemedRemaining: number|null; } export interface ElsRiskSeries { bassetCd: string; bassetContent: string|null; secnTpcd: string; points: ElsRiskPoint[]; } export interface ElsRiskResponse { assets: ElsRiskSeries[]; } // ── GET /api/market/foreign-custody ── export interface ForeignCustodyPoint { stdDt: string; custodyAmount: number; } export interface ForeignCustodySeries { nationCd: string; secnTpcd: string|null; points: ForeignCustodyPoint[]; } export interface ForeignCustodyResponse { nations: ForeignCustodySeries[]; } // ── GET /api/stocks/{code}/dividends ── export interface StockDividendRow { rgtStdDt: string; name: string; securityKind: string|null; faceValue: number|null; cashPerShare: number|null; stockAllocRatio: number|null; marketDividendRate: number|null; cashPayDate: string|null; xrgtDt: string|null; fixType: string|null; } export interface StockDividendsResponse { isin: string; total: number; list: StockDividendRow[]; } // ── GET /api/stocks/{code}/lending ── export interface LendingHistoryRow { stdDt: string; lendingBalanceQty: number|null; matchedQty: number|null; redeemedQty: number|null; tradeQty: number|null; foreignLendRatio: number|null; nativeLendRatio: number|null; foreignBorrowRatio: number|null; nativeBorrowRatio: number|null; } export interface LendingHistoryResponse { isin: string; total: number; list: LendingHistoryRow[]; } // ── GET /api/stocks/{code}/cb-exercises ── export interface CbExerciseRow { bondIsin: string; bondName: string|null; bondKind: string|null; exerciseStockIsin: string|null; exerciseStockName: string|null; rgtStdDt: string; exercisePrice: number|null; exerciseQty: number|null; exerciseAmt: number|null; listDt: string|null; } export interface CbExercisesResponse { isin: string; total: number; list: CbExerciseRow[]; } // ── GET /api/stocks/bonds/{isin} ── export interface BondDetailMaster { name: string|null; issucoCustno: number|null; secnKacd: string|null; issueDate: string|null; maturityDate: string|null; currency: string|null; firstIssueAmount: number|null; issueRemaining: number|null; couponRate: number|null; optionTpcd: string|null; forcedEarlyRedemption: boolean|null; rateChangeTpcd: string|null; guaranteeTpcd: string|null; rankTpcd: string|null; intPayWayTpcd: string|null; particularBondKindTpcd: string|null; kisGrade: string|null; niceGrade: string|null; sciGrade: string|null; krGrade: string|null; isElectronicSecurity: boolean|null; } export interface BondDetailInterest { couponRate: number|null; intPayWayTpcd: string|null; cycleTerms: number|null; cycleTpcd: string|null; payTimingTpcd: string|null; beforeCouponDate: string|null; afterCouponDate: string|null; } export interface BondDetailMarket { tradeDate: string; close: number; yieldToMaturity: number|null; volume: number; } export interface BondDetailResponse { isin: string; master: BondDetailMaster|null; interest: BondDetailInterest|null; market: BondDetailMarket|null; }