import { pgTable, varchar, text, timestamp, char, decimal, serial, uniqueIndex } from "drizzle-orm/pg-core" export const projects = pgTable("projects", { id: serial("id").primaryKey(), // 기존 정보 code: varchar("code", { length: 50 }).notNull(), // PROJ_NO 으로, PSPID와 동일 (나준규 프로 확인) name: text("name").notNull(), // PROJ_DSC type: varchar("type", { length: 20 }).default("ship").notNull(), // TYPE 기반으로 산출하며, null 값인 경우 ship으로 처리 // MDG 를 위한 컬럼 확장 - PROJECT_MASTER_CMCTB_PROJ_MAST의 모든 컬럼 AS_GRNT_PRD: varchar("AS_GRNT_PRD", { length: 1000 }), // A/S 보증기간 BIZCLS: varchar("BIZCLS", { length: 1000 }), // 사업부 BIZLOC_CD: varchar("BIZLOC_CD", { length: 1000 }), // 사업장코드 BIZ_DMN: varchar("BIZ_DMN", { length: 1000 }), // 사업영역 BP_DL_DT: varchar("BP_DL_DT", { length: 1000 }), // 선표인도일자 CHN_PROJ_TP: varchar("CHN_PROJ_TP", { length: 1000 }), // (중국)프로젝트타입 CLS_1: varchar("CLS_1", { length: 1000 }), // 선급1 CLS_2: varchar("CLS_2", { length: 1000 }), // 선급2 CNRT_CNTN_YN: varchar("CNRT_CNTN_YN", { length: 1000 }), // 계약존속여부 CNRT_DL_DT: varchar("CNRT_DL_DT", { length: 1000 }), // 계약인도일자 CNRT_DT: varchar("CNRT_DT", { length: 1000 }), // 계약일자 CNRT_RESV_YN: varchar("CNRT_RESV_YN", { length: 1000 }), // 계약유보여부 CO_CD: varchar("CO_CD", { length: 1000 }), // 회사코드 CSTM_PO_NO: varchar("CSTM_PO_NO", { length: 1000 }), // 고객발주번호 DEL_YN: varchar("DEL_YN", { length: 1000 }), // 삭제 여부 DIGT_PDT_GRP: varchar("DIGT_PDT_GRP", { length: 1000 }), // 전기전자 제품군 DIST_PATH: varchar("DIST_PATH", { length: 1000 }), // 유통경로 DL_BF_PROJ_NM: varchar("DL_BF_PROJ_NM", { length: 1000 }), // 인도전선명 DL_CSTM_CD: varchar("DL_CSTM_CD", { length: 1000 }), // 인도고객 ID DOCK_CD: varchar("DOCK_CD", { length: 1000 }), // 도크 DSN_CHRGR: varchar("DSN_CHRGR", { length: 1000 }), // 설계담당자 FIN_GRNT_FN_DT: varchar("FIN_GRNT_FN_DT", { length: 1000 }), // 최종수요자 보증종료일 GENT_CNT: varchar("GENT_CNT", { length: 1000 }), // 세대수/시리즈 GOV: varchar("GOV", { length: 1000 }), // 관청명 GRNT_STDT: varchar("GRNT_STDT", { length: 1000 }), // Project Warranty Start Date IF_STAT: varchar("IF_STAT", { length: 1000 }), // 인터페이스 진행단계 IMO_NO: varchar("IMO_NO", { length: 1000 }), // IMO 번호 INQY_NO: varchar("INQY_NO", { length: 1000 }), // 안건번호 INQY_SEQ: varchar("INQY_SEQ", { length: 1000 }), // 안건순번 IO_GB: varchar("IO_GB", { length: 1000 }), // 사내외 구분 MNG_ACOT_DMN: varchar("MNG_ACOT_DMN", { length: 1000 }), // 관리회계영역 MN_ENGN_TP_CD: varchar("MN_ENGN_TP_CD", { length: 1000 }), // Main engine type code MSHIP_NO: varchar("MSHIP_NO", { length: 1000 }), // 기준호선 NEW_MC_YN: varchar("NEW_MC_YN", { length: 1000 }), // MC YN NTTP: varchar("NTTP", { length: 1000 }), // 국적 ORDR_GRNT_FN_DT: varchar("ORDR_GRNT_FN_DT", { length: 1000 }), // 주문주 보증종료일 ORDR_GRNT_PRD: varchar("ORDR_GRNT_PRD", { length: 1000 }), // 주문주 보증기간 OWN_1: varchar("OWN_1", { length: 1000 }), // 선주1 OWN_AB: varchar("OWN_AB", { length: 1000 }), // 선주약어 OWN_NM: varchar("OWN_NM", { length: 1000 }), // 선주명 PDT_LVL_4: varchar("PDT_LVL_4", { length: 1000 }), // 제품 Level 4 PLNT_CD: varchar("PLNT_CD", { length: 1000 }), // 플랜트 코드 PRCTR: varchar("PRCTR", { length: 1000 }), // 손익센터 PRGS_STAT: varchar("PRGS_STAT", { length: 1000 }), // 진행상태 PROJ_CRTE_REQ_DT: varchar("PROJ_CRTE_REQ_DT", { length: 1000 }), // 프로젝트 생성요청일 PROJ_CRTE_REQ_EMPNO: varchar("PROJ_CRTE_REQ_EMPNO", { length: 1000 }), // 프로젝트 생성요청자 PROJ_DL_PLN_DT: varchar("PROJ_DL_PLN_DT", { length: 1000 }), // 모프로젝트 인도계획일 PROJ_DL_RT_DT: varchar("PROJ_DL_RT_DT", { length: 1000 }), // 모프로젝트 인도실적일 PROJ_DTL_TP: varchar("PROJ_DTL_TP", { length: 1000 }), // 프로젝트 세부타입 PROJ_ETC_TP: varchar("PROJ_ETC_TP", { length: 1000 }), // 프로젝트 기타타입 PROJ_GB: varchar("PROJ_GB", { length: 1000 }), // 프로젝트구분 PROJ_PRGS_YN: varchar("PROJ_PRGS_YN", { length: 1000 }), // 공사진행여부 PROJ_PROF: varchar("PROJ_PROF", { length: 1000 }), // 프로젝트 프로파일 PROJ_SCP: varchar("PROJ_SCP", { length: 1000 }), // 프로젝트범위 PROJ_WBS_TP: varchar("PROJ_WBS_TP", { length: 1000 }), // 프로젝트 WBS타입 PRO_PROJ_NO: varchar("PRO_PROJ_NO", { length: 1000 }), // 프로포절 프로젝트 QM_CLS: varchar("QM_CLS", { length: 1000 }), // 품질사업부 REF_NO: varchar("REF_NO", { length: 1000 }), // 시리즈번호 RLTD_PROJ: varchar("RLTD_PROJ", { length: 1000 }), // 연관프로젝트 RL_DL_DT: varchar("RL_DL_DT", { length: 1000 }), // 실인도일자 SALE_GRP: varchar("SALE_GRP", { length: 1000 }), // 영업그룹 SALE_ORG_CD: varchar("SALE_ORG_CD", { length: 1000 }), // 영업조직 SA_DT: varchar("SA_DT", { length: 1000 }), // Sail Away Date SERS_NO: varchar("SERS_NO", { length: 1000 }), // 시리즈첫공사번호 SERS_YN: varchar("SERS_YN", { length: 1000 }), // 시리즈여부 SHTYPE: varchar("SHTYPE", { length: 1000 }), // 선형 SHTYPE_CD: varchar("SHTYPE_CD", { length: 1000 }), // 선형코드 SHTYPE_GRP: varchar("SHTYPE_GRP", { length: 1000 }), // 선형군 SHTYPE_UOM: varchar("SHTYPE_UOM", { length: 1000 }), // 선형단위 SKND: varchar("SKND", { length: 1000 }), // 선종 SRC_SYS_ID: varchar("SRC_SYS_ID", { length: 1000 }), // Source System STDT: varchar("STDT", { length: 1000 }), // 시작일자 SYS_ACOT_CLSD_DT: varchar("SYS_ACOT_CLSD_DT", { length: 1000 }), // 시스템회계마감일자 TOT_CNRT_CNT: varchar("TOT_CNRT_CNT", { length: 1000 }), // 전체 계약 대수 TYPE: varchar("TYPE", { length: 1000 }), // 프로젝트 Top/Hull (원본 TYPE 컬럼) WP_PROJ_TP: varchar("WP_PROJ_TP", { length: 1000 }), // (풍력)프로젝트타입 createdAt: timestamp("created_at").defaultNow().notNull(), updatedAt: timestamp("updated_at").defaultNow().notNull(), }) export type Project = typeof projects.$inferSelect export const biddingProjects = pgTable("bidding_projects", { id: serial("id").primaryKey(), pspid: char('pspid', { length: 24 }).notNull().unique(), // 견적프로젝트번호 projNm: varchar('proj_nm', { length: 90 }), // 견적프로젝트명 sector: char('sector', { length: 1 }), // 부문(S / M) projMsrm: decimal('proj_msrm', { precision: 3, scale: 0 }), // 척수 kunnr: char('kunnr', { length: 10 }), // 선주코드 kunnrNm: varchar('kunnr_nm', { length: 30 }), // 선주명 cls1: char('cls_1', { length: 10 }), // 선급코드 cls1Nm: varchar('cls1_nm', { length: 30 }), // 선급명 ptype: char('ptype', { length: 3 }), // 선종코드 ptypeNm: varchar('ptype_nm', { length: 40 }), // 선종명 pmodelCd: char('pmodel_cd', { length: 10 }), // 선형코드 pmodelNm: varchar('pmodel_nm', { length: 40 }), // 선형명 pmodelSz: varchar('pmodel_sz', { length: 20 }), // 선형크기 pmodelUom: char('pmodel_uom', { length: 5 }), // 선형단위 txt04: char('txt04', { length: 4 }), // 견적상태코드 txt30: varchar('txt30', { length: 30 }), // 견적상태명 estmPm: varchar('estm_pm', { length: 30 }), // 견적대표PM 성명 // 조선, 해양 헐, 해양 탑 구분 컬럼 // 조선 및 해양 헐은 ECC에서 SOAP으로 가져오며, 해양 탑은 NONSAP에서 ESTM_PROJ_NO 테이블에서 가져온다. // 조선/해양 헐을 구분할 수 있는 방법은 ECC에서 sector가 S(SHIP)인지 M(MARINE)인지 구분하면 된다. pjtType: varchar('pjt_type', { enum: ['SHIP','TOP', 'HULL'] }), createdAt: timestamp("created_at").defaultNow().notNull(), updatedAt: timestamp("updated_at").defaultNow().notNull(), }); export const projectSeries = pgTable('project_series', { pspid: char('pspid', { length: 24 }).notNull().references(() => biddingProjects.pspid), // 견적프로젝트번호 sersNo: char('sers_no', { length: 3 }).notNull(), // 시리즈번호 scDt: char('sc_dt', {length: 8}), // Steel Cutting Date klDt: char('kl_dt', {length: 8}), // Keel Laying Date lcDt: char('lc_dt', {length: 8}), // Launching Date dlDt: char('dl_dt', {length: 8}), // Delivery Date dockNo: char('dock_no', { length: 3 }), // 도크코드 dockNm: varchar('dock_nm', { length: 40 }), // 도크명 projNo: char('proj_no', { length: 24 }), // SN공사번호(계약후) post1: varchar('post1', { length: 40 }), // SN공사명(계약후) }, (table) => { return { pk: uniqueIndex("project_sersNo_unique").on( table.pspid, table.sersNo ) } }); export type BiddingProjects = typeof biddingProjects.$inferSelect export type ProjectSeries = typeof projectSeries.$inferSelect // 새로 데이터 수신 시 구분을 위해 사용 export type NewBiddingProject = typeof biddingProjects.$inferInsert export type NewProjectSeries = typeof projectSeries.$inferInsert