From 6c69e81154cda07d7bb953f0be336c3085be462f Mon Sep 17 00:00:00 2001 From: ened Date: Sun, 9 Jul 2023 13:37:17 +0900 Subject: [PATCH] Working on DART api --- .../Sources/Domestic/DART/DomesticDart.swift | 70 ++++ .../DART/DomesticDartBusinessReport.swift | 272 +++++++++++++++ .../Domestic/DART/DomesticDartNotice.swift | 317 ++++++++++++++++++ .../Domestic/KRX300/DomesticExtra.swift | 24 ++ .../Domestic/KRX300/DomesticIndex.swift | 9 - .../DomesticShortSelling.swift | 12 - bin/data | 2 +- .../macos/KissMe.xcodeproj/project.pbxproj | 24 +- 8 files changed, 704 insertions(+), 26 deletions(-) create mode 100644 KissMe/Sources/Domestic/DART/DomesticDart.swift create mode 100644 KissMe/Sources/Domestic/DART/DomesticDartBusinessReport.swift create mode 100644 KissMe/Sources/Domestic/DART/DomesticDartNotice.swift create mode 100644 KissMe/Sources/Domestic/KRX300/DomesticExtra.swift rename KissMe/Sources/Domestic/{ShortSelling => KRX300}/DomesticShortSelling.swift (96%) diff --git a/KissMe/Sources/Domestic/DART/DomesticDart.swift b/KissMe/Sources/Domestic/DART/DomesticDart.swift new file mode 100644 index 0000000..ba0087d --- /dev/null +++ b/KissMe/Sources/Domestic/DART/DomesticDart.swift @@ -0,0 +1,70 @@ +// +// DomesticDart.swift +// KissMe +// +// Created by ened-book-m1 on 2023/07/09. +// + +import Foundation + + +protocol DartRequest: Request { + var openApiKey: String { get } +} + +extension DartRequest { + public var domain: String { + "https://opendart.fss.or.kr" + } +} + + +public struct DomesticDart { + + public enum PublicNoticeType: String, Codable { + /// 정기공시 + case regular = "A" + /// 주요사항보고 + case mainPoint = "B" + /// 발행공시 + case issue = "C" + /// 지분공시 + case share = "D" + /// 기타공시 + case etc = "E" + /// 외부감사관련 + case externalAudit = "F" + /// 펀드공시 + case fund = "G" + /// 자산유동화 + case assetSecuritization = "H" + /// 거래소공시 + case exchange = "I" + /// 공정위공시 + case fairTradeCommission = "J" + } + + public enum MarketType: String, Codable { + /// 유가 + case stock = "Y" + /// 코스닥 + case kosdaq = "K" + /// 코넥스 + case konex = "N" + /// 기타 + case etc = "E" + } + + public enum ReportCode: String, Codable { + /// 1분기보고서 + case firstQuarter = "11013" + /// 반기보고서 + case half = "11012" + /// 3분기보고서 + case thridQuater = "11014" + /// 사업보고서 + case annual = "11011" + } +} + + diff --git a/KissMe/Sources/Domestic/DART/DomesticDartBusinessReport.swift b/KissMe/Sources/Domestic/DART/DomesticDartBusinessReport.swift new file mode 100644 index 0000000..6091030 --- /dev/null +++ b/KissMe/Sources/Domestic/DART/DomesticDartBusinessReport.swift @@ -0,0 +1,272 @@ +// +// DomesticDartBusinessReport.swift +// KissMe +// +// Created by ened-book-m1 on 2023/07/09. +// + +import Foundation + + +extension DomesticDart { + + /// 사업보고서 - 조건부 자본증권 미상환 잔액 + /// + public struct ConditionalCapitalSecuritiesOutstandingBalanceRequest: DartRequest { + public typealias KResult = ConditionalCapitalSecuritiesOutstandingBalanceResult + + public var url: String { + "/api/cndlCaplScritsNrdmpBlce.json" + } + public var method: Method { .get } + + public var header: [String : String?] { + [:] + } + public var body: [String: Any] { + return [ + "crtfc_key": openApiKey, + "corp_code": corporationCode, + "bsns_year": businessYear, + "reprt_code": reportCode.rawValue, + ] + } + public var result: KResult? = nil + + + public let openApiKey: String + let corporationCode: String + let businessYear: String + let reportCode: ReportCode + + public init(openApiKey: String, corporationCode: String, businessYear: String, reportCode: ReportCode) { + self.openApiKey = openApiKey + self.corporationCode = corporationCode + self.businessYear = businessYear + self.reportCode = reportCode + } + } + + + /// 사업보고서 - 미등기임원 보수현황 + /// + public struct UnregisteredExecutivePayRequest: DartRequest { + public typealias KResult = UnregisteredExecutivePayResult + + public var url: String { + "/api/unrstExctvMendngSttus.json" + } + public var method: Method { .get } + + public var header: [String : String?] { + [:] + } + public var body: [String: Any] { + return [ + "crtfc_key": openApiKey, + "corp_code": corporationCode, + "bsns_year": businessYear, + "reprt_code": reportCode.rawValue, + ] + } + public var result: KResult? = nil + + + public let openApiKey: String + let corporationCode: String + let businessYear: String + let reportCode: ReportCode + + public init(openApiKey: String, corporationCode: String, businessYear: String, reportCode: ReportCode) { + self.openApiKey = openApiKey + self.corporationCode = corporationCode + self.businessYear = businessYear + self.reportCode = reportCode + } + } + + + /// 사업보고서 - 회사채 미상환 잔액 + /// + public struct CorporateBondOutstandingBalanceRequest: DartRequest { + public typealias KResult = CorporateBondOutstandingBalanceResult + + public var url: String { + "/api/cprndNrdmpBlce.json" + } + public var method: Method { .get } + + public var header: [String : String?] { + [:] + } + public var body: [String: Any] { + return [ + "crtfc_key": openApiKey, + "corp_code": corporationCode, + "bsns_year": businessYear, + "reprt_code": reportCode.rawValue, + ] + } + public var result: KResult? = nil + + + public let openApiKey: String + let corporationCode: String + let businessYear: String + let reportCode: ReportCode + + public init(openApiKey: String, corporationCode: String, businessYear: String, reportCode: ReportCode) { + self.openApiKey = openApiKey + self.corporationCode = corporationCode + self.businessYear = businessYear + self.reportCode = reportCode + } + } +} + + +extension DomesticDart { + + public struct ConditionalCapitalSecuritiesOutstandingBalanceResult: Codable { + public let result: Result + + public struct Result: Codable { + public let status: String + public let message: String + public let list: [Item] + + private enum CodingKeys: String, CodingKey { + case status + case message + case list + } + } + + public struct Item: Codable { + /// 접수번호 + public let receiptNo: String + /// 법인구분 + public let marketType: MarketType + /// 고유번호 + public let corporationCode: String + /// 회사명 + public let corporationName: String + /// 잔여만기 + public let remainingExpiration1: String + /// 잔여만기 + public let remainingExpiration2: String + /// 1년 이하 + public let year1Below: String + /// 1년초과 2년이하 + public let year1Excess_year2Below: String + /// 2년초과 3년이하 + public let year2Excess_year3Blow: String + /// 3년초과 4년이하 + public let year3Excess_year4Below: String + /// 4년초과 5년이하 + public let year4Excess_year5Below: String + /// 5년초과 10년이하 + public let year5Excess_year10Below: String + /// 10년초과 20년이하 + public let year10Excess_year20Below: String + /// 20년초과 30년이하 + public let year20Excess_year30Below: String + /// 30년초과 + public let year30Excess: String + /// 합계 + public let sum: String + + private enum CodingKeys: String, CodingKey { + case receiptNo = "rcept_no" + case marketType = "corp_cls" + case corporationCode = "corp_code" + case corporationName = "corp_name" + case remainingExpiration1 = "remndr_exprtn1" + case remainingExpiration2 = "remndr_exprtn2" + case year1Below = "yy1_below" + case year1Excess_year2Below = "yy1_excess_yy2_below" + case year2Excess_year3Blow = "yy2_excess_yy3_below" + case year3Excess_year4Below = "yy3_excess_yy4_below" + case year4Excess_year5Below = "yy4_excess_yy5_below" + case year5Excess_year10Below = "yy5_excess_yy10_below" + case year10Excess_year20Below = "yy10_excess_yy20_below" + case year20Excess_year30Below = "yy20_excess_yy30_below" + case year30Excess = "yy30_excess" + case sum = "sm" + } + } + } + + + public struct UnregisteredExecutivePayResult: Codable { + public let result: Result + + public struct Result: Codable { + public let status: String + public let message: String + public let list: [Item] + + private enum CodingKeys: String, CodingKey { + case status + case message + case list + } + } + + public struct Item: Codable { + /// 접수번호 + public let receiptNo: String + /// 법인구분 + public let marketType: MarketType + /// 고유번호 + public let corporationCode: String + /// 회사명 + public let corporationName: String + /// 구분 + public let seperation: String + /// 인원수 + public let headcount: String + /// 연간급여 총액 + public let annualTotalSalaryAmount: String + /// 1인평균 급여액 + public let averageSalaryAmount: String + /// 비고 + public let remark: String + + private enum CodingKeys: String, CodingKey { + case receiptNo = "rcept_no" + case marketType = "corp_cls" + case corporationCode = "corp_code" + case corporationName = "corp_name" + case seperation = "se" + case headcount = "nmpr" + case annualTotalSalaryAmount = "fyer_salary_totamt" + case averageSalaryAmount = "jan_salary_am" + case remark = "rm" + } + } + } + + + public struct CorporateBondOutstandingBalanceResult: Codable { + public let result: Result + + public struct Result: Codable { + public let status: String + public let message: String + public let list: [Item] + + private enum CodingKeys: String, CodingKey { + case status + case message + case list + } + } + + public struct Item: Codable { + + private enum CodingKeys: String, CodingKey { + } + } + } +} diff --git a/KissMe/Sources/Domestic/DART/DomesticDartNotice.swift b/KissMe/Sources/Domestic/DART/DomesticDartNotice.swift new file mode 100644 index 0000000..231c06f --- /dev/null +++ b/KissMe/Sources/Domestic/DART/DomesticDartNotice.swift @@ -0,0 +1,317 @@ +// +// DomesticDartNotice.swift +// KissMe +// +// Created by ened-book-m1 on 2023/07/09. +// + +import Foundation + + +extension DomesticDart { + + /// 공시정보 - 공시검색 + /// + public struct NoticeListRequest: DartRequest { + public typealias KResult = NoticeListResult + + public var url: String { + "/api/list.json" + } + public var method: Method { .get } + + public var header: [String : String?] { + [:] + } + public var body: [String: Any] { + return [ + "crtfc_key": openApiKey, + "corp_code": corporationCode, + "bgn_de": startDate.yyyyMMdd, + "end_de": endDate.yyyyMMdd, + //"last_reprt_at": "N", + //"pblntf_ty": noticeType.rawValue, + //"pblntf_detail_ty": "", + //"corp_cls": marketType.rawValue, + //"sort": "date", + //"sort_mth": "desc", + "page_no": pageNo, + "page_count": pageCount, + ] + } + public var result: KResult? = nil + + + public let openApiKey: String + let corporationCode: String + let startDate: Date + let endDate: Date + //let noticeType: PublicNoticeType + //let marketType: MarketType + let pageNo: Int + let pageCount: Int + + public init(openApiKey: String, corporationCode: String, startDate: Date, endDate: Date, pageNo: Int, pageCount: Int) { + self.openApiKey = openApiKey + self.corporationCode = corporationCode + self.startDate = startDate + self.endDate = endDate + self.pageNo = pageNo + self.pageCount = pageCount + } + } + + + /// 공시정보 - 기업개황 + /// + public struct CompanyRequest: DartRequest { + public typealias KResult = CompanyResult + + public var url: String { + "/api/company.json" + } + public var method: Method { .get } + + public var header: [String : String?] { + [:] + } + public var body: [String: Any] { + return [ + "crtfc_key": openApiKey, + "corp_code": corporationCode, + ] + } + public var result: KResult? = nil + + + public let openApiKey: String + let corporationCode: String + + public init(openApiKey: String, corporationCode: String) { + self.openApiKey = openApiKey + self.corporationCode = corporationCode + } + } + + + /// 공시정보 - 공시서류원본파일 + /// + public struct DocumentRequest: DartRequest { + public typealias KResult = Data + + public var url: String { + "/api/document.json" + } + public var method: Method { .get } + + public var header: [String : String?] { + [:] + } + public var body: [String: Any] { + return [ + "crtfc_key": openApiKey, + "rcept_no": receiptNo, + ] + } + public var result: KResult? = nil + + + public let openApiKey: String + let receiptNo: String + + public init(openApiKey: String, receiptNo: String) { + self.openApiKey = openApiKey + self.receiptNo = receiptNo + } + } + + + /// 공시정보 - 고유번호 + /// + public struct CorporationCodesRequest: DartRequest { + public typealias KResult = CorporationCodesResult + + public var url: String { + "/api/document.json" + } + public var method: Method { .get } + + public var header: [String : String?] { + [:] + } + public var body: [String: Any] { + return [ + "crtfc_key": openApiKey, + ] + } + public var result: KResult? = nil + + + public let openApiKey: String + + public init(openApiKey: String) { + self.openApiKey = openApiKey + } + } +} + + +extension DomesticDart { + + public struct NoticeListResult: Codable { + public let result: Result + + public struct Result: Codable { + public let status: String + public let message: String + public let pageNo: Int + public let pageCount: Int + public let totalCount: Int + public let totalPage: Int + public let list: [Item] + + private enum CodingKeys: String, CodingKey { + case status + case message + case pageNo = "page_no" + case pageCount = "page_count" + case totalCount = "total_count" + case totalPage = "total_page" + case list + } + } + + public struct Item: Codable { + /// 법인구분 + public let marketType: MarketType + /// 종목명(법인명) + public let corporationName: String + /// 고유번호 + public let corporationCode: String + /// 종목코드 + public let productNo: String + /// 보고서명 + public let reportName: String + /// 접수번호 + public let receiptNo: String + /// 공시 제출인명 + public let submissionName: String + /// 접수일자 + public let receiptDate: String + /// 비고 + public let remark: String + + private enum CodingKeys: String, CodingKey { + case marketType = "corp_cls" + case corporationName = "corp_name" + case corporationCode = "corp_code" + case productNo = "stock_code" + case reportName = "report_nm" + case receiptNo = "rcept_no" + case submissionName = "flr_nm" + case receiptDate = "rcept_dt" + case remark = "rm" + } + } + } + + + public struct CompanyResult: Codable { + public let result: Result + + public struct Result: Codable { + public let status: String + public let message: String + + /// 정식명칭 + public let corporationName: String + /// 영문명칭 + public let englishCorporationName: String + /// 종목명(상장사) 또는 약식명칭(기타법인) + public let stockName: String + /// 상장회사인 경우 주식의 종목코드 + public let productCode: String + /// 대표자명 + public let ceoName: String + /// 법인구분 + public let marketType: MarketType + /// 법인등록번호 + public let corporationNo: String + /// 사업자등록번호 + public let businessNo: String + /// 주소 + public let address: String + /// 홈페이지 + public let homepage: String + /// IR 홈페이지 + public let ir: String + /// 전화번호 + public let phoneNumber: String + /// 팩스번호 + public let faxNumber: String + /// 업종코드 + public let industryCode: String + /// 설립일(YYYYMMDD) + public let establishedDate: String + /// 결산월(MM) + public let accountMonth: String + + private enum CodingKeys: String, CodingKey { + case status + case message + + case corporationName = "corp_name" + case englishCorporationName = "corp_name_eng" + case stockName = "stock_name" + case productCode = "stock_code" + case ceoName = "ceo_nm" + case marketType = "corp_cls" + case corporationNo = "jurir_no" + case businessNo = "bizr_no" + case address = "adres" + case homepage = "hm_url" + case ir = "ir_url" + case phoneNumber = "phn_no" + case faxNumber = "fax_no" + case industryCode = "induty_code" + case establishedDate = "est_dt" + case accountMonth = "acc_mt" + } + } + } + + + public struct CorporationCodesResult: Codable { + public let result: Result + + public struct Result: Codable { + public let status: String + public let message: String + public let list: [Item] + + private enum CodingKeys: String, CodingKey { + case status + case message + case list + } + } + + public struct Item: Codable { + /// 고유번호 + public let corporationCode: String + /// 정식명칭 + public let corporationName: String + /// 종목코드 + public let productCode: String + /// 최종변경일자 + public let modifyDate: String + + private enum CodingKeys: String, CodingKey { + case corporationCode = "corp_code" + case corporationName = "corp_name" + case productCode = "stock_code" + case modifyDate = "modify_date" + } + } + } +} diff --git a/KissMe/Sources/Domestic/KRX300/DomesticExtra.swift b/KissMe/Sources/Domestic/KRX300/DomesticExtra.swift new file mode 100644 index 0000000..5584a61 --- /dev/null +++ b/KissMe/Sources/Domestic/KRX300/DomesticExtra.swift @@ -0,0 +1,24 @@ +// +// DomesticExtra.swift +// KissMe +// +// Created by ened-book-m1 on 2023/07/09. +// + +import Foundation + + +public struct DomesticExtra { + public typealias Shorts = ShortSellingBalanceResult.OutBlock + public typealias IndexProduct = AllIndicesResult.Block +} + +protocol KrxRequest: Request { +} + + +extension KrxRequest { + public var domain: String { + "http://data.krx.co.kr" + } +} diff --git a/KissMe/Sources/Domestic/KRX300/DomesticIndex.swift b/KissMe/Sources/Domestic/KRX300/DomesticIndex.swift index 434985e..db3e303 100644 --- a/KissMe/Sources/Domestic/KRX300/DomesticIndex.swift +++ b/KissMe/Sources/Domestic/KRX300/DomesticIndex.swift @@ -44,9 +44,6 @@ extension DomesticExtra { public struct IndexPriceRequest: KrxRequest { public typealias KResult = IndexPriceResult - public var domain: String { - "http://data.krx.co.kr" - } public var url: String { "/comm/bldAttendant/getJsonData.cmd" } @@ -86,9 +83,6 @@ extension DomesticExtra { public struct IndexPortfolioRequest: KrxRequest { public typealias KResult = IndexPortfolioResult - public var domain: String { - "http://data.krx.co.kr" - } public var url: String { "/comm/bldAttendant/getJsonData.cmd" } @@ -129,9 +123,6 @@ extension DomesticExtra { public struct AllIndicesRequest: KrxRequest { public typealias KResult = AllIndicesResult - public var domain: String { - "http://data.krx.co.kr" - } public var url: String { "/comm/bldAttendant/getJsonData.cmd" } diff --git a/KissMe/Sources/Domestic/ShortSelling/DomesticShortSelling.swift b/KissMe/Sources/Domestic/KRX300/DomesticShortSelling.swift similarity index 96% rename from KissMe/Sources/Domestic/ShortSelling/DomesticShortSelling.swift rename to KissMe/Sources/Domestic/KRX300/DomesticShortSelling.swift index 56e41c4..f34f752 100644 --- a/KissMe/Sources/Domestic/ShortSelling/DomesticShortSelling.swift +++ b/KissMe/Sources/Domestic/KRX300/DomesticShortSelling.swift @@ -8,15 +8,6 @@ import Foundation -public struct DomesticExtra { - public typealias Shorts = ShortSellingBalanceResult.OutBlock - public typealias IndexProduct = AllIndicesResult.Block -} - -protocol KrxRequest: Request { -} - - extension DomesticExtra { /// 한국거래소 - 공매도 통계 - 잔고현황 @@ -24,9 +15,6 @@ extension DomesticExtra { public struct ShortSellingBalanceRequest: KrxRequest { public typealias KResult = ShortSellingBalanceResult - public var domain: String { - "http://data.krx.co.kr" - } public var url: String { "/comm/bldAttendant/getJsonData.cmd" } diff --git a/bin/data b/bin/data index ae22bb8..b0a2e70 160000 --- a/bin/data +++ b/bin/data @@ -1 +1 @@ -Subproject commit ae22bb858d25d56909087d0fd4ee144b69b3f0de +Subproject commit b0a2e701b71de0d5bbdf5588116c5531879a4a9e diff --git a/projects/macos/KissMe.xcodeproj/project.pbxproj b/projects/macos/KissMe.xcodeproj/project.pbxproj index ed93229..838d66e 100644 --- a/projects/macos/KissMe.xcodeproj/project.pbxproj +++ b/projects/macos/KissMe.xcodeproj/project.pbxproj @@ -39,6 +39,10 @@ 341F5F142A16CD7A00962D48 /* DomesticShopProduct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341F5F132A16CD7A00962D48 /* DomesticShopProduct.swift */; }; 3435A7F72A35D82000D604F1 /* DomesticShortSelling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3435A7F62A35D82000D604F1 /* DomesticShortSelling.swift */; }; 349C26AB2A1EAE2400F3EC91 /* KissProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349C26AA2A1EAE2400F3EC91 /* KissProfile.swift */; }; + 34C1BA4D2A59CD3400423D64 /* DomesticDartNotice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C1BA4C2A59CD3400423D64 /* DomesticDartNotice.swift */; }; + 34C1BA4F2A5A603F00423D64 /* DomesticExtra.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C1BA4E2A5A603F00423D64 /* DomesticExtra.swift */; }; + 34C1BA512A5A607D00423D64 /* DomesticDart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C1BA502A5A607D00423D64 /* DomesticDart.swift */; }; + 34C1BA532A5A683D00423D64 /* DomesticDartBusinessReport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C1BA522A5A683D00423D64 /* DomesticDartBusinessReport.swift */; }; 34D3680F2A2AA0BE005E6756 /* PropertyIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D3680E2A2AA0BE005E6756 /* PropertyIterable.swift */; }; 34E7B9112A49BD2800B3AB9F /* DomesticIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E7B9102A49BD2800B3AB9F /* DomesticIndex.swift */; }; 34F1900C2A41982A0068C697 /* KissIndexResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F1900B2A41982A0068C697 /* KissIndexResult.swift */; }; @@ -90,6 +94,10 @@ 341F5F132A16CD7A00962D48 /* DomesticShopProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomesticShopProduct.swift; sourceTree = ""; }; 3435A7F62A35D82000D604F1 /* DomesticShortSelling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomesticShortSelling.swift; sourceTree = ""; }; 349C26AA2A1EAE2400F3EC91 /* KissProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KissProfile.swift; sourceTree = ""; }; + 34C1BA4C2A59CD3400423D64 /* DomesticDartNotice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomesticDartNotice.swift; sourceTree = ""; }; + 34C1BA4E2A5A603F00423D64 /* DomesticExtra.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomesticExtra.swift; sourceTree = ""; }; + 34C1BA502A5A607D00423D64 /* DomesticDart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomesticDart.swift; sourceTree = ""; }; + 34C1BA522A5A683D00423D64 /* DomesticDartBusinessReport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomesticDartBusinessReport.swift; sourceTree = ""; }; 34D3680E2A2AA0BE005E6756 /* PropertyIterable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PropertyIterable.swift; sourceTree = ""; }; 34E7B9102A49BD2800B3AB9F /* DomesticIndex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomesticIndex.swift; sourceTree = ""; }; 34F1900B2A41982A0068C697 /* KissIndexResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KissIndexResult.swift; sourceTree = ""; }; @@ -174,8 +182,8 @@ 341F5EE62A0F3EFB00962D48 /* Domestic */ = { isa = PBXGroup; children = ( + 34C1BA4B2A595A5F00423D64 /* DART */, 34E7B90F2A4994AF00B3AB9F /* KRX300 */, - 3435A7F52A35D68000D604F1 /* ShortSelling */, 341F5F122A16CD3C00962D48 /* Shop */, 341F5EE42A0F3EF400962D48 /* DomesticStock.swift */, 341F5EF62A0F8B0500962D48 /* DomesticStockResult.swift */, @@ -223,18 +231,22 @@ path = Shop; sourceTree = ""; }; - 3435A7F52A35D68000D604F1 /* ShortSelling */ = { + 34C1BA4B2A595A5F00423D64 /* DART */ = { isa = PBXGroup; children = ( - 3435A7F62A35D82000D604F1 /* DomesticShortSelling.swift */, + 34C1BA502A5A607D00423D64 /* DomesticDart.swift */, + 34C1BA4C2A59CD3400423D64 /* DomesticDartNotice.swift */, + 34C1BA522A5A683D00423D64 /* DomesticDartBusinessReport.swift */, ); - path = ShortSelling; + path = DART; sourceTree = ""; }; 34E7B90F2A4994AF00B3AB9F /* KRX300 */ = { isa = PBXGroup; children = ( + 34C1BA4E2A5A603F00423D64 /* DomesticExtra.swift */, 34E7B9102A49BD2800B3AB9F /* DomesticIndex.swift */, + 3435A7F62A35D82000D604F1 /* DomesticShortSelling.swift */, ); path = KRX300; sourceTree = ""; @@ -369,7 +381,10 @@ files = ( 341F5EFB2A10909D00962D48 /* LoginResult.swift in Sources */, 340A4DC42A4E4345005A1FBA /* ArrayDecodable.swift in Sources */, + 34C1BA532A5A683D00423D64 /* DomesticDartBusinessReport.swift in Sources */, + 34C1BA4F2A5A603F00423D64 /* DomesticExtra.swift in Sources */, 340A4DC82A4E43C5005A1FBA /* GeneralError.swift in Sources */, + 34C1BA512A5A607D00423D64 /* DomesticDart.swift in Sources */, 340A4DCE2A4EA5D8005A1FBA /* Runner.swift in Sources */, 341F5F0B2A15115400962D48 /* KissShop.swift in Sources */, 3435A7F72A35D82000D604F1 /* DomesticShortSelling.swift in Sources */, @@ -393,6 +408,7 @@ 341F5F012A11155100962D48 /* DomesticStockSearchResult.swift in Sources */, 341F5F142A16CD7A00962D48 /* DomesticShopProduct.swift in Sources */, 341F5EF22A0F887200962D48 /* DomesticFutures.swift in Sources */, + 34C1BA4D2A59CD3400423D64 /* DomesticDartNotice.swift in Sources */, 34D3680F2A2AA0BE005E6756 /* PropertyIterable.swift in Sources */, 341F5F112A1685E700962D48 /* ShopRequest.swift in Sources */, 341F5EF92A0F907300962D48 /* DomesticStockPriceResult.swift in Sources */,