diff options
28 files changed, 12180 insertions, 379 deletions
diff --git a/app/[lng]/admin/nonsap-sync/page.tsx b/app/[lng]/admin/nonsap-sync/page.tsx new file mode 100644 index 00000000..4cc78c27 --- /dev/null +++ b/app/[lng]/admin/nonsap-sync/page.tsx @@ -0,0 +1,267 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; + +interface SyncProgress { + tableName: string; + lastSyncDate: string; + currentPage: number; + totalProcessed: number; + status: 'running' | 'completed' | 'error' | 'skipped'; + lastError?: string; + syncType: 'full' | 'delta' | 'rebuild'; + startTime: number; + endTime?: number; + recordsSkipped?: number; +} + +interface SyncConfig { + pageSize: number; + batchSize: number; + maxWorkers: number; + deltaSyncEnabled: boolean; + cronSchedule: string; + autoRefreshInterval: number; + environment: string; +} + +export default function NONSAPSyncPage() { + const [syncProgress, setSyncProgress] = useState<SyncProgress[]>([]); + const [isLoading, setIsLoading] = useState(false); + const [lastUpdated, setLastUpdated] = useState<string>(''); + const [syncConfig, setSyncConfig] = useState<SyncConfig | null>(null); + + // 설정 정보 조회 + const fetchSyncConfig = async () => { + try { + const response = await fetch('/api/nonsap-sync/config'); + const result = await response.json(); + + if (result.success) { + setSyncConfig(result.data); + } else { + console.error('Failed to fetch sync config:', result.error); + } + } catch (error) { + console.error('Error fetching sync config:', error); + } + }; + + // 동기화 상태 조회 + const fetchSyncStatus = async () => { + try { + const response = await fetch('/api/nonsap-sync/status'); + const result = await response.json(); + + if (result.success) { + setSyncProgress(result.data); + setLastUpdated(result.timestamp); + } else { + console.error('Failed to fetch sync status:', result.error); + } + } catch (error) { + console.error('Error fetching sync status:', error); + } + }; + + // 수동 동기화 트리거 + const triggerSync = async () => { + setIsLoading(true); + try { + const response = await fetch('/api/nonsap-sync/trigger', { + method: 'POST' + }); + const result = await response.json(); + + if (result.success) { + // 상태 새로고침 + setTimeout(fetchSyncStatus, 2000); + } else { + alert('동기화 시작에 실패했습니다: ' + result.error); + } + } catch (error) { + console.error('Error triggering sync:', error); + alert('동기화 트리거 중 오류가 발생했습니다.'); + } finally { + setIsLoading(false); + } + }; + + // 상태별 배지 색상 + const getStatusBadge = (status: string) => { + switch (status) { + case 'running': + return <Badge variant="default" className="bg-blue-500">실행 중</Badge>; + case 'completed': + return <Badge variant="default" className="bg-green-500">완료</Badge>; + case 'error': + return <Badge variant="destructive">오류</Badge>; + case 'skipped': + return <Badge variant="outline" className="bg-yellow-100">완료됨</Badge>; + default: + return <Badge variant="secondary">알 수 없음</Badge>; + } + }; + + // Cron 스케줄을 사용자 친화적으로 변환 + const formatCronSchedule = (cronSchedule: string) => { + if (cronSchedule === '0 */30 * * * *') { + return '30분마다'; + } + if (cronSchedule === '0 0 1 * * *') { + return '매일 새벽 1시'; + } + return cronSchedule; // 기본값으로 원본 반환 + }; + + + + // 동기화 타입별 배지 색상 + const getSyncTypeBadge = (syncType: string) => { + switch (syncType) { + case 'delta': + return <Badge variant="default" className="bg-green-500">차분 동기화</Badge>; + case 'full': + return <Badge variant="default" className="bg-blue-500">전체 동기화</Badge>; + case 'rebuild': + return <Badge variant="default" className="bg-orange-500">삭제 후 재구성</Badge>; + default: + return <Badge variant="secondary">{syncType}</Badge>; + } + }; + + // 초기 데이터 로드 + useEffect(() => { + fetchSyncConfig(); + fetchSyncStatus(); + }, []); + + // 자동 새로고침 + useEffect(() => { + if (!syncConfig) return; + + const interval = setInterval(fetchSyncStatus, syncConfig.autoRefreshInterval); + return () => clearInterval(interval); + }, [syncConfig]); + + return ( + <div className="container mx-auto p-6"> + <div className="flex justify-between items-center mb-6"> + <div> + <h1 className="text-3xl font-bold">NONSAP 데이터 동기화</h1> + <p className="text-muted-foreground"> + Oracle DB와 PostgreSQL 간의 데이터 동기화 상태를 모니터링합니다. + </p> + </div> + <div className="flex gap-2"> + <Button onClick={fetchSyncStatus} variant="outline"> + 새로고침 + </Button> + <Button onClick={triggerSync} disabled={isLoading}> + {isLoading ? '실행 중...' : '수동 동기화'} + </Button> + </div> + </div> + + {lastUpdated && ( + <Card className="mb-6"> + <CardContent className="pt-6"> + <p className="text-sm text-muted-foreground"> + 마지막 업데이트: {new Date(lastUpdated).toLocaleString('ko-KR')} + </p> + </CardContent> + </Card> + )} + + <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> + {syncProgress.map((progress) => ( + <Card key={progress.tableName}> + <CardHeader> + <div className="flex justify-between items-start"> + <CardTitle className="text-lg">{progress.tableName}</CardTitle> + <div className="flex gap-2"> + {getSyncTypeBadge(progress.syncType)} + {getStatusBadge(progress.status)} + </div> + </div> + <CardDescription> + 마지막 동기화: {new Date(progress.lastSyncDate).toLocaleString('ko-KR')} + </CardDescription> + </CardHeader> + <CardContent> + <div className="space-y-2"> + <div className="flex justify-between"> + <span className="text-sm text-muted-foreground">현재 페이지:</span> + <span className="text-sm font-medium">{progress.currentPage}</span> + </div> + <div className="flex justify-between"> + <span className="text-sm text-muted-foreground">처리된 레코드:</span> + <span className="text-sm font-medium">{progress.totalProcessed.toLocaleString()}</span> + </div> + {progress.recordsSkipped && progress.recordsSkipped > 0 && ( + <div className="flex justify-between"> + <span className="text-sm text-muted-foreground">스킵된 레코드:</span> + <span className="text-sm font-medium">{progress.recordsSkipped.toLocaleString()}</span> + </div> + )} + {progress.endTime && progress.startTime && ( + <div className="flex justify-between"> + <span className="text-sm text-muted-foreground">실행 시간:</span> + <span className="text-sm font-medium"> + {((progress.endTime - progress.startTime) / 1000).toFixed(2)}초 + </span> + </div> + )} + {progress.lastError && ( + <div className="mt-2"> + <p className="text-sm text-red-600 break-words"> + 오류: {progress.lastError} + </p> + </div> + )} + </div> + </CardContent> + </Card> + ))} + </div> + + {syncProgress.length === 0 && ( + <Card> + <CardContent className="pt-6"> + <p className="text-center text-muted-foreground"> + 동기화 정보가 없습니다. 동기화를 실행해보세요. + </p> + </CardContent> + </Card> + )} + + {syncConfig && ( + <Card className="mt-6"> + <CardHeader> + <CardTitle>동기화 설정</CardTitle> + <CardDescription> + 테이블별 최적 동기화 방식을 자동 선택하여 실행됩니다. + 멀티스레드로 병렬 처리하여 성능을 최적화합니다. + </CardDescription> + </CardHeader> + <CardContent> + <div className="space-y-2 text-sm"> + <p><strong>실행 환경:</strong> {syncConfig.environment}</p> + <p><strong>동기화 방식:</strong> 테이블별 자동 선택 (차분/전체/재구성)</p> + <p><strong>차분 동기화:</strong> {syncConfig.deltaSyncEnabled ? '활성화' : '비활성화'}</p> + <p><strong>실행 주기:</strong> {formatCronSchedule(syncConfig.cronSchedule)}</p> + <p><strong>페이지 크기:</strong> {syncConfig.pageSize.toLocaleString()}개 레코드</p> + <p><strong>배치 크기:</strong> {syncConfig.batchSize.toLocaleString()}개 레코드</p> + <p><strong>워커 수:</strong> {syncConfig.maxWorkers}개 (병렬 처리)</p> + <p><strong>자동 새로고침:</strong> {(syncConfig.autoRefreshInterval / 1000)}초마다</p> + <p><strong>동기화 대상:</strong> {syncProgress.length}개 테이블</p> + </div> + </CardContent> + </Card> + )} + </div> + ); +}
\ No newline at end of file diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/page.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/page.tsx new file mode 100644 index 00000000..6b058b37 --- /dev/null +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/page.tsx @@ -0,0 +1,39 @@ +import { vendorMdgService } from "@/lib/vendors/mdg-service" +import { VendorBasicInfo } from "./vendor-basic-info" + +interface VendorBasicPageProps { + params: { + lng: string + // 협력업체 ID: 여기서는 Oracle의 벤더 코드(VNDRCD)를 사용 + id: string + } +} + +export default async function VendorBasicPage(props: VendorBasicPageProps) { + const resolvedParams = await props.params + const vendorId = resolvedParams.id + + // Oracle에서 벤더 상세 정보 조회 (ID로 조회) + const vendorDetails = await vendorMdgService.getVendorDetailsByVendorId(vendorId) + + if (!vendorDetails) { + return ( + <div className="space-y-6"> + <div className="text-center py-12"> + <h3 className="text-lg font-medium text-gray-900 mb-2"> + 벤더 정보를 찾을 수 없습니다 + </h3> + <p className="text-gray-500"> + 벤더 ID: {vendorId} + </p> + </div> + </div> + ) + } + + return ( + <div className="space-y-6"> + <VendorBasicInfo vendorDetails={vendorDetails} /> + </div> + ) +}
\ No newline at end of file diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/vendor-basic-info.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/vendor-basic-info.tsx new file mode 100644 index 00000000..16f75bcb --- /dev/null +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/vendor-basic-info.tsx @@ -0,0 +1,735 @@ +"use client" + +import { useState, useTransition, useMemo } from "react" +import { useParams } from "next/navigation" +import { toast } from "sonner" +import { Separator } from "@/components/ui/separator" +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" +import { Badge } from "@/components/ui/badge" +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { Textarea } from "@/components/ui/textarea" +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" +import { AddressDisplay } from "@/components/ui/text-utils" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog" +import { + Phone, + Mail, + Calendar, + CheckCircle, + XCircle, + AlertCircle, + Edit, + Save, + X, + Building2, + Eye +} from "lucide-react" +import { updateMdgVendorBasicInfo } from "@/lib/vendors/mdg-actions" + +// 구매조직별 정보 타입 +interface PurchasingOrgInfo { + PUR_ORG_CD: string + PUR_ORD_CUR: string | null + SPLY_COND: string | null + DL_COND_1: string | null + DL_COND_2: string | null + GR_BSE_INVC_VR: string | null + ORD_CNFM_REQ_ORDR: string | null + CNFM_CTL_KEY: string | null + PUR_HOLD_ORDR: string | null + DEL_ORDR: string | null + AT_PUR_ORD_ORDR: string | null + SALE_CHRGR_NM: string | null + VNDR_TELNO: string | null + PUR_HOLD_DT: string | null + PUR_HOLD_CAUS: string | null +} + +interface VendorDetails { + VNDRCD: string + VNDRNM_1: string | null + VNDRNM_2: string | null + VNDRNM_ABRV_1: string | null + CO_VLM: string | null + BIZR_NO: string | null + CO_REG_NO: string | null + REPR_NM: string | null + REP_TEL_NO: string | null + REPR_RESNO: string | null + REPRESENTATIVE_EMAIL: string | null + BIZTP: string | null + BIZCON: string | null + NTN_CD: string | null + REG_DT: string | null + ADR_1: string | null + ADR_2: string | null + POSTAL_CODE: string | null + ADDR_DETAIL_1: string | null + PREVIOUS_VENDOR_CODE: string | null + PRTNR_GB: string | null + PURCHASING_ORGS: PurchasingOrgInfo[] + DEL_ORDR: string | null + PUR_HOLD_ORDR: string | null +} + +interface VendorBasicInfoProps { + vendorDetails: VendorDetails +} + +export function VendorBasicInfo({ vendorDetails }: VendorBasicInfoProps) { + const params = useParams() + const vendorId = params.id as string + const [isEditing, setIsEditing] = useState(false) + const [editData, setEditData] = useState(vendorDetails) + const [isPending, startTransition] = useTransition() + const [showConfirmDialog, setShowConfirmDialog] = useState(false) + const [selectedPurchasingOrg, setSelectedPurchasingOrg] = useState<string>(() => { + // 구매조직이 1개면 자동 선택, 여러개면 첫 번째 선택, 없으면 'none' + if (vendorDetails.PURCHASING_ORGS.length === 1) { + return vendorDetails.PURCHASING_ORGS[0].PUR_ORG_CD + } else if (vendorDetails.PURCHASING_ORGS.length > 1) { + return vendorDetails.PURCHASING_ORGS[0].PUR_ORG_CD + } + return 'none' + }) + const [showAllOrgs, setShowAllOrgs] = useState(false) + + // 변경사항 감지 + const changes = useMemo(() => { + const changedFields: Array<{ label: string; before: string; after: string }> = [] + + const fieldLabels: Record<string, string> = { + VNDRNM_1: "업체명", + VNDRNM_2: "영문명", + VNDRNM_ABRV_1: "업체약어", + BIZR_NO: "사업자번호", + CO_REG_NO: "법인등록번호", + CO_VLM: "기업규모", + REPR_NM: "대표자명", + REP_TEL_NO: "대표자 전화번호", + REPR_RESNO: "대표자 생년월일", + REPRESENTATIVE_EMAIL: "대표자 이메일", + BIZTP: "사업유형", + BIZCON: "산업유형", + NTN_CD: "국가코드", + ADR_1: "주소", + ADR_2: "영문주소", + POSTAL_CODE: "우편번호", + ADDR_DETAIL_1: "상세주소" + } + + Object.keys(fieldLabels).forEach(field => { + const originalValue = vendorDetails[field as keyof VendorDetails] as string || '' + const editedValue = editData[field as keyof VendorDetails] as string || '' + + if (originalValue !== editedValue) { + changedFields.push({ + label: fieldLabels[field], + before: originalValue || '(없음)', + after: editedValue || '(없음)' + }) + } + }) + + return changedFields + }, [vendorDetails, editData]) + + // 선택된 구매조직 정보 + const currentPurchasingOrg = vendorDetails.PURCHASING_ORGS.find( + org => org.PUR_ORG_CD === selectedPurchasingOrg + ) + + // 상태에 따른 뱃지 스타일 결정 + const getStatusBadge = (status: string | null) => { + if (!status || status === 'N') { + return <Badge variant="default" className="bg-green-100 text-green-800"><CheckCircle className="w-3 h-3 mr-1" />활성</Badge> + } + return <Badge variant="destructive"><XCircle className="w-3 h-3 mr-1" />비활성</Badge> + } + + const handleEditStart = () => { + setIsEditing(true) + } + + const handleEditCancel = () => { + setIsEditing(false) + setEditData(vendorDetails) + } + + const handleEditSave = () => { + if (isPending) return + + // 변경사항이 없으면 바로 편집 모드 종료 + if (changes.length === 0) { + setIsEditing(false) + toast.info("변경된 내용이 없습니다.") + return + } + + // 변경사항이 있으면 확인 Dialog 표시 + setShowConfirmDialog(true) + } + + const handleConfirmSave = () => { + setShowConfirmDialog(false) + + startTransition(async () => { + try { + const result = await updateMdgVendorBasicInfo({ + vendorId, + updateData: { + VNDRNM_1: editData.VNDRNM_1, + VNDRNM_2: editData.VNDRNM_2, + VNDRNM_ABRV_1: editData.VNDRNM_ABRV_1, + BIZR_NO: editData.BIZR_NO, + CO_REG_NO: editData.CO_REG_NO, + CO_VLM: editData.CO_VLM, + REPR_NM: editData.REPR_NM, + REP_TEL_NO: editData.REP_TEL_NO, + REPR_RESNO: editData.REPR_RESNO, + REPRESENTATIVE_EMAIL: editData.REPRESENTATIVE_EMAIL, + BIZTP: editData.BIZTP, + BIZCON: editData.BIZCON, + NTN_CD: editData.NTN_CD, + ADR_1: editData.ADR_1, + ADR_2: editData.ADR_2, + POSTAL_CODE: editData.POSTAL_CODE, + ADDR_DETAIL_1: editData.ADDR_DETAIL_1, + } + }) + + if (result.success) { + toast.success(result.message || "벤더 정보가 성공적으로 업데이트되었습니다.") + setIsEditing(false) + // 필요한 경우 페이지 리로드 또는 데이터 갱신 + window.location.reload() + } else { + toast.error(result.error || "벤더 정보 업데이트에 실패했습니다.") + } + } catch (error) { + console.error('벤더 정보 업데이트 중 오류:', error) + toast.error("벤더 정보 업데이트 중 오류가 발생했습니다.") + } + }) + } + + const handleInputChange = (field: keyof VendorDetails, value: string) => { + setEditData(prev => ({ + ...prev, + [field]: value + })) + } + + const renderField = ( + label: string, + value: string | null, + field?: keyof VendorDetails, + isTextarea = false, + isMono = false + ) => { + if (isEditing && field) { + return ( + <div> + <label className="text-sm font-medium text-muted-foreground">{label}</label> + {isTextarea ? ( + <Textarea + value={editData[field] as string || ''} + onChange={(e) => handleInputChange(field, e.target.value)} + className="mt-1" + /> + ) : ( + <Input + value={editData[field] as string || ''} + onChange={(e) => handleInputChange(field, e.target.value)} + className={`mt-1 ${isMono ? 'font-mono' : ''}`} + /> + )} + </div> + ) + } + + return ( + <div> + <label className="text-sm font-medium text-muted-foreground">{label}</label> + <p className={`text-sm ${isMono ? 'font-mono' : ''} break-words ${isTextarea ? 'whitespace-pre-wrap' : ''}`}> + {value || '-'} + </p> + </div> + ) + } + + // 구매조직별 정보 필드 렌더링 + const renderPurchasingOrgField = ( + label: string, + value: string | null | undefined, + isBadge = false, + badgeType?: 'status' | 'confirm' | 'hold' + ) => { + if (isBadge) { + let badgeContent + switch (badgeType) { + case 'status': + badgeContent = value === 'X' ? ( + <Badge variant="outline" className="text-xs bg-green-50 text-green-700">활성</Badge> + ) : ( + <Badge variant="secondary" className="text-xs">비활성</Badge> + ) + break + case 'confirm': + badgeContent = value === 'X' ? ( + <Badge variant="outline" className="text-xs bg-blue-50 text-blue-700">요청</Badge> + ) : ( + <Badge variant="secondary" className="text-xs">미요청</Badge> + ) + break + case 'hold': + badgeContent = value ? ( + <Badge variant="destructive" className="text-xs"> + <AlertCircle className="w-3 h-3 mr-1" />정지 + </Badge> + ) : ( + <Badge variant="outline" className="text-xs bg-green-50 text-green-700"> + <CheckCircle className="w-3 h-3 mr-1" />정상 + </Badge> + ) + break + default: + badgeContent = <Badge variant="outline">{value || '-'}</Badge> + } + + return ( + <div> + <label className="text-sm font-medium text-muted-foreground">{label}</label> + <p className="text-sm">{badgeContent}</p> + </div> + ) + } + + return ( + <div> + <label className="text-sm font-medium text-muted-foreground">{label}</label> + <p className="text-sm break-words">{value || '-'}</p> + </div> + ) + } + + // 구매조직 정보 카드 컴포넌트 + const PurchasingOrgCard = ({ org }: { org: PurchasingOrgInfo }) => ( + <Card key={org.PUR_ORG_CD} className="border-l-4 border-l-blue-500"> + <CardHeader className="pb-3"> + <CardTitle className="text-lg flex items-center gap-2"> + 구매조직: {org.PUR_ORG_CD} + </CardTitle> + </CardHeader> + <CardContent> + <div className="grid grid-cols-3 gap-4"> + {renderPurchasingOrgField("오더통화", org.PUR_ORD_CUR)} + <div> + <label className="text-sm font-medium text-muted-foreground">내외자구분</label> + <p className="text-sm"> + {editData.PRTNR_GB ? ( + <Badge variant="outline" className="text-xs"> + {editData.PRTNR_GB === '1' ? '사내' : editData.PRTNR_GB === '2' ? '사외' : editData.PRTNR_GB} + </Badge> + ) : '-'} + </p> + </div> + {renderPurchasingOrgField("인도조건", org.DL_COND_1)} + {renderPurchasingOrgField("GR송장검증", org.GR_BSE_INVC_VR, true, 'status')} + {renderPurchasingOrgField("P/O 확인요청", org.ORD_CNFM_REQ_ORDR, true, 'confirm')} + {renderPurchasingOrgField("확정제어", org.CNFM_CTL_KEY)} + {renderPurchasingOrgField("지급조건", org.SPLY_COND)} + {renderPurchasingOrgField("거래정지", org.PUR_HOLD_ORDR, true, 'hold')} + {renderPurchasingOrgField("삭제상태", org.DEL_ORDR)} + {renderPurchasingOrgField("영업담당자", org.SALE_CHRGR_NM)} + {renderPurchasingOrgField("전화번호", org.VNDR_TELNO)} + {renderPurchasingOrgField("보류일자", org.PUR_HOLD_DT)} + </div> + {org.PUR_HOLD_CAUS && ( + <div className="mt-4"> + {renderPurchasingOrgField("보류사유", org.PUR_HOLD_CAUS)} + </div> + )} + </CardContent> + </Card> + ) + + return ( + <> + {/* 헤더 */} + <div className="flex items-center justify-between"> + <div className="min-w-0 flex-1"> + <h3 className="text-2xl font-bold tracking-tight break-words"> + {editData.VNDRNM_1 || '업체명 없음'} + </h3> + <p className="text-muted-foreground"> + 벤더 코드: {editData.VNDRCD} + </p> + </div> + <div className="flex items-center space-x-4"> + {/* 상태 배지 */} + <div className="flex items-center space-x-2"> + {getStatusBadge(editData.DEL_ORDR)} + </div> + + {/* 액션 버튼들 */} + <div className="flex items-center space-x-2"> + {isEditing ? ( + <> + <Button onClick={handleEditSave} size="sm" disabled={showConfirmDialog}> + <Save className="w-4 h-4 mr-2" /> + 저장 + </Button> + <Button onClick={handleEditCancel} variant="outline" size="sm" disabled={showConfirmDialog || isPending}> + <X className="w-4 h-4 mr-2" /> + 취소 + </Button> + </> + ) : ( + <> + <Button onClick={handleEditStart} variant="outline" size="sm"> + <Edit className="w-4 h-4 mr-2" /> + 수정 + </Button> + </> + )} + </div> + </div> + </div> + + <Separator /> + + <div className="grid gap-6 md:grid-cols-2"> + {/* 기본 정보 */} + <Card> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + 기본 정보 + </CardTitle> + <CardDescription> + 업체의 기본적인 정보입니다. + </CardDescription> + </CardHeader> + <CardContent className="space-y-4"> + <div className="grid grid-cols-1 gap-4"> + {renderField("업체명", editData.VNDRNM_1, "VNDRNM_1")} + {renderField("영문명", editData.VNDRNM_2, "VNDRNM_2")} + <div className="grid grid-cols-2 gap-4"> + {renderField("업체약어", editData.VNDRNM_ABRV_1, "VNDRNM_ABRV_1")} + {renderField("기업규모", editData.CO_VLM, "CO_VLM")} + </div> + <div className="grid grid-cols-2 gap-4"> + {renderField("사업자번호", editData.BIZR_NO, "BIZR_NO", false, true)} + {renderField("법인등록번호", editData.CO_REG_NO, "CO_REG_NO", false, true)} + </div> + </div> + </CardContent> + </Card> + + {/* 대표자 정보 */} + <Card> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + 대표자 정보 + </CardTitle> + </CardHeader> + <CardContent className="space-y-4"> + <div className="grid grid-cols-1 gap-4"> + {renderField("대표자명", editData.REPR_NM, "REPR_NM")} + + <div> + <label className="text-sm font-medium text-muted-foreground">대표자 전화번호</label> + {isEditing ? ( + <Input + value={editData.REP_TEL_NO || ''} + onChange={(e) => handleInputChange('REP_TEL_NO', e.target.value)} + className="mt-1 font-mono" + /> + ) : ( + <p className="text-sm flex items-center gap-1"> + {editData.REP_TEL_NO ? ( + <> + <Phone className="w-3 h-3" /> + <span className="font-mono">{editData.REP_TEL_NO}</span> + </> + ) : '-'} + </p> + )} + </div> + + <div> + <label className="text-sm font-medium text-muted-foreground">대표자 생년월일</label> + {isEditing ? ( + <Input + value={editData.REPR_RESNO || ''} + onChange={(e) => handleInputChange('REPR_RESNO', e.target.value)} + className="mt-1 font-mono" + /> + ) : ( + <p className="text-sm flex items-center gap-1"> + {editData.REPR_RESNO ? ( + <> + <Calendar className="w-3 h-3" /> + <span className="font-mono">{editData.REPR_RESNO}</span> + </> + ) : '-'} + </p> + )} + </div> + + <div> + <label className="text-sm font-medium text-muted-foreground">대표자 이메일</label> + {isEditing ? ( + <Input + type="email" + value={editData.REPRESENTATIVE_EMAIL || ''} + onChange={(e) => handleInputChange('REPRESENTATIVE_EMAIL', e.target.value)} + className="mt-1" + /> + ) : ( + <p className="text-sm flex items-center gap-1"> + {editData.REPRESENTATIVE_EMAIL ? ( + <> + <Mail className="w-3 h-3 flex-shrink-0" /> + <span className="break-all">{editData.REPRESENTATIVE_EMAIL}</span> + </> + ) : '-'} + </p> + )} + </div> + </div> + </CardContent> + </Card> + + {/* 사업 정보 */} + <Card> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + 사업 정보 + </CardTitle> + </CardHeader> + <CardContent className="space-y-4"> + <div className="space-y-4"> + {renderField("사업유형", editData.BIZTP, "BIZTP", true)} + {renderField("산업유형", editData.BIZCON, "BIZCON", true)} + <div className="grid grid-cols-2 gap-4"> + {renderField("국가코드", editData.NTN_CD, "NTN_CD")} + {renderField("등록일자", editData.REG_DT, "REG_DT", false, true)} + </div> + </div> + </CardContent> + </Card> + + {/* 주소 정보 */} + <Card> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + 주소 정보 + </CardTitle> + </CardHeader> + <CardContent className="space-y-4"> + <div className="space-y-4"> + {isEditing ? ( + <div className="space-y-4"> + {renderField("주소", editData.ADR_1, "ADR_1")} + {renderField("영문주소", editData.ADR_2, "ADR_2")} + {renderField("우편번호", editData.POSTAL_CODE, "POSTAL_CODE")} + {renderField("상세주소", editData.ADDR_DETAIL_1, "ADDR_DETAIL_1")} + </div> + ) : ( + <div> + <label className="text-sm font-medium text-muted-foreground mb-2 block">주소</label> + <AddressDisplay + address={editData.ADR_1} + addressEng={editData.ADR_2} + postalCode={editData.POSTAL_CODE} + addressDetail={editData.ADDR_DETAIL_1} + /> + </div> + )} + </div> + </CardContent> + </Card> + + {/* 구매조직 정보 */} + <Card className="md:col-span-2"> + <CardHeader> + <CardTitle className="flex items-center gap-2"> + 구매조직 정보 + {vendorDetails.PURCHASING_ORGS.length > 0 && ( + <Badge variant="secondary" className="ml-2"> + {vendorDetails.PURCHASING_ORGS.length}개 조직 + </Badge> + )} + </CardTitle> + <CardDescription> + 구매조직에 따른 상세 정보입니다. + </CardDescription> + </CardHeader> + <CardContent className="space-y-4"> + {vendorDetails.PURCHASING_ORGS.length === 0 ? ( + <div className="text-center py-8 text-muted-foreground"> + <Building2 className="w-12 h-12 mx-auto mb-4 opacity-50" /> + <p>구매조직 정보가 없습니다.</p> + </div> + ) : vendorDetails.PURCHASING_ORGS.length === 1 ? ( + // 구매조직이 1개인 경우 + <div className="grid grid-cols-3 gap-4"> + {renderPurchasingOrgField("구매조직", currentPurchasingOrg?.PUR_ORG_CD)} + {renderPurchasingOrgField("오더통화", currentPurchasingOrg?.PUR_ORD_CUR)} + <div> + <label className="text-sm font-medium text-muted-foreground">내외자구분</label> + <p className="text-sm"> + {editData.PRTNR_GB ? ( + <Badge variant="outline" className="text-xs"> + {editData.PRTNR_GB === '1' ? '사내' : editData.PRTNR_GB === '2' ? '사외' : editData.PRTNR_GB} + </Badge> + ) : '-'} + </p> + </div> + {renderPurchasingOrgField("인도조건", currentPurchasingOrg?.DL_COND_1)} + {renderPurchasingOrgField("GR송장검증", currentPurchasingOrg?.GR_BSE_INVC_VR, true, 'status')} + {renderPurchasingOrgField("P/O 확인요청", currentPurchasingOrg?.ORD_CNFM_REQ_ORDR, true, 'confirm')} + {renderPurchasingOrgField("확정제어", currentPurchasingOrg?.CNFM_CTL_KEY)} + {renderPurchasingOrgField("지급조건", currentPurchasingOrg?.SPLY_COND)} + {renderPurchasingOrgField("거래정지", currentPurchasingOrg?.PUR_HOLD_ORDR, true, 'hold')} + {renderPurchasingOrgField("이전업체코드", editData.PREVIOUS_VENDOR_CODE)} + </div> + ) : ( + // 구매조직이 여러개인 경우 + <div className="space-y-4"> + <div className="flex items-center gap-4"> + <div className="flex-1"> + <label className="text-sm font-medium text-muted-foreground">구매조직 선택</label> + <Select value={selectedPurchasingOrg} onValueChange={setSelectedPurchasingOrg}> + <SelectTrigger className="mt-1"> + <SelectValue placeholder="구매조직을 선택하세요" /> + </SelectTrigger> + <SelectContent> + {vendorDetails.PURCHASING_ORGS.map((org) => ( + <SelectItem key={org.PUR_ORG_CD} value={org.PUR_ORG_CD}> + {org.PUR_ORG_CD} - {org.SALE_CHRGR_NM || '담당자 미지정'} + </SelectItem> + ))} + </SelectContent> + </Select> + </div> + <div className="pt-6"> + <Button + variant={showAllOrgs ? "default" : "outline"} + onClick={() => setShowAllOrgs(!showAllOrgs)} + size="sm" + > + <Eye className="w-4 h-4 mr-2" /> + {showAllOrgs ? '선택 보기' : '전체 보기'} + </Button> + </div> + </div> + + {showAllOrgs ? ( + // 전체 구매조직 정보 표시 + <div className="space-y-4"> + {vendorDetails.PURCHASING_ORGS.map((org) => ( + <PurchasingOrgCard key={org.PUR_ORG_CD} org={org} /> + ))} + </div> + ) : ( + // 선택된 구매조직 정보만 표시 + currentPurchasingOrg && ( + <div className="grid grid-cols-3 gap-4"> + {renderPurchasingOrgField("구매조직", currentPurchasingOrg.PUR_ORG_CD)} + {renderPurchasingOrgField("오더통화", currentPurchasingOrg.PUR_ORD_CUR)} + <div> + <label className="text-sm font-medium text-muted-foreground">내외자구분</label> + <p className="text-sm"> + {editData.PRTNR_GB ? ( + <Badge variant="outline" className="text-xs"> + {editData.PRTNR_GB === '1' ? '사내' : editData.PRTNR_GB === '2' ? '사외' : editData.PRTNR_GB} + </Badge> + ) : '-'} + </p> + </div> + {renderPurchasingOrgField("인도조건", currentPurchasingOrg.DL_COND_1)} + {renderPurchasingOrgField("GR송장검증", currentPurchasingOrg.GR_BSE_INVC_VR, true, 'status')} + {renderPurchasingOrgField("P/O 확인요청", currentPurchasingOrg.ORD_CNFM_REQ_ORDR, true, 'confirm')} + {renderPurchasingOrgField("확정제어", currentPurchasingOrg.CNFM_CTL_KEY)} + {renderPurchasingOrgField("지급조건", currentPurchasingOrg.SPLY_COND)} + {renderPurchasingOrgField("거래정지", currentPurchasingOrg.PUR_HOLD_ORDR, true, 'hold')} + {renderPurchasingOrgField("이전업체코드", editData.PREVIOUS_VENDOR_CODE)} + </div> + ) + )} + </div> + )} + </CardContent> + </Card> + </div> + + {/* 변경사항 확인 Dialog */} + <Dialog open={showConfirmDialog} onOpenChange={setShowConfirmDialog}> + <DialogContent className="sm:max-w-[600px]"> + <DialogHeader> + <DialogTitle className="flex items-center gap-2"> + <AlertCircle className="w-5 h-5 text-amber-500" /> + 변경사항 확인 + </DialogTitle> + <DialogDescription> + 다음 정보가 변경됩니다. 저장하시겠습니까? + </DialogDescription> + </DialogHeader> + + <div className="max-h-[400px] overflow-y-auto"> + <div className="space-y-4"> + {changes.map((change, index) => ( + <div key={index} className="border rounded-lg p-4 space-y-2"> + <div className="font-medium text-sm text-muted-foreground"> + {change.label} + </div> + <div className="grid grid-cols-1 gap-2"> + <div className="flex items-start gap-2"> + <span className="text-xs bg-red-100 text-red-700 px-2 py-1 rounded font-mono">이전</span> + <span className="text-sm break-words flex-1 line-through text-muted-foreground"> + {change.before} + </span> + </div> + <div className="flex items-start gap-2"> + <span className="text-xs bg-green-100 text-green-700 px-2 py-1 rounded font-mono">변경</span> + <span className="text-sm break-words flex-1 font-medium"> + {change.after} + </span> + </div> + </div> + </div> + ))} + </div> + </div> + + <DialogFooter> + <Button + variant="outline" + onClick={() => setShowConfirmDialog(false)} + disabled={isPending} + > + 취소 + </Button> + <Button + onClick={handleConfirmSave} + disabled={isPending} + className="bg-blue-600 hover:bg-blue-700" + > + {isPending ? "저장 중..." : `${changes.length}개 항목 저장`} + </Button> + </DialogFooter> + </DialogContent> + </Dialog> + </> + ) +}
\ No newline at end of file diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx index 7e2cd4f6..7826a7c0 100644 --- a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx @@ -35,6 +35,10 @@ export default async function SettingsLayout({ href: `/${lng}/evcp/vendors/${id}/info`, }, { + title: "기본정보", + href: `/${lng}/evcp/vendors/${id}/info/basic`, + }, + { title: "공급품목(패키지)", href: `/${lng}/evcp/vendors/${id}/info/items`, }, diff --git a/app/api/nonsap-sync/config/route.ts b/app/api/nonsap-sync/config/route.ts new file mode 100644 index 00000000..7441088b --- /dev/null +++ b/app/api/nonsap-sync/config/route.ts @@ -0,0 +1,22 @@ +import { NextResponse } from 'next/server'; +import { getSyncConfigInfo } from '@/lib/nonsap-sync/sync-config'; + +export async function GET() { + try { + const config = getSyncConfigInfo(); + + return NextResponse.json({ + success: true, + data: config, + timestamp: new Date().toISOString() + }); + } catch (error) { + console.error('Failed to get sync config:', error); + + return NextResponse.json({ + success: false, + error: 'Failed to get sync config', + timestamp: new Date().toISOString() + }, { status: 500 }); + } +}
\ No newline at end of file diff --git a/app/api/nonsap-sync/cron/route.ts b/app/api/nonsap-sync/cron/route.ts new file mode 100644 index 00000000..80944280 --- /dev/null +++ b/app/api/nonsap-sync/cron/route.ts @@ -0,0 +1,41 @@ +import { NextRequest, NextResponse } from 'next/server'; + +export async function GET(request: NextRequest) { + try { + // 인증 확인 (선택적) + const authToken = process.env.CRON_AUTH_TOKEN; + if (authToken) { + const providedToken = new URL(request.url).searchParams.get('token'); + if (providedToken !== authToken) { + return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); + } + } + + // 동적 import로 cron 스케줄러 호출 + const { triggerEnhancedSync } = await import('../../../../lib/nonsap-sync/enhanced-sync-service'); + + // 백그라운드에서 동기화 실행 + triggerEnhancedSync().catch(error => { + console.error('Cron sync failed:', error); + }); + + return NextResponse.json({ + success: true, + message: 'NONSAP sync triggered via cron endpoint', + timestamp: new Date().toISOString() + }); + } catch (error) { + console.error('Cron endpoint error:', error); + + return NextResponse.json({ + success: false, + error: 'Failed to trigger sync', + timestamp: new Date().toISOString() + }, { status: 500 }); + } +} + +export async function POST() { + // POST 요청도 동일하게 처리 + return GET(); +}
\ No newline at end of file diff --git a/app/api/nonsap-sync/health/route.ts b/app/api/nonsap-sync/health/route.ts new file mode 100644 index 00000000..6bfa4ffb --- /dev/null +++ b/app/api/nonsap-sync/health/route.ts @@ -0,0 +1,63 @@ +import { NextResponse } from 'next/server'; + +export async function GET() { + try { + // Oracle DB 연결 테스트 + let oracleStatus = 'unknown'; + let oracleError = null; + + try { + const { oracleKnex } = await import('@/lib/oracle-db/db'); + const result = await oracleKnex.raw('SELECT 1 FROM DUAL'); + oracleStatus = result ? 'connected' : 'disconnected'; + } catch (error) { + oracleStatus = 'disconnected'; + oracleError = error instanceof Error ? error.message : String(error); + } + + // PostgreSQL 연결 테스트 + let postgresStatus = 'unknown'; + let postgresError = null; + + try { + const db = await import('@/db/db'); + await db.default.execute('SELECT 1'); + postgresStatus = 'connected'; + } catch (error) { + postgresStatus = 'disconnected'; + postgresError = error instanceof Error ? error.message : String(error); + } + + // 전체 상태 판단 + const overallStatus = oracleStatus === 'connected' && postgresStatus === 'connected' + ? 'healthy' + : 'unhealthy'; + + return NextResponse.json({ + status: overallStatus, + timestamp: new Date().toISOString(), + databases: { + oracle: { + status: oracleStatus, + error: oracleError + }, + postgres: { + status: postgresStatus, + error: postgresError + } + }, + environment: { + nodeEnv: process.env.NODE_ENV, + runtime: process.env.NEXT_RUNTIME || 'nodejs' + } + }); + } catch (error) { + console.error('Health check error:', error); + + return NextResponse.json({ + status: 'error', + timestamp: new Date().toISOString(), + error: error instanceof Error ? error.message : String(error) + }, { status: 500 }); + } +}
\ No newline at end of file diff --git a/app/api/nonsap-sync/status/route.ts b/app/api/nonsap-sync/status/route.ts new file mode 100644 index 00000000..0a847904 --- /dev/null +++ b/app/api/nonsap-sync/status/route.ts @@ -0,0 +1,22 @@ +import { NextResponse } from 'next/server'; +import { getSyncProgressEnhanced } from '../../../../lib/nonsap-sync/enhanced-sync-service'; + +export async function GET() { + try { + const progress = await getSyncProgressEnhanced(); + + return NextResponse.json({ + success: true, + data: progress, + timestamp: new Date().toISOString() + }); + } catch (error) { + console.error('Error getting sync progress:', error); + + return NextResponse.json({ + success: false, + error: 'Failed to get sync progress', + timestamp: new Date().toISOString() + }, { status: 500 }); + } +}
\ No newline at end of file diff --git a/app/api/nonsap-sync/trigger/route.ts b/app/api/nonsap-sync/trigger/route.ts new file mode 100644 index 00000000..fbad7c4a --- /dev/null +++ b/app/api/nonsap-sync/trigger/route.ts @@ -0,0 +1,25 @@ +import { NextResponse } from 'next/server'; +import { triggerEnhancedSync } from '../../../../lib/nonsap-sync/enhanced-sync-service'; + +export async function POST() { + try { + // 수동 동기화 트리거 (백그라운드에서 실행) + triggerEnhancedSync().catch(error => { + console.error('Manual sync failed:', error); + }); + + return NextResponse.json({ + success: true, + message: 'Manual sync triggered successfully', + timestamp: new Date().toISOString() + }); + } catch (error) { + console.error('Error triggering manual sync:', error); + + return NextResponse.json({ + success: false, + error: 'Failed to trigger manual sync', + timestamp: new Date().toISOString() + }, { status: 500 }); + } +}
\ No newline at end of file diff --git a/db/schema/NONSAP/nonsap.ts b/db/schema/NONSAP/nonsap.ts new file mode 100644 index 00000000..322e9647 --- /dev/null +++ b/db/schema/NONSAP/nonsap.ts @@ -0,0 +1,2104 @@ +import { pgSchema, varchar, text, primaryKey, numeric } from 'drizzle-orm/pg-core'; + +// NonSAP Oracle 데이터베이스 스키마 +export const nonsapSchema = pgSchema('nonsap'); + +// 코드 +export const cmctbCd = nonsapSchema.table('cmctb_cd', { + // 코드분류 + CD_CLF: varchar({ length: 10 }).notNull(), + // 코드 + CD: varchar({ length: 10 }).notNull(), + // 코드2 + CD2: varchar({ length: 10 }).notNull(), + // 코드3 + CD3: varchar({ length: 10 }).notNull(), + // 사용자정의문자열10 + USR_DF_CHAR_1: varchar({ length: 60 }), + // 사용자정의문자열10 + USR_DF_CHAR_2: varchar({ length: 60 }), + // 사용자정의문자열10 + USR_DF_CHAR_3: varchar({ length: 60 }), + // 사용자정의문자열10 + USR_DF_CHAR_4: varchar({ length: 60 }), + // 사용자정의문자열10 + USR_DF_CHAR_5: varchar({ length: 60 }), + // 사용자정의문자열10 + USR_DF_CHAR_6: varchar({ length: 60 }), + // 사용자정의문자열10 + USR_DF_CHAR_7: varchar({ length: 60 }), + // 사용자정의문자열10 + USR_DF_CHAR_8: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_9: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_10: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_11: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_12: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_13: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_14: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_15: varchar({ length: 60 }), + // 사용자정의문자열20 + USR_DF_CHAR_16: varchar({ length: 60 }), + // 사용자정의문자열40 + USR_DF_CHAR_17: varchar({ length: 120 }), + // 사용자정의문자열40 + USR_DF_CHAR_18: varchar({ length: 120 }), + // 사용자정의문자열255 + USR_DF_CHAR_19: text(), + // 사용자정의문자열255 + USR_DF_CHAR_20: text(), + // 사용자정의체크1 + USR_DF_CHK_1: varchar({ length: 1 }), + // 사용자정의체크2 + USR_DF_CHK_2: varchar({ length: 1 }), + // 사용자정의체크3 + USR_DF_CHK_3: varchar({ length: 1 }), + // 사용자정의체크4 + USR_DF_CHK_4: varchar({ length: 1 }), + // 사용자정의체크5 + USR_DF_CHK_5: varchar({ length: 1 }), + // 사용자정의체크6 + USR_DF_CHK_6: varchar({ length: 1 }), + // 사용자정의체크7 + USR_DF_CHK_7: varchar({ length: 1 }), + // 사용자정의체크8 + USR_DF_CHK_8: varchar({ length: 1 }), + // 사용자정의일자1 + USR_DF_DT_1: varchar({ length: 8 }), + // 사용자정의일자2 + USR_DF_DT_2: varchar({ length: 8 }), + // 사용자정의일자3 + USR_DF_DT_3: varchar({ length: 8 }), + // 사용자정의일자4 + USR_DF_DT_4: varchar({ length: 8 }), + // 사용자정의시간1 + USR_DF_TM_1: varchar({ length: 6 }), + // 사용자정의시간2 + USR_DF_TM_2: varchar({ length: 6 }), + // 사용자정의시간3 + USR_DF_TM_3: varchar({ length: 6 }), + // 사용자정의시간4 + USR_DF_TM_4: varchar({ length: 6 }), + // 생성자 + CRTER: varchar({ length: 13 }), + // 생성일자 + CRTE_DT: varchar({ length: 8 }), + // 생성시간 + CRTE_TM: varchar({ length: 6 }), + // 수정자 + CHGR: varchar({ length: 13 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 수정시간 + CHG_TM: varchar({ length: 6 }), + // 삭제여부 + DEL_YN: varchar({ length: 1 }), +}); + +// 코드내역 +export const cmctbCdnm = nonsapSchema.table('cmctb_cdnm', { + // 언어키 + LANG_KEY: varchar({ length: 1 }).notNull(), + // 코드분류 + CD_CLF: varchar({ length: 10 }).notNull(), + // 코드 + CD: varchar({ length: 10 }).notNull(), + // 코드2 + CD2: varchar({ length: 10 }).notNull(), + // 코드3 + CD3: varchar({ length: 10 }).notNull(), + // 코드명 + CDNM: varchar({ length: 120 }), + // 그룹설명 + GRP_DSC: text(), + // 생성자 + CRTER: varchar({ length: 13 }), + // 생성일자 + CRTE_DT: varchar({ length: 8 }), + // 생성시간 + CRTE_TM: varchar({ length: 6 }), + // 수정자 + CHGR: varchar({ length: 13 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 수정시간 + CHG_TM: varchar({ length: 6 }), + // 삭제여부 + DEL_YN: varchar({ length: 1 }), +}); + +// 공통코드클래스 +export const cmctbCdClf = nonsapSchema.table('cmctb_cd_clf', { + // 코드분류 + CD_CLF: varchar({ length: 10 }).notNull(), + // 생성자 + CRTER: varchar({ length: 13 }), + // 생성일자 + CRTE_DT: varchar({ length: 8 }), + // 생성시간 + CRTE_TM: varchar({ length: 6 }), + // 수정자 + CHGR: varchar({ length: 13 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 수정시간 + CHG_TM: varchar({ length: 6 }), + // 삭제여부 + DEL_YN: varchar({ length: 1 }), + // I/F 상태 + XSTAT: varchar({ length: 1 }), + // I/F Message + XMSGS: text(), + // I/F 일자 + XDATS: varchar({ length: 8 }), + // I/F 시간 + XTIMS: varchar({ length: 6 }), +}); + +// 공통코드클래스 +export const cmctbCdClfNm = nonsapSchema.table('cmctb_cd_clf_nm', { + // 언어키 + LANG_KEY: varchar({ length: 1 }).notNull(), + // 코드분류 + CD_CLF: varchar({ length: 10 }).notNull(), + // 코드분류명 + CD_CLF_NM: varchar({ length: 120 }), + // 그룹설명 + GRP_DSC: varchar({ length: 120 }), + // 생성자 + CRTER: varchar({ length: 13 }), + // 생성일자 + CRTE_DT: varchar({ length: 8 }), + // 생성시간 + CRTE_TM: varchar({ length: 6 }), + // 수정자 + CHGR: varchar({ length: 13 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 수정시간 + CHG_TM: varchar({ length: 6 }), + // 삭제여부 + DEL_YN: varchar({ length: 1 }), +}); + +// CUSTOMER 마스터(주소) +export const cmctbCustomerAddr = nonsapSchema.table('cmctb_customer_addr', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }).notNull(), + // 국제주소버전ID + INTL_ADR_VER_ID: varchar({ length: 1 }).notNull(), + // 국가코드 + NTN_CD: varchar({ length: 3 }), + // 도시우편번호 + CITY_ZIP_NO: varchar({ length: 10 }), + // 사서함우편번호 + POBX_ZIP_NO: varchar({ length: 10 }), + // 주소1 + ADR_1: varchar({ length: 120 }), + // 주소2 + ADR_2: varchar({ length: 120 }), + // 지역코드 + REGN_CD: varchar({ length: 3 }), + // 기타주소1 + ETC_ADR_1: varchar({ length: 180 }), + // 기타주소2 + ETC_ADR_2: varchar({ length: 30 }), + // House Number + HOUSE_NR1: varchar({ length: 10 }), + // 사서함 + POBX: varchar({ length: 30 }), + // 언어키 + LANG_KEY: varchar({ length: 1 }), + // 업체명1 + VNDRNM_1: varchar({ length: 120 }), + // 업체명2 + VNDRNM_2: varchar({ length: 120 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), + // 운송구역 + TRANS_ZONE: varchar({ length: 10 }), +}); + +// CUSTOMER 마스터 (파트너역할) +export const cmctbCustomerCfpn = nonsapSchema.table('cmctb_customer_cfpn', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 영업조직코드 + SALE_ORG_CD: varchar({ length: 4 }).notNull(), + // 유통경로 + DIST_PATH: varchar({ length: 2 }).notNull(), + // 제품군 + PDT_GRP: varchar({ length: 2 }).notNull(), + // 파트너기능 + PTNR_SKL: varchar({ length: 2 }).notNull(), + // 파트너카운터 + PTNR_CNT: varchar({ length: 3 }).notNull(), + // 기본파트너지시자 + BSE_PTNR_ORDR: varchar({ length: 1 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER 마스터 (Company) +export const cmctbCustomerCompny = nonsapSchema.table('cmctb_customer_compny', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 법인ID + CO_ID: varchar({ length: 4 }).notNull(), + // AR계정처리구분 + AR_ACNT_HDL_GB: varchar({ length: 10 }), + // 정렬Key + SRT_KEY: varchar({ length: 3 }), + // 자금수지구분 + AMT_RNE_GB: varchar({ length: 10 }), + // 거래선 지불형태 + VNDR_PAY_FRM: varchar({ length: 10 }), + // 대금지블조건코드 + BILL_PAY_COND_CD: varchar({ length: 4 }), + // 대금지불Block코드 + BILL_PAY_BLOC_CD: varchar({ length: 1 }), + // 전기보류지시자 + PST_HOLD_ORDR: varchar({ length: 1 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER 마스터 (일반 ) +export const cmctbCustomerGeneral = nonsapSchema.table('cmctb_customer_general', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }), + // 대표순번 + REPR_SER: varchar({ length: 3 }), + // 계정그룹 + ACNT_GRP: varchar({ length: 4 }), + // 중복사유 + OVLAP_CAUS: varchar({ length: 2 }), + // 고객타입 + CSTM_TP: varchar({ length: 2 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // 삭제블락 + DEL_BLOCK: varchar({ length: 1 }), + // 전기보류지시자 + PST_HOLD_ORDR: varchar({ length: 1 }), + // 법인ID + CO_ID: varchar({ length: 6 }), + // 타이틀 + TTL: varchar({ length: 45 }), + // 조건 그룹 1 + COND_GRP_1: varchar({ length: 2 }), + // 고객 그룹 명 + CSTM_GRP_NM: varchar({ length: 60 }), + // 대표자명 + REPR_NM: varchar({ length: 30 }), + // 사업유형 + BIZTP: varchar({ length: 90 }), + // 산업유형 + BIZCON: varchar({ length: 90 }), + // Tax Number 2 + TX_NO_2: varchar({ length: 11 }), + // Tax Number 3 + TX_NO_3: varchar({ length: 18 }), + // Tax Number 4 + TX_NO_4: varchar({ length: 18 }), + // 세금 등록 번호 + TX_REG_NO: varchar({ length: 20 }), + // BA코드 + BA_CD: varchar({ length: 4 }), + // 벤더코드 + VNDRCD: varchar({ length: 10 }), + // 검색조건1 + SRCH_COND_1: varchar({ length: 60 }), + // 검색조건2 + SRCH_COND_2: varchar({ length: 60 }), + // 도시 거리 명 + CITY_DISP_NM: varchar({ length: 105 }), + // CRM Code + CRM_CD: varchar({ length: 20 }), + // Inbound Flag + IN_FLAG: varchar({ length: 1 }), + // Industry + INDST_CD: varchar({ length: 4 }), + // 세금 번호 타입 + TX_NO_TP: varchar({ length: 2 }), + // 언어 키 + LANG_KEY: varchar({ length: 1 }), + // 등록일자 + REG_DT: varchar({ length: 8 }), + // 등록시간 + REG_DTM: varchar({ length: 6 }), + // 등록자ID + REGR_ID: varchar({ length: 13 }), + // 승인일자 + AGR_DT: varchar({ length: 8 }), + // 승인시간 + AGR_TM: varchar({ length: 6 }), + // 승인자ID + AGR_R_ID: varchar({ length: 13 }), + // 변경일자 + CHG_DT: varchar({ length: 8 }), + // 변경시간 + CHG_TM: varchar({ length: 6 }), + // 변경자ID + CHGR_ID: varchar({ length: 13 }), + // F-Tree GT코드 + FTGT_CD: varchar({ length: 10 }), + // F-Tree GT Name + FTGT_NM: varchar({ length: 120 }), + // F-Tree DT 코드 + FTDT_CD: varchar({ length: 10 }), + // F-Tree DT 이름 + FTDT_NM: varchar({ length: 120 }), + // F-Tree BU 코드 + FTBU_CD: varchar({ length: 10 }), + // F-Tree BU 이름 + FTBU_NM: varchar({ length: 120 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER마스터(대표자 EMAIL) +export const cmctbCustomerRepremail = nonsapSchema.table('cmctb_customer_repremail', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }).notNull(), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // 이메일주소 + EMAIL_ADR: varchar({ length: 241 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER마스터(대표자 팩스번호) +export const cmctbCustomerReprfax = nonsapSchema.table('cmctb_customer_reprfax', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }).notNull(), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // 국가코드 + NTN_CD: varchar({ length: 3 }), + // 팩스번호 + FAXNO: varchar({ length: 30 }), + // 팩스내선번호 + FAX_ETS_NO: varchar({ length: 10 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER 마스터(대표자 전화번호) +export const cmctbCustomerReprtel = nonsapSchema.table('cmctb_customer_reprtel', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }).notNull(), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // 국가코드 + NTN_CD: varchar({ length: 3 }), + // 전화번호 + TELNO: varchar({ length: 30 }), + // 내선번호 + ETX_NO: varchar({ length: 10 }), + // 핸드폰지시자 + HP_ORDR: varchar({ length: 1 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER 마스터(대표자 URL) +export const cmctbCustomerReprurl = nonsapSchema.table('cmctb_customer_reprurl', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }).notNull(), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // URL + URL: text(), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER 마스터(영업조직) +export const cmctbCustomerSorg = nonsapSchema.table('cmctb_customer_sorg', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 영업조직코드 + SALE_ORG_CD: varchar({ length: 4 }).notNull(), + // 유통경로 + DIST_PATH: varchar({ length: 2 }).notNull(), + // 제품군 + PDT_GRP: varchar({ length: 2 }).notNull(), + // 판매지역 + SALE_REGN: varchar({ length: 1 }), + // 판매사무실 + SALE_OFC: varchar({ length: 4 }), + // 판매그룹 + SALE_GRP: varchar({ length: 3 }), + // 고객그룹 + CSTM_GRP: varchar({ length: 2 }), + // 확도 + PSBL: varchar({ length: 3 }), + // 거래 통화 + TRD_CUR: varchar({ length: 5 }), + // 환율유형 + EXRAT_TP: varchar({ length: 4 }), + // 가격절차결정코드 + PRC_PRCS_DSC_CD: varchar({ length: 1 }), + // 고객통계그룹 + CSTM_STAT_GRP: varchar({ length: 1 }), + // 선적조건 + SHIPMT_COND: varchar({ length: 2 }), + // 최대거래수량 + MAX_TRD_QTY: numeric(), + // 인도조건1 + DL_COND_1: varchar({ length: 3 }), + // 인도조건2 + DL_COND_2: varchar({ length: 84 }), + // 지급조건 + SPLY_COND: varchar({ length: 4 }), + // 계정할당그룹 + ACNT_ASGN_GRP: varchar({ length: 2 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER 마스터(세금정보) +export const cmctbCustomerTaxcd = nonsapSchema.table('cmctb_customer_taxcd', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 출발국가 + DPRT_NTN: varchar({ length: 3 }).notNull(), + // 세금번호범주 + TX_CTG: varchar({ length: 4 }).notNull(), + // 고객세금분류 + CSTM_TX_CLF: varchar({ length: 1 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// CUSTOMER 마스터(세금정보) +export const cmctbCustomerTaxnum = nonsapSchema.table('cmctb_customer_taxnum', { + // 내부고객번호 + CSTM_CD: varchar({ length: 10 }).notNull(), + // 세금번호범주 + TX_NO_CTG: varchar({ length: 4 }).notNull(), + // 사업파트너세금번호 + BIZ_PTNR_TX_NO: varchar({ length: 20 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// 자재마스터(기본) +export const cmctbMatBse = nonsapSchema.table('cmctb_mat_bse', { + // 자재번호 + MAT_NO: varchar({ length: 18 }).notNull(), + // SM코드 + SM_CD: varchar({ length: 18 }), + // 자재ID + MAT_ID: varchar({ length: 50 }), + // 클래스코드 + CLAS_CD: varchar({ length: 18 }), + // 자재유형 + MAT_TP: varchar({ length: 4 }), + // 자재구분 + MAT_GB: varchar({ length: 1 }), + // 자재내역 + MAT_DTL: varchar({ length: 120 }), + // 자재내역사양 + MAT_DTL_SPEC: text(), + // 재질 + MATL: varchar({ length: 50 }), + // 구자재번호 + OLD_MAT_NO: varchar({ length: 18 }), + // 대체자재번호 + SBST_MAT_NO: varchar({ length: 18 }), + // 단위 + UOM: varchar({ length: 3 }), + // 제품군 + PDT_GRP: varchar({ length: 2 }), + // MRC + MRC: varchar({ length: 1 }), + // 저장자재지시자 + STOR_MAT_ORDR: varchar({ length: 1 }), + // 강종 + STYPE: varchar({ length: 2 }), + // 선급 + CLS: varchar({ length: 8 }), + // 중량 + WGT: numeric(), + // 고유중량 + NET_WGT: numeric(), + // 중량단위 + WGT_UOM: varchar({ length: 3 }), + // 길이 + LTH: numeric(), + // 길이2 + LTH_2: numeric(), + // 폭 + WTH: numeric(), + // 폭2 + WTH_2: numeric(), + // 두께 + THK: numeric(), + // 규격 + STD: varchar({ length: 70 }), + // 형강규격 + PROF_STD: varchar({ length: 30 }), + // CABLE바깥지름 + CBL_OUT_DIA: numeric(), + // LTRM_MAT_YN + LTRM_MAT_YN: varchar({ length: 1 }), + // 도장면적 + PNT_AREA: numeric(), + // 도장내부면적 + PNTIN_AREA: numeric(), + // 도장내부사양 + PNTIN_SPEC: varchar({ length: 5 }), + // 도장외부면적 + PNTOUT_AREA: numeric(), + // 도장외부사양1 + PNTOUT_SPEC_1: varchar({ length: 5 }), + // 도장외부사양2 + PNTOUT_SPEC_2: varchar({ length: 5 }), + // 도장외부사양3 + PNTOUT_SPEC_3: varchar({ length: 5 }), + // RT검사사양 + RT_INSPEC: varchar({ length: 2 }), + // UT검사사양 + UT_INSPEC: varchar({ length: 2 }), + // MT검사사양 + MT_INSPEC: varchar({ length: 2 }), + // PT검사사양 + PT_INSPEC: varchar({ length: 2 }), + // 제작도면번호 + MK_DWG_NO: varchar({ length: 50 }), + // 가공도면번호 + CUT_DWG_NO: varchar({ length: 120 }), + // 배관SPOOL번호 + PIPE_SPL_NO: varchar({ length: 40 }), + // 배관LINE번호 + PIPE_LINE_NO: varchar({ length: 40 }), + // 배관클래스 + PIPE_CLAS: varchar({ length: 10 }), + // 유체종류 + FLUID_KND: varchar({ length: 5 }), + // 대표품명재질 + REP_ITM_MATL: varchar({ length: 60 }), + // 대표지름 + REP_DIA: varchar({ length: 10 }), + // 대표지름단위 + REP_DIA_UOM: varchar({ length: 3 }), + // 대표스케쥴 + REP_SCH: varchar({ length: 20 }), + // 대표지름길이 + REP_DIA_LTH: numeric(), + // 직곡관구분 + DBLN_GB: varchar({ length: 1 }), + // 배관등급 + PIPE_GRD: varchar({ length: 1 }), + // 열처리유무 + HTRET_YN: varchar({ length: 1 }), + // 선후도금사양 + BA_GALV_SPEC: varchar({ length: 3 }), + // SHIPSIDE여부 + SSIDE_YN: varchar({ length: 1 }), + // 관통관여부 + PNTR_PIPE_YN: varchar({ length: 1 }), + // UBOLT유무 + UBOLT_YN: varchar({ length: 1 }), + // 조정관선행도장 + CTLP_PRCD_PNT: varchar({ length: 1 }), + // 선행후행조정관 + PRCD_SCV_CTLP: varchar({ length: 2 }), + // PMI검사사양 + PMI_INSPEC: varchar({ length: 2 }), + // 수압 + WTRPRS: numeric(), + // VALVEFITTING번호 + VLV_FIT_NO: varchar({ length: 18 }), + // TAG번호 + TAG_NO: varchar({ length: 50 }), + // TAGSUB번호 + TAG_SB_NO: varchar({ length: 10 }), + // 네임플레이트유형 + NM_PLATE_TP: varchar({ length: 5 }), + // 네임플레이트서비스명 + NM_PLATE_SVC_NM: varchar({ length: 60 }), + // VRCS자재번호 + VRCS_MAT_NO: varchar({ length: 18 }), + // TRANSMITTERFITTING번호 + TRSM_FIT_NO: varchar({ length: 7 }), + // VALVE옵션코드리스트 + VLV_OPT_CD_LIST: varchar({ length: 20 }), + // 구매요청번호 + PUR_REQ_NO: varchar({ length: 10 }), + // ITEM번호 + ITM_NO: varchar({ length: 20 }), + // 모델번호 + MDL_NO: varchar({ length: 30 }), + // BL번호 + BL_NO: varchar({ length: 30 }), + // 업체장비번호 + VNDR_EQP_NO: varchar({ length: 10 }), + // BOX번호 + BOX_NO: varchar({ length: 20 }), + // 자재운송관리번호 + MMT_NO: varchar({ length: 10 }), + // 설치위치 + INSTL_LOC: varchar({ length: 30 }), + // 메인장비여부 + MN_EQP_YN: varchar({ length: 1 }), + // 체결재여부 + FIXED_MAT_YN: varchar({ length: 1 }), + // SPARE여부 + SPRE_YN: varchar({ length: 1 }), + // TOOL여부 + TOOL_YN: varchar({ length: 1 }), + // CABLE여부 + CBL_YN: varchar({ length: 1 }), + // 선주설치자재여부 + OWN_INSTL_MAT_YN: varchar({ length: 1 }), + // 비설치자재여부 + NONINSTL_MAT_YN: varchar({ length: 1 }), + // 블록번호 + BLK_NO: varchar({ length: 5 }), + // 계열 + GYEL: varchar({ length: 2 }), + // 연결부재번호 + LNK_PTLST_NO: varchar({ length: 40 }), + // 면적 + AREA: numeric(), + // 저장위치 + STOR_LOC: varchar({ length: 10 }), + // 사급중량 + SGUB_WGT: numeric(), + // 도급중량 + DGUB_WGT: numeric(), + // 프로젝트번호 + PROJ_NO: varchar({ length: 24 }), + // 설계기능 + DSN_SKL: varchar({ length: 2 }), + // 비고 + RMK: text(), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // 삭제일자 + DEL_DT: varchar({ length: 8 }), + // 자재상태 + MAT_STAT: varchar({ length: 2 }), + // 인터페이스시스템번호 + IF_SYS_NO: varchar({ length: 1 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 255 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // GLAND사양1 + GLAND_SPEC_1: varchar({ length: 30 }), + // GLAND사양2 + GLAND_SPEC_2: varchar({ length: 30 }), + // GLAND사양3 + GLAND_SPEC_3: varchar({ length: 30 }), + // MCT모듈규격1 + MCT_MDLE_STD_1: varchar({ length: 30 }), + // MCT모듈규격2 + MCT_MDLE_STD_2: varchar({ length: 30 }), + // BEELERISE + BEELE_RISE: varchar({ length: 12 }), + // 최대DRUM길이 + MAX_DRUM_LTH: numeric(), + // 승인일시 + AGR_DTM: varchar({ length: 14 }), + // 승인자ID + AGR_R_ID: varchar({ length: 13 }), + // DISCIPLINE + DISPLN: varchar({ length: 1 }), + // 대공종 + LRG_KWK: varchar({ length: 1 }), + // 세부공종 + DTL_KWK: varchar({ length: 1 }), + // 특별검사구분 + SP_INSP_GB: varchar({ length: 1 }), + // 도장외부사양4 + PNTOUT_SPEC_4: varchar({ length: 5 }), + // OFE자재번호 + OFE_MAT_NO: varchar({ length: 18 }), + // OFE케이블여부 + OFE_CAB_YN: varchar({ length: 1 }), + // 포설가능개수 + INSTL_PSB_CNT: numeric(), + // 태선세선구분 + CUTL_ML_GB: varchar({ length: 1 }), + // FCM검사 + FCM_INSP: varchar({ length: 2 }), + // 서류번호 + DOC_NO: varchar({ length: 25 }), + // 보류원인 + HOLD_CAUS: varchar({ length: 200 }), + // 보류일자 + HOLD_DT: varchar({ length: 8 }), + // NULL + HOLD_LIFT_DT: varchar({ length: 8 }), + // 자재종류구분 + MAT_KND_GB: varchar({ length: 1 }), + // BATCH관리지시자 + BATCH_MNG_ORDR: varchar({ length: 1 }), + // 최초입력자ID + FS_INPR_ID: varchar({ length: 13 }), + // 최초입력일시 + FS_INP_DTM: varchar({ length: 14 }), + // 최종수정자ID + FIN_CHGR_ID: varchar({ length: 13 }), + // 최종수정일시 + FIN_CHG_DTM: varchar({ length: 14 }), + // NULL + DWG_FILE_NM: text(), + // NULL + TAG_NO_CHG_DT: varchar({ length: 8 }), + // SUB장비여부 + SUB_EQP_YN: varchar({ length: 1 }), + // 부속자재여부 + ATT_MAT_YN: varchar({ length: 1 }), + // 설계계정번호 + DSN_REV_NO: varchar({ length: 4 }), + // 사용자정의필드1 + USR_DF_CHAR1: varchar({ length: 50 }), + // 인도선적품여부(DL_SHIPMT_ITM_YN) + USR_DF_CHAR2: varchar({ length: 50 }), + // 사용자정의필드3 + USR_DF_CHAR3: varchar({ length: 50 }), + // 사용자정의필드4 + USR_DF_CHAR4: varchar({ length: 50 }), + // 변경이력 + USR_DF_CHAR5: varchar({ length: 50 }), +}); + +// 자재마스터 클래스 정보 +export const cmctbMatClas = nonsapSchema.table('cmctb_mat_clas', { + // 클래스코드 + CLAS_CD: varchar({ length: 18 }).notNull(), + // 클래스명 + CLAS_NM: varchar({ length: 60 }), + // 클래스내역 + CLAS_DTL: varchar({ length: 180 }), + // 부모클래스코드 + PRNT_CLAS_CD: varchar({ length: 18 }), + // 클래스레벨 + CLAS_LVL: numeric(), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // 단위 + UOM: varchar({ length: 3 }), + // 강종 + STYPE: varchar({ length: 2 }), + // 등급재질 + GRD_MATL: varchar({ length: 50 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 기준단위 + BSE_UOM: varchar({ length: 3 }), +}); + +// 자재마스터 클래스별 특성 +export const cmctbMatClasSpchar = nonsapSchema.table('cmctb_mat_clas_spchar', { + // 클래스코드 + CLAS_CD: varchar({ length: 18 }).notNull(), + // 특성코드 + SPCHAR_CD: varchar({ length: 30 }).notNull(), + // 특선순서 + SPCHAR_SEQ: varchar({ length: 3 }), + // 필수여부 + MNDT_YN: varchar({ length: 1 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), +}, (table) => ({ + pk: primaryKey({ columns: [table.CLAS_CD, table.SPCHAR_CD] }) +})); + +// CMCTB_MAT_DSC +export const cmctbMatDsc = nonsapSchema.table('cmctb_mat_dsc', { + // 자재번호 + MAT_NO: varchar({ length: 18 }).notNull(), + // 언어키 + LANG_KEY: varchar({ length: 1 }).notNull(), + // 자재내역 + MAT_DTL: varchar({ length: 120 }), +}); + +// 자재마스터 플랜트 정보 +export const cmctbMatPlnt = nonsapSchema.table('cmctb_mat_plnt', { + // 자재번호 + MAT_NO: varchar({ length: 18 }).notNull(), + // 플랜트 + PLNT: varchar({ length: 4 }).notNull(), + // 출고단위 + DELV_UOM: varchar({ length: 3 }), + // 개별일괄소요구분 + EA_BTCH_ND_GB: varchar({ length: 1 }), + // 조달분류 + PRCR_CLF: varchar({ length: 4 }), + // 구매담당자코드 + PUR_CHRGR_CD: varchar({ length: 3 }), + // 조달담당자코드 + PRCR_CHRGR_CD: varchar({ length: 3 }), + // 현물담당자코드 + GOODS_CHRGR_CD: varchar({ length: 3 }), + // 구매리드타임 + PUR_LT: numeric(), + // MRP유형 + MRP_TP: varchar({ length: 2 }), + // 자재상태 + MAT_STAT: varchar({ length: 2 }), + // 벌크자재지시자 + BULK_MAT_ORDR: varchar({ length: 1 }), + // 조달유형 + PRCR_TP: varchar({ length: 1 }), + // 안전재고수량 + SFTY_STCK_QTY: numeric(), + // 일련번호프로파일 + SER_PROF: varchar({ length: 4 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // BATCH관리지시자 + BATCH_MNG_ORDR: varchar({ length: 1 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 특별조달유형 + SP_PRCR_TP: varchar({ length: 2 }), +}); + +// 자재마스터특성 +export const cmctbMatSpchar = nonsapSchema.table('cmctb_mat_spchar', { + // 자재번호 + MAT_NO: varchar({ length: 18 }).notNull(), + // 특성코드 + SPCHAR_CD: varchar({ length: 30 }).notNull(), + // 특성내역 + SPCHAR_DTL: varchar({ length: 90 }), + // 특성값코드 + SPCHAR_VAL_CD: varchar({ length: 90 }), + // 특성값내역 + SPCHAR_VAL_DTL: varchar({ length: 90 }), + // 특성값넘버 + SPCHAR_VAL_NUM: numeric(), + // 특성값단위 + SPCHAR_VAL_UOM: varchar({ length: 3 }), +}); + +// 자재마스터 특성정보 +export const cmctbMatSpcharMast = nonsapSchema.table('cmctb_mat_spchar_mast', { + // 특성코드 + SPCHAR_CD: varchar({ length: 30 }).notNull(), + // 특성내역 + SPCHAR_DTL: varchar({ length: 90 }), + // 특성타입 + SPCHAR_TP: varchar({ length: 10 }), + // 특성값단위 + SPCHAR_VAL_UOM: varchar({ length: 3 }), + // 특성값여부 + SPCHAR_VAL_YN: varchar({ length: 1 }), + // 특성그룹 + SPCHAR_GRP: varchar({ length: 10 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), +}, (table) => ({ + pk: primaryKey({ columns: [table.SPCHAR_CD] }) +})); + +// 자재마스터 특성별 특성값 +export const cmctbMatSpcharVal = nonsapSchema.table('cmctb_mat_spchar_val', { + // 특성코드 + SPCHAR_CD: varchar({ length: 30 }).notNull(), + // 특성값코드 + SPCHAR_VAL_CD: varchar({ length: 90 }).notNull(), + // 특성값내역 + SPCHAR_VAL_DTL: varchar({ length: 90 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), +}, (table) => ({ + pk: primaryKey({ columns: [table.SPCHAR_CD, table.SPCHAR_VAL_CD] }) +})); + +// 자재마스터 단위정보 +export const cmctbMatUom = nonsapSchema.table('cmctb_mat_uom', { + // 자재번호 + MAT_NO: varchar({ length: 18 }).notNull(), + // 대체단위 + SBST_UOM: varchar({ length: 3 }).notNull(), + // 전환 FOCTOR1 + CNVRT_FCTR_1: numeric(), + // 전환 FOCTOR2 + CNVRT_FCTR_2: numeric(), + // 길이 + LTH: numeric(), + // 폭 + WTH: numeric(), + // 높이 + HGT: numeric(), + // 치수단위 + SZ_UOM: varchar({ length: 3 }), +}); + +// 프로젝트 비즈니스 클래스 +export const cmctbProjBizcls = nonsapSchema.table('cmctb_proj_bizcls', { + // 프로젝트번호 + PROJ_NO: varchar({ length: 24 }).notNull(), + // TYPE + TYPE: varchar({ length: 1 }).notNull(), + // 비지니스클래스 + BIZCLS: varchar({ length: 1 }), + // NULL + QM_CLS: varchar({ length: 10 }), + // 신규MC여부 + NEW_MC_YN: varchar({ length: 1 }), +}); + +// 프로젝트 마스터 +export const cmctbProjMast = nonsapSchema.table('cmctb_proj_mast', { + // 프로젝트번호 + PROJ_NO: varchar({ length: 24 }).notNull(), + // 기준호선 + MSHIP_NO: varchar({ length: 24 }), + // 시리즈첫프로젝트번호 + SERS_NO: varchar({ length: 24 }), + // 시리즈번호 + REF_NO: varchar({ length: 5 }), + // 선종 + SKND: varchar({ length: 3 }), + // 선형 + SHTYPE: varchar({ length: 8 }), + // 선형단위 + SHTYPE_UOM: varchar({ length: 5 }), + // 도크 + DOCK_CD: varchar({ length: 3 }), + // 선주1 + OWN_1: varchar({ length: 32 }), + // 선급1 + CLS_1: varchar({ length: 20 }), + // 계약일자 + CNRT_DT: varchar({ length: 8 }), + // 계약인도일자 + CNRT_DL_DT: varchar({ length: 8 }), + // 프로젝트 설명 + PROJ_DSC: varchar({ length: 120 }), + // 프로젝트구분 + PROJ_GB: varchar({ length: 2 }), + // 선주명 + OWN_NM: varchar({ length: 120 }), + // 신선종2 + NEW_SKND2: varchar({ length: 30 }), + // 선주약어 + OWN_AB: varchar({ length: 60 }), + // 중국여부 + CHINA_YN: varchar({ length: 3 }), + // 프로젝트세부타입 + PROJ_DTL_TP: varchar({ length: 2 }), + // 프로젝트프로파일 + PROJ_PROF: varchar({ length: 7 }), + // 안건번호 + INQY_NO: varchar({ length: 30 }), + // 안건순번 + INQY_SEQ: varchar({ length: 2 }), + // 국적 + NTTP: varchar({ length: 3 }), + // 연관프로젝트 + RLTD_PROJ: varchar({ length: 40 }), + // 디지털제품군 + DIGT_PDT_GRP: varchar({ length: 1 }), + // 풍력프로젝트타입 + WP_PROJ_TP: varchar({ length: 1 }), + // 전체계약개수 + TOT_CNRT_CNT: varchar({ length: 3 }), + // 프로젝트기타타입 + PROJ_ETC_TP: varchar({ length: 1 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 소스시스템ID + SRC_SYS_ID: varchar({ length: 1 }), + // 진행상태 + PRGS_STAT: varchar({ length: 1 }), + // 삭제여부 + DEL_YN: varchar({ length: 1 }), + // 인도고객코드 + DL_CSTM_CD: varchar({ length: 10 }), + // 제품레벨4 + PDT_LVL_4: varchar({ length: 14 }), + // AS보증기간 + AS_GRNT_PRD: numeric(), + // 실인도일자 + RL_DL_DT: varchar({ length: 8 }), + // SAILAWAYDATE + SA_DT: varchar({ length: 8 }), + // 관청 + GOV: varchar({ length: 60 }), + // 인도전공사명 + DL_BF_PROJ_NM: varchar({ length: 120 }), + // IMO번호 + IMO_NO: varchar({ length: 8 }), + // 유통경로 + DIST_PATH: varchar({ length: 2 }), + // 영업조직코드 + SALE_ORG_CD: varchar({ length: 4 }), + // 판매그룹 + SALE_GRP: varchar({ length: 3 }), + // 사업장코드 + BIZLOC_CD: varchar({ length: 4 }), + // 관리회계영역 + MNG_ACOT_DMN: varchar({ length: 4 }), + // 회사코드 + CO_CD: varchar({ length: 4 }), + // 사업영역 + BIZ_DMN: varchar({ length: 4 }), + // 플랜트코드 + PLNT_CD: varchar({ length: 4 }), + // 손익센터 + PRCTR: varchar({ length: 10 }), + // 계약존속여부 + CNRT_CNTN_YN: varchar({ length: 1 }), + // 계약유보여부 + CNRT_RESV_YN: varchar({ length: 1 }), + // 프로젝트진행여부 + PROJ_PRGS_YN: varchar({ length: 1 }), + // 시스템회계마감일자 + SYS_ACOT_CLSD_DT: varchar({ length: 8 }), + // 프로젝트범위 + PROJ_SCP: varchar({ length: 5 }), + // 전길이 + LOA: numeric(), + // MAINENGINETYPECODE + MN_ENGN_TP_CD: varchar({ length: 30 }), + // 속도 + SPD: numeric(), + // GT + GT: numeric(), + // 선표인도일자 + BP_DL_DT: varchar({ length: 8 }), + // 선형군 + SHTYPE_GRP: varchar({ length: 4 }), + // 프로젝트생성요청사번 + PROJ_CRTE_REQ_EMPNO: varchar({ length: 13 }), + // 프로젝트생성요청일자 + PROJ_CRTE_REQ_DT: varchar({ length: 8 }), + // 사내외구분 + IO_GB: varchar({ length: 1 }), + // 고객발주번호 + CSTM_PO_NO: varchar({ length: 35 }), + // 세대개수 + GENT_CNT: varchar({ length: 5 }), + // 주문주보증기간 + ORDR_GRNT_PRD: varchar({ length: 5 }), + // 주문주보증종료일 + ORDR_GRNT_FN_DT: varchar({ length: 8 }), + // 설계담당자 + DSN_CHRGR: varchar({ length: 13 }), + // 인도후공사명 + DL_AF_PROJ_NM: varchar({ length: 120 }), + // 인도후실고객사 + DL_AF_RL_CLNT: varchar({ length: 10 }), + // 인도후운항선사 + DL_AF_SHPSRV_SCP: varchar({ length: 10 }), + // 인도후국적 + DL_AF_NTTP: varchar({ length: 3 }), + // 인도후선급 + DL_AF_CLS: varchar({ length: 20 }), + // 인도후CALLSIGN + DL_AF_CALL_SIGN: varchar({ length: 20 }), + // 인도후전화번호 + DL_AF_TEL_NO: varchar({ length: 20 }), + // 인도후팩스번호 + DL_AF_FAX_NO: varchar({ length: 20 }), + // 인도후이메일주소 + DL_AF_EMAIL_ADR: varchar({ length: 60 }), + // 프로젝트WBS타입 + PROJ_WBS_TP: varchar({ length: 7 }), + // INTERFACE상태 + XSTAT: varchar({ length: 1 }), + // INTERFACE메세지 + XMSGS: text(), + // INTERFACE일자 + XDATS: varchar({ length: 8 }), + // INTERFACE시간 + XTIMS: varchar({ length: 6 }), + // 중국프로젝트타입 + CHN_PROJ_TP: varchar({ length: 1 }), + // 최종수요자 보증종료일 + FIN_GRNT_FN_DT: varchar({ length: 8 }), + // 시작일자 + STDT: varchar({ length: 8 }), + // 시리즈여부 + SERS_YN: varchar({ length: 1 }), + // HULL TOP 구분 + TYPE: varchar({ length: 10 }), + // PROPOSAL 프로젝트번호 + PRO_PROJ_NO: varchar({ length: 24 }), + // 전기전자프로젝트번호 + PBSD_PROJ_NO: varchar({ length: 24 }), + // 선박명 + PBSD_SHIP_NM: varchar({ length: 150 }), + // 사업부 + BIZCLS: varchar({ length: 10 }), + // 선급2 + CLS_2: varchar({ length: 20 }), + // 선형코드 + SHTYPE_CD: varchar({ length: 6 }), + // 프로젝트 인도계획일 + PROJ_DL_PLN_DT: varchar({ length: 8 }), + // 프로젝트 인도실적일 + PROJ_DL_RT_DT: varchar({ length: 8 }), + // 전체면적 + TOT_AREA: numeric(), + // 면세면적 + EXMPT_AREA: numeric(), + // 면세율 + EXMPT_RAT: numeric(), + // 품질사업부 + QM_CLS: varchar({ length: 10 }), + // 연계 프로젝트 번호 + CNCT_PROJ_NO: varchar({ length: 24 }), + // 기자재 세분화 및 생산일정 연계여부 + EQP_DTL_YN: varchar({ length: 1 }), + // ExP 연계여부 + EXP_YN: varchar({ length: 1 }), + // 생산실적 연계여부 + ACT_MH_YN: varchar({ length: 1 }), + // 사양 + SPEC: varchar({ length: 10 }), + // 디자인수명 + DSGN_LIFE: varchar({ length: 10 }), + // 신규MC여부 + NEW_MC_YN: varchar({ length: 10 }), + // 작업환경가중치여부 + WK_ENV_WT_VAL_YN: varchar({ length: 1 }), + // 보증시작일 + GRNT_STDT: varchar({ length: 8 }), + // 목표공수 적용 여부 + TMH_ADPT_YN: varchar({ length: 1 }), + // ZVEZDA 프로젝트 여부 + ZV_YN: varchar({ length: 1 }), + // 평택지원 프로젝트 여부 + SEC_YN: varchar({ length: 1 }), +}); + +// 프로젝트WBS +export const cmctbProjWbs = nonsapSchema.table('cmctb_proj_wbs', { + // 프로젝트번호 + PROJ_NO: varchar({ length: 24 }).notNull(), + // WBS요소 + WBS_ELMT: varchar({ length: 24 }).notNull(), + // WBS요소명 + WBS_ELMT_NM: varchar({ length: 255 }), + // WBS레벨 + WBS_LVL: varchar({ length: 3 }), + // FLAG + FLAG: varchar({ length: 1 }), + // WBS내부요소 + WBS_INSD_ELMT: varchar({ length: 8 }), + // 상위WBS요소 + HGRK_WBS_ELMT: varchar({ length: 24 }), + // INTERFACE상태 + XSTAT: varchar({ length: 1 }), + // INTERFACE메세지 + XMSGS: varchar({ length: 100 }), + // INTERFACE일자 + XDATS: varchar({ length: 8 }), + // INTERFACE시간 + XTIMS: varchar({ length: 6 }), + // 시스템상태 + SYS_STAT: varchar({ length: 8 }), + // WBS요소_1 + WBS_ELMT_1: varchar({ length: 24 }), + // WBS요소_2 + WBS_ELMT_2: varchar({ length: 24 }), + // WBS요소_3 + WBS_ELMT_3: varchar({ length: 24 }), + // WBS요소_4 + WBS_ELMT_4: varchar({ length: 24 }), + // WBS요소_5 + WBS_ELMT_5: varchar({ length: 24 }), + // WBS요소_6 + WBS_ELMT_6: varchar({ length: 24 }), + // WBS요소_7 + WBS_ELMT_7: varchar({ length: 24 }), + // WBS요소_8 + WBS_ELMT_8: varchar({ length: 24 }), + // WBS요소_9 + WBS_ELMT_9: varchar({ length: 24 }), + // WBS요소_10 + WBS_ELMT_10: varchar({ length: 24 }), +}); + +// Vendor 마스터 (주소) +export const cmctbVendorAddr = nonsapSchema.table('cmctb_vendor_addr', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }), + // 국제주소버전ID + INTL_ADR_VER_ID: varchar({ length: 1 }).notNull(), + // 도시우편번호 + CITY_ZIP_NO: varchar({ length: 10 }), + // 사서함우편번호 + POBX_ZIP_NO: varchar({ length: 10 }), + // 주소1 + ADR_1: varchar({ length: 120 }), + // 주소2 + ADR_2: varchar({ length: 120 }), + // 지역코드 + REGN_CD: varchar({ length: 5 }), + // 타이틀 + TTL: varchar({ length: 90 }), + // VENDOR명약어1 + VNDRNM_ABRV_1: varchar({ length: 60 }), + // VENDOR명약어2 + VNDRNM_ABRV_2: varchar({ length: 60 }), + // VENDOR명 + VNDRNM_1: varchar({ length: 120 }), + // VENDOR명2 + VNDRNM_2: varchar({ length: 120 }), + // 언어키 + LANG_KEY: varchar({ length: 1 }), + // 기타주소1 + ETC_ADR_1: varchar({ length: 180 }), + // 기타주소2 + ETC_ADR_2: varchar({ length: 180 }), + // 국가코드 + NTN_CD: varchar({ length: 3 }), + // 사서함 + POBX: varchar({ length: 30 }), + // 운송구역 + TRANS_ZONE: varchar({ length: 10 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), + // VENDOR명3 + VNDRNM_3: varchar({ length: 120 }), + // VENDOR명4 + VNDRNM_4: varchar({ length: 120 }), + // 조세관할구역코드 + TAX_JRDT_ZONE_CD: varchar({ length: 15 }), + // 주소시간대 + ADR_TMZ: varchar({ length: 10 }), +}); + +// Vendor 마스터 (Company) +export const cmctbVendorCompny = nonsapSchema.table('cmctb_vendor_compny', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 회사코드 + CO_CD: varchar({ length: 4 }).notNull(), + // 조정계정 + CTL_ACNT: varchar({ length: 10 }), + // 정렬키 + SRT_KEY: varchar({ length: 3 }), + // 계획그룹 + PLN_GRP: varchar({ length: 10 }), + // 이전VENDOR코드 + BF_VNDRCD: varchar({ length: 10 }), + // 지급조건 + SPLY_COND: varchar({ length: 4 }), + // 중복송장지시자 + OVLAP_INVC_ORDR: varchar({ length: 1 }), + // 지급방법 + SPLY_MTHD: varchar({ length: 10 }), + // 지급보류지시자 + SPLY_HOLD_ORDR: varchar({ length: 1 }), + // 거래은행단축키 + TRD_BANK_SHRT_KEY: varchar({ length: 5 }), + // 전기보류지시자 + PST_HOLD_ORDR: varchar({ length: 1 }), + // 보류사유 + HOLD_CAUS: varchar({ length: 200 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // 원천세국가코드 + SRCE_TX_NTN_CD: varchar({ length: 3 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), + // 소수지시자 + MIN_ORDR: varchar({ length: 3 }), + // 분리지급지시자 + SPRT_SPLY_ORDR: varchar({ length: 1 }), + // CUSTOMERVENDOR반제지시자 + CSTM_VNDR_CLR_ORDR: varchar({ length: 1 }), + // 원천세코드 + SRCE_TX_CD: varchar({ length: 2 }), + // IATABIC구분 + IATA_BIC_GB: varchar({ length: 4 }), + // 대표유형 + REP_TP: varchar({ length: 6 }), + // 물류VENDOR유형 + LOGST_VNDR_TP: varchar({ length: 6 }), + // VENDOR계정번호 + VNDR_ACNT_NO: varchar({ length: 12 }), + // VENDOR담당자명 + VNDR_CHRGR_NM: varchar({ length: 45 }), + // 회계담당자전화번호 + ACOT_CHRGR_TELNO: varchar({ length: 30 }), + // 권한그룹 + AUTH_GRP: varchar({ length: 8 }), + // 최종이자계산일자 + FIN_IR_CALC_DT: varchar({ length: 8 }), + // 최종이자실행일자 + FIN_IR_ACT_DT: varchar({ length: 8 }), + // 회계담당자FAX번호 + ACOT_CHRGR_FAXNO: varchar({ length: 31 }), + // MAKER담당자이메일 + MK_CHRGR_EMAIL: varchar({ length: 241 }), + // 메모 + MEMO: varchar({ length: 120 }), + // 본사계정번호 + MOFFC_ACNT_NO: varchar({ length: 10 }), +}, (table) => ({ + pk: primaryKey({ columns: [table.VNDRCD, table.CO_CD] }) +})); + +// Vendor 마스터 (일반) +export const cmctbVendorGeneral = nonsapSchema.table('cmctb_vendor_general', { + // 벤더코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 계정그룹 + ACNT_GRP: varchar({ length: 4 }), + // 계정그룹종류 + ACNT_GRP_TP: varchar({ length: 2 }), + // 고객코드 + CSTM_CD: varchar({ length: 10 }), + // 전기보류지시자 + PST_HOLD_ORDR: varchar({ length: 1 }), + // 구매보류지시자 + PUR_HOLD_ORDR: varchar({ length: 1 }), + // 보류사유 + HOLD_CAUS: varchar({ length: 200 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // 법인ID + CO_ID: varchar({ length: 6 }), + // 대표자명 + REPR_NM: varchar({ length: 30 }), + // 사업유형 + BIZTP: varchar({ length: 90 }), + // 산업유형 + BIZCON: varchar({ length: 90 }), + // 등록일자 + REG_DT: varchar({ length: 8 }), + // 등록시간 + REG_DTM: varchar({ length: 6 }), + // 등록자 + REGR_ID: varchar({ length: 13 }), + // 승인일자 + AGR_DT: varchar({ length: 8 }), + // 승인시간 + AGR_TM: varchar({ length: 6 }), + // 승인자ID + AGR_R_ID: varchar({ length: 13 }), + // 변경일자 + CHG_DT: varchar({ length: 8 }), + // 변경시간 + CHG_TM: varchar({ length: 6 }), + // 변경자ID + CHGR_ID: varchar({ length: 13 }), + // 국가코드 + NTN_CD: varchar({ length: 3 }), + // 대표전화번호 + REP_TEL_NO: varchar({ length: 30 }), + // 대표FAX번호 + REP_FAX_NO: varchar({ length: 31 }), + // 사업자번호 + BIZR_NO: varchar({ length: 10 }), + // 법인등록번호 + CO_REG_NO: varchar({ length: 18 }), + // 세금번호4 + TX_CD_4: varchar({ length: 54 }), + // 설립일자 + CO_INST_DT: varchar({ length: 8 }), + // 구매처유형 + VNDR_TP: varchar({ length: 2 }), + // GLOBALTOP코드 + GBL_TOP_CD: varchar({ length: 11 }), + // GLOBALTOP명 + GBL_TOP_NM: varchar({ length: 120 }), + // 국내TOP코드 + DMST_TOP_CD: varchar({ length: 11 }), + // 국내TOP명 + DMST_TOP_NM: varchar({ length: 120 }), + // 사업단위코드 + BIZ_UOM_CD: varchar({ length: 11 }), + // 사업단위명 + BIZ_UOM_NM: varchar({ length: 120 }), + // DUNS번호 + DNS_NO: varchar({ length: 11 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), + // 타이틀 + TTL: varchar({ length: 45 }), + // 부가세등록번호 + VAT_REG_NO: varchar({ length: 20 }), + // 지로VENDOR지시자 + GIRO_VNDR_ORDR: varchar({ length: 1 }), + // Vendor명1 + VNDRNM_1: varchar({ length: 120 }), + // VENDOR명2 + VNDRNM_2: varchar({ length: 120 }), + // VENDOR명3 + VNDRNM_3: varchar({ length: 120 }), + // VENDOR명4 + VNDRNM_4: varchar({ length: 120 }), + // VENDOR명약어1 + VNDRNM_ABRV_1: varchar({ length: 60 }), + // VENDOR명약어2 + VNDRNM_ABRV_2: varchar({ length: 60 }), + // 잠재VENDOR코드 + PTNT_VNDRCD: varchar({ length: 10 }), + // 주소1 + ADR_1: varchar({ length: 120 }), + // 주소2 + ADR_2: text(), + // 품질담당자명 + QLT_CHRGR_NM: varchar({ length: 60 }), + // 품질담당자전화번호 + QLT_CHRGR_TELNO: varchar({ length: 30 }), + // 품질담당자이메일 + QLT_CHRGR_EMAIL: varchar({ length: 241 }), + // SUB작업장순서 + SB_WKA_SEQ: varchar({ length: 16 }), + // 중복사유코드 + OVLAP_CAUS_CD: varchar({ length: 2 }), + // 문서유형 + DOC_TP: varchar({ length: 3 }), + // 문서번호 + DOC_NO: varchar({ length: 25 }), + // 부분문서 + PTN_DOC: varchar({ length: 3 }), + // 문서버전 + DOC_VER: varchar({ length: 2 }), + // 인바운드플래그 + INB_FLAG: varchar({ length: 1 }), + // 삭제보류지시자 + DEL_HOLD_ORDR: varchar({ length: 1 }), + // 구매보류일자 + PUR_HOLD_DT: varchar({ length: 8 }), + // 사서함 + POBX: varchar({ length: 30 }), + // 국제LOCATION점검숫자 + INTL_LCTN_CHK_NUM: numeric(), + // 원천세의무자성별키 + SRCETX_RP_SEX_KEY: varchar({ length: 1 }), + // VENDOR계약담당자1 + VNDR_CNRT_CHRGR_1: varchar({ length: 105 }), + // VENDOR계약담당자2 + VNDR_CNRT_CHRGR_2: varchar({ length: 105 }), + // 대표생년월일 + REPR_RESNO: varchar({ length: 13 }), + // 기업규모 + CO_VLM: varchar({ length: 1 }), +}); + +// VENDOR마스터(협력사분류) +export const cmctbVendorGrp = nonsapSchema.table('cmctb_vendor_grp', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 업무그룹코드 + BIZ_GRP_CD: varchar({ length: 3 }).notNull(), + // 생성일자 + CRTE_DT: varchar({ length: 8 }), + // 생성시간 + CRTE_TM: varchar({ length: 6 }), + // 생성자ID + CRTER_ID: varchar({ length: 13 }), + // 변경일자 + CHG_DT: varchar({ length: 8 }), + // 변경시간 + CHG_TM: varchar({ length: 6 }), + // 변경자ID + CHGR_ID: varchar({ length: 13 }), +}); + +// 사내협력사VENDOR +export const cmctbVendorInco = nonsapSchema.table('cmctb_vendor_inco', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // VENDOR코명 + VNDRNM: varchar({ length: 120 }), + // 대표자명 + REPR_NM: varchar({ length: 30 }), + // 협력사구분 + PRTNR_GB: varchar({ length: 1 }), + // 사내협력사코드 + INCO_PRTNR_CD: varchar({ length: 3 }), + // 사내협력사작업장1 + INCO_PRTNR_WKA_1: varchar({ length: 1 }), + // 사내협력사작업장2 + INCO_PRTNR_WKA_2: varchar({ length: 1 }), + // 사내협력사작업장3 + INCO_PRTNR_WKA_3: varchar({ length: 1 }), + // 직종코드 + JBTYPE_CD: varchar({ length: 2 }), + // 직종코드2 + JBTYPE_CD_2: varchar({ length: 2 }), + // 개인법인구분 + INDV_CO_GB: varchar({ length: 2 }), + // 사내창립유무 + INCO_FOND_YN: varchar({ length: 1 }), + // 도크번호 + DOCK_NO: varchar({ length: 25 }), + // 당사투입일자 + OCMP_INP_DT: varchar({ length: 8 }), + // 사내철수일자 + INCO_DUSE_DT: varchar({ length: 8 }), + // 산재보험요율 + INDST_INS_PMRAT: numeric(), + // 계약이행보증금 + CNRT_PFRM_GRAMT: numeric(), + // 임금율 + WGE_RAT: numeric(), + // 해당부서코드1 + CRSPD_DEPTCD_1: varchar({ length: 30 }), + // 해당부서코드2 + CRSPD_DEPTCD_2: varchar({ length: 30 }), + // 해당팀소속 + CRSPD_TEAM_BLNG: varchar({ length: 100 }), + // 사내협력사종목1 + INCO_PRTNR_ITM_1: varchar({ length: 120 }), + // 사내협력사종목2 + INCO_PRTNR_ITM_2: varchar({ length: 120 }), + // 사무실위치 + OFC_LOC: varchar({ length: 240 }), + // 대표당사경력 + REP_OCMP_CARR: text(), + // 사내철수사유 + INCO_DUSE_CAUS: text(), + // 전화번호 + TEL_NO: varchar({ length: 30 }), + // 주소 + ADR1: varchar({ length: 200 }), + // 상세주소 + ADR2: varchar({ length: 200 }), + // 이전 VENDOR코드 + OLD_VNDRCD: varchar({ length: 10 }), + // 하위 VENDOR 갯수 + TREE_NUM: varchar({ length: 1 }), + // 생성일자 + CRTE_DT: varchar({ length: 8 }), + // 생성시간 + CRTE_TM: varchar({ length: 6 }), + // 생성사용자ID + CRTE_USR_ID: varchar({ length: 13 }), + // 수정일자 + CHG_DT: varchar({ length: 8 }), + // 수정시간 + CHG_TM: varchar({ length: 6 }), + // 수정사용자ID + CHG_USR_ID: varchar({ length: 13 }), + // 직종단가 + UPR_JBTYPE: varchar({ length: 2 }), + // 공급받는자 종사업장 식별코드 + ZBYBP: varchar({ length: 4 }), + // 비고 + RMK: text(), + // 철수예정유무 + WDL_PLN_YN: varchar({ length: 1 }), + // 임금체불발생 + WGE_DELY_DVL: varchar({ length: 8 }), + // 에스크로가입유무 + ESCROW_YN: varchar({ length: 1 }), +}); + +// Vendor 마스터 (구매조직) +export const cmctbVendorPorg = nonsapSchema.table('cmctb_vendor_porg', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 구매조직 + PUR_ORG_CD: varchar({ length: 4 }).notNull(), + // 구매오더통화 + PUR_ORD_CUR: varchar({ length: 5 }), + // 지급조건 + SPLY_COND: varchar({ length: 4 }), + // 인도조건1 + DL_COND_1: varchar({ length: 3 }), + // 인도조건2 + DL_COND_2: varchar({ length: 90 }), + // 계산스키마그룹 + CALC_SHM_GRP: varchar({ length: 2 }), + // GR기준송장검증 + GR_BSE_INVC_VR: varchar({ length: 1 }), + // 자동구매오더지시자 + AT_PUR_ORD_ORDR: varchar({ length: 1 }), + // 구매보류지시자 + PUR_HOLD_ORDR: varchar({ length: 1 }), + // 삭제지시자 + DEL_ORDR: varchar({ length: 1 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), + // 오더확인요청지시자 + ORD_CNFM_REQ_ORDR: varchar({ length: 1 }), + // 영업담당자명 + SALE_CHRGR_NM: varchar({ length: 120 }), + // VENDOR전화번호 + VNDR_TELNO: varchar({ length: 30 }), + // 확정제어키 + CNFM_CTL_KEY: varchar({ length: 4 }), + // 구매보류일자 + PUR_HOLD_DT: varchar({ length: 8 }), + // 구매보류사유 + PUR_HOLD_CAUS: varchar({ length: 120 }), +}); + +// Vendor 마스터 (대표자 EMAIL) +export const cmctbVendorRepremail = nonsapSchema.table('cmctb_vendor_repremail', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // 이메일주소 + EMAIL_ADR: varchar({ length: 241 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// Vendor 마스터 (대표자 팩스번호) +export const cmctbVendorReprfax = nonsapSchema.table('cmctb_vendor_reprfax', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // 국가코드 + NTN_CD: varchar({ length: 3 }), + // 팩스번호 + FAXNO: varchar({ length: 30 }), + // 팩스내선번호 + FAX_ETS_NO: varchar({ length: 10 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// Vendor 마스터 (대표자 전화번호) +export const cmctbVendorReprtel = nonsapSchema.table('cmctb_vendor_reprtel', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // 국가코드 + NTN_CD: varchar({ length: 3 }), + // 전화번호 + TELNO: varchar({ length: 30 }), + // 내선번호 + ETX_NO: varchar({ length: 10 }), + // 핸드폰지시자 + HP_ORDR: varchar({ length: 1 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// Vendor 마스터 (대표자 URL) +export const cmctbVendorReprurl = nonsapSchema.table('cmctb_vendor_reprurl', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 주소번호 + ADR_NO: varchar({ length: 10 }), + // 대표자순번 + REPR_SER: varchar({ length: 3 }).notNull(), + // 유효시작일자 + VLD_ST_DT: varchar({ length: 8 }).notNull(), + // URL + URL: text(), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// Vendor 마스터 (세금번호) +export const cmctbVendorTaxnum = nonsapSchema.table('cmctb_vendor_taxnum', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 세금번호범주 + TX_NO_CTG: varchar({ length: 4 }).notNull(), + // 사업파트너세금번호 + BIZ_PTNR_TX_NO: varchar({ length: 20 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// Vendor 마스터 (파트너역할) +export const cmctbVendorVfpn = nonsapSchema.table('cmctb_vendor_vfpn', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 구매조직 + PUR_ORG_CD: varchar({ length: 4 }).notNull(), + // VENDOR서브번호 + VNDR_SUB_NO: varchar({ length: 6 }).notNull(), + // 플랜트코드 + PLNT_CD: varchar({ length: 4 }).notNull(), + // 파트너기능 + PTNR_SKL: varchar({ length: 2 }).notNull(), + // 파트너카운터 + PTNR_CNT: varchar({ length: 3 }).notNull(), + // 기타참조VENDOR코드 + ETC_REF_VNDRCD: varchar({ length: 10 }), + // 기본파트너지시자 + BSE_PTNR_ORDR: varchar({ length: 1 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// Vendor 마스터 (원천세유형) +export const cmctbVendorWhthx = nonsapSchema.table('cmctb_vendor_whthx', { + // VENDOR코드 + VNDRCD: varchar({ length: 10 }).notNull(), + // 회사코드 + CO_CD: varchar({ length: 4 }).notNull(), + // 원천세유형 + SRCE_TX_TP: varchar({ length: 2 }).notNull(), + // 원천세관련지시자 + SRCE_TX_REL_ORDR: varchar({ length: 1 }), + // 수취인유형 + RECIP_TP: varchar({ length: 2 }), + // 원천세식별번호 + SRCE_TX_IDENT_NO: varchar({ length: 16 }), + // 원천세코드 + SRCE_TX_NO: varchar({ length: 2 }), + // 면제증명서번호 + DCHAG_CERT_NO: varchar({ length: 15 }), + // 면제율 + DCHAG_RAT: numeric(), + // 면제시작일자 + DCHAG_ST_DT: varchar({ length: 8 }), + // 면제종료일 + DCHAG_ED_DT: varchar({ length: 8 }), + // 면제사유 + DCHAG_CAUS: varchar({ length: 200 }), + // 인터페이스일자 + IF_DT: varchar({ length: 8 }), + // 인터페이스시간 + IF_TM: varchar({ length: 6 }), + // 인터페이스상태 + IF_STAT: varchar({ length: 1 }), + // 인터페이스메시지 + IF_MSG: varchar({ length: 100 }), +}); + +// 견적프로젝트기준정보 +export const plftbEstmProjMast = nonsapSchema.table('plftb_estm_proj_mast', { + // 견적프로젝트번호 + ESTM_PROJ_NO: varchar({ length: 24 }).notNull(), + // 안건번호 + AGND_NO: varchar({ length: 8 }), + // 견적프로젝트명 + ESTM_PROJ_NM: varchar({ length: 100 }), + // 사업부문 + BIZ_CLS: varchar({ length: 1 }), + // 리비젼번호 + REV_NO: numeric(), + // 견적유형 + ESTM_TYPE: varchar({ length: 1 }), + // 선주사코드 + OWNER_CD: varchar({ length: 10 }), + // 시리즈순번 + SERS_CNT: numeric(), + // 선종코드 + SKND_CD: varchar({ length: 10 }), + // 선형코드 + SHTYPE_CD: varchar({ length: 10 }), + // 선형크기 + SHTYPE_SIZE: numeric(), + // 선형단위 + SHTYPE_UOM: varchar({ length: 10 }), + // 관청코드 + CHRTR_CD: varchar({ length: 10 }), + // 국가코드 + NATN_CD: varchar({ length: 10 }), + // 선급1 + CLS_1: varchar({ length: 10 }), + // 선급2 + CLS_2: varchar({ length: 10 }), + // 선급3 + CLS_3: varchar({ length: 10 }), + // 데이터생성구분 + DATA_CRTE_GB: varchar({ length: 2 }), + // 최초등록자ID + FS_INPR_ID: varchar({ length: 13 }), + // 최초등록일시 + FS_INP_DTM: varchar({ length: 14 }), + // 최종수정자ID + FIN_CHGR_ID: varchar({ length: 13 }), + // 최종수정일시 + FIN_CHG_DTM: varchar({ length: 14 }), + // VESSEL 평균값1 + VSL_VAG_1: numeric(), + // VESSEL 평균값2 + VSL_VAG_2: numeric(), + // VESSEL 평균값3 + VSL_VAG_3: numeric(), + // VESSEL 평균값4 + VSL_VAG_4: numeric(), + // 견적물량결재ID + ESTM_AOM_APP_ID: varchar({ length: 32 }), + // 견적물량상태 + ESTM_AOM_STAT: varchar({ length: 1 }), + // 견적물량상태변경자ID + ESTM_AOM_STAT_CHGR_ID: varchar({ length: 13 }), + // 견적물량상태변경일시 + ESTM_AOM_STAT_CHG_DTM: varchar({ length: 14 }), + // IF대상여부 + IF_TRGT_YN: varchar({ length: 1 }), +}, (table) => ({ + pk: primaryKey({ columns: [table.ESTM_PROJ_NO] }) +})); + +// 타입 정의 +export type CmctbCd = typeof cmctbCd.$inferSelect; +export type NewCmctbCd = typeof cmctbCd.$inferInsert; +export type CmctbCdnm = typeof cmctbCdnm.$inferSelect; +export type NewCmctbCdnm = typeof cmctbCdnm.$inferInsert; +export type CmctbCdClf = typeof cmctbCdClf.$inferSelect; +export type NewCmctbCdClf = typeof cmctbCdClf.$inferInsert; +export type CmctbCdClfNm = typeof cmctbCdClfNm.$inferSelect; +export type NewCmctbCdClfNm = typeof cmctbCdClfNm.$inferInsert; +export type CmctbCustomerAddr = typeof cmctbCustomerAddr.$inferSelect; +export type NewCmctbCustomerAddr = typeof cmctbCustomerAddr.$inferInsert; +export type CmctbCustomerCfpn = typeof cmctbCustomerCfpn.$inferSelect; +export type NewCmctbCustomerCfpn = typeof cmctbCustomerCfpn.$inferInsert; +export type CmctbCustomerCompny = typeof cmctbCustomerCompny.$inferSelect; +export type NewCmctbCustomerCompny = typeof cmctbCustomerCompny.$inferInsert; +export type CmctbCustomerGeneral = typeof cmctbCustomerGeneral.$inferSelect; +export type NewCmctbCustomerGeneral = typeof cmctbCustomerGeneral.$inferInsert; +export type CmctbCustomerRepremail = typeof cmctbCustomerRepremail.$inferSelect; +export type NewCmctbCustomerRepremail = typeof cmctbCustomerRepremail.$inferInsert; +export type CmctbCustomerReprfax = typeof cmctbCustomerReprfax.$inferSelect; +export type NewCmctbCustomerReprfax = typeof cmctbCustomerReprfax.$inferInsert; +export type CmctbCustomerReprtel = typeof cmctbCustomerReprtel.$inferSelect; +export type NewCmctbCustomerReprtel = typeof cmctbCustomerReprtel.$inferInsert; +export type CmctbCustomerReprurl = typeof cmctbCustomerReprurl.$inferSelect; +export type NewCmctbCustomerReprurl = typeof cmctbCustomerReprurl.$inferInsert; +export type CmctbCustomerSorg = typeof cmctbCustomerSorg.$inferSelect; +export type NewCmctbCustomerSorg = typeof cmctbCustomerSorg.$inferInsert; +export type CmctbCustomerTaxcd = typeof cmctbCustomerTaxcd.$inferSelect; +export type NewCmctbCustomerTaxcd = typeof cmctbCustomerTaxcd.$inferInsert; +export type CmctbCustomerTaxnum = typeof cmctbCustomerTaxnum.$inferSelect; +export type NewCmctbCustomerTaxnum = typeof cmctbCustomerTaxnum.$inferInsert; +export type CmctbMatBse = typeof cmctbMatBse.$inferSelect; +export type NewCmctbMatBse = typeof cmctbMatBse.$inferInsert; +export type CmctbMatClas = typeof cmctbMatClas.$inferSelect; +export type NewCmctbMatClas = typeof cmctbMatClas.$inferInsert; +export type CmctbMatClasSpchar = typeof cmctbMatClasSpchar.$inferSelect; +export type NewCmctbMatClasSpchar = typeof cmctbMatClasSpchar.$inferInsert; +export type CmctbMatDsc = typeof cmctbMatDsc.$inferSelect; +export type NewCmctbMatDsc = typeof cmctbMatDsc.$inferInsert; +export type CmctbMatPlnt = typeof cmctbMatPlnt.$inferSelect; +export type NewCmctbMatPlnt = typeof cmctbMatPlnt.$inferInsert; +export type CmctbMatSpchar = typeof cmctbMatSpchar.$inferSelect; +export type NewCmctbMatSpchar = typeof cmctbMatSpchar.$inferInsert; +export type CmctbMatSpcharMast = typeof cmctbMatSpcharMast.$inferSelect; +export type NewCmctbMatSpcharMast = typeof cmctbMatSpcharMast.$inferInsert; +export type CmctbMatSpcharVal = typeof cmctbMatSpcharVal.$inferSelect; +export type NewCmctbMatSpcharVal = typeof cmctbMatSpcharVal.$inferInsert; +export type CmctbMatUom = typeof cmctbMatUom.$inferSelect; +export type NewCmctbMatUom = typeof cmctbMatUom.$inferInsert; +export type CmctbProjBizcls = typeof cmctbProjBizcls.$inferSelect; +export type NewCmctbProjBizcls = typeof cmctbProjBizcls.$inferInsert; +export type CmctbProjMast = typeof cmctbProjMast.$inferSelect; +export type NewCmctbProjMast = typeof cmctbProjMast.$inferInsert; +export type CmctbProjWbs = typeof cmctbProjWbs.$inferSelect; +export type NewCmctbProjWbs = typeof cmctbProjWbs.$inferInsert; +export type CmctbVendorAddr = typeof cmctbVendorAddr.$inferSelect; +export type NewCmctbVendorAddr = typeof cmctbVendorAddr.$inferInsert; +export type CmctbVendorCompny = typeof cmctbVendorCompny.$inferSelect; +export type NewCmctbVendorCompny = typeof cmctbVendorCompny.$inferInsert; +export type CmctbVendorGeneral = typeof cmctbVendorGeneral.$inferSelect; +export type NewCmctbVendorGeneral = typeof cmctbVendorGeneral.$inferInsert; +export type CmctbVendorGrp = typeof cmctbVendorGrp.$inferSelect; +export type NewCmctbVendorGrp = typeof cmctbVendorGrp.$inferInsert; +export type CmctbVendorInco = typeof cmctbVendorInco.$inferSelect; +export type NewCmctbVendorInco = typeof cmctbVendorInco.$inferInsert; +export type CmctbVendorPorg = typeof cmctbVendorPorg.$inferSelect; +export type NewCmctbVendorPorg = typeof cmctbVendorPorg.$inferInsert; +export type CmctbVendorRepremail = typeof cmctbVendorRepremail.$inferSelect; +export type NewCmctbVendorRepremail = typeof cmctbVendorRepremail.$inferInsert; +export type CmctbVendorReprfax = typeof cmctbVendorReprfax.$inferSelect; +export type NewCmctbVendorReprfax = typeof cmctbVendorReprfax.$inferInsert; +export type CmctbVendorReprtel = typeof cmctbVendorReprtel.$inferSelect; +export type NewCmctbVendorReprtel = typeof cmctbVendorReprtel.$inferInsert; +export type CmctbVendorReprurl = typeof cmctbVendorReprurl.$inferSelect; +export type NewCmctbVendorReprurl = typeof cmctbVendorReprurl.$inferInsert; +export type CmctbVendorTaxnum = typeof cmctbVendorTaxnum.$inferSelect; +export type NewCmctbVendorTaxnum = typeof cmctbVendorTaxnum.$inferInsert; +export type CmctbVendorVfpn = typeof cmctbVendorVfpn.$inferSelect; +export type NewCmctbVendorVfpn = typeof cmctbVendorVfpn.$inferInsert; +export type CmctbVendorWhthx = typeof cmctbVendorWhthx.$inferSelect; +export type NewCmctbVendorWhthx = typeof cmctbVendorWhthx.$inferInsert; +export type PlftbEstmProjMast = typeof plftbEstmProjMast.$inferSelect; +export type NewPlftbEstmProjMast = typeof plftbEstmProjMast.$inferInsert; diff --git a/db/schema/PLM/plmVendorSchema.ts b/db/schema/PLM/plmVendorSchema.ts deleted file mode 100644 index 7338521b..00000000 --- a/db/schema/PLM/plmVendorSchema.ts +++ /dev/null @@ -1,337 +0,0 @@ -// db/schema/vendors.ts -import { pgTable, serial, varchar, text, timestamp, boolean, integer ,pgView} from "drizzle-orm/pg-core"; -import { sql, eq, relations } from "drizzle-orm"; - -// ------------------------------------------------------------------------------------------------ - -// ------- [시작] MDG 인터페이스 목적 테이블 추가 (이미 인터페이스한 레거시 DB에서 직접 가져옴) ------------- - -export const vendorMdgGenerals = pgTable("vendor_mdg_generals", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 100 }), - accountGroup: varchar("account_group", { length: 4 }), // ACNT_GRP - 계정그룹 - accountGroupType: varchar("account_group_type", { length: 2 }), // ACNT_GRP_TP - 계정그룹종류 - customerCode: varchar("customer_code", { length: 10 }), // CSTM_CD - 고객코드 - postingHoldIndicator: varchar("posting_hold_indicator", { length: 1 }), // PST_HOLD_ORDR - 전기보류지시자 - purchaseHoldIndicator: varchar("purchase_hold_indicator", { length: 1 }), // PUR_HOLD_ORDR - 구매보류지시자 - holdReason: varchar("hold_reason", { length: 200 }), // HOLD_CAUS - 보류사유 - deleteIndicator: varchar("delete_indicator", { length: 1 }), // DEL_ORDR - 삭제지시자 - companyId: varchar("company_id", { length: 6 }), // CO_ID - 법인ID - businessType: varchar("business_type", { length: 90 }), // BIZTP - 사업유형 - industryType: varchar("industry_type", { length: 90 }), // BIZCON - 산업유형 - registrationDate: varchar("registration_date", { length: 8 }), // REG_DT - 등록일자 - registrationTime: varchar("registration_time", { length: 6 }), // REG_DTM - 등록시간 - registrarId: varchar("registrar_id", { length: 13 }), // REGR_ID - 등록자 - approvalDate: varchar("approval_date", { length: 8 }), // AGR_DT - 승인일자 - approvalTime: varchar("approval_time", { length: 6 }), // AGR_TM - 승인시간 - approverId: varchar("approver_id", { length: 13 }), // AGR_R_ID - 승인자ID - changeDate: varchar("change_date", { length: 8 }), // CHG_DT - 변경일자 - changeTime: varchar("change_time", { length: 6 }), // CHG_TM - 변경시간 - changerId: varchar("changer_id", { length: 13 }), // CHGR_ID - 변경자ID - nationCode: varchar("nation_code", { length: 3 }), // NTN_CD - 국가코드 - representativeTelNumber: varchar("representative_tel_number", { length: 30 }), // REP_TEL_NO - 대표전화번호 - representativeFaxNumber: varchar("representative_fax_number", { length: 31 }), // REP_FAX_NO - 대표FAX번호 - businessRegistrationNumber: varchar("business_registration_number", { length: 10 }), // BIZR_NO - 사업자번호 - corporateRegistrationNumberOracle: varchar("corporate_registration_number_oracle", { length: 18 }), // CO_REG_NO - 법인등록번호 - taxCode4: varchar("tax_code_4", { length: 54 }), // TX_CD_4 - 세금번호4 - companyEstablishmentDate: varchar("company_establishment_date", { length: 8 }), // CO_INST_DT - 설립일자 - vendorType: varchar("vendor_type", { length: 2 }), // VNDR_TP - 구매처유형 - globalTopCode: varchar("global_top_code", { length: 11 }), // GBL_TOP_CD - GLOBALTOP코드 - globalTopName: varchar("global_top_name", { length: 120 }), // GBL_TOP_NM - GLOBALTOP명 - domesticTopCode: varchar("domestic_top_code", { length: 11 }), // DMST_TOP_CD - 국내TOP코드 - domesticTopName: varchar("domestic_top_name", { length: 120 }), // DMST_TOP_NM - 국내TOP명 - businessUnitCode: varchar("business_unit_code", { length: 11 }), // BIZ_UOM_CD - 사업단위코드 - businessUnitName: varchar("business_unit_name", { length: 120 }), // BIZ_UOM_NM - 사업단위명 - dunsNumber: varchar("duns_number", { length: 11 }), // DNS_NO - DUNS번호 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - title: varchar("title", { length: 45 }), // TTL - 타이틀 - vatRegistrationNumber: varchar("vat_registration_number", { length: 20 }), // VAT_REG_NO - 부가세등록번호 - giroVendorIndicator: varchar("giro_vendor_indicator", { length: 1 }), // GIRO_VNDR_ORDR - 지로VENDOR지시자 - vendorName1: varchar("vendor_name_1", { length: 120 }), // VNDRNM_1 - Vendor명1 - vendorName2: varchar("vendor_name_2", { length: 120 }), // VNDRNM_2 - VENDOR명2 - vendorName3: varchar("vendor_name_3", { length: 120 }), // VNDRNM_3 - VENDOR명3 - vendorName4: varchar("vendor_name_4", { length: 120 }), // VNDRNM_4 - VENDOR명4 - vendorNameAbbreviation1: varchar("vendor_name_abbreviation_1", { length: 60 }), // VNDRNM_ABRV_1 - VENDOR명약어1 - vendorNameAbbreviation2: varchar("vendor_name_abbreviation_2", { length: 60 }), // VNDRNM_ABRV_2 - VENDOR명약어2 - potentialVendorCode: varchar("potential_vendor_code", { length: 10 }), // PTNT_VNDRCD - 잠재VENDOR코드 - address1: varchar("address_1", { length: 120 }), // ADR_1 - 주소1 - address2: varchar("address_2", { length: 512 }), // ADR_2 - 주소2 - qualityManagerName: varchar("quality_manager_name", { length: 60 }), // QLT_CHRGR_NM - 품질담당자명 - qualityManagerTelNumber: varchar("quality_manager_tel_number", { length: 30 }), // QLT_CHRGR_TELNO - 품질담당자전화번호 - qualityManagerEmail: varchar("quality_manager_email", { length: 241 }), // QLT_CHRGR_EMAIL - 품질담당자이메일 - subWorkplaceSequence: varchar("sub_workplace_sequence", { length: 16 }), // SB_WKA_SEQ - SUB작업장순서 - overlapCauseCode: varchar("overlap_cause_code", { length: 2 }), // OVLAP_CAUS_CD - 중복사유코드 - documentType: varchar("document_type", { length: 3 }), // DOC_TP - 문서유형 - documentNumber: varchar("document_number", { length: 25 }), // DOC_NO - 문서번호 - partialDocument: varchar("partial_document", { length: 3 }), // PTN_DOC - 부분문서 - documentVersion: varchar("document_version", { length: 2 }), // DOC_VER - 문서버전 - inboundFlag: varchar("inbound_flag", { length: 1 }), // INB_FLAG - 인바운드플래그 - deleteHoldIndicator: varchar("delete_hold_indicator", { length: 1 }), // DEL_HOLD_ORDR - 삭제보류지시자 - purchaseHoldDate: varchar("purchase_hold_date", { length: 8 }), // PUR_HOLD_DT - 구매보류일자 - postBox: varchar("post_box", { length: 30 }), // POBX - 사서함 - internationalLocationCheckNumber: integer("international_location_check_number"), // INTL_LCTN_CHK_NUM - 국제LOCATION점검숫자 - withholdingTaxGenderKey: varchar("withholding_tax_gender_key", { length: 1 }), // SRCETX_RP_SEX_KEY - 원천세의무자성별키 - vendorContractManager1: varchar("vendor_contract_manager_1", { length: 105 }), // VNDR_CNRT_CHRGR_1 - VENDOR계약담당자1 - vendorContractManager2: varchar("vendor_contract_manager_2", { length: 105 }), // VNDR_CNRT_CHRGR_2 - VENDOR계약담당자2 - representativeResidentNumber: varchar("representative_resident_number", { length: 13 }), // REPR_RESNO - 대표생년월일 - companyVolume: varchar("company_volume", { length: 1 }), // CO_VLM - 기업규모 - }) - - // 벤더 업무그룹 테이블 (CMCTB_VENDOR_GRP 대응) - export const vendorBusinessGroups = pgTable("vendor_business_groups", { - id: serial("id").primaryKey(), // postgres 인공키 - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - businessGroupCode: varchar("business_group_code", { length: 3 }).notNull(), // BIZ_GRP_CD - 업무그룹코드 - createdDate: varchar("created_date", { length: 8 }), // CRTE_DT - 생성일자 - createdTime: varchar("created_time", { length: 6 }), // CRTE_TM - 생성시간 - creatorId: varchar("creator_id", { length: 13 }), // CRTER_ID - 생성자ID - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 사내협력사 벤더 테이블 (CMCTB_VENDOR_INCO 대응) - export const vendorInternalPartners = pgTable("vendor_internal_partners", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - vendorName: varchar("vendor_name", { length: 120 }), // VNDRNM - VENDOR코명 - representativeName: varchar("representative_name", { length: 30 }), // REPR_NM - 대표자명 - partnerType: varchar("partner_type", { length: 1 }), // PRTNR_GB - 협력사구분 - internalPartnerCode: varchar("internal_partner_code", { length: 3 }), // INCO_PRTNR_CD - 사내협력사코드 - internalPartnerWorkplace1: varchar("internal_partner_workplace_1", { length: 1 }), // INCO_PRTNR_WKA_1 - 사내협력사작업장1 - internalPartnerWorkplace2: varchar("internal_partner_workplace_2", { length: 1 }), // INCO_PRTNR_WKA_2 - 사내협력사작업장2 - internalPartnerWorkplace3: varchar("internal_partner_workplace_3", { length: 1 }), // INCO_PRTNR_WKA_3 - 사내협력사작업장3 - jobTypeCode: varchar("job_type_code", { length: 2 }), // JBTYPE_CD - 직종코드 - jobTypeCode2: varchar("job_type_code_2", { length: 2 }), // JBTYPE_CD_2 - 직종코드2 - individualCorporateType: varchar("individual_corporate_type", { length: 2 }), // INDV_CO_GB - 개인법인구분 - internalFoundationYn: varchar("internal_foundation_yn", { length: 1 }), // INCO_FOND_YN - 사내창립유무 - dockNumber: varchar("dock_number", { length: 25 }), // DOCK_NO - 도크번호 - companyInputDate: varchar("company_input_date", { length: 8 }), // OCMP_INP_DT - 당사투입일자 - internalWithdrawalDate: varchar("internal_withdrawal_date", { length: 8 }), // INCO_DUSE_DT - 사내철수일자 - industrialInsurancePremiumRate: integer("industrial_insurance_premium_rate"), // INDST_INS_PMRAT - 산재보험요율 - contractPerformanceGuarantee: integer("contract_performance_guarantee"), // CNRT_PFRM_GRAMT - 계약이행보증금 - wageRate: integer("wage_rate"), // WGE_RAT - 임금율 - correspondingDepartmentCode1: varchar("corresponding_department_code_1", { length: 30 }), // CRSPD_DEPTCD_1 - 해당부서코드1 - correspondingDepartmentCode2: varchar("corresponding_department_code_2", { length: 30 }), // CRSPD_DEPTCD_2 - 해당부서코드2 - correspondingTeamBelonging: varchar("corresponding_team_belonging", { length: 100 }), // CRSPD_TEAM_BLNG - 해당팀소속 - internalPartnerItem1: varchar("internal_partner_item_1", { length: 120 }), // INCO_PRTNR_ITM_1 - 사내협력사종목1 - internalPartnerItem2: varchar("internal_partner_item_2", { length: 120 }), // INCO_PRTNR_ITM_2 - 사내협력사종목2 - officeLocation: varchar("office_location", { length: 240 }), // OFC_LOC - 사무실위치 - representativeCompanyCareer: varchar("representative_company_career", { length: 300 }), // REP_OCMP_CARR - 대표당사경력 - internalWithdrawalReason: varchar("internal_withdrawal_reason", { length: 600 }), // INCO_DUSE_CAUS - 사내철수사유 - telephoneNumber: varchar("telephone_number", { length: 30 }), // TEL_NO - 전화번호 - address1: varchar("address_1", { length: 200 }), // ADR1 - 주소 - address2: varchar("address_2", { length: 200 }), // ADR2 - 상세주소 - oldVendorCode: varchar("old_vendor_code", { length: 10 }), // OLD_VNDRCD - 이전 VENDOR코드 - treeNumber: varchar("tree_number", { length: 1 }), // TREE_NUM - 하위 VENDOR 갯수 - createdDate: varchar("created_date", { length: 8 }), // CRTE_DT - 생성일자 - createdTime: varchar("created_time", { length: 6 }), // CRTE_TM - 생성시간 - createdUserId: varchar("created_user_id", { length: 13 }), // CRTE_USR_ID - 생성사용자ID - changeDate: varchar("change_date", { length: 8 }), // CHG_DT - 수정일자 - changeTime: varchar("change_time", { length: 6 }), // CHG_TM - 수정시간 - changeUserId: varchar("change_user_id", { length: 13 }), // CHG_USR_ID - 수정사용자ID - upperJobType: varchar("upper_job_type", { length: 2 }), // UPR_JBTYPE - 직종단가 - supplierBusinessPlaceCode: varchar("supplier_business_place_code", { length: 4 }), // ZBYBP - 공급받는자 종사업장 식별코드 - remark: varchar("remark", { length: 4000 }), // RMK - 비고 - withdrawalPlanYn: varchar("withdrawal_plan_yn", { length: 1 }), // WDL_PLN_YN - 철수예정유무 - wageDelayOccurrence: varchar("wage_delay_occurrence", { length: 8 }), // WGE_DELY_DVL - 임금체불발생 - escrowYn: varchar("escrow_yn", { length: 1 }), // ESCROW_YN - 에스크로가입유무 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 구매조직 테이블 (CMCTB_VENDOR_PORG 대응) - export const vendorPurchaseOrganizations = pgTable("vendor_purchase_organizations", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - purchaseOrgCode: varchar("purchase_org_code", { length: 4 }).notNull(), // PUR_ORG_CD - 구매조직 - purchaseOrderCurrency: varchar("purchase_order_currency", { length: 5 }), // PUR_ORD_CUR - 구매오더통화 - paymentTerms: varchar("payment_terms", { length: 4 }), // SPLY_COND - 지급조건 - deliveryTerms1: varchar("delivery_terms_1", { length: 3 }), // DL_COND_1 - 인도조건1 - deliveryTerms2: varchar("delivery_terms_2", { length: 90 }), // DL_COND_2 - 인도조건2 - calculationSchemaGroup: varchar("calculation_schema_group", { length: 2 }), // CALC_SHM_GRP - 계산스키마그룹 - grBasedInvoiceVerification: varchar("gr_based_invoice_verification", { length: 1 }), // GR_BSE_INVC_VR - GR기준송장검증 - automaticPurchaseOrderIndicator: varchar("automatic_purchase_order_indicator", { length: 1 }), // AT_PUR_ORD_ORDR - 자동구매오더지시자 - purchaseHoldIndicator: varchar("purchase_hold_indicator", { length: 1 }), // PUR_HOLD_ORDR - 구매보류지시자 - deleteIndicator: varchar("delete_indicator", { length: 1 }), // DEL_ORDR - 삭제지시자 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - orderConfirmationRequestIndicator: varchar("order_confirmation_request_indicator", { length: 1 }), // ORD_CNFM_REQ_ORDR - 오더확인요청지시자 - salesManagerName: varchar("sales_manager_name", { length: 120 }), // SALE_CHRGR_NM - 영업담당자명 - vendorTelephoneNumber: varchar("vendor_telephone_number", { length: 30 }), // VNDR_TELNO - VENDOR전화번호 - confirmationControlKey: varchar("confirmation_control_key", { length: 4 }), // CNFM_CTL_KEY - 확정제어키 - purchaseHoldDate: varchar("purchase_hold_date", { length: 8 }), // PUR_HOLD_DT - 구매보류일자 - purchaseHoldReason: varchar("purchase_hold_reason", { length: 120 }), // PUR_HOLD_CAUS - 구매보류사유 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 대표자 이메일 테이블 (CMCTB_VENDOR_REPREMAIL 대응) - export const vendorRepresentativeEmails = pgTable("vendor_representative_emails", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - addressNumber: varchar("address_number", { length: 10 }), // ADR_NO - 주소번호 - representativeSequence: varchar("representative_sequence", { length: 3 }).notNull(), // REPR_SER - 대표자순번 - validStartDate: varchar("valid_start_date", { length: 8 }).notNull(), // VLD_ST_DT - 유효시작일자 - emailAddress: varchar("email_address", { length: 241 }), // EMAIL_ADR - 이메일주소 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 대표자 팩스 테이블 (CMCTB_VENDOR_REPRFAX 대응) - export const vendorRepresentativeFaxes = pgTable("vendor_representative_faxes", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - addressNumber: varchar("address_number", { length: 10 }), // ADR_NO - 주소번호 - representativeSequence: varchar("representative_sequence", { length: 3 }).notNull(), // REPR_SER - 대표자순번 - validStartDate: varchar("valid_start_date", { length: 8 }).notNull(), // VLD_ST_DT - 유효시작일자 - nationCode: varchar("nation_code", { length: 3 }), // NTN_CD - 국가코드 - faxNumber: varchar("fax_number", { length: 30 }), // FAXNO - 팩스번호 - faxExtensionNumber: varchar("fax_extension_number", { length: 10 }), // FAX_ETS_NO - 팩스내선번호 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 대표자 전화번호 테이블 (CMCTB_VENDOR_REPRTEL 대응) - export const vendorRepresentativeTelephones = pgTable("vendor_representative_telephones", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - addressNumber: varchar("address_number", { length: 10 }), // ADR_NO - 주소번호 - representativeSequence: varchar("representative_sequence", { length: 3 }).notNull(), // REPR_SER - 대표자순번 - validStartDate: varchar("valid_start_date", { length: 8 }).notNull(), // VLD_ST_DT - 유효시작일자 - nationCode: varchar("nation_code", { length: 3 }), // NTN_CD - 국가코드 - telephoneNumber: varchar("telephone_number", { length: 30 }), // TELNO - 전화번호 - extensionNumber: varchar("extension_number", { length: 10 }), // ETX_NO - 내선번호 - mobileIndicator: varchar("mobile_indicator", { length: 1 }), // HP_ORDR - 핸드폰지시자 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 대표자 URL 테이블 (CMCTB_VENDOR_REPRURL 대응) - export const vendorRepresentativeUrls = pgTable("vendor_representative_urls", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - addressNumber: varchar("address_number", { length: 10 }), // ADR_NO - 주소번호 - representativeSequence: varchar("representative_sequence", { length: 3 }).notNull(), // REPR_SER - 대표자순번 - validStartDate: varchar("valid_start_date", { length: 8 }).notNull(), // VLD_ST_DT - 유효시작일자 - url: varchar("url", { length: 2048 }), // URL - URL - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 세금번호 테이블 (CMCTB_VENDOR_TAXNUM 대응) - export const vendorTaxNumbers = pgTable("vendor_tax_numbers", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - taxNumberCategory: varchar("tax_number_category", { length: 4 }).notNull(), // TX_NO_CTG - 세금번호범주 - businessPartnerTaxNumber: varchar("business_partner_tax_number", { length: 20 }), // BIZ_PTNR_TX_NO - 사업파트너세금번호 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 파트너역할 테이블 (CMCTB_VENDOR_VFPN 대응) - export const vendorPartnerFunctions = pgTable("vendor_partner_functions", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - purchaseOrgCode: varchar("purchase_org_code", { length: 4 }).notNull(), // PUR_ORG_CD - 구매조직 - vendorSubNumber: varchar("vendor_sub_number", { length: 6 }).notNull(), // VNDR_SUB_NO - VENDOR서브번호 - plantCode: varchar("plant_code", { length: 4 }).notNull(), // PLNT_CD - 플랜트코드 - partnerFunction: varchar("partner_function", { length: 2 }).notNull(), // PTNR_SKL - 파트너기능 - partnerCounter: varchar("partner_counter", { length: 3 }).notNull(), // PTNR_CNT - 파트너카운터 - otherReferenceVendorCode: varchar("other_reference_vendor_code", { length: 10 }), // ETC_REF_VNDRCD - 기타참조VENDOR코드 - defaultPartnerIndicator: varchar("default_partner_indicator", { length: 1 }), // BSE_PTNR_ORDR - 기본파트너지시자 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // 벤더 원천세 테이블 (CMCTB_VENDOR_WHTHX 대응) - export const vendorWithholdingTax = pgTable("vendor_withholding_tax", { - id: serial("id").primaryKey(), - vendorCode: varchar("vendor_code", { length: 10 }).notNull().references(() => vendorMdgGenerals.vendorCode), // VNDRCD - 벤더코드 (키) 이고, SAP에서는 VARCHAR10 이다. - companyCode: varchar("company_code", { length: 4 }).notNull(), // CO_CD - 회사코드 - withholdingTaxType: varchar("withholding_tax_type", { length: 2 }).notNull(), // SRCE_TX_TP - 원천세유형 - withholdingTaxRelatedIndicator: varchar("withholding_tax_related_indicator", { length: 1 }), // SRCE_TX_REL_ORDR - 원천세관련지시자 - recipientType: varchar("recipient_type", { length: 2 }), // RECIP_TP - 수취인유형 - withholdingTaxIdentificationNumber: varchar("withholding_tax_identification_number", { length: 16 }), // SRCE_TX_IDENT_NO - 원천세식별번호 - withholdingTaxCode: varchar("withholding_tax_code", { length: 2 }), // SRCE_TX_NO - 원천세코드 - exemptionCertificateNumber: varchar("exemption_certificate_number", { length: 15 }), // DCHAG_CERT_NO - 면제증명서번호 - exemptionRate: integer("exemption_rate"), // DCHAG_RAT - 면제율 - exemptionStartDate: varchar("exemption_start_date", { length: 8 }), // DCHAG_ST_DT - 면제시작일자 - exemptionEndDate: varchar("exemption_end_date", { length: 8 }), // DCHAG_ED_DT - 면제종료일 - exemptionReason: varchar("exemption_reason", { length: 200 }), // DCHAG_CAUS - 면제사유 - interfaceDate: varchar("interface_date", { length: 8 }), // IF_DT - 인터페이스일자 - interfaceTime: varchar("interface_time", { length: 6 }), // IF_TM - 인터페이스시간 - interfaceStatus: varchar("interface_status", { length: 1 }), // IF_STAT - 인터페이스상태 - interfaceMessage: varchar("interface_message", { length: 100 }), // IF_MSG - 인터페이스메시지 - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at").defaultNow().notNull(), - }); - - // ------- [끝] MDG 인터페이스 목적 테이블 추가 ------------- - - // ------- [시작] MDG 대응을 위한 새로운 테이블 타입 정의 ------------- - export type VendorBusinessGroup = typeof vendorBusinessGroups.$inferSelect - export type VendorInternalPartner = typeof vendorInternalPartners.$inferSelect - export type VendorPurchaseOrganization = typeof vendorPurchaseOrganizations.$inferSelect - export type VendorRepresentativeEmail = typeof vendorRepresentativeEmails.$inferSelect - export type VendorRepresentativeFax = typeof vendorRepresentativeFaxes.$inferSelect - export type VendorRepresentativeTelephone = typeof vendorRepresentativeTelephones.$inferSelect - export type VendorRepresentativeUrl = typeof vendorRepresentativeUrls.$inferSelect - export type VendorTaxNumber = typeof vendorTaxNumbers.$inferSelect - export type VendorPartnerFunction = typeof vendorPartnerFunctions.$inferSelect - export type VendorWithholdingTax = typeof vendorWithholdingTax.$inferSelect - // ------- [끝] MDG 대응을 위한 새로운 테이블 타입 정의 ------------- - - // vendors 통합 뷰 - vendorCode 하나로 모든 마이그레이션 정보 확인 - export const vendorComprehensiveView = pgView("vendor_comprehensive_view").as((qb) => { - return qb - .select({ - // TODO: 셀렉할 컬럼들 선택 - mdgBusinessRegistrationNumber: vendorMdgGenerals.businessRegistrationNumber, - - - }) - .from(vendorMdgGenerals) - .leftJoin(vendorMdgGenerals, eq(vendorMdgGenerals.vendorCode, vendorMdgGenerals.vendorCode)) - .leftJoin(vendorBusinessGroups, eq(vendorMdgGenerals.vendorCode, vendorBusinessGroups.vendorCode)) - .leftJoin(vendorInternalPartners, eq(vendorMdgGenerals.vendorCode, vendorInternalPartners.vendorCode)) - .leftJoin(vendorPurchaseOrganizations, eq(vendorMdgGenerals.vendorCode, vendorPurchaseOrganizations.vendorCode)) - .leftJoin(vendorRepresentativeEmails, eq(vendorMdgGenerals.vendorCode, vendorRepresentativeEmails.vendorCode)) - .leftJoin(vendorRepresentativeFaxes, eq(vendorMdgGenerals.vendorCode, vendorRepresentativeFaxes.vendorCode)) - .leftJoin(vendorRepresentativeTelephones, eq(vendorMdgGenerals.vendorCode, vendorRepresentativeTelephones.vendorCode)) - .leftJoin(vendorRepresentativeUrls, eq(vendorMdgGenerals.vendorCode, vendorRepresentativeUrls.vendorCode)) - .leftJoin(vendorTaxNumbers, eq(vendorMdgGenerals.vendorCode, vendorTaxNumbers.vendorCode)) - .leftJoin(vendorPartnerFunctions, eq(vendorMdgGenerals.vendorCode, vendorPartnerFunctions.vendorCode)) - .leftJoin(vendorWithholdingTax, eq(vendorMdgGenerals.vendorCode, vendorWithholdingTax.vendorCode)) - }) - - export type VendorComprehensiveView = typeof vendorComprehensiveView.$inferSelect -
\ No newline at end of file diff --git a/db/schema/index.ts b/db/schema/index.ts index d92a34e4..99750e26 100644 --- a/db/schema/index.ts +++ b/db/schema/index.ts @@ -31,4 +31,7 @@ export * from './notice'; export * from './MDG/mdg' // SOAP 로깅 목적 -export * from './SOAP/soap';
\ No newline at end of file +export * from './SOAP/soap'; + +// NONSAP Oracle DB 스키마 +export * from './NONSAP/nonsap';
\ No newline at end of file diff --git a/instrumentation.ts b/instrumentation.ts new file mode 100644 index 00000000..48d013dd --- /dev/null +++ b/instrumentation.ts @@ -0,0 +1,19 @@ +/** + * instrumentation 진입점 - 여러 JOB들이 등록될 수 있으므로 확장성을 위해 최소한의 메서드 호출만으로 유지 + */ +export async function register() { + console.log('Application instrumentation registered'); + + // Node.js runtime에서만 동기화 스케줄러 시작 + if (process.env.NEXT_RUNTIME === 'nodejs') { + try { + // 동적 import로 Edge Runtime 호환성 확보 - 개선된 서비스 사용 + // PLM 동기화 스케줄러인데, 1회만 가져오기로 했으므로 주석 처리 + // const { startEnhancedSyncScheduler } = await import('./lib/nonsap-sync/enhanced-sync-service'); + // startEnhancedSyncScheduler(); + } catch (error) { + console.error('Failed to start Enhanced NONSAP sync scheduler:', error); + // 스케줄러 실패해도 애플리케이션은 계속 실행 + } + } +} diff --git a/lib/nonsap-sync/enhanced-sync-service.ts b/lib/nonsap-sync/enhanced-sync-service.ts new file mode 100644 index 00000000..d5bd216e --- /dev/null +++ b/lib/nonsap-sync/enhanced-sync-service.ts @@ -0,0 +1,873 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +"use server"; + +import * as cron from 'node-cron'; +import { sql } from 'drizzle-orm'; +import { oracleKnex } from '@/lib/oracle-db/db'; +import db from '@/db/db'; +import { DatabaseSchema, TableName, ALL_TABLE_NAMES } from '@/lib/oracle-db/nonsap/oracle-schema'; +import * as nonsapSchema from '@/db/schema/NONSAP/nonsap'; +import { getTableSyncConfig, canUseDeltaSync, getTimestampColumn } from './table-config'; +import { PAGE_SIZE, BATCH_SIZE, MAX_WORKERS, DELTA_SYNC_ENABLED } from './sync-config'; + +interface SyncProgress { + tableName: string; + lastSyncDate: string; + currentPage: number; + totalProcessed: number; + status: 'running' | 'completed' | 'error' | 'skipped'; + lastError?: string; + syncType: 'full' | 'delta' | 'rebuild'; + startTime: number; + endTime?: number; + recordsSkipped?: number; +} + +interface DeltaSyncInfo { + tableName: string; + lastSyncTimestamp: string | null; + timestampColumn: string; +} + +// 동기화 진행 상태 저장 +const syncProgress = new Map<string, SyncProgress>(); + +// PostgreSQL에 마지막 동기화 정보 저장 테이블 +const SYNC_STATUS_TABLE = 'nonsap_sync_status'; + +// 진행률 바 유틸리티 (기존과 동일) +const createProgressBar = (current: number, total: number, width: number = 20): string => { + const filled = Math.floor((current / total) * width); + const empty = width - filled; + const percentage = Math.round((current / total) * 100); + + const bar = '█'.repeat(filled) + '░'.repeat(empty); + return `[ ${current.toString().padStart(3)} / ${total.toString().padEnd(3)} | ${bar} | ${percentage.toString().padStart(3)}% ]`; +}; + +const updateProgressBar = (message: string, current: number, total: number): void => { + const progressBar = createProgressBar(current, total); + const fullMessage = `[NONSAP-SYNC] ${message} ${progressBar}`; + + process.stdout.write('\r' + ' '.repeat(100) + '\r'); + process.stdout.write(fullMessage); + + if (current >= total) { + process.stdout.write('\n'); + } +}; + +// 로거 (기존과 동일) +const logger = { + info: (message: string, ...args: unknown[]) => console.log(`[NONSAP-SYNC INFO] ${message}`, ...args), + error: (message: string, ...args: unknown[]) => console.error(`[NONSAP-SYNC ERROR] ${message}`, ...args), + warn: (message: string, ...args: unknown[]) => console.warn(`[NONSAP-SYNC WARN] ${message}`, ...args), + success: (message: string, ...args: unknown[]) => console.log(`[NONSAP-SYNC SUCCESS] ${message}`, ...args), + header: (message: string) => { + console.log('\n' + '='.repeat(80)); + console.log(`[NONSAP-SYNC] ${message}`); + console.log('='.repeat(80) + '\n'); + }, + progress: updateProgressBar +}; + +/** + * 동기화 상태 테이블 초기화 + */ +async function initializeSyncStatusTable(): Promise<void> { + try { + const tableExists = await db.execute(sql` + SELECT EXISTS ( + SELECT FROM information_schema.tables + WHERE table_schema = 'nonsap' + AND table_name = ${SYNC_STATUS_TABLE} + ); + `); + + if (!tableExists.rows[0].exists) { + await db.execute(sql` + CREATE TABLE nonsap.${sql.identifier(SYNC_STATUS_TABLE)} ( + table_name VARCHAR(50) PRIMARY KEY, + last_sync_timestamp VARCHAR(14), + last_sync_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + sync_type VARCHAR(10) DEFAULT 'full', + total_records_processed INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + `); + logger.info('Sync status table created'); + } + } catch (error) { + logger.warn('Failed to initialize sync status table:', error); + } +} + +/** + * 마지막 동기화 정보 조회 + */ +async function getLastSyncInfo(tableName: string): Promise<DeltaSyncInfo> { + try { + const result = await db.execute(sql` + SELECT last_sync_timestamp + FROM nonsap.${sql.identifier(SYNC_STATUS_TABLE)} + WHERE table_name = ${tableName} + `); + + const timestampColumn = getTimestampColumn(tableName as TableName); + + return { + tableName, + lastSyncTimestamp: (result.rows[0] as any)?.last_sync_timestamp || null, + timestampColumn: timestampColumn || 'CHG_DT' + }; + } catch (error) { + logger.warn(`Failed to get last sync info for ${tableName}:`, error); + return { + tableName, + lastSyncTimestamp: null, + timestampColumn: getTimestampColumn(tableName as TableName) || 'CHG_DT' + }; + } +} + +/** + * 마지막 동기화 정보 업데이트 + */ +async function updateLastSyncInfo(tableName: string, timestamp: string, recordsProcessed: number): Promise<void> { + try { + await db.execute(sql` + INSERT INTO nonsap.${sql.identifier(SYNC_STATUS_TABLE)} + (table_name, last_sync_timestamp, total_records_processed, updated_at) + VALUES (${tableName}, ${timestamp}, ${recordsProcessed}, CURRENT_TIMESTAMP) + ON CONFLICT (table_name) + DO UPDATE SET + last_sync_timestamp = ${timestamp}, + total_records_processed = ${recordsProcessed}, + updated_at = CURRENT_TIMESTAMP + `); + } catch (error) { + logger.error(`Failed to update sync info for ${tableName}:`, error); + } +} + +/** + * 전체 동기화를 위한 Oracle 데이터 조회 (ROWNUM 대신 ROW_NUMBER 사용) + */ +async function fetchOracleDataFull<T extends TableName>( + tableName: T, + page: number, + pageSize: number = PAGE_SIZE +): Promise<DatabaseSchema[T][]> { + const offset = (page - 1) * pageSize; + + try { + // ROW_NUMBER() OVER() 구문을 사용한 안전한 페이징 + const query = ` + SELECT * FROM ( + SELECT t.*, ROW_NUMBER() OVER (ORDER BY ROWID) as rn + FROM ${tableName} t + ) + WHERE rn > ${offset} AND rn <= ${offset + pageSize} + `; + + const result = await oracleKnex.raw(query); + + // Oracle knex raw 결과는 result[0]에 실제 rows가 있음 + const rows = Array.isArray(result) ? result : result.rows || []; + + // Oracle raw 쿼리 결과에서 실제 데이터 추출 (rn 컬럼 제거) + const cleanResults = rows.map((row: any) => { + if (row && typeof row === 'object') { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { rn: _rn, RN: _RN, ...cleanRow } = row; // 대소문자 모두 제거 + return cleanRow; + } + return row; + }); + + logger.info(`Fetched ${cleanResults.length} records from ${tableName} (page ${page}, full sync)`); + + return cleanResults as DatabaseSchema[T][]; + } catch (error) { + logger.error(`Error fetching full data from ${tableName}:`, error); + throw error; + } +} + +/** + * 차분 동기화를 위한 Oracle 데이터 조회 (ROW_NUMBER 사용) + */ +async function fetchOracleDataDelta<T extends TableName>( + tableName: T, + lastSyncTimestamp: string | null, + timestampColumn: string, + page: number, + pageSize: number = PAGE_SIZE +): Promise<{ data: DatabaseSchema[T][]; hasMore: boolean; maxTimestamp: string | null }> { + const offset = (page - 1) * pageSize; + + try { + let whereClause = ''; + const params: any[] = []; + + // 차분 동기화 조건 추가 + if (lastSyncTimestamp && timestampColumn) { + if (timestampColumn.includes('DTM')) { + // 14자리 YYYYMMDDHHMISS 형태 + whereClause = `WHERE ${timestampColumn} > ?`; + params.push(lastSyncTimestamp); + } else { + // 8자리 YYYYMMDD 형태만 사용 (CHG_TM 컬럼이 없는 테이블들) + const lastDate = lastSyncTimestamp.substring(0, 8); + + // 테이블에 따라 조건 분기 + const timeColumn = timestampColumn.replace('_DT', '_TM'); + + // 실제로 CHG_TM 컬럼이 있는지 확인 (간접적으로 테이블명으로 판단) + const hasTimeColumn = [ + 'CMCTB_VENDOR_GENERAL', 'CMCTB_VENDOR_GRP', 'CMCTB_VENDOR_INCO', + 'CMCTB_CDNM', 'CMCTB_CD_CLF_NM' + ].includes(tableName); + + if (hasTimeColumn) { + const lastTime = lastSyncTimestamp.substring(8, 14); + whereClause = `WHERE (${timestampColumn} > ? OR (${timestampColumn} = ? AND ${timeColumn} > ?))`; + params.push(lastDate, lastDate, lastTime); + } else { + // CHG_TM 컬럼이 없는 테이블은 날짜만으로 비교 + whereClause = `WHERE ${timestampColumn} > ?`; + params.push(lastDate); + } + } + } + + // ROW_NUMBER() OVER() 구문을 사용한 안전한 페이징 + const orderColumn = timestampColumn || 'ROWID'; + const query = ` + SELECT * FROM ( + SELECT t.*, ROW_NUMBER() OVER (ORDER BY ${orderColumn}) as rn + FROM ${tableName} t + ${whereClause} + ) + WHERE rn > ${offset} AND rn <= ${offset + pageSize} + `; + + const result = await oracleKnex.raw(query, params); + + // Oracle knex raw 결과는 result[0]에 실제 rows가 있음 + const rows = Array.isArray(result) ? result : result.rows || []; + + // Oracle raw 쿼리 결과에서 실제 데이터 추출 (rn 컬럼 제거) + const cleanResults = rows.map((row: any) => { + if (row && typeof row === 'object') { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { rn: _rn, RN: _RN, ...cleanRow } = row; // 대소문자 모두 제거 + return cleanRow; + } + return row; + }); + + // 최대 타임스탬프 계산 + let maxTimestamp: string | null = null; + if (cleanResults.length > 0 && timestampColumn) { + const lastRecord = cleanResults[cleanResults.length - 1] as any; + if (timestampColumn.includes('DTM')) { + maxTimestamp = lastRecord[timestampColumn]; + } else { + const timeColumn = timestampColumn.replace('_DT', '_TM'); + const date = lastRecord[timestampColumn] || ''; + + // CHG_TM 컬럼이 있는 테이블만 시간 조합 + const hasTimeColumn = [ + 'CMCTB_VENDOR_GENERAL', 'CMCTB_VENDOR_GRP', 'CMCTB_VENDOR_INCO', + 'CMCTB_CDNM', 'CMCTB_CD_CLF_NM' + ].includes(tableName); + + if (hasTimeColumn && lastRecord[timeColumn]) { + const time = lastRecord[timeColumn] || '000000'; + maxTimestamp = date + time.padEnd(6, '0'); + } else { + // 시간 정보가 없는 경우 날짜만 + 시간은 끝시간으로 + maxTimestamp = date + '235959'; + } + } + } + + const hasMore = cleanResults.length === pageSize; + + logger.info(`Fetched ${cleanResults.length} records from ${tableName} (page ${page}, delta: ${!!lastSyncTimestamp})`); + + return { + data: cleanResults as DatabaseSchema[T][], + hasMore, + maxTimestamp + }; + } catch (error) { + logger.error(`Error fetching delta data from ${tableName}:`, error); + throw error; + } +} + +/** + * 컬럼명 정규화 (Oracle -> PostgreSQL) + */ +function normalizeColumnNames(record: any, tableSchema: any): any { + const normalizedRecord: any = {}; + const schemaColumns = Object.keys(tableSchema); + + for (const [key, value] of Object.entries(record)) { + if (!key || typeof key !== 'string' || key === 'undefined' || key.trim() === '') { + continue; + } + + // RN 컬럼 제거 (ROW_NUMBER 결과) + if (key.toUpperCase() === 'RN') { + continue; + } + + // 대문자로 변환하여 스키마와 매칭 + const upperKey = key.toUpperCase(); + + // 스키마에 해당 컬럼이 있는지 확인 + if (schemaColumns.includes(upperKey)) { + normalizedRecord[upperKey] = value; + } else { + // 스키마에 없는 컬럼은 경고 출력하지 않고 조용히 스킵 (너무 많은 로그 방지) + // logger.warn(`Column ${key} (${upperKey}) not found in schema, skipping`); + } + } + + return normalizedRecord; +} + +/** + * PostgreSQL에서 실제 constraint 존재 여부 확인 + */ +async function hasValidConstraint(tableName: string, columnNames: string[]): Promise<boolean> { + try { + if (columnNames.length === 0) return false; + + const tableNameLower = tableName.toLowerCase(); + + // Primary key나 unique constraint 확인 + const constraintQuery = sql` + SELECT tc.constraint_name, tc.constraint_type, kcu.column_name + FROM information_schema.table_constraints tc + JOIN information_schema.key_column_usage kcu + ON tc.constraint_name = kcu.constraint_name + WHERE tc.table_schema = 'nonsap' + AND tc.table_name = ${tableNameLower} + AND tc.constraint_type IN ('PRIMARY KEY', 'UNIQUE') + `; + + const result = await db.execute(constraintQuery); + const constraints = result.rows; + + // 해당 컬럼들이 실제 constraint에 포함되는지 확인 + for (const constraint of constraints) { + const constraintColumns = constraints + .filter((c: any) => c.constraint_name === constraint.constraint_name) + .map((c: any) => c.column_name.toUpperCase()); + + // 모든 컬럼이 constraint에 포함되는지 확인 + const allColumnsInConstraint = columnNames.every(col => + constraintColumns.includes(col.toUpperCase()) + ); + + if (allColumnsInConstraint) { + return true; + } + } + + return false; + } catch (error) { + logger.warn(`Failed to check constraints for ${tableName}:`, error); + return false; + } +} + +/** + * PostgreSQL에 데이터 upsert (최적화된 버전) + */ +async function upsertToPostgresOptimized<T extends TableName>( + tableName: T, + data: DatabaseSchema[T][], + primaryKeys: string[] +): Promise<void> { + if (data.length === 0) return; + + try { + const tableCamelCase = tableName.toLowerCase() + .split('_') + .map((word, index) => index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)) + .join(''); + + const tableSchema = (nonsapSchema as any)[tableCamelCase]; + + if (!tableSchema) { + throw new Error(`Table schema not found for ${tableName} (${tableCamelCase})`); + } + + for (let i = 0; i < data.length; i += BATCH_SIZE) { + const batch = data.slice(i, i + BATCH_SIZE); + const currentBatch = Math.floor(i / BATCH_SIZE) + 1; + + try { + // primaryKeys에서 undefined 값 필터링 및 검증 + const validPrimaryKeys = primaryKeys.filter(key => + key && + typeof key === 'string' && + key !== 'ROWID' && + key !== 'undefined' && + key.trim() !== '' + ); + + if (currentBatch === 1) { + logger.info(`${tableName} - Valid primaryKeys: [${validPrimaryKeys.join(', ')}]`); + } + + // 데이터 정규화 (컬럼명 매핑) + const cleanBatch = batch + .map(record => normalizeColumnNames(record, tableSchema)) + .filter(record => Object.keys(record).length > 0); + + if (cleanBatch.length === 0) { + logger.warn(`${tableName} - No valid records after cleaning batch ${currentBatch}`); + continue; + } + + if (validPrimaryKeys.length > 0) { + // 실제 constraint 존재 여부 확인 + const hasConstraint = await hasValidConstraint(tableName, validPrimaryKeys); + + if (hasConstraint) { + // 스키마에서 실제 컬럼 객체들 가져오기 + const conflictColumns = validPrimaryKeys + .filter(key => key in tableSchema) + .map(key => tableSchema[key]); + + if (conflictColumns.length > 0) { + // 업데이트할 필드들만 선별 (기본키 제외) + const updateFields = Object.keys(cleanBatch[0]) + .filter(key => !validPrimaryKeys.includes(key) && key in tableSchema) + .reduce((acc, key) => { + acc[key] = sql.raw(`excluded."${key}"`); + return acc; + }, {} as Record<string, any>); + + await db.insert(tableSchema as any) + .values(cleanBatch) + .onConflictDoUpdate({ + target: conflictColumns, + set: updateFields + }); + } else { + // 스키마에서 컬럼을 찾을 수 없는 경우 + logger.warn(`${tableName} - Primary key columns not found in schema, using simple insert`); + await db.insert(tableSchema as any).values(cleanBatch); + } + } else { + // constraint가 없는 경우: 개별 처리로 중복 방지 + logger.info(`${tableName} - No valid constraints found, using individual upsert`); + + for (const record of cleanBatch) { + try { + await db.insert(tableSchema as any) + .values(record) + .onConflictDoNothing(); // 에러 무시하고 계속 + } catch { + // 개별 레코드 실패는 조용히 무시 + } + } + } + } else { + // 기본키가 없는 테이블: 삭제 후 재삽입 방식 + if (currentBatch === 1) { + // 첫 번째 배치에서만 기존 데이터 확인 및 삭제 + const existingDataCheck = await db.execute(sql` + SELECT COUNT(*) as count FROM ${sql.identifier('nonsap')}.${sql.identifier(tableName.toLowerCase())} + `); + + const existingCount = Number(existingDataCheck.rows[0].count); + if (existingCount > 0) { + logger.info(`${tableName} - Existing data found (${existingCount} records), deleting before insert`); + await db.execute(sql` + DELETE FROM ${sql.identifier('nonsap')}.${sql.identifier(tableName.toLowerCase())} + `); + } else { + logger.info(`${tableName} - No existing data, proceeding with fresh insert`); + } + } + + // 데이터 정규화 후 삽입 + if (cleanBatch.length > 0) { + await db.insert(tableSchema as any).values(cleanBatch); + } + } + + } catch (insertError: unknown) { + const isDuplicateKeyError = insertError && + typeof insertError === 'object' && + 'code' in insertError && + insertError.code === '23505'; + + if (!isDuplicateKeyError) { + logger.warn(`Batch upsert failed for ${tableName}, trying individual operations`, insertError); + + // 개별 처리 + for (const record of batch) { + try { + // 레코드 정규화 + const cleanRecord = normalizeColumnNames(record, tableSchema); + + if (Object.keys(cleanRecord).length > 0) { + await db.insert(tableSchema as any) + .values(cleanRecord) + .onConflictDoNothing(); + } + } catch { + // 개별 레코드 실패는 무시 + } + } + } + } + + if (currentBatch % 10 === 0) { + await new Promise(resolve => setTimeout(resolve, 50)); + } + } + + logger.success(`Successfully processed ${data.length} records for ${tableName}`); + } catch (error) { + logger.error(`Error upserting data to ${tableName}:`, error); + throw error; + } +} + +/** + * 워커를 사용한 테이블 동기화 + */ +async function syncTableWithWorker<T extends TableName>( + tableName: T, + tableIndex: number, + totalTables: number +): Promise<void> { + logger.info(`Starting enhanced sync for table: ${tableName} (${tableIndex}/${totalTables})`); + + const config = getTableSyncConfig(tableName); + const useDeltaSync = DELTA_SYNC_ENABLED && canUseDeltaSync(tableName); + const timestampColumn = getTimestampColumn(tableName); + + // 동기화 타입 결정 + let syncType: 'full' | 'delta' | 'rebuild'; + if (useDeltaSync) { + syncType = 'delta'; + } else if (config.primaryKeys.length === 0) { + // 기본키가 없는 테이블은 삭제 후 재구성 + syncType = 'rebuild'; + } else { + // 기본키가 있지만 차분 동기화가 불가능한 경우 전체 동기화 + syncType = 'full'; + } + + const syncTypeDescription = { + 'delta': '차분 동기화', + 'full': '전체 동기화', + 'rebuild': '삭제 후 재구성' + }[syncType]; + + // 동기화 진행 상태 초기화 + const progress: SyncProgress = { + tableName, + lastSyncDate: new Date().toISOString(), + currentPage: 1, + totalProcessed: 0, + status: 'running', + syncType, + startTime: Date.now() + }; + syncProgress.set(tableName, progress); + + try { + let page = 1; + let totalProcessed = 0; + let hasMore = true; + let maxTimestamp: string | null = null; + let lastSyncTimestamp: string | null = null; + + // 차분 동기화 정보 조회 + if (useDeltaSync) { + const deltaInfo = await getLastSyncInfo(tableName); + lastSyncTimestamp = deltaInfo.lastSyncTimestamp; + logger.info(`${syncTypeDescription} for ${tableName}, last timestamp: ${lastSyncTimestamp || 'none'}`); + } else { + logger.info(`${syncTypeDescription} for ${tableName}`); + } + + while (hasMore) { + let result: { data: DatabaseSchema[T][]; hasMore: boolean; maxTimestamp: string | null }; + + if (useDeltaSync && timestampColumn) { + // 차분 동기화 사용 + result = await fetchOracleDataDelta( + tableName, + lastSyncTimestamp, + timestampColumn, + page + ); + } else { + // 전체 동기화 사용 (기존 방식) + const oracleData = await fetchOracleDataFull(tableName, page); + result = { + data: oracleData, + hasMore: oracleData.length === PAGE_SIZE, + maxTimestamp: null + }; + } + + if (result.data.length === 0) { + logger.info(`No new data found for ${tableName}, skipping...`); + progress.status = 'skipped'; + break; + } + + // PostgreSQL에 upsert + await upsertToPostgresOptimized(tableName, result.data, config.primaryKeys); + + totalProcessed += result.data.length; + hasMore = result.hasMore; + + if (result.maxTimestamp) { + maxTimestamp = result.maxTimestamp; + } + + // 진행 상태 업데이트 + progress.currentPage = page; + progress.totalProcessed = totalProcessed; + + page++; + + // 차분 동기화가 아닌 경우 페이지 크기보다 적으면 중단 + if (!useDeltaSync && result.data.length < PAGE_SIZE) { + hasMore = false; + } + // 차분 동기화에서는 연속된 빈 페이지가 나오면 중단 + else if (useDeltaSync && result.data.length < PAGE_SIZE) { + hasMore = false; + } + } + + // 동기화 완료 처리 + progress.status = progress.status === 'skipped' ? 'skipped' : 'completed'; + progress.endTime = Date.now(); + + // 마지막 동기화 정보 업데이트 + if (maxTimestamp && useDeltaSync) { + await updateLastSyncInfo(tableName, maxTimestamp, totalProcessed); + } + + const duration = (progress.endTime - progress.startTime) / 1000; + logger.success(`Table ${tableName} sync completed. Processed: ${totalProcessed}, Duration: ${duration.toFixed(2)}s, Type: ${syncTypeDescription}`); + + } catch (error) { + progress.status = 'error'; + progress.lastError = error instanceof Error ? error.message : String(error); + progress.endTime = Date.now(); + + logger.error(`Table ${tableName} sync failed:`, error); + throw error; + } +} + +/** + * 멀티스레드 동기화 (테이블별 병렬 처리) + */ +async function syncTablesInParallel(tables: TableName[]): Promise<void> { + const chunks: TableName[][] = []; + const chunkSize = Math.ceil(tables.length / MAX_WORKERS); + + for (let i = 0; i < tables.length; i += chunkSize) { + chunks.push(tables.slice(i, i + chunkSize)); + } + + logger.info(`Processing ${tables.length} tables in ${chunks.length} parallel groups`); + + const promises = chunks.map(async (tableChunk, chunkIndex) => { + logger.info(`Starting worker ${chunkIndex + 1} with ${tableChunk.length} tables`); + + for (let i = 0; i < tableChunk.length; i++) { + const tableName = tableChunk[i]; + const globalIndex = chunks.slice(0, chunkIndex).reduce((sum, chunk) => sum + chunk.length, 0) + i + 1; + + try { + await syncTableWithWorker(tableName, globalIndex, tables.length); + } catch (error) { + logger.error(`Worker ${chunkIndex + 1} failed on table ${tableName}:`, error); + // 개별 테이블 실패는 무시하고 계속 진행 + } + } + + logger.info(`Worker ${chunkIndex + 1} completed`); + }); + + await Promise.all(promises); +} + +/** + * 모든 테이블 동기화 (개선된 버전) + */ +async function syncAllTablesEnhanced(): Promise<void> { + logger.header('Starting Enhanced NONSAP Data Synchronization'); + + await initializeSyncStatusTable(); + + const startTime = Date.now(); + let successCount = 0; + let errorCount = 0; + let skippedCount = 0; + const totalTables = ALL_TABLE_NAMES.length; + + logger.info(`Total tables to sync: ${totalTables}`); + logger.info(`Delta sync enabled: ${DELTA_SYNC_ENABLED}`); + logger.info(`Max workers: ${MAX_WORKERS}`); + + try { + await syncTablesInParallel(ALL_TABLE_NAMES); + + // 결과 집계 + for (const progress of syncProgress.values()) { + switch (progress.status) { + case 'completed': + successCount++; + break; + case 'error': + errorCount++; + break; + case 'skipped': + skippedCount++; + break; + } + } + + } catch (error) { + logger.error('Sync process failed:', error); + } + + const duration = Date.now() - startTime; + logger.info(`Enhanced sync completed in ${(duration / 1000).toFixed(2)}s`); + logger.info(`Success: ${successCount}, Errors: ${errorCount}, Skipped: ${skippedCount}`); + logger.info(`Total tables processed: ${totalTables}`); + + if (errorCount > 0) { + logger.warn(`${errorCount} tables had errors during sync`); + } + + if (successCount + skippedCount === totalTables) { + logger.success('🚀 All tables synchronized successfully with enhanced performance!'); + } +} + +/** + * 동기화 상태 조회 API (개선된 버전) + */ +export async function getSyncProgressEnhanced(): Promise<SyncProgress[]> { + return Array.from(syncProgress.values()); +} + +/** + * 수동 동기화 트리거 (개선된 버전) + */ +export async function triggerEnhancedSync(): Promise<void> { + logger.info('Enhanced manual sync triggered'); + await syncAllTablesEnhanced(); +} + +/** + * 특정 테이블 전체 재동기화 + */ +export async function triggerFullResync(tableName: TableName): Promise<void> { + logger.info(`Full resync triggered for table: ${tableName}`); + + try { + // 마지막 동기화 정보 삭제 (전체 동기화 강제) + await db.execute(sql` + DELETE FROM nonsap.${sql.identifier(SYNC_STATUS_TABLE)} + WHERE table_name = ${tableName} + `); + + await syncTableWithWorker(tableName, 1, 1); + logger.success(`Full resync completed for ${tableName}`); + } catch (error) { + logger.error(`Full resync failed for ${tableName}:`, error); + throw error; + } +} + +/** + * 개선된 동기화 스케줄러 시작 + */ +export async function startEnhancedSyncScheduler(): Promise<void> { + logger.info('Initializing Enhanced NONSAP data synchronization scheduler...'); + + try { + // 매일 새벽 1시에 실행 (아래 타임존 설정이 있으므로 KST로 기입 가능) + cron.schedule('0 1 * * *', async () => { + try { + logger.info('Cron job triggered: Starting enhanced scheduled sync'); + + const isConnected = await testOracleConnection(); + if (!isConnected) { + logger.warn('Oracle DB not available, skipping sync'); + return; + } + + await syncAllTablesEnhanced(); + } catch (error) { + logger.error('Enhanced scheduled sync failed:', error); + } + }, { + timezone: 'Asia/Seoul' + }); + + logger.success(`Enhanced NONSAP sync scheduler registered (every 30 minutes) for ${ALL_TABLE_NAMES.length} tables`); + + if (process.env.NODE_ENV === 'development') { + logger.info('Development mode: Enhanced cron registered but initial sync skipped'); + return; + } + + if (process.env.SYNC_ON_START === 'true') { + logger.info('Initial enhanced sync on startup enabled'); + setTimeout(async () => { + try { + const isConnected = await testOracleConnection(); + if (isConnected) { + await syncAllTablesEnhanced(); + } else { + logger.warn('Initial enhanced sync skipped - Oracle DB not available'); + } + } catch (error) { + logger.error('Initial enhanced sync failed:', error); + } + }, 10000); + } + + } catch (error) { + logger.error('Failed to set up enhanced cron scheduler:', error); + logger.warn('Application will continue without enhanced sync scheduler'); + } +} + +/** + * Oracle DB 연결 테스트 + */ +async function testOracleConnection(): Promise<boolean> { + try { + const result = await oracleKnex.raw('SELECT 1 FROM DUAL'); + return !!result; + } catch (error) { + logger.error('Oracle DB connection test failed:', error); + return false; + } +}
\ No newline at end of file diff --git a/lib/nonsap-sync/sync-config.ts b/lib/nonsap-sync/sync-config.ts new file mode 100644 index 00000000..a18dd208 --- /dev/null +++ b/lib/nonsap-sync/sync-config.ts @@ -0,0 +1,46 @@ +// NONSAP 동기화 설정 +export interface SyncConfig { + pageSize: number; + batchSize: number; + maxWorkers: number; + deltaSyncEnabled: boolean; + cronSchedule: string; + autoRefreshInterval: number; // UI 자동 새로고침 간격 (ms) +} + +// 환경별 설정 +const configs: Record<string, SyncConfig> = { + development: { + pageSize: 1000, + batchSize: 50, + maxWorkers: 4, + deltaSyncEnabled: true, + cronSchedule: '0 0 1 * * *', // 매일 새벽 1시 + autoRefreshInterval: 1000, // 1초 + }, + production: { + pageSize: 5000, + batchSize: 200, + maxWorkers: 4, + deltaSyncEnabled: true, + cronSchedule: '0 0 1 * * *', // 매일 새벽 1시 + autoRefreshInterval: 30000, // 30초 + } +}; + +// 현재 환경의 설정 가져오기 +export const SYNC_CONFIG: SyncConfig = configs[process.env.NODE_ENV || 'development']; + +// 개별 설정값들 (기존 코드와의 호환성을 위해) +export const PAGE_SIZE = SYNC_CONFIG.pageSize; +export const BATCH_SIZE = SYNC_CONFIG.batchSize; +export const MAX_WORKERS = SYNC_CONFIG.maxWorkers; +export const DELTA_SYNC_ENABLED = SYNC_CONFIG.deltaSyncEnabled; + +// 설정 정보를 반환하는 함수 (API에서 사용) +export function getSyncConfigInfo() { + return { + ...SYNC_CONFIG, + environment: process.env.NODE_ENV || 'development' + }; +}
\ No newline at end of file diff --git a/lib/nonsap-sync/sync-service.ts b/lib/nonsap-sync/sync-service.ts new file mode 100644 index 00000000..286952eb --- /dev/null +++ b/lib/nonsap-sync/sync-service.ts @@ -0,0 +1,414 @@ +"use server"; + +import * as cron from 'node-cron'; +import { oracleKnex } from '@/lib/oracle-db/db'; +import db from '@/db/db'; +import { DatabaseSchema, TableName, ALL_TABLE_NAMES } from '@/lib/oracle-db/nonsap/oracle-schema'; +import * as nonsapSchema from '@/db/schema/NONSAP/nonsap'; + +// oracle-schema.ts에서 테이블 목록 자동 추출 +const SYNC_TABLES: TableName[] = ALL_TABLE_NAMES; + +// 페이지 단위 +const PAGE_SIZE = 2000; +const BATCH_SIZE = 100; + +interface SyncProgress { + tableName: string; + lastSyncDate: string; + currentPage: number; + totalProcessed: number; + status: 'running' | 'completed' | 'error'; + lastError?: string; +} + +// 동기화 진행 상태 저장 +const syncProgress = new Map<string, SyncProgress>(); + +// 진행률 바 유틸리티 +const createProgressBar = (current: number, total: number, width: number = 20): string => { + const filled = Math.floor((current / total) * width); + const empty = width - filled; + const percentage = Math.round((current / total) * 100); + + const bar = '█'.repeat(filled) + '░'.repeat(empty); + return `[ ${current.toString().padStart(3)} / ${total.toString().padEnd(3)} | ${bar} | ${percentage.toString().padStart(3)}% ]`; +}; + +// 같은 줄에서 업데이트되는 진행률 바 출력 +const updateProgressBar = (message: string, current: number, total: number): void => { + const progressBar = createProgressBar(current, total); + const fullMessage = `[NONSAP-SYNC] ${message} ${progressBar}`; + + // 이전 줄을 지우고 새로운 진행률 출력 + process.stdout.write('\r' + ' '.repeat(100) + '\r'); // 줄 지우기 + process.stdout.write(fullMessage); + + // 완료되면 줄바꿈 + if (current >= total) { + process.stdout.write('\n'); + } +}; + +// 간단한 로거 +const logger = { + info: (message: string, ...args: unknown[]) => console.log(`[NONSAP-SYNC INFO] ${message}`, ...args), + error: (message: string, ...args: unknown[]) => console.error(`[NONSAP-SYNC ERROR] ${message}`, ...args), + warn: (message: string, ...args: unknown[]) => console.warn(`[NONSAP-SYNC WARN] ${message}`, ...args), + success: (message: string, ...args: unknown[]) => console.log(`[NONSAP-SYNC SUCCESS] ${message}`, ...args), + header: (message: string) => { + console.log('\n' + '='.repeat(80)); + console.log(`[NONSAP-SYNC] ${message}`); + console.log('='.repeat(80) + '\n'); + }, + progress: updateProgressBar +}; + +/** + * Oracle DB에서 특정 테이블의 데이터를 페이지 단위로 조회 + */ +async function fetchOracleData<T extends TableName>( + tableName: T, + page: number, + pageSize: number = PAGE_SIZE +): Promise<DatabaseSchema[T][]> { + const offset = (page - 1) * pageSize; + + try { + // Oracle에서는 ROWID나 다른 고유 컬럼으로 정렬해야 함 + const query = oracleKnex(tableName) + .select('*') + .orderBy('ROWID') // Oracle ROWID로 정렬 (또는 적절한 기본키) + .offset(offset) + .limit(pageSize); + + const results = await query; + logger.info(`Fetched ${results.length} records from ${tableName} (page ${page})`); + + return results as DatabaseSchema[T][]; + } catch (error) { + logger.error(`Error fetching data from ${tableName}:`, error); + throw error; + } +} + +/** + * PostgreSQL에 데이터 upsert + */ +async function upsertToPostgres<T extends TableName>( + tableName: T, + data: DatabaseSchema[T][], + pageInfo?: { current: number; total: number } +): Promise<void> { + if (data.length === 0) return; + + try { + // 테이블명을 camelCase로 변환하여 스키마에서 찾기 + const tableCamelCase = tableName.toLowerCase() + .split('_') + .map((word, index) => index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)) + .join(''); + + const tableSchema = (nonsapSchema as any)[tableCamelCase]; + + if (!tableSchema) { + throw new Error(`Table schema not found for ${tableName} (${tableCamelCase})`); + } + + const totalBatches = Math.ceil(data.length / BATCH_SIZE); + + // 배치 단위로 upsert 처리 + for (let i = 0; i < data.length; i += BATCH_SIZE) { + const batch = data.slice(i, i + BATCH_SIZE); + const currentBatch = Math.floor(i / BATCH_SIZE) + 1; + + // 배치 진행률 표시 + const batchMessage = `${tableName} - Batch Processing`; + logger.progress(batchMessage, currentBatch, totalBatches); + + try { + // PostgreSQL에 삽입 시도 + await db.insert(tableSchema as any).values(batch); + } catch (insertError: unknown) { + // 중복키 에러인지 확인 + const isDuplicateKeyError = insertError && + typeof insertError === 'object' && + 'code' in insertError && + insertError.code === '23505'; + + // Production 환경에서는 중복키 에러 로그 생략 + if (!isDuplicateKeyError) { + logger.warn(`Batch insert failed for ${tableName}, trying individual upserts`, insertError); + } + + // 삽입 실패 시 개별 레코드 upsert 시도 + for (const record of batch) { + try { + await db.insert(tableSchema as any) + .values(record) + .onConflictDoNothing(); // 중복 시 무시하거나 업데이트 + } catch (upsertError) { + // 중복키 에러인지 확인 + const isDuplicateKeyError = upsertError && + typeof upsertError === 'object' && + 'code' in upsertError && + upsertError.code === '23505'; + + // Production 환경에서는 중복키 에러 로그 생략 + if (!isDuplicateKeyError) { + logger.error(`Failed to upsert record in ${tableName}:`, upsertError); + } + // 개별 레코드 실패는 로그만 남기고 계속 진행 + } + } + } + + // 잠시 대기 (시스템 부하 방지) + if (currentBatch % 10 === 0) { + await new Promise(resolve => setTimeout(resolve, 100)); + } + } + + logger.success(`Successfully processed ${data.length} records for ${tableName}`); + } catch (error) { + logger.error(`Error upserting data to ${tableName}:`, error); + throw error; + } +} + +/** + * 특정 테이블 동기화 + */ +async function syncTable<T extends TableName>( + tableName: T, + tableIndex: number, + totalTables: number +): Promise<void> { + logger.info(`Starting sync for table: ${tableName} (${tableIndex}/${totalTables})`); + + // 동기화 진행 상태 초기화 + syncProgress.set(tableName, { + tableName, + lastSyncDate: new Date().toISOString(), + currentPage: 1, + totalProcessed: 0, + status: 'running' + }); + + try { + let page = 1; + let totalProcessed = 0; + let hasMore = true; + let estimatedTotalPages = 1; // 추정 총 페이지 수 + + while (hasMore) { + // Oracle에서 데이터 조회 + const oracleData = await fetchOracleData(tableName, page); + + if (oracleData.length === 0) { + hasMore = false; + break; + } + + // 첫 페이지에서 대략적인 총 페이지 수 추정 + if (page === 1 && oracleData.length === PAGE_SIZE) { + // 첫 페이지가 가득 찼다면 더 많은 페이지가 있을 것으로 추정 + estimatedTotalPages = Math.max(10, page * 2); // 최소 10페이지로 추정 + } + + // 페이지 진행률 표시 + const pageMessage = `${tableName} - Page Processing`; + const displayTotalPages = hasMore ? Math.max(estimatedTotalPages, page + 1) : page; + logger.progress(pageMessage, page, displayTotalPages); + + // PostgreSQL에 upsert (페이지 정보 전달) + await upsertToPostgres(tableName, oracleData, { current: page, total: displayTotalPages }); + + totalProcessed += oracleData.length; + + // 진행 상태 업데이트 + const progress = syncProgress.get(tableName)!; + progress.currentPage = page; + progress.totalProcessed = totalProcessed; + + // 다음 페이지로 + page++; + + // 페이지 크기보다 적으면 마지막 페이지 + if (oracleData.length < PAGE_SIZE) { + hasMore = false; + // 마지막 페이지 진행률 업데이트 + logger.progress(pageMessage, page - 1, page - 1); + } else { + // 추정 페이지 수 업데이트 + estimatedTotalPages = Math.max(estimatedTotalPages, page + 5); + } + } + + // 동기화 완료 + const progress = syncProgress.get(tableName)!; + progress.status = 'completed'; + + logger.success(`Table ${tableName} sync completed. Total processed: ${totalProcessed}`); + + } catch (error) { + const progress = syncProgress.get(tableName)!; + progress.status = 'error'; + progress.lastError = error instanceof Error ? error.message : String(error); + + logger.error(`Table ${tableName} sync failed:`, error); + throw error; + } +} + +/** + * 모든 테이블 동기화 + */ +async function syncAllTables(): Promise<void> { + logger.header('Starting NONSAP Data Synchronization'); + + const startTime = Date.now(); + let successCount = 0; + let errorCount = 0; + const totalTables = SYNC_TABLES.length; + + // 전체 테이블 진행률 표시 + logger.info(`Total tables to sync: ${totalTables}`); + + // oracle-schema.ts에서 테이블 목록 가져오기 + for (let i = 0; i < SYNC_TABLES.length; i++) { + const tableName = SYNC_TABLES[i]; + const tableIndex = i + 1; + + // 전체 테이블 진행률 표시 + const overallMessage = `Overall Progress`; + logger.progress(overallMessage, tableIndex - 1, totalTables); + + try { + await syncTable(tableName, tableIndex, totalTables); + successCount++; + } catch (error) { + errorCount++; + logger.error(`Failed to sync table ${tableName}:`, error); + // 에러가 발생해도 다른 테이블은 계속 동기화 + continue; + } + } + + // 최종 진행률 표시 + const overallMessage = `Overall Progress`; + logger.progress(overallMessage, totalTables, totalTables); + + const duration = Date.now() - startTime; + logger.info(`Sync completed in ${(duration / 1000).toFixed(2)}s`); + logger.info(`Success: ${successCount}, Errors: ${errorCount}`); + logger.info(`Total tables processed: ${totalTables}`); + + if (errorCount > 0) { + logger.warn(`${errorCount} tables had errors during sync`); + } + + if (successCount === totalTables) { + logger.success('🎉 All tables synchronized successfully!'); + } +} + +/** + * 동기화 상태 조회 API + */ +export async function getSyncProgress(): Promise<SyncProgress[]> { + return Array.from(syncProgress.values()); +} + +/** + * 수동 동기화 트리거 + */ +export async function triggerManualSync(): Promise<void> { + logger.info('Manual sync triggered'); + await syncAllTables(); +} + +/** + * Oracle DB 연결 테스트 + */ +async function testOracleConnection(): Promise<boolean> { + try { + const result = await oracleKnex.raw('SELECT 1 FROM DUAL'); + return !!result; + } catch (error) { + logger.error('Oracle DB connection test failed:', error); + return false; + } +} + +/** + * 동기화 스케줄러 시작 + */ +export async function startNonsapSyncScheduler(): Promise<void> { + logger.info('Initializing NONSAP data synchronization scheduler...'); + + // Oracle DB 연결 테스트 (비동기) + testOracleConnection().then(isConnected => { + if (!isConnected) { + logger.warn('Oracle DB connection failed - sync scheduler will be disabled'); + logger.warn('Application will continue to run normally'); + return; + } + logger.success('Oracle DB connection test passed'); + }).catch(error => { + logger.error('Oracle DB connection test error:', error); + logger.warn('Sync scheduler will be disabled, application continues'); + }); + + try { + // 매 시간마다 실행 (0분에) + cron.schedule('0 * * * *', async () => { + try { + logger.info('Cron job triggered: Starting scheduled sync'); + + // 동기화 전 Oracle 연결 확인 + const isConnected = await testOracleConnection(); + if (!isConnected) { + logger.warn('Oracle DB not available, skipping sync'); + return; + } + + await syncAllTables(); + } catch (error) { + logger.error('Scheduled sync failed:', error); + // 동기화 실패해도 다음 스케줄은 계속 실행 + } + }, { + timezone: 'Asia/Seoul' + }); + + logger.success(`NONSAP data synchronization cron job registered (every hour) for ${SYNC_TABLES.length} tables`); + + // 개발 환경에서는 스케줄러만 등록하고 실제 실행은 안 함 + if (process.env.NODE_ENV === 'development') { + logger.info('Development mode: Cron registered but initial sync skipped'); + return; + } + + // 애플리케이션 시작 시 한 번 실행 (선택사항) + if (process.env.SYNC_ON_START === 'true') { + logger.info('Initial sync on startup enabled'); + setTimeout(async () => { + try { + const isConnected = await testOracleConnection(); + if (isConnected) { + await syncAllTables(); + } else { + logger.warn('Initial sync skipped - Oracle DB not available'); + } + } catch (error) { + logger.error('Initial sync failed:', error); + } + }, 10000); // 10초 후 실행 (DB 연결 안정화 대기) + } + + } catch (error) { + logger.error('Failed to set up cron scheduler:', error); + logger.warn('Application will continue without sync scheduler'); + } +}
\ No newline at end of file diff --git a/lib/nonsap-sync/table-config.ts b/lib/nonsap-sync/table-config.ts new file mode 100644 index 00000000..85744b44 --- /dev/null +++ b/lib/nonsap-sync/table-config.ts @@ -0,0 +1,352 @@ +import { TableName } from '@/lib/oracle-db/nonsap/oracle-schema'; + +export interface TableSyncConfig { + /** 차분 동기화에 사용할 타임스탬프 컬럼 (우선순위 순) */ + timestampColumns: string[]; + /** 기본키 컬럼들 */ + primaryKeys: string[]; + /** 정렬에 사용할 컬럼 (차분 동기화용) */ + orderByColumns: string[]; + /** 인덱스가 있는 컬럼인지 여부 */ + hasTimestampIndex: boolean; + /** 예상 변경 빈도 (high/medium/low) */ + changeFrequency: 'high' | 'medium' | 'low'; +} + +// 테이블별 동기화 설정 +export const TABLE_SYNC_CONFIG: Record<TableName, TableSyncConfig> = { + // 자재 관련 테이블 (변경 빈도 높음) + 'CMCTB_MAT_BSE': { + timestampColumns: ['FIN_CHG_DTM', 'FS_INP_DTM', 'IF_DT'], + primaryKeys: ['MAT_NO'], + orderByColumns: ['FIN_CHG_DTM', 'MAT_NO'], + hasTimestampIndex: true, + changeFrequency: 'high' + }, + 'CMCTB_MAT_PLNT': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['MAT_NO', 'PLNT'], + orderByColumns: ['IF_DT', 'IF_TM', 'MAT_NO'], + hasTimestampIndex: true, + changeFrequency: 'high' + }, + + // Customer 관련 테이블 (변경 빈도 중간) + 'CMCTB_CUSTOMER_GENERAL': { + timestampColumns: ['IF_DT', 'CHG_DT'], + primaryKeys: ['CSTM_CD'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_ADDR': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'ADR_NO', 'INTL_ADR_VER_ID'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + + // 코드 관련 테이블 (변경 빈도 낮음) - 기본값으로 설정 + 'CMCTB_CD': { + timestampColumns: ['CHG_DT', 'CRTE_DT'], + primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 + orderByColumns: ['CHG_DT', 'CHG_TM', 'CD_CLF'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + 'CMCTB_CDNM': { + timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], + primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 + orderByColumns: ['CHG_DT', 'CHG_TM', 'LANG_KEY', 'CD_CLF'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + 'CMCTB_CD_CLF': { + timestampColumns: ['XDATS', 'XTIMS', 'CHG_DT', 'CHG_TM'], + primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 + orderByColumns: ['XDATS', 'XTIMS', 'CD_CLF'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + 'CMCTB_CD_CLF_NM': { + timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], + primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 + orderByColumns: ['CHG_DT', 'CHG_TM', 'LANG_KEY', 'CD_CLF'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + + // Customer 관련 테이블 (변경 빈도 중간) + 'CMCTB_CUSTOMER_CFPN': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'SALE_ORG_CD', 'DIST_PATH', 'PDT_GRP', 'PTNR_SKL', 'PTNR_CNT'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_COMPNY': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'CO_ID'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_REPREMAIL': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_REPRFAX': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_REPRTEL': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_REPRURL': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_SORG': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'SALE_ORG_CD', 'DIST_PATH', 'PDT_GRP'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_TAXCD': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'DPRT_NTN', 'TX_CTG'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_CUSTOMER_TAXNUM': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['CSTM_CD', 'TX_NO_CTG'], + orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + + // 자재 관련 테이블 (변경 빈도 높음) + 'CMCTB_MAT_CLAS': { + timestampColumns: ['CHG_DT'], + primaryKeys: ['CLAS_CD'], + orderByColumns: ['CHG_DT', 'CLAS_CD'], + hasTimestampIndex: false, + changeFrequency: 'medium' + }, + 'CMCTB_MAT_CLAS_SPCHAR': { + timestampColumns: ['CHG_DT'], + primaryKeys: ['CLAS_CD', 'SPCHAR_CD'], + orderByColumns: ['CHG_DT', 'CLAS_CD'], + hasTimestampIndex: false, + changeFrequency: 'medium' + }, + 'CMCTB_MAT_DSC': { + timestampColumns: [], // 시간 컬럼 없음 + primaryKeys: ['MAT_NO', 'LANG_KEY'], + orderByColumns: ['MAT_NO', 'LANG_KEY'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + 'CMCTB_MAT_SPCHAR': { + timestampColumns: [], // 시간 컬럼 없음 + primaryKeys: ['MAT_NO', 'SPCHAR_CD'], + orderByColumns: ['MAT_NO', 'SPCHAR_CD'], + hasTimestampIndex: false, + changeFrequency: 'medium' + }, + 'CMCTB_MAT_SPCHAR_MAST': { + timestampColumns: ['CHG_DT'], + primaryKeys: ['SPCHAR_CD'], + orderByColumns: ['CHG_DT', 'SPCHAR_CD'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + 'CMCTB_MAT_SPCHAR_VAL': { + timestampColumns: ['CHG_DT'], + primaryKeys: ['SPCHAR_CD', 'SPCHAR_VAL_CD'], + orderByColumns: ['CHG_DT', 'SPCHAR_CD'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + 'CMCTB_MAT_UOM': { + timestampColumns: [], // 시간 컬럼 없음 + primaryKeys: ['MAT_NO', 'SBST_UOM'], + orderByColumns: ['MAT_NO', 'SBST_UOM'], + hasTimestampIndex: false, + changeFrequency: 'low' + }, + + // 프로젝트 관련 테이블 + 'CMCTB_PROJ_BIZCLS': { + timestampColumns: [], // 시간 컬럼 없음 + primaryKeys: ['PROJ_NO', 'TYPE'], + orderByColumns: ['PROJ_NO', 'TYPE'], + hasTimestampIndex: false, + changeFrequency: 'medium' + }, + 'CMCTB_PROJ_MAST': { + timestampColumns: ['XDATS', 'XTIMS'], + primaryKeys: ['PROJ_NO'], + orderByColumns: ['XDATS', 'XTIMS', 'PROJ_NO'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_PROJ_WBS': { + timestampColumns: ['XDATS', 'XTIMS'], + primaryKeys: ['PROJ_NO', 'WBS_ELMT'], + orderByColumns: ['XDATS', 'XTIMS', 'PROJ_NO'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + + // Vendor 관련 테이블 + 'CMCTB_VENDOR_ADDR': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'INTL_ADR_VER_ID'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_COMPNY': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'CO_CD'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_GENERAL': { + timestampColumns: ['IF_DT', 'IF_TM', 'CHG_DT', 'CHG_TM'], + primaryKeys: ['VNDRCD'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_GRP': { + timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], + primaryKeys: ['VNDRCD', 'BIZ_GRP_CD'], + orderByColumns: ['CHG_DT', 'CHG_TM', 'VNDRCD'], + hasTimestampIndex: false, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_INCO': { + timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], + primaryKeys: ['VNDRCD'], + orderByColumns: ['CHG_DT', 'CHG_TM', 'VNDRCD'], + hasTimestampIndex: false, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_PORG': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'PUR_ORG_CD'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_REPREMAIL': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_REPRFAX': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_REPRTEL': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_REPRURL': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_TAXNUM': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'TX_NO_CTG'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_VFPN': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'PUR_ORG_CD', 'VNDR_SUB_NO', 'PLNT_CD', 'PTNR_SKL', 'PTNR_CNT'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + 'CMCTB_VENDOR_WHTHX': { + timestampColumns: ['IF_DT', 'IF_TM'], + primaryKeys: ['VNDRCD', 'CO_CD', 'SRCE_TX_TP'], + orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], + hasTimestampIndex: true, + changeFrequency: 'medium' + }, + + // 견적 관련 테이블 + 'PLFTB_ESTM_PROJ_MAST': { + timestampColumns: ['FIN_CHG_DTM', 'FS_INP_DTM', 'ESTM_AOM_STAT_CHG_DTM'], + primaryKeys: ['ESTM_PROJ_NO'], + orderByColumns: ['FIN_CHG_DTM', 'ESTM_PROJ_NO'], + hasTimestampIndex: true, + changeFrequency: 'high' + } +}; + +// 기본 설정 (설정되지 않은 테이블용) +const DEFAULT_CONFIG: TableSyncConfig = { + timestampColumns: ['CHG_DT', 'IF_DT', 'CRTE_DT'], + primaryKeys: [], // 기본키 없음 - onConflictDoNothing 사용 + orderByColumns: ['CHG_DT'], + hasTimestampIndex: false, + changeFrequency: 'medium' +}; + +/** + * 테이블의 동기화 설정 가져오기 + */ +export function getTableSyncConfig(tableName: TableName): TableSyncConfig { + return TABLE_SYNC_CONFIG[tableName] || DEFAULT_CONFIG; +} + +/** + * 차분 동기화가 가능한 테이블인지 확인 + */ +export function canUseDeltaSync(tableName: TableName): boolean { + const config = getTableSyncConfig(tableName); + return config.timestampColumns.length > 0 && config.timestampColumns[0] !== 'ROWID'; +} + +/** + * 테이블의 최적 타임스탬프 컬럼 가져오기 + */ +export function getTimestampColumn(tableName: TableName): string | null { + const config = getTableSyncConfig(tableName); + return config.timestampColumns.length > 0 ? config.timestampColumns[0] : null; +}
\ No newline at end of file diff --git a/lib/oracle-db/check.ts b/lib/oracle-db/check.ts new file mode 100644 index 00000000..0b26bef4 --- /dev/null +++ b/lib/oracle-db/check.ts @@ -0,0 +1,39 @@ +// 연결을 테스트하는 함수 +import { getOracleConnection, oracleKnex } from './db'; + +export async function testOracleConnection() { + try { + const connection = await getOracleConnection(); + const result = await connection.execute('SELECT 1 FROM DUAL'); + await connection.close(); + return { + success: true, + message: 'Oracle DB 연결 성공', + data: result.rows + }; + } catch (error: unknown) { + return { + success: false, + message: 'Oracle DB 연결 실패', + error: error instanceof Error ? error.message : '알 수 없는 오류' + }; + } + } + + // Knex를 사용하여 Oracle 연결 테스트 + export async function testKnexOracleConnection() { + try { + const result = await oracleKnex.raw('SELECT 1 FROM DUAL'); + return { + success: true, + message: 'Knex Oracle DB 연결 성공', + data: result + }; + } catch (error: unknown) { + return { + success: false, + message: 'Knex Oracle DB 연결 실패', + error: error instanceof Error ? error.message : '알 수 없는 오류' + }; + } + }
\ No newline at end of file diff --git a/lib/oracle-db/db.ts b/lib/oracle-db/db.ts index 62321df0..211fd04b 100644 --- a/lib/oracle-db/db.ts +++ b/lib/oracle-db/db.ts @@ -1,3 +1,5 @@ +"use server"; + import knex from 'knex'; // import oracledb from 'oracledb'; // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -30,40 +32,3 @@ export async function getOracleConnection() { } } -// 연결을 테스트하는 함수 -export async function testOracleConnection() { - try { - const connection = await getOracleConnection(); - const result = await connection.execute('SELECT 1 FROM DUAL'); - await connection.close(); - return { - success: true, - message: 'Oracle DB 연결 성공', - data: result.rows - }; - } catch (error: unknown) { - return { - success: false, - message: 'Oracle DB 연결 실패', - error: error instanceof Error ? error.message : '알 수 없는 오류' - }; - } -} - -// Knex를 사용하여 Oracle 연결 테스트 -export async function testKnexOracleConnection() { - try { - const result = await oracleKnex.raw('SELECT 1 FROM DUAL'); - return { - success: true, - message: 'Knex Oracle DB 연결 성공', - data: result - }; - } catch (error: unknown) { - return { - success: false, - message: 'Knex Oracle DB 연결 실패', - error: error instanceof Error ? error.message : '알 수 없는 오류' - }; - } -}
\ No newline at end of file diff --git a/lib/oracle-db/nonsap/1.table-and-columns-info.csv b/lib/oracle-db/nonsap/1.table-and-columns-info.csv new file mode 100644 index 00000000..c391c4ef --- /dev/null +++ b/lib/oracle-db/nonsap/1.table-and-columns-info.csv @@ -0,0 +1,922 @@ +OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,NULLABLE,TABLE_COMMENTS,COLUMN_COMMENTS,CONSTRAINTS +SHI1,CMCTB_CD,CD_CLF,VARCHAR2,10,N,코드,코드분류,"CHECK, PK" +SHI1,CMCTB_CD,CD,VARCHAR2,10,N,코드,코드,"CHECK, PK" +SHI1,CMCTB_CD,CD2,VARCHAR2,10,N,코드,코드2,"CHECK, PK" +SHI1,CMCTB_CD,CD3,VARCHAR2,10,N,코드,코드3,"CHECK, PK" +SHI1,CMCTB_CD,USR_DF_CHAR_1,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_2,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_3,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_4,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_5,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_6,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_7,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_8,VARCHAR2,60,Y,코드,사용자정의문자열10,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_9,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_10,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_11,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_12,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_13,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_14,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_15,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_16,VARCHAR2,60,Y,코드,사용자정의문자열20,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_17,VARCHAR2,120,Y,코드,사용자정의문자열40,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_18,VARCHAR2,120,Y,코드,사용자정의문자열40,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_19,VARCHAR2,765,Y,코드,사용자정의문자열255,NULL +SHI1,CMCTB_CD,USR_DF_CHAR_20,VARCHAR2,765,Y,코드,사용자정의문자열255,NULL +SHI1,CMCTB_CD,USR_DF_CHK_1,VARCHAR2,1,Y,코드,사용자정의체크1,NULL +SHI1,CMCTB_CD,USR_DF_CHK_2,VARCHAR2,1,Y,코드,사용자정의체크2,NULL +SHI1,CMCTB_CD,USR_DF_CHK_3,VARCHAR2,1,Y,코드,사용자정의체크3,NULL +SHI1,CMCTB_CD,USR_DF_CHK_4,VARCHAR2,1,Y,코드,사용자정의체크4,NULL +SHI1,CMCTB_CD,USR_DF_CHK_5,VARCHAR2,1,Y,코드,사용자정의체크5,NULL +SHI1,CMCTB_CD,USR_DF_CHK_6,VARCHAR2,1,Y,코드,사용자정의체크6,NULL +SHI1,CMCTB_CD,USR_DF_CHK_7,VARCHAR2,1,Y,코드,사용자정의체크7,NULL +SHI1,CMCTB_CD,USR_DF_CHK_8,VARCHAR2,1,Y,코드,사용자정의체크8,NULL +SHI1,CMCTB_CD,USR_DF_DT_1,VARCHAR2,8,Y,코드,사용자정의일자1,NULL +SHI1,CMCTB_CD,USR_DF_DT_2,VARCHAR2,8,Y,코드,사용자정의일자2,NULL +SHI1,CMCTB_CD,USR_DF_DT_3,VARCHAR2,8,Y,코드,사용자정의일자3,NULL +SHI1,CMCTB_CD,USR_DF_DT_4,VARCHAR2,8,Y,코드,사용자정의일자4,NULL +SHI1,CMCTB_CD,USR_DF_TM_1,VARCHAR2,6,Y,코드,사용자정의시간1,NULL +SHI1,CMCTB_CD,USR_DF_TM_2,VARCHAR2,6,Y,코드,사용자정의시간2,NULL +SHI1,CMCTB_CD,USR_DF_TM_3,VARCHAR2,6,Y,코드,사용자정의시간3,NULL +SHI1,CMCTB_CD,USR_DF_TM_4,VARCHAR2,6,Y,코드,사용자정의시간4,NULL +SHI1,CMCTB_CD,CRTER,VARCHAR2,13,Y,코드,생성자,NULL +SHI1,CMCTB_CD,CRTE_DT,VARCHAR2,8,Y,코드,생성일자,NULL +SHI1,CMCTB_CD,CRTE_TM,VARCHAR2,6,Y,코드,생성시간,NULL +SHI1,CMCTB_CD,CHGR,VARCHAR2,13,Y,코드,수정자,NULL +SHI1,CMCTB_CD,CHG_DT,VARCHAR2,8,Y,코드,수정일자,NULL +SHI1,CMCTB_CD,CHG_TM,VARCHAR2,6,Y,코드,수정시간,NULL +SHI1,CMCTB_CD,DEL_YN,VARCHAR2,1,Y,코드,삭제여부,NULL +SHI1,CMCTB_CDNM,LANG_KEY,VARCHAR2,1,N,코드내역,언어키,"CHECK, PK" +SHI1,CMCTB_CDNM,CD_CLF,VARCHAR2,10,N,코드내역,코드분류,"CHECK, PK" +SHI1,CMCTB_CDNM,CD,VARCHAR2,10,N,코드내역,코드,"CHECK, PK" +SHI1,CMCTB_CDNM,CD2,VARCHAR2,10,N,코드내역,코드2,"CHECK, PK" +SHI1,CMCTB_CDNM,CD3,VARCHAR2,10,N,코드내역,코드3,"CHECK, PK" +SHI1,CMCTB_CDNM,CDNM,VARCHAR2,120,Y,코드내역,코드명,NULL +SHI1,CMCTB_CDNM,GRP_DSC,VARCHAR2,500,Y,코드내역,그룹설명,NULL +SHI1,CMCTB_CDNM,CRTER,VARCHAR2,13,Y,코드내역,생성자,NULL +SHI1,CMCTB_CDNM,CRTE_DT,VARCHAR2,8,Y,코드내역,생성일자,NULL +SHI1,CMCTB_CDNM,CRTE_TM,VARCHAR2,6,Y,코드내역,생성시간,NULL +SHI1,CMCTB_CDNM,CHGR,VARCHAR2,13,Y,코드내역,수정자,NULL +SHI1,CMCTB_CDNM,CHG_DT,VARCHAR2,8,Y,코드내역,수정일자,NULL +SHI1,CMCTB_CDNM,CHG_TM,VARCHAR2,6,Y,코드내역,수정시간,NULL +SHI1,CMCTB_CDNM,DEL_YN,VARCHAR2,1,Y,코드내역,삭제여부,NULL +SHI1,CMCTB_CD_CLF,CD_CLF,VARCHAR2,10,N,공통코드클래스,코드분류,"CHECK, PK" +SHI1,CMCTB_CD_CLF,CRTER,VARCHAR2,13,Y,공통코드클래스,생성자,NULL +SHI1,CMCTB_CD_CLF,CRTE_DT,VARCHAR2,8,Y,공통코드클래스,생성일자,NULL +SHI1,CMCTB_CD_CLF,CRTE_TM,VARCHAR2,6,Y,공통코드클래스,생성시간,NULL +SHI1,CMCTB_CD_CLF,CHGR,VARCHAR2,13,Y,공통코드클래스,수정자,NULL +SHI1,CMCTB_CD_CLF,CHG_DT,VARCHAR2,8,Y,공통코드클래스,수정일자,NULL +SHI1,CMCTB_CD_CLF,CHG_TM,VARCHAR2,6,Y,공통코드클래스,수정시간,NULL +SHI1,CMCTB_CD_CLF,DEL_YN,VARCHAR2,1,Y,공통코드클래스,삭제여부,NULL +SHI1,CMCTB_CD_CLF,XSTAT,VARCHAR2,1,Y,공통코드클래스,I/F 상태,NULL +SHI1,CMCTB_CD_CLF,XMSGS,VARCHAR2,300,Y,공통코드클래스,I/F Message,NULL +SHI1,CMCTB_CD_CLF,XDATS,VARCHAR2,8,Y,공통코드클래스,I/F 일자,NULL +SHI1,CMCTB_CD_CLF,XTIMS,VARCHAR2,6,Y,공통코드클래스,I/F 시간,NULL +SHI1,CMCTB_CD_CLF_NM,LANG_KEY,VARCHAR2,1,N,공통코드클래스,언어키,"CHECK, PK" +SHI1,CMCTB_CD_CLF_NM,CD_CLF,VARCHAR2,10,N,공통코드클래스,코드분류,"CHECK, PK" +SHI1,CMCTB_CD_CLF_NM,CD_CLF_NM,VARCHAR2,120,Y,공통코드클래스,코드분류명,NULL +SHI1,CMCTB_CD_CLF_NM,GRP_DSC,VARCHAR2,120,Y,공통코드클래스,그룹설명,NULL +SHI1,CMCTB_CD_CLF_NM,CRTER,VARCHAR2,13,Y,공통코드클래스,생성자,NULL +SHI1,CMCTB_CD_CLF_NM,CRTE_DT,VARCHAR2,8,Y,공통코드클래스,생성일자,NULL +SHI1,CMCTB_CD_CLF_NM,CRTE_TM,VARCHAR2,6,Y,공통코드클래스,생성시간,NULL +SHI1,CMCTB_CD_CLF_NM,CHGR,VARCHAR2,13,Y,공통코드클래스,수정자,NULL +SHI1,CMCTB_CD_CLF_NM,CHG_DT,VARCHAR2,8,Y,공통코드클래스,수정일자,NULL +SHI1,CMCTB_CD_CLF_NM,CHG_TM,VARCHAR2,6,Y,공통코드클래스,수정시간,NULL +SHI1,CMCTB_CD_CLF_NM,DEL_YN,VARCHAR2,1,Y,공통코드클래스,삭제여부,NULL +SHI1,CMCTB_CUSTOMER_ADDR,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(주소),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_ADDR,ADR_NO,VARCHAR2,10,N,CUSTOMER 마스터(주소),주소번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_ADDR,INTL_ADR_VER_ID,VARCHAR2,1,N,CUSTOMER 마스터(주소),국제주소버전ID,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_ADDR,NTN_CD,VARCHAR2,3,Y,CUSTOMER 마스터(주소),국가코드,NULL +SHI1,CMCTB_CUSTOMER_ADDR,CITY_ZIP_NO,VARCHAR2,10,Y,CUSTOMER 마스터(주소),도시우편번호,NULL +SHI1,CMCTB_CUSTOMER_ADDR,POBX_ZIP_NO,VARCHAR2,10,Y,CUSTOMER 마스터(주소),사서함우편번호,NULL +SHI1,CMCTB_CUSTOMER_ADDR,ADR_1,VARCHAR2,120,Y,CUSTOMER 마스터(주소),주소1,NULL +SHI1,CMCTB_CUSTOMER_ADDR,ADR_2,VARCHAR2,120,Y,CUSTOMER 마스터(주소),주소2,NULL +SHI1,CMCTB_CUSTOMER_ADDR,REGN_CD,VARCHAR2,3,Y,CUSTOMER 마스터(주소),지역코드,NULL +SHI1,CMCTB_CUSTOMER_ADDR,ETC_ADR_1,VARCHAR2,180,Y,CUSTOMER 마스터(주소),기타주소1,NULL +SHI1,CMCTB_CUSTOMER_ADDR,ETC_ADR_2,VARCHAR2,30,Y,CUSTOMER 마스터(주소),기타주소2,NULL +SHI1,CMCTB_CUSTOMER_ADDR,HOUSE_NR1,VARCHAR2,10,Y,CUSTOMER 마스터(주소),House Number,NULL +SHI1,CMCTB_CUSTOMER_ADDR,POBX,VARCHAR2,30,Y,CUSTOMER 마스터(주소),사서함,NULL +SHI1,CMCTB_CUSTOMER_ADDR,LANG_KEY,VARCHAR2,1,Y,CUSTOMER 마스터(주소),언어키,NULL +SHI1,CMCTB_CUSTOMER_ADDR,VNDRNM_1,VARCHAR2,120,Y,CUSTOMER 마스터(주소),업체명1,NULL +SHI1,CMCTB_CUSTOMER_ADDR,VNDRNM_2,VARCHAR2,120,Y,CUSTOMER 마스터(주소),업체명2,NULL +SHI1,CMCTB_CUSTOMER_ADDR,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(주소),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_ADDR,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(주소),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_ADDR,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(주소),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_ADDR,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(주소),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_ADDR,TRANS_ZONE,VARCHAR2,10,Y,CUSTOMER 마스터(주소),운송구역,NULL +SHI1,CMCTB_CUSTOMER_CFPN,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터 (파트너역할),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_CFPN,SALE_ORG_CD,VARCHAR2,4,N,CUSTOMER 마스터 (파트너역할),영업조직코드,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_CFPN,DIST_PATH,VARCHAR2,2,N,CUSTOMER 마스터 (파트너역할),유통경로,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_CFPN,PDT_GRP,VARCHAR2,2,N,CUSTOMER 마스터 (파트너역할),제품군,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_CFPN,PTNR_SKL,VARCHAR2,2,N,CUSTOMER 마스터 (파트너역할),파트너기능,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_CFPN,PTNR_CNT,VARCHAR2,3,N,CUSTOMER 마스터 (파트너역할),파트너카운터,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_CFPN,BSE_PTNR_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (파트너역할),기본파트너지시자,NULL +SHI1,CMCTB_CUSTOMER_CFPN,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (파트너역할),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_CFPN,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (파트너역할),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_CFPN,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터 (파트너역할),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_CFPN,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터 (파트너역할),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터 (Company),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_COMPNY,CO_ID,VARCHAR2,4,N,CUSTOMER 마스터 (Company),법인ID,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_COMPNY,AR_ACNT_HDL_GB,VARCHAR2,10,Y,CUSTOMER 마스터 (Company),AR계정처리구분,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,SRT_KEY,VARCHAR2,3,Y,CUSTOMER 마스터 (Company),정렬Key,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,AMT_RNE_GB,VARCHAR2,10,Y,CUSTOMER 마스터 (Company),자금수지구분,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,VNDR_PAY_FRM,VARCHAR2,10,Y,CUSTOMER 마스터 (Company),거래선 지불형태,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,BILL_PAY_COND_CD,VARCHAR2,4,Y,CUSTOMER 마스터 (Company),대금지블조건코드,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,BILL_PAY_BLOC_CD,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),대금지불Block코드,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,PST_HOLD_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),전기보류지시자,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,DEL_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),삭제지시자,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (Company),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (Company),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_COMPNY,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터 (Company),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터 (일반 ),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_GENERAL,ADR_NO,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),주소번호,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,REPR_SER,VARCHAR2,3,Y,CUSTOMER 마스터 (일반 ),대표순번,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,ACNT_GRP,VARCHAR2,4,Y,CUSTOMER 마스터 (일반 ),계정그룹,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,OVLAP_CAUS,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),중복사유,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CSTM_TP,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),고객타입,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,DEL_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),삭제지시자,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,DEL_BLOCK,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),삭제블락,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,PST_HOLD_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),전기보류지시자,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CO_ID,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),법인ID,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,TTL,VARCHAR2,45,Y,CUSTOMER 마스터 (일반 ),타이틀,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,COND_GRP_1,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),조건 그룹 1,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CSTM_GRP_NM,VARCHAR2,60,Y,CUSTOMER 마스터 (일반 ),고객 그룹 명,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,REPR_NM,VARCHAR2,30,Y,CUSTOMER 마스터 (일반 ),대표자명,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,BIZTP,VARCHAR2,90,Y,CUSTOMER 마스터 (일반 ),사업유형,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,BIZCON,VARCHAR2,90,Y,CUSTOMER 마스터 (일반 ),산업유형,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_2,VARCHAR2,11,Y,CUSTOMER 마스터 (일반 ),Tax Number 2,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_3,VARCHAR2,18,Y,CUSTOMER 마스터 (일반 ),Tax Number 3,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_4,VARCHAR2,18,Y,CUSTOMER 마스터 (일반 ),Tax Number 4,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,TX_REG_NO,VARCHAR2,20,Y,CUSTOMER 마스터 (일반 ),세금 등록 번호,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,BA_CD,VARCHAR2,4,Y,CUSTOMER 마스터 (일반 ),BA코드,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,VNDRCD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),벤더코드,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,SRCH_COND_1,VARCHAR2,60,Y,CUSTOMER 마스터 (일반 ),검색조건1,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,SRCH_COND_2,VARCHAR2,60,Y,CUSTOMER 마스터 (일반 ),검색조건2,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CITY_DISP_NM,VARCHAR2,105,Y,CUSTOMER 마스터 (일반 ),도시 거리 명,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CRM_CD,VARCHAR2,20,Y,CUSTOMER 마스터 (일반 ),CRM Code,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,IN_FLAG,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),Inbound Flag,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,INDST_CD,VARCHAR2,4,Y,CUSTOMER 마스터 (일반 ),Industry,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_TP,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),세금 번호 타입,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,LANG_KEY,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),언어 키,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,REG_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),등록일자,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,REG_DTM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),등록시간,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,REGR_ID,VARCHAR2,13,Y,CUSTOMER 마스터 (일반 ),등록자ID,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,AGR_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),승인일자,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,AGR_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),승인시간,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,AGR_R_ID,VARCHAR2,13,Y,CUSTOMER 마스터 (일반 ),승인자ID,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CHG_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),변경일자,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CHG_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),변경시간,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,CHGR_ID,VARCHAR2,13,Y,CUSTOMER 마스터 (일반 ),변경자ID,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,FTGT_CD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),F-Tree GT코드,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,FTGT_NM,VARCHAR2,120,Y,CUSTOMER 마스터 (일반 ),F-Tree GT Name,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,FTDT_CD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),F-Tree DT 코드,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,FTDT_NM,VARCHAR2,120,Y,CUSTOMER 마스터 (일반 ),F-Tree DT 이름,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,FTBU_CD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),F-Tree BU 코드,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,FTBU_NM,VARCHAR2,120,Y,CUSTOMER 마스터 (일반 ),F-Tree BU 이름,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_GENERAL,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터 (일반 ),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_REPREMAIL,CSTM_CD,VARCHAR2,10,N,CUSTOMER마스터(대표자 EMAIL),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPREMAIL,ADR_NO,VARCHAR2,10,N,CUSTOMER마스터(대표자 EMAIL),주소번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPREMAIL,REPR_SER,VARCHAR2,3,N,CUSTOMER마스터(대표자 EMAIL),대표자순번,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPREMAIL,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER마스터(대표자 EMAIL),유효시작일자,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPREMAIL,EMAIL_ADR,VARCHAR2,241,Y,CUSTOMER마스터(대표자 EMAIL),이메일주소,NULL +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_DT,VARCHAR2,8,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_TM,VARCHAR2,6,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_STAT,VARCHAR2,1,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_MSG,VARCHAR2,100,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_REPRFAX,CSTM_CD,VARCHAR2,10,N,CUSTOMER마스터(대표자 팩스번호),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRFAX,ADR_NO,VARCHAR2,10,N,CUSTOMER마스터(대표자 팩스번호),주소번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRFAX,REPR_SER,VARCHAR2,3,N,CUSTOMER마스터(대표자 팩스번호),대표자순번,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRFAX,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER마스터(대표자 팩스번호),유효시작일자,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRFAX,NTN_CD,VARCHAR2,3,Y,CUSTOMER마스터(대표자 팩스번호),국가코드,NULL +SHI1,CMCTB_CUSTOMER_REPRFAX,FAXNO,VARCHAR2,30,Y,CUSTOMER마스터(대표자 팩스번호),팩스번호,NULL +SHI1,CMCTB_CUSTOMER_REPRFAX,FAX_ETS_NO,VARCHAR2,10,Y,CUSTOMER마스터(대표자 팩스번호),팩스내선번호,NULL +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_DT,VARCHAR2,8,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_TM,VARCHAR2,6,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_STAT,VARCHAR2,1,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_MSG,VARCHAR2,100,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(대표자 전화번호),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRTEL,ADR_NO,VARCHAR2,10,N,CUSTOMER 마스터(대표자 전화번호),주소번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRTEL,REPR_SER,VARCHAR2,3,N,CUSTOMER 마스터(대표자 전화번호),대표자순번,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRTEL,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER 마스터(대표자 전화번호),유효시작일자,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRTEL,NTN_CD,VARCHAR2,3,Y,CUSTOMER 마스터(대표자 전화번호),국가코드,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,TELNO,VARCHAR2,30,Y,CUSTOMER 마스터(대표자 전화번호),전화번호,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,ETX_NO,VARCHAR2,10,Y,CUSTOMER 마스터(대표자 전화번호),내선번호,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,HP_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터(대표자 전화번호),핸드폰지시자,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_REPRURL,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(대표자 URL),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRURL,ADR_NO,VARCHAR2,10,N,CUSTOMER 마스터(대표자 URL),주소번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRURL,REPR_SER,VARCHAR2,3,N,CUSTOMER 마스터(대표자 URL),대표자순번,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRURL,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER 마스터(대표자 URL),유효시작일자,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_REPRURL,URL,VARCHAR2,2048,Y,CUSTOMER 마스터(대표자 URL),URL,NULL +SHI1,CMCTB_CUSTOMER_REPRURL,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(대표자 URL),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_REPRURL,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(대표자 URL),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_REPRURL,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(대표자 URL),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_REPRURL,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(대표자 URL),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_SORG,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(영업조직),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_SORG,SALE_ORG_CD,VARCHAR2,4,N,CUSTOMER 마스터(영업조직),영업조직코드,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_SORG,DIST_PATH,VARCHAR2,2,N,CUSTOMER 마스터(영업조직),유통경로,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_SORG,PDT_GRP,VARCHAR2,2,N,CUSTOMER 마스터(영업조직),제품군,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_SORG,SALE_REGN,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),판매지역,NULL +SHI1,CMCTB_CUSTOMER_SORG,SALE_OFC,VARCHAR2,4,Y,CUSTOMER 마스터(영업조직),판매사무실,NULL +SHI1,CMCTB_CUSTOMER_SORG,SALE_GRP,VARCHAR2,3,Y,CUSTOMER 마스터(영업조직),판매그룹,NULL +SHI1,CMCTB_CUSTOMER_SORG,CSTM_GRP,VARCHAR2,2,Y,CUSTOMER 마스터(영업조직),고객그룹,NULL +SHI1,CMCTB_CUSTOMER_SORG,PSBL,VARCHAR2,3,Y,CUSTOMER 마스터(영업조직),확도,NULL +SHI1,CMCTB_CUSTOMER_SORG,TRD_CUR,VARCHAR2,5,Y,CUSTOMER 마스터(영업조직),거래 통화,NULL +SHI1,CMCTB_CUSTOMER_SORG,EXRAT_TP,VARCHAR2,4,Y,CUSTOMER 마스터(영업조직),환율유형,NULL +SHI1,CMCTB_CUSTOMER_SORG,PRC_PRCS_DSC_CD,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),가격절차결정코드,NULL +SHI1,CMCTB_CUSTOMER_SORG,CSTM_STAT_GRP,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),고객통계그룹,NULL +SHI1,CMCTB_CUSTOMER_SORG,SHIPMT_COND,VARCHAR2,2,Y,CUSTOMER 마스터(영업조직),선적조건,NULL +SHI1,CMCTB_CUSTOMER_SORG,MAX_TRD_QTY,NUMBER,22,Y,CUSTOMER 마스터(영업조직),최대거래수량,NULL +SHI1,CMCTB_CUSTOMER_SORG,DL_COND_1,VARCHAR2,3,Y,CUSTOMER 마스터(영업조직),인도조건1,NULL +SHI1,CMCTB_CUSTOMER_SORG,DL_COND_2,VARCHAR2,84,Y,CUSTOMER 마스터(영업조직),인도조건2,NULL +SHI1,CMCTB_CUSTOMER_SORG,SPLY_COND,VARCHAR2,4,Y,CUSTOMER 마스터(영업조직),지급조건,NULL +SHI1,CMCTB_CUSTOMER_SORG,ACNT_ASGN_GRP,VARCHAR2,2,Y,CUSTOMER 마스터(영업조직),계정할당그룹,NULL +SHI1,CMCTB_CUSTOMER_SORG,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(영업조직),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_SORG,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(영업조직),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_SORG,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_SORG,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(영업조직),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_TAXCD,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(세금정보),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_TAXCD,DPRT_NTN,VARCHAR2,3,N,CUSTOMER 마스터(세금정보),출발국가,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_TAXCD,TX_CTG,VARCHAR2,4,N,CUSTOMER 마스터(세금정보),세금번호범주,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_TAXCD,CSTM_TX_CLF,VARCHAR2,1,Y,CUSTOMER 마스터(세금정보),고객세금분류,NULL +SHI1,CMCTB_CUSTOMER_TAXCD,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(세금정보),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_TAXCD,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(세금정보),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_TAXCD,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(세금정보),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_TAXCD,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(세금정보),인터페이스메시지,NULL +SHI1,CMCTB_CUSTOMER_TAXNUM,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(세금정보),내부고객번호,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_TAXNUM,TX_NO_CTG,VARCHAR2,4,N,CUSTOMER 마스터(세금정보),세금번호범주,"CHECK, PK" +SHI1,CMCTB_CUSTOMER_TAXNUM,BIZ_PTNR_TX_NO,VARCHAR2,20,Y,CUSTOMER 마스터(세금정보),사업파트너세금번호,NULL +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(세금정보),인터페이스일자,NULL +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(세금정보),인터페이스시간,NULL +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(세금정보),인터페이스상태,NULL +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(세금정보),인터페이스메시지,NULL +SHI1,CMCTB_MAT_BSE,MAT_NO,VARCHAR2,18,N,자재마스터(기본),자재번호,"CHECK, PK" +SHI1,CMCTB_MAT_BSE,SM_CD,VARCHAR2,18,Y,자재마스터(기본),SM코드,NULL +SHI1,CMCTB_MAT_BSE,MAT_ID,VARCHAR2,50,Y,자재마스터(기본),자재ID,NULL +SHI1,CMCTB_MAT_BSE,CLAS_CD,VARCHAR2,18,Y,자재마스터(기본),클래스코드,NULL +SHI1,CMCTB_MAT_BSE,MAT_TP,VARCHAR2,4,Y,자재마스터(기본),자재유형,NULL +SHI1,CMCTB_MAT_BSE,MAT_GB,VARCHAR2,1,Y,자재마스터(기본),자재구분,NULL +SHI1,CMCTB_MAT_BSE,MAT_DTL,VARCHAR2,120,Y,자재마스터(기본),자재내역,NULL +SHI1,CMCTB_MAT_BSE,MAT_DTL_SPEC,VARCHAR2,765,Y,자재마스터(기본),자재내역사양,NULL +SHI1,CMCTB_MAT_BSE,MATL,VARCHAR2,50,Y,자재마스터(기본),재질,NULL +SHI1,CMCTB_MAT_BSE,OLD_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),구자재번호,NULL +SHI1,CMCTB_MAT_BSE,SBST_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),대체자재번호,NULL +SHI1,CMCTB_MAT_BSE,UOM,VARCHAR2,3,Y,자재마스터(기본),단위,NULL +SHI1,CMCTB_MAT_BSE,PDT_GRP,VARCHAR2,2,Y,자재마스터(기본),제품군,NULL +SHI1,CMCTB_MAT_BSE,MRC,VARCHAR2,1,Y,자재마스터(기본),MRC,NULL +SHI1,CMCTB_MAT_BSE,STOR_MAT_ORDR,VARCHAR2,1,Y,자재마스터(기본),저장자재지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_BSE,STYPE,VARCHAR2,2,Y,자재마스터(기본),강종,NULL +SHI1,CMCTB_MAT_BSE,CLS,VARCHAR2,8,Y,자재마스터(기본),선급,NULL +SHI1,CMCTB_MAT_BSE,WGT,NUMBER,22,Y,자재마스터(기본),중량,CHECK +SHI1,CMCTB_MAT_BSE,NET_WGT,NUMBER,22,Y,자재마스터(기본),고유중량,CHECK +SHI1,CMCTB_MAT_BSE,WGT_UOM,VARCHAR2,3,Y,자재마스터(기본),중량단위,NULL +SHI1,CMCTB_MAT_BSE,LTH,NUMBER,22,Y,자재마스터(기본),길이,CHECK +SHI1,CMCTB_MAT_BSE,LTH_2,NUMBER,22,Y,자재마스터(기본),길이2,CHECK +SHI1,CMCTB_MAT_BSE,WTH,NUMBER,22,Y,자재마스터(기본),폭,CHECK +SHI1,CMCTB_MAT_BSE,WTH_2,NUMBER,22,Y,자재마스터(기본),폭2,CHECK +SHI1,CMCTB_MAT_BSE,THK,NUMBER,22,Y,자재마스터(기본),두께,CHECK +SHI1,CMCTB_MAT_BSE,STD,VARCHAR2,70,Y,자재마스터(기본),규격,NULL +SHI1,CMCTB_MAT_BSE,PROF_STD,VARCHAR2,30,Y,자재마스터(기본),형강규격,NULL +SHI1,CMCTB_MAT_BSE,CBL_OUT_DIA,NUMBER,22,Y,자재마스터(기본),CABLE바깥지름,CHECK +SHI1,CMCTB_MAT_BSE,LTRM_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),LTRM_MAT_YN,NULL +SHI1,CMCTB_MAT_BSE,PNT_AREA,NUMBER,22,Y,자재마스터(기본),도장면적,CHECK +SHI1,CMCTB_MAT_BSE,PNTIN_AREA,NUMBER,22,Y,자재마스터(기본),도장내부면적,CHECK +SHI1,CMCTB_MAT_BSE,PNTIN_SPEC,VARCHAR2,5,Y,자재마스터(기본),도장내부사양,NULL +SHI1,CMCTB_MAT_BSE,PNTOUT_AREA,NUMBER,22,Y,자재마스터(기본),도장외부면적,CHECK +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_1,VARCHAR2,5,Y,자재마스터(기본),도장외부사양1,NULL +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_2,VARCHAR2,5,Y,자재마스터(기본),도장외부사양2,NULL +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_3,VARCHAR2,5,Y,자재마스터(기본),도장외부사양3,NULL +SHI1,CMCTB_MAT_BSE,RT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),RT검사사양,NULL +SHI1,CMCTB_MAT_BSE,UT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),UT검사사양,NULL +SHI1,CMCTB_MAT_BSE,MT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),MT검사사양,NULL +SHI1,CMCTB_MAT_BSE,PT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),PT검사사양,NULL +SHI1,CMCTB_MAT_BSE,MK_DWG_NO,VARCHAR2,50,Y,자재마스터(기본),제작도면번호,NULL +SHI1,CMCTB_MAT_BSE,CUT_DWG_NO,VARCHAR2,120,Y,자재마스터(기본),가공도면번호,NULL +SHI1,CMCTB_MAT_BSE,PIPE_SPL_NO,VARCHAR2,40,Y,자재마스터(기본),배관SPOOL번호,NULL +SHI1,CMCTB_MAT_BSE,PIPE_LINE_NO,VARCHAR2,40,Y,자재마스터(기본),배관LINE번호,NULL +SHI1,CMCTB_MAT_BSE,PIPE_CLAS,VARCHAR2,10,Y,자재마스터(기본),배관클래스,NULL +SHI1,CMCTB_MAT_BSE,FLUID_KND,VARCHAR2,5,Y,자재마스터(기본),유체종류,NULL +SHI1,CMCTB_MAT_BSE,REP_ITM_MATL,VARCHAR2,60,Y,자재마스터(기본),대표품명재질,NULL +SHI1,CMCTB_MAT_BSE,REP_DIA,VARCHAR2,10,Y,자재마스터(기본),대표지름,NULL +SHI1,CMCTB_MAT_BSE,REP_DIA_UOM,VARCHAR2,3,Y,자재마스터(기본),대표지름단위,NULL +SHI1,CMCTB_MAT_BSE,REP_SCH,VARCHAR2,20,Y,자재마스터(기본),대표스케쥴,NULL +SHI1,CMCTB_MAT_BSE,REP_DIA_LTH,NUMBER,22,Y,자재마스터(기본),대표지름길이,CHECK +SHI1,CMCTB_MAT_BSE,DBLN_GB,VARCHAR2,1,Y,자재마스터(기본),직곡관구분,NULL +SHI1,CMCTB_MAT_BSE,PIPE_GRD,VARCHAR2,1,Y,자재마스터(기본),배관등급,NULL +SHI1,CMCTB_MAT_BSE,HTRET_YN,VARCHAR2,1,Y,자재마스터(기본),열처리유무,NULL +SHI1,CMCTB_MAT_BSE,BA_GALV_SPEC,VARCHAR2,3,Y,자재마스터(기본),선후도금사양,NULL +SHI1,CMCTB_MAT_BSE,SSIDE_YN,VARCHAR2,1,Y,자재마스터(기본),SHIPSIDE여부,NULL +SHI1,CMCTB_MAT_BSE,PNTR_PIPE_YN,VARCHAR2,1,Y,자재마스터(기본),관통관여부,NULL +SHI1,CMCTB_MAT_BSE,UBOLT_YN,VARCHAR2,1,Y,자재마스터(기본),UBOLT유무,NULL +SHI1,CMCTB_MAT_BSE,CTLP_PRCD_PNT,VARCHAR2,1,Y,자재마스터(기본),조정관선행도장,NULL +SHI1,CMCTB_MAT_BSE,PRCD_SCV_CTLP,VARCHAR2,2,Y,자재마스터(기본),선행후행조정관,NULL +SHI1,CMCTB_MAT_BSE,PMI_INSPEC,VARCHAR2,2,Y,자재마스터(기본),PMI검사사양,NULL +SHI1,CMCTB_MAT_BSE,WTRPRS,NUMBER,22,Y,자재마스터(기본),수압,CHECK +SHI1,CMCTB_MAT_BSE,VLV_FIT_NO,VARCHAR2,18,Y,자재마스터(기본),VALVEFITTING번호,NULL +SHI1,CMCTB_MAT_BSE,TAG_NO,VARCHAR2,50,Y,자재마스터(기본),TAG번호,NULL +SHI1,CMCTB_MAT_BSE,TAG_SB_NO,VARCHAR2,10,Y,자재마스터(기본),TAGSUB번호,NULL +SHI1,CMCTB_MAT_BSE,NM_PLATE_TP,VARCHAR2,5,Y,자재마스터(기본),네임플레이트유형,NULL +SHI1,CMCTB_MAT_BSE,NM_PLATE_SVC_NM,VARCHAR2,60,Y,자재마스터(기본),네임플레이트서비스명,NULL +SHI1,CMCTB_MAT_BSE,VRCS_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),VRCS자재번호,NULL +SHI1,CMCTB_MAT_BSE,TRSM_FIT_NO,VARCHAR2,7,Y,자재마스터(기본),TRANSMITTERFITTING번호,NULL +SHI1,CMCTB_MAT_BSE,VLV_OPT_CD_LIST,VARCHAR2,20,Y,자재마스터(기본),VALVE옵션코드리스트,NULL +SHI1,CMCTB_MAT_BSE,PUR_REQ_NO,VARCHAR2,10,Y,자재마스터(기본),구매요청번호,NULL +SHI1,CMCTB_MAT_BSE,ITM_NO,VARCHAR2,20,Y,자재마스터(기본),ITEM번호,NULL +SHI1,CMCTB_MAT_BSE,MDL_NO,VARCHAR2,30,Y,자재마스터(기본),모델번호,NULL +SHI1,CMCTB_MAT_BSE,BL_NO,VARCHAR2,30,Y,자재마스터(기본),BL번호,NULL +SHI1,CMCTB_MAT_BSE,VNDR_EQP_NO,VARCHAR2,10,Y,자재마스터(기본),업체장비번호,NULL +SHI1,CMCTB_MAT_BSE,BOX_NO,VARCHAR2,20,Y,자재마스터(기본),BOX번호,NULL +SHI1,CMCTB_MAT_BSE,MMT_NO,VARCHAR2,10,Y,자재마스터(기본),자재운송관리번호,NULL +SHI1,CMCTB_MAT_BSE,INSTL_LOC,VARCHAR2,30,Y,자재마스터(기본),설치위치,NULL +SHI1,CMCTB_MAT_BSE,MN_EQP_YN,VARCHAR2,1,Y,자재마스터(기본),메인장비여부,NULL +SHI1,CMCTB_MAT_BSE,FIXED_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),체결재여부,NULL +SHI1,CMCTB_MAT_BSE,SPRE_YN,VARCHAR2,1,Y,자재마스터(기본),SPARE여부,NULL +SHI1,CMCTB_MAT_BSE,TOOL_YN,VARCHAR2,1,Y,자재마스터(기본),TOOL여부,NULL +SHI1,CMCTB_MAT_BSE,CBL_YN,VARCHAR2,1,Y,자재마스터(기본),CABLE여부,NULL +SHI1,CMCTB_MAT_BSE,OWN_INSTL_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),선주설치자재여부,NULL +SHI1,CMCTB_MAT_BSE,NONINSTL_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),비설치자재여부,NULL +SHI1,CMCTB_MAT_BSE,BLK_NO,VARCHAR2,5,Y,자재마스터(기본),블록번호,NULL +SHI1,CMCTB_MAT_BSE,GYEL,VARCHAR2,2,Y,자재마스터(기본),계열,NULL +SHI1,CMCTB_MAT_BSE,LNK_PTLST_NO,VARCHAR2,40,Y,자재마스터(기본),연결부재번호,NULL +SHI1,CMCTB_MAT_BSE,AREA,NUMBER,22,Y,자재마스터(기본),면적,CHECK +SHI1,CMCTB_MAT_BSE,STOR_LOC,VARCHAR2,10,Y,자재마스터(기본),저장위치,NULL +SHI1,CMCTB_MAT_BSE,SGUB_WGT,NUMBER,22,Y,자재마스터(기본),사급중량,CHECK +SHI1,CMCTB_MAT_BSE,DGUB_WGT,NUMBER,22,Y,자재마스터(기본),도급중량,CHECK +SHI1,CMCTB_MAT_BSE,PROJ_NO,VARCHAR2,24,Y,자재마스터(기본),프로젝트번호,NULL +SHI1,CMCTB_MAT_BSE,DSN_SKL,VARCHAR2,2,Y,자재마스터(기본),설계기능,NULL +SHI1,CMCTB_MAT_BSE,RMK,VARCHAR2,500,Y,자재마스터(기본),비고,NULL +SHI1,CMCTB_MAT_BSE,DEL_ORDR,VARCHAR2,1,Y,자재마스터(기본),삭제지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_BSE,DEL_DT,VARCHAR2,8,Y,자재마스터(기본),삭제일자,NULL +SHI1,CMCTB_MAT_BSE,MAT_STAT,VARCHAR2,2,Y,자재마스터(기본),자재상태,NULL +SHI1,CMCTB_MAT_BSE,IF_SYS_NO,VARCHAR2,1,Y,자재마스터(기본),인터페이스시스템번호,NULL +SHI1,CMCTB_MAT_BSE,IF_STAT,VARCHAR2,1,Y,자재마스터(기본),인터페이스상태,NULL +SHI1,CMCTB_MAT_BSE,IF_MSG,VARCHAR2,255,Y,자재마스터(기본),인터페이스메시지,NULL +SHI1,CMCTB_MAT_BSE,IF_DT,VARCHAR2,8,Y,자재마스터(기본),인터페이스일자,NULL +SHI1,CMCTB_MAT_BSE,IF_TM,VARCHAR2,6,Y,자재마스터(기본),인터페이스시간,NULL +SHI1,CMCTB_MAT_BSE,GLAND_SPEC_1,VARCHAR2,30,Y,자재마스터(기본),GLAND사양1,NULL +SHI1,CMCTB_MAT_BSE,GLAND_SPEC_2,VARCHAR2,30,Y,자재마스터(기본),GLAND사양2,NULL +SHI1,CMCTB_MAT_BSE,GLAND_SPEC_3,VARCHAR2,30,Y,자재마스터(기본),GLAND사양3,NULL +SHI1,CMCTB_MAT_BSE,MCT_MDLE_STD_1,VARCHAR2,30,Y,자재마스터(기본),MCT모듈규격1,NULL +SHI1,CMCTB_MAT_BSE,MCT_MDLE_STD_2,VARCHAR2,30,Y,자재마스터(기본),MCT모듈규격2,NULL +SHI1,CMCTB_MAT_BSE,BEELE_RISE,VARCHAR2,12,Y,자재마스터(기본),BEELERISE,NULL +SHI1,CMCTB_MAT_BSE,MAX_DRUM_LTH,NUMBER,22,Y,자재마스터(기본),최대DRUM길이,CHECK +SHI1,CMCTB_MAT_BSE,AGR_DTM,VARCHAR2,14,Y,자재마스터(기본),승인일시,NULL +SHI1,CMCTB_MAT_BSE,AGR_R_ID,VARCHAR2,13,Y,자재마스터(기본),승인자ID,NULL +SHI1,CMCTB_MAT_BSE,DISPLN,VARCHAR2,1,Y,자재마스터(기본),DISCIPLINE,NULL +SHI1,CMCTB_MAT_BSE,LRG_KWK,VARCHAR2,1,Y,자재마스터(기본),대공종,NULL +SHI1,CMCTB_MAT_BSE,DTL_KWK,VARCHAR2,1,Y,자재마스터(기본),세부공종,NULL +SHI1,CMCTB_MAT_BSE,SP_INSP_GB,VARCHAR2,1,Y,자재마스터(기본),특별검사구분,NULL +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_4,VARCHAR2,5,Y,자재마스터(기본),도장외부사양4,NULL +SHI1,CMCTB_MAT_BSE,OFE_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),OFE자재번호,NULL +SHI1,CMCTB_MAT_BSE,OFE_CAB_YN,VARCHAR2,1,Y,자재마스터(기본),OFE케이블여부,NULL +SHI1,CMCTB_MAT_BSE,INSTL_PSB_CNT,NUMBER,22,Y,자재마스터(기본),포설가능개수,CHECK +SHI1,CMCTB_MAT_BSE,CUTL_ML_GB,VARCHAR2,1,Y,자재마스터(기본),태선세선구분,NULL +SHI1,CMCTB_MAT_BSE,FCM_INSP,VARCHAR2,2,Y,자재마스터(기본),FCM검사,NULL +SHI1,CMCTB_MAT_BSE,DOC_NO,VARCHAR2,25,Y,자재마스터(기본),서류번호,NULL +SHI1,CMCTB_MAT_BSE,HOLD_CAUS,VARCHAR2,200,Y,자재마스터(기본),보류원인,NULL +SHI1,CMCTB_MAT_BSE,HOLD_DT,VARCHAR2,8,Y,자재마스터(기본),보류일자,NULL +SHI1,CMCTB_MAT_BSE,HOLD_LIFT_DT,VARCHAR2,8,Y,자재마스터(기본),NULL,NULL +SHI1,CMCTB_MAT_BSE,MAT_KND_GB,VARCHAR2,1,Y,자재마스터(기본),자재종류구분,NULL +SHI1,CMCTB_MAT_BSE,BATCH_MNG_ORDR,VARCHAR2,1,Y,자재마스터(기본),BATCH관리지시자,NULL +SHI1,CMCTB_MAT_BSE,FS_INPR_ID,VARCHAR2,13,Y,자재마스터(기본),최초입력자ID,NULL +SHI1,CMCTB_MAT_BSE,FS_INP_DTM,VARCHAR2,14,Y,자재마스터(기본),최초입력일시,NULL +SHI1,CMCTB_MAT_BSE,FIN_CHGR_ID,VARCHAR2,13,Y,자재마스터(기본),최종수정자ID,NULL +SHI1,CMCTB_MAT_BSE,FIN_CHG_DTM,VARCHAR2,14,Y,자재마스터(기본),최종수정일시,NULL +SHI1,CMCTB_MAT_BSE,DWG_FILE_NM,VARCHAR2,256,Y,자재마스터(기본),NULL,NULL +SHI1,CMCTB_MAT_BSE,TAG_NO_CHG_DT,VARCHAR2,8,Y,자재마스터(기본),NULL,NULL +SHI1,CMCTB_MAT_BSE,SUB_EQP_YN,VARCHAR2,1,Y,자재마스터(기본),SUB장비여부,NULL +SHI1,CMCTB_MAT_BSE,ATT_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),부속자재여부,NULL +SHI1,CMCTB_MAT_BSE,DSN_REV_NO,VARCHAR2,4,Y,자재마스터(기본),설계계정번호,NULL +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR1,VARCHAR2,50,Y,자재마스터(기본),사용자정의필드1,NULL +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR2,VARCHAR2,50,Y,자재마스터(기본),인도선적품여부(DL_SHIPMT_ITM_YN),NULL +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR3,VARCHAR2,50,Y,자재마스터(기본),사용자정의필드3,NULL +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR4,VARCHAR2,50,Y,자재마스터(기본),사용자정의필드4,NULL +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR5,VARCHAR2,50,Y,자재마스터(기본),변경이력,NULL +SHI1,CMCTB_MAT_CLAS,CLAS_CD,VARCHAR2,18,N,자재마스터 클래스 정보,클래스코드,"CHECK, PK" +SHI1,CMCTB_MAT_CLAS,CLAS_NM,VARCHAR2,60,Y,자재마스터 클래스 정보,클래스명,NULL +SHI1,CMCTB_MAT_CLAS,CLAS_DTL,VARCHAR2,180,Y,자재마스터 클래스 정보,클래스내역,NULL +SHI1,CMCTB_MAT_CLAS,PRNT_CLAS_CD,VARCHAR2,18,Y,자재마스터 클래스 정보,부모클래스코드,NULL +SHI1,CMCTB_MAT_CLAS,CLAS_LVL,NUMBER,22,Y,자재마스터 클래스 정보,클래스레벨,NULL +SHI1,CMCTB_MAT_CLAS,DEL_ORDR,VARCHAR2,1,Y,자재마스터 클래스 정보,삭제지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_CLAS,UOM,VARCHAR2,3,Y,자재마스터 클래스 정보,단위,NULL +SHI1,CMCTB_MAT_CLAS,STYPE,VARCHAR2,2,Y,자재마스터 클래스 정보,강종,NULL +SHI1,CMCTB_MAT_CLAS,GRD_MATL,VARCHAR2,50,Y,자재마스터 클래스 정보,등급재질,NULL +SHI1,CMCTB_MAT_CLAS,CHG_DT,VARCHAR2,8,Y,자재마스터 클래스 정보,수정일자,NULL +SHI1,CMCTB_MAT_CLAS,BSE_UOM,VARCHAR2,3,Y,자재마스터 클래스 정보,기준단위,NULL +SHI1,CMCTB_MAT_CLAS_SPCHAR,CLAS_CD,VARCHAR2,18,N,자재마스터 클래스별 특성,클래스코드,PK +SHI1,CMCTB_MAT_CLAS_SPCHAR,SPCHAR_CD,VARCHAR2,30,N,자재마스터 클래스별 특성,특성코드,PK +SHI1,CMCTB_MAT_CLAS_SPCHAR,SPCHAR_SEQ,VARCHAR2,3,Y,자재마스터 클래스별 특성,특선순서,NULL +SHI1,CMCTB_MAT_CLAS_SPCHAR,MNDT_YN,VARCHAR2,1,Y,자재마스터 클래스별 특성,필수여부,NULL +SHI1,CMCTB_MAT_CLAS_SPCHAR,CHG_DT,VARCHAR2,8,Y,자재마스터 클래스별 특성,수정일자,NULL +SHI1,CMCTB_MAT_CLAS_SPCHAR,DEL_ORDR,VARCHAR2,1,Y,자재마스터 클래스별 특성,삭제지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_DSC,MAT_NO,VARCHAR2,18,N,CMCTB_MAT_DSC,자재번호,"CHECK, PK" +SHI1,CMCTB_MAT_DSC,LANG_KEY,VARCHAR2,1,N,CMCTB_MAT_DSC,언어키,"CHECK, PK" +SHI1,CMCTB_MAT_DSC,MAT_DTL,VARCHAR2,120,Y,CMCTB_MAT_DSC,자재내역,NULL +SHI1,CMCTB_MAT_PLNT,MAT_NO,VARCHAR2,18,N,자재마스터 플랜트 정보,자재번호,"CHECK, PK" +SHI1,CMCTB_MAT_PLNT,PLNT,VARCHAR2,4,N,자재마스터 플랜트 정보,플랜트,"CHECK, PK" +SHI1,CMCTB_MAT_PLNT,DELV_UOM,VARCHAR2,3,Y,자재마스터 플랜트 정보,출고단위,NULL +SHI1,CMCTB_MAT_PLNT,EA_BTCH_ND_GB,VARCHAR2,1,Y,자재마스터 플랜트 정보,개별일괄소요구분,NULL +SHI1,CMCTB_MAT_PLNT,PRCR_CLF,VARCHAR2,4,Y,자재마스터 플랜트 정보,조달분류,NULL +SHI1,CMCTB_MAT_PLNT,PUR_CHRGR_CD,VARCHAR2,3,Y,자재마스터 플랜트 정보,구매담당자코드,NULL +SHI1,CMCTB_MAT_PLNT,PRCR_CHRGR_CD,VARCHAR2,3,Y,자재마스터 플랜트 정보,조달담당자코드,NULL +SHI1,CMCTB_MAT_PLNT,GOODS_CHRGR_CD,VARCHAR2,3,Y,자재마스터 플랜트 정보,현물담당자코드,NULL +SHI1,CMCTB_MAT_PLNT,PUR_LT,NUMBER,22,Y,자재마스터 플랜트 정보,구매리드타임,NULL +SHI1,CMCTB_MAT_PLNT,MRP_TP,VARCHAR2,2,Y,자재마스터 플랜트 정보,MRP유형,NULL +SHI1,CMCTB_MAT_PLNT,MAT_STAT,VARCHAR2,2,Y,자재마스터 플랜트 정보,자재상태,NULL +SHI1,CMCTB_MAT_PLNT,BULK_MAT_ORDR,VARCHAR2,1,Y,자재마스터 플랜트 정보,벌크자재지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_PLNT,PRCR_TP,VARCHAR2,1,Y,자재마스터 플랜트 정보,조달유형,NULL +SHI1,CMCTB_MAT_PLNT,SFTY_STCK_QTY,NUMBER,22,Y,자재마스터 플랜트 정보,안전재고수량,NULL +SHI1,CMCTB_MAT_PLNT,SER_PROF,VARCHAR2,4,Y,자재마스터 플랜트 정보,일련번호프로파일,NULL +SHI1,CMCTB_MAT_PLNT,DEL_ORDR,VARCHAR2,1,Y,자재마스터 플랜트 정보,삭제지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_PLNT,BATCH_MNG_ORDR,VARCHAR2,1,Y,자재마스터 플랜트 정보,BATCH관리지시자,NULL +SHI1,CMCTB_MAT_PLNT,IF_STAT,VARCHAR2,1,Y,자재마스터 플랜트 정보,인터페이스상태,NULL +SHI1,CMCTB_MAT_PLNT,IF_MSG,VARCHAR2,100,Y,자재마스터 플랜트 정보,인터페이스메시지,NULL +SHI1,CMCTB_MAT_PLNT,IF_DT,VARCHAR2,8,Y,자재마스터 플랜트 정보,인터페이스일자,NULL +SHI1,CMCTB_MAT_PLNT,IF_TM,VARCHAR2,6,Y,자재마스터 플랜트 정보,인터페이스시간,NULL +SHI1,CMCTB_MAT_PLNT,SP_PRCR_TP,VARCHAR2,2,Y,자재마스터 플랜트 정보,특별조달유형,NULL +SHI1,CMCTB_MAT_SPCHAR,MAT_NO,VARCHAR2,18,N,자재마스터특성,자재번호,"CHECK, PK" +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_CD,VARCHAR2,30,N,자재마스터특성,특성코드,"CHECK, PK" +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_DTL,VARCHAR2,90,Y,자재마스터특성,특성내역,NULL +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_CD,VARCHAR2,90,Y,자재마스터특성,특성값코드,NULL +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_DTL,VARCHAR2,90,Y,자재마스터특성,특성값내역,NULL +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_NUM,NUMBER,22,Y,자재마스터특성,특성값넘버,NULL +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_UOM,VARCHAR2,3,Y,자재마스터특성,특성값단위,NULL +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_CD,VARCHAR2,30,N,자재마스터 특성정보,특성코드,PK +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_DTL,VARCHAR2,90,Y,자재마스터 특성정보,특성내역,NULL +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_TP,VARCHAR2,10,Y,자재마스터 특성정보,특성타입,NULL +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_VAL_UOM,VARCHAR2,3,Y,자재마스터 특성정보,특성값단위,NULL +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_VAL_YN,VARCHAR2,1,Y,자재마스터 특성정보,특성값여부,NULL +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_GRP,VARCHAR2,10,Y,자재마스터 특성정보,특성그룹,NULL +SHI1,CMCTB_MAT_SPCHAR_MAST,CHG_DT,VARCHAR2,8,Y,자재마스터 특성정보,수정일자,NULL +SHI1,CMCTB_MAT_SPCHAR_MAST,DEL_ORDR,VARCHAR2,1,Y,자재마스터 특성정보,삭제지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_SPCHAR_VAL,SPCHAR_CD,VARCHAR2,30,N,자재마스터 특성별 특성값,특성코드,PK +SHI1,CMCTB_MAT_SPCHAR_VAL,SPCHAR_VAL_CD,VARCHAR2,90,N,자재마스터 특성별 특성값,특성값코드,PK +SHI1,CMCTB_MAT_SPCHAR_VAL,SPCHAR_VAL_DTL,VARCHAR2,90,Y,자재마스터 특성별 특성값,특성값내역,NULL +SHI1,CMCTB_MAT_SPCHAR_VAL,CHG_DT,VARCHAR2,8,Y,자재마스터 특성별 특성값,수정일자,NULL +SHI1,CMCTB_MAT_SPCHAR_VAL,DEL_ORDR,VARCHAR2,1,Y,자재마스터 특성별 특성값,삭제지시자,"CHECK, CHECK" +SHI1,CMCTB_MAT_UOM,MAT_NO,VARCHAR2,18,N,자재마스터 단위정보,자재번호,"CHECK, PK" +SHI1,CMCTB_MAT_UOM,SBST_UOM,VARCHAR2,3,N,자재마스터 단위정보,대체단위,"CHECK, PK" +SHI1,CMCTB_MAT_UOM,CNVRT_FCTR_1,NUMBER,22,Y,자재마스터 단위정보,전환 FOCTOR1,NULL +SHI1,CMCTB_MAT_UOM,CNVRT_FCTR_2,NUMBER,22,Y,자재마스터 단위정보,전환 FOCTOR2,NULL +SHI1,CMCTB_MAT_UOM,LTH,NUMBER,22,Y,자재마스터 단위정보,길이,NULL +SHI1,CMCTB_MAT_UOM,WTH,NUMBER,22,Y,자재마스터 단위정보,폭,NULL +SHI1,CMCTB_MAT_UOM,HGT,NUMBER,22,Y,자재마스터 단위정보,높이,NULL +SHI1,CMCTB_MAT_UOM,SZ_UOM,VARCHAR2,3,Y,자재마스터 단위정보,치수단위,NULL +SHI1,CMCTB_PROJ_BIZCLS,PROJ_NO,VARCHAR2,24,N,프로젝트 비즈니스 클래스,프로젝트번호,"CHECK, PK" +SHI1,CMCTB_PROJ_BIZCLS,TYPE,VARCHAR2,1,N,프로젝트 비즈니스 클래스,TYPE,"CHECK, PK" +SHI1,CMCTB_PROJ_BIZCLS,BIZCLS,VARCHAR2,1,Y,프로젝트 비즈니스 클래스,비지니스클래스,NULL +SHI1,CMCTB_PROJ_BIZCLS,QM_CLS,VARCHAR2,10,Y,프로젝트 비즈니스 클래스,NULL,NULL +SHI1,CMCTB_PROJ_BIZCLS,NEW_MC_YN,VARCHAR2,1,Y,프로젝트 비즈니스 클래스,신규MC여부,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_NO,VARCHAR2,24,N,프로젝트 마스터,프로젝트번호,"CHECK, PK" +SHI1,CMCTB_PROJ_MAST,MSHIP_NO,VARCHAR2,24,Y,프로젝트 마스터,기준호선,NULL +SHI1,CMCTB_PROJ_MAST,SERS_NO,VARCHAR2,24,Y,프로젝트 마스터,시리즈첫프로젝트번호,NULL +SHI1,CMCTB_PROJ_MAST,REF_NO,VARCHAR2,5,Y,프로젝트 마스터,시리즈번호,NULL +SHI1,CMCTB_PROJ_MAST,SKND,VARCHAR2,3,Y,프로젝트 마스터,선종,NULL +SHI1,CMCTB_PROJ_MAST,SHTYPE,VARCHAR2,8,Y,프로젝트 마스터,선형,NULL +SHI1,CMCTB_PROJ_MAST,SHTYPE_UOM,VARCHAR2,5,Y,프로젝트 마스터,선형단위,NULL +SHI1,CMCTB_PROJ_MAST,DOCK_CD,VARCHAR2,3,Y,프로젝트 마스터,도크,NULL +SHI1,CMCTB_PROJ_MAST,OWN_1,VARCHAR2,32,Y,프로젝트 마스터,선주1,NULL +SHI1,CMCTB_PROJ_MAST,CLS_1,VARCHAR2,20,Y,프로젝트 마스터,선급1,NULL +SHI1,CMCTB_PROJ_MAST,CNRT_DT,VARCHAR2,8,Y,프로젝트 마스터,계약일자,NULL +SHI1,CMCTB_PROJ_MAST,CNRT_DL_DT,VARCHAR2,8,Y,프로젝트 마스터,계약인도일자,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_DSC,VARCHAR2,120,Y,프로젝트 마스터,프로젝트 설명,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_GB,VARCHAR2,2,Y,프로젝트 마스터,프로젝트구분,NULL +SHI1,CMCTB_PROJ_MAST,OWN_NM,VARCHAR2,120,Y,프로젝트 마스터,선주명,NULL +SHI1,CMCTB_PROJ_MAST,NEW_SKND2,VARCHAR2,30,Y,프로젝트 마스터,신선종2,NULL +SHI1,CMCTB_PROJ_MAST,OWN_AB,VARCHAR2,60,Y,프로젝트 마스터,선주약어,NULL +SHI1,CMCTB_PROJ_MAST,CHINA_YN,VARCHAR2,3,Y,프로젝트 마스터,중국여부,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_DTL_TP,VARCHAR2,2,Y,프로젝트 마스터,프로젝트세부타입,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_PROF,VARCHAR2,7,Y,프로젝트 마스터,프로젝트프로파일,NULL +SHI1,CMCTB_PROJ_MAST,INQY_NO,VARCHAR2,30,Y,프로젝트 마스터,안건번호,NULL +SHI1,CMCTB_PROJ_MAST,INQY_SEQ,VARCHAR2,2,Y,프로젝트 마스터,안건순번,NULL +SHI1,CMCTB_PROJ_MAST,NTTP,VARCHAR2,3,Y,프로젝트 마스터,국적,NULL +SHI1,CMCTB_PROJ_MAST,RLTD_PROJ,VARCHAR2,40,Y,프로젝트 마스터,연관프로젝트,NULL +SHI1,CMCTB_PROJ_MAST,DIGT_PDT_GRP,VARCHAR2,1,Y,프로젝트 마스터,디지털제품군,NULL +SHI1,CMCTB_PROJ_MAST,WP_PROJ_TP,VARCHAR2,1,Y,프로젝트 마스터,풍력프로젝트타입,NULL +SHI1,CMCTB_PROJ_MAST,TOT_CNRT_CNT,VARCHAR2,3,Y,프로젝트 마스터,전체계약개수,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_ETC_TP,VARCHAR2,1,Y,프로젝트 마스터,프로젝트기타타입,NULL +SHI1,CMCTB_PROJ_MAST,IF_STAT,VARCHAR2,1,Y,프로젝트 마스터,인터페이스상태,NULL +SHI1,CMCTB_PROJ_MAST,SRC_SYS_ID,VARCHAR2,1,Y,프로젝트 마스터,소스시스템ID,NULL +SHI1,CMCTB_PROJ_MAST,PRGS_STAT,VARCHAR2,1,Y,프로젝트 마스터,진행상태,NULL +SHI1,CMCTB_PROJ_MAST,DEL_YN,VARCHAR2,1,Y,프로젝트 마스터,삭제여부,NULL +SHI1,CMCTB_PROJ_MAST,DL_CSTM_CD,VARCHAR2,10,Y,프로젝트 마스터,인도고객코드,NULL +SHI1,CMCTB_PROJ_MAST,PDT_LVL_4,VARCHAR2,14,Y,프로젝트 마스터,제품레벨4,NULL +SHI1,CMCTB_PROJ_MAST,AS_GRNT_PRD,NUMBER,22,Y,프로젝트 마스터,AS보증기간,NULL +SHI1,CMCTB_PROJ_MAST,RL_DL_DT,VARCHAR2,8,Y,프로젝트 마스터,실인도일자,NULL +SHI1,CMCTB_PROJ_MAST,SA_DT,VARCHAR2,8,Y,프로젝트 마스터,SAILAWAYDATE,NULL +SHI1,CMCTB_PROJ_MAST,GOV,VARCHAR2,60,Y,프로젝트 마스터,관청,NULL +SHI1,CMCTB_PROJ_MAST,DL_BF_PROJ_NM,VARCHAR2,120,Y,프로젝트 마스터,인도전공사명,NULL +SHI1,CMCTB_PROJ_MAST,IMO_NO,VARCHAR2,8,Y,프로젝트 마스터,IMO번호,NULL +SHI1,CMCTB_PROJ_MAST,DIST_PATH,VARCHAR2,2,Y,프로젝트 마스터,유통경로,NULL +SHI1,CMCTB_PROJ_MAST,SALE_ORG_CD,VARCHAR2,4,Y,프로젝트 마스터,영업조직코드,NULL +SHI1,CMCTB_PROJ_MAST,SALE_GRP,VARCHAR2,3,Y,프로젝트 마스터,판매그룹,NULL +SHI1,CMCTB_PROJ_MAST,BIZLOC_CD,VARCHAR2,4,Y,프로젝트 마스터,사업장코드,NULL +SHI1,CMCTB_PROJ_MAST,MNG_ACOT_DMN,VARCHAR2,4,Y,프로젝트 마스터,관리회계영역,NULL +SHI1,CMCTB_PROJ_MAST,CO_CD,VARCHAR2,4,Y,프로젝트 마스터,회사코드,NULL +SHI1,CMCTB_PROJ_MAST,BIZ_DMN,VARCHAR2,4,Y,프로젝트 마스터,사업영역,NULL +SHI1,CMCTB_PROJ_MAST,PLNT_CD,VARCHAR2,4,Y,프로젝트 마스터,플랜트코드,NULL +SHI1,CMCTB_PROJ_MAST,PRCTR,VARCHAR2,10,Y,프로젝트 마스터,손익센터,NULL +SHI1,CMCTB_PROJ_MAST,CNRT_CNTN_YN,VARCHAR2,1,Y,프로젝트 마스터,계약존속여부,NULL +SHI1,CMCTB_PROJ_MAST,CNRT_RESV_YN,VARCHAR2,1,Y,프로젝트 마스터,계약유보여부,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_PRGS_YN,VARCHAR2,1,Y,프로젝트 마스터,프로젝트진행여부,NULL +SHI1,CMCTB_PROJ_MAST,SYS_ACOT_CLSD_DT,VARCHAR2,8,Y,프로젝트 마스터,시스템회계마감일자,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_SCP,VARCHAR2,5,Y,프로젝트 마스터,프로젝트범위,NULL +SHI1,CMCTB_PROJ_MAST,LOA,NUMBER,22,Y,프로젝트 마스터,전길이,NULL +SHI1,CMCTB_PROJ_MAST,MN_ENGN_TP_CD,VARCHAR2,30,Y,프로젝트 마스터,MAINENGINETYPECODE,NULL +SHI1,CMCTB_PROJ_MAST,SPD,NUMBER,22,Y,프로젝트 마스터,속도,NULL +SHI1,CMCTB_PROJ_MAST,GT,NUMBER,22,Y,프로젝트 마스터,GT,NULL +SHI1,CMCTB_PROJ_MAST,BP_DL_DT,VARCHAR2,8,Y,프로젝트 마스터,선표인도일자,NULL +SHI1,CMCTB_PROJ_MAST,SHTYPE_GRP,VARCHAR2,4,Y,프로젝트 마스터,선형군,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_CRTE_REQ_EMPNO,VARCHAR2,13,Y,프로젝트 마스터,프로젝트생성요청사번,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_CRTE_REQ_DT,VARCHAR2,8,Y,프로젝트 마스터,프로젝트생성요청일자,NULL +SHI1,CMCTB_PROJ_MAST,IO_GB,VARCHAR2,1,Y,프로젝트 마스터,사내외구분,NULL +SHI1,CMCTB_PROJ_MAST,CSTM_PO_NO,VARCHAR2,35,Y,프로젝트 마스터,고객발주번호,NULL +SHI1,CMCTB_PROJ_MAST,GENT_CNT,VARCHAR2,5,Y,프로젝트 마스터,세대개수,NULL +SHI1,CMCTB_PROJ_MAST,ORDR_GRNT_PRD,VARCHAR2,5,Y,프로젝트 마스터,주문주보증기간,NULL +SHI1,CMCTB_PROJ_MAST,ORDR_GRNT_FN_DT,VARCHAR2,8,Y,프로젝트 마스터,주문주보증종료일,NULL +SHI1,CMCTB_PROJ_MAST,DSN_CHRGR,VARCHAR2,13,Y,프로젝트 마스터,설계담당자,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_PROJ_NM,VARCHAR2,120,Y,프로젝트 마스터,인도후공사명,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_RL_CLNT,VARCHAR2,10,Y,프로젝트 마스터,인도후실고객사,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_SHPSRV_SCP,VARCHAR2,10,Y,프로젝트 마스터,인도후운항선사,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_NTTP,VARCHAR2,3,Y,프로젝트 마스터,인도후국적,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_CLS,VARCHAR2,20,Y,프로젝트 마스터,인도후선급,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_CALL_SIGN,VARCHAR2,20,Y,프로젝트 마스터,인도후CALLSIGN,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_TEL_NO,VARCHAR2,20,Y,프로젝트 마스터,인도후전화번호,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_FAX_NO,VARCHAR2,20,Y,프로젝트 마스터,인도후팩스번호,NULL +SHI1,CMCTB_PROJ_MAST,DL_AF_EMAIL_ADR,VARCHAR2,60,Y,프로젝트 마스터,인도후이메일주소,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_WBS_TP,VARCHAR2,7,Y,프로젝트 마스터,프로젝트WBS타입,NULL +SHI1,CMCTB_PROJ_MAST,XSTAT,VARCHAR2,1,Y,프로젝트 마스터,INTERFACE상태,NULL +SHI1,CMCTB_PROJ_MAST,XMSGS,VARCHAR2,300,Y,프로젝트 마스터,INTERFACE메세지,NULL +SHI1,CMCTB_PROJ_MAST,XDATS,VARCHAR2,8,Y,프로젝트 마스터,INTERFACE일자,NULL +SHI1,CMCTB_PROJ_MAST,XTIMS,VARCHAR2,6,Y,프로젝트 마스터,INTERFACE시간,NULL +SHI1,CMCTB_PROJ_MAST,CHN_PROJ_TP,VARCHAR2,1,Y,프로젝트 마스터,중국프로젝트타입,NULL +SHI1,CMCTB_PROJ_MAST,FIN_GRNT_FN_DT,VARCHAR2,8,Y,프로젝트 마스터,최종수요자 보증종료일,NULL +SHI1,CMCTB_PROJ_MAST,STDT,VARCHAR2,8,Y,프로젝트 마스터,시작일자,NULL +SHI1,CMCTB_PROJ_MAST,SERS_YN,VARCHAR2,1,Y,프로젝트 마스터,시리즈여부,NULL +SHI1,CMCTB_PROJ_MAST,TYPE,VARCHAR2,10,Y,프로젝트 마스터,HULL TOP 구분,NULL +SHI1,CMCTB_PROJ_MAST,PRO_PROJ_NO,VARCHAR2,24,Y,프로젝트 마스터,PROPOSAL 프로젝트번호,NULL +SHI1,CMCTB_PROJ_MAST,PBSD_PROJ_NO,VARCHAR2,24,Y,프로젝트 마스터,전기전자프로젝트번호,NULL +SHI1,CMCTB_PROJ_MAST,PBSD_SHIP_NM,VARCHAR2,150,Y,프로젝트 마스터,선박명,NULL +SHI1,CMCTB_PROJ_MAST,BIZCLS,VARCHAR2,10,Y,프로젝트 마스터,사업부,NULL +SHI1,CMCTB_PROJ_MAST,CLS_2,VARCHAR2,20,Y,프로젝트 마스터,선급2,NULL +SHI1,CMCTB_PROJ_MAST,SHTYPE_CD,VARCHAR2,6,Y,프로젝트 마스터,선형코드,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_DL_PLN_DT,VARCHAR2,8,Y,프로젝트 마스터,프로젝트 인도계획일,NULL +SHI1,CMCTB_PROJ_MAST,PROJ_DL_RT_DT,VARCHAR2,8,Y,프로젝트 마스터,프로젝트 인도실적일,NULL +SHI1,CMCTB_PROJ_MAST,TOT_AREA,NUMBER,22,Y,프로젝트 마스터,전체면적,NULL +SHI1,CMCTB_PROJ_MAST,EXMPT_AREA,NUMBER,22,Y,프로젝트 마스터,면세면적,NULL +SHI1,CMCTB_PROJ_MAST,EXMPT_RAT,NUMBER,22,Y,프로젝트 마스터,면세율,NULL +SHI1,CMCTB_PROJ_MAST,QM_CLS,VARCHAR2,10,Y,프로젝트 마스터,품질사업부,NULL +SHI1,CMCTB_PROJ_MAST,CNCT_PROJ_NO,VARCHAR2,24,Y,프로젝트 마스터,연계 프로젝트 번호,NULL +SHI1,CMCTB_PROJ_MAST,EQP_DTL_YN,VARCHAR2,1,Y,프로젝트 마스터,기자재 세분화 및 생산일정 연계여부,NULL +SHI1,CMCTB_PROJ_MAST,EXP_YN,VARCHAR2,1,Y,프로젝트 마스터,ExP 연계여부,NULL +SHI1,CMCTB_PROJ_MAST,ACT_MH_YN,VARCHAR2,1,Y,프로젝트 마스터,생산실적 연계여부,NULL +SHI1,CMCTB_PROJ_MAST,SPEC,VARCHAR2,10,Y,프로젝트 마스터,사양,NULL +SHI1,CMCTB_PROJ_MAST,DSGN_LIFE,VARCHAR2,10,Y,프로젝트 마스터,디자인수명,NULL +SHI1,CMCTB_PROJ_MAST,NEW_MC_YN,VARCHAR2,10,Y,프로젝트 마스터,신규MC여부,NULL +SHI1,CMCTB_PROJ_MAST,WK_ENV_WT_VAL_YN,VARCHAR2,1,Y,프로젝트 마스터,작업환경가중치여부,NULL +SHI1,CMCTB_PROJ_MAST,GRNT_STDT,VARCHAR2,8,Y,프로젝트 마스터,보증시작일,NULL +SHI1,CMCTB_PROJ_MAST,TMH_ADPT_YN,VARCHAR2,1,Y,프로젝트 마스터,목표공수 적용 여부,NULL +SHI1,CMCTB_PROJ_MAST,ZV_YN,VARCHAR2,1,Y,프로젝트 마스터,ZVEZDA 프로젝트 여부,NULL +SHI1,CMCTB_PROJ_MAST,SEC_YN,VARCHAR2,1,Y,프로젝트 마스터,평택지원 프로젝트 여부,NULL +SHI1,CMCTB_PROJ_WBS,PROJ_NO,VARCHAR2,24,N,프로젝트WBS,프로젝트번호,"CHECK, PK" +SHI1,CMCTB_PROJ_WBS,WBS_ELMT,VARCHAR2,24,N,프로젝트WBS,WBS요소,"CHECK, PK" +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_NM,VARCHAR2,255,Y,프로젝트WBS,WBS요소명,NULL +SHI1,CMCTB_PROJ_WBS,WBS_LVL,VARCHAR2,3,Y,프로젝트WBS,WBS레벨,NULL +SHI1,CMCTB_PROJ_WBS,FLAG,VARCHAR2,1,Y,프로젝트WBS,FLAG,NULL +SHI1,CMCTB_PROJ_WBS,WBS_INSD_ELMT,VARCHAR2,8,Y,프로젝트WBS,WBS내부요소,NULL +SHI1,CMCTB_PROJ_WBS,HGRK_WBS_ELMT,VARCHAR2,24,Y,프로젝트WBS,상위WBS요소,NULL +SHI1,CMCTB_PROJ_WBS,XSTAT,VARCHAR2,1,Y,프로젝트WBS,INTERFACE상태,NULL +SHI1,CMCTB_PROJ_WBS,XMSGS,VARCHAR2,100,Y,프로젝트WBS,INTERFACE메세지,NULL +SHI1,CMCTB_PROJ_WBS,XDATS,VARCHAR2,8,Y,프로젝트WBS,INTERFACE일자,NULL +SHI1,CMCTB_PROJ_WBS,XTIMS,VARCHAR2,6,Y,프로젝트WBS,INTERFACE시간,NULL +SHI1,CMCTB_PROJ_WBS,SYS_STAT,VARCHAR2,8,Y,프로젝트WBS,시스템상태,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_1,VARCHAR2,24,Y,프로젝트WBS,WBS요소_1,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_2,VARCHAR2,24,Y,프로젝트WBS,WBS요소_2,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_3,VARCHAR2,24,Y,프로젝트WBS,WBS요소_3,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_4,VARCHAR2,24,Y,프로젝트WBS,WBS요소_4,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_5,VARCHAR2,24,Y,프로젝트WBS,WBS요소_5,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_6,VARCHAR2,24,Y,프로젝트WBS,WBS요소_6,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_7,VARCHAR2,24,Y,프로젝트WBS,WBS요소_7,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_8,VARCHAR2,24,Y,프로젝트WBS,WBS요소_8,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_9,VARCHAR2,24,Y,프로젝트WBS,WBS요소_9,NULL +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_10,VARCHAR2,24,Y,프로젝트WBS,WBS요소_10,NULL +SHI1,CMCTB_VENDOR_ADDR,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (주소),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_ADDR,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (주소),주소번호,CHECK +SHI1,CMCTB_VENDOR_ADDR,INTL_ADR_VER_ID,VARCHAR2,1,N,Vendor 마스터 (주소),국제주소버전ID,"CHECK, PK" +SHI1,CMCTB_VENDOR_ADDR,CITY_ZIP_NO,VARCHAR2,10,Y,Vendor 마스터 (주소),도시우편번호,NULL +SHI1,CMCTB_VENDOR_ADDR,POBX_ZIP_NO,VARCHAR2,10,Y,Vendor 마스터 (주소),사서함우편번호,NULL +SHI1,CMCTB_VENDOR_ADDR,ADR_1,VARCHAR2,120,Y,Vendor 마스터 (주소),주소1,NULL +SHI1,CMCTB_VENDOR_ADDR,ADR_2,VARCHAR2,120,Y,Vendor 마스터 (주소),주소2,NULL +SHI1,CMCTB_VENDOR_ADDR,REGN_CD,VARCHAR2,5,Y,Vendor 마스터 (주소),지역코드,NULL +SHI1,CMCTB_VENDOR_ADDR,TTL,VARCHAR2,90,Y,Vendor 마스터 (주소),타이틀,NULL +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_ABRV_1,VARCHAR2,60,Y,Vendor 마스터 (주소),VENDOR명약어1,NULL +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_ABRV_2,VARCHAR2,60,Y,Vendor 마스터 (주소),VENDOR명약어2,NULL +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_1,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명,NULL +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_2,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명2,NULL +SHI1,CMCTB_VENDOR_ADDR,LANG_KEY,VARCHAR2,1,Y,Vendor 마스터 (주소),언어키,NULL +SHI1,CMCTB_VENDOR_ADDR,ETC_ADR_1,VARCHAR2,180,Y,Vendor 마스터 (주소),기타주소1,NULL +SHI1,CMCTB_VENDOR_ADDR,ETC_ADR_2,VARCHAR2,180,Y,Vendor 마스터 (주소),기타주소2,NULL +SHI1,CMCTB_VENDOR_ADDR,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (주소),국가코드,NULL +SHI1,CMCTB_VENDOR_ADDR,POBX,VARCHAR2,30,Y,Vendor 마스터 (주소),사서함,NULL +SHI1,CMCTB_VENDOR_ADDR,TRANS_ZONE,VARCHAR2,10,Y,Vendor 마스터 (주소),운송구역,NULL +SHI1,CMCTB_VENDOR_ADDR,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (주소),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_ADDR,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (주소),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_ADDR,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (주소),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_ADDR,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (주소),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_3,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명3,NULL +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_4,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명4,NULL +SHI1,CMCTB_VENDOR_ADDR,TAX_JRDT_ZONE_CD,VARCHAR2,15,Y,Vendor 마스터 (주소),조세관할구역코드,NULL +SHI1,CMCTB_VENDOR_ADDR,ADR_TMZ,VARCHAR2,10,Y,Vendor 마스터 (주소),주소시간대,NULL +SHI1,CMCTB_VENDOR_COMPNY,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (Company),VENDOR코드,PK +SHI1,CMCTB_VENDOR_COMPNY,CO_CD,VARCHAR2,4,N,Vendor 마스터 (Company),회사코드,PK +SHI1,CMCTB_VENDOR_COMPNY,CTL_ACNT,VARCHAR2,10,Y,Vendor 마스터 (Company),조정계정,NULL +SHI1,CMCTB_VENDOR_COMPNY,SRT_KEY,VARCHAR2,3,Y,Vendor 마스터 (Company),정렬키,NULL +SHI1,CMCTB_VENDOR_COMPNY,PLN_GRP,VARCHAR2,10,Y,Vendor 마스터 (Company),계획그룹,NULL +SHI1,CMCTB_VENDOR_COMPNY,BF_VNDRCD,VARCHAR2,10,Y,Vendor 마스터 (Company),이전VENDOR코드,NULL +SHI1,CMCTB_VENDOR_COMPNY,SPLY_COND,VARCHAR2,4,Y,Vendor 마스터 (Company),지급조건,NULL +SHI1,CMCTB_VENDOR_COMPNY,OVLAP_INVC_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),중복송장지시자,CHECK +SHI1,CMCTB_VENDOR_COMPNY,SPLY_MTHD,VARCHAR2,10,Y,Vendor 마스터 (Company),지급방법,NULL +SHI1,CMCTB_VENDOR_COMPNY,SPLY_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),지급보류지시자,CHECK +SHI1,CMCTB_VENDOR_COMPNY,TRD_BANK_SHRT_KEY,VARCHAR2,5,Y,Vendor 마스터 (Company),거래은행단축키,NULL +SHI1,CMCTB_VENDOR_COMPNY,PST_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),전기보류지시자,CHECK +SHI1,CMCTB_VENDOR_COMPNY,HOLD_CAUS,VARCHAR2,200,Y,Vendor 마스터 (Company),보류사유,NULL +SHI1,CMCTB_VENDOR_COMPNY,DEL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),삭제지시자,CHECK +SHI1,CMCTB_VENDOR_COMPNY,SRCE_TX_NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (Company),원천세국가코드,NULL +SHI1,CMCTB_VENDOR_COMPNY,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (Company),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_COMPNY,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (Company),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_COMPNY,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (Company),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_COMPNY,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (Company),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_COMPNY,MIN_ORDR,VARCHAR2,3,Y,Vendor 마스터 (Company),소수지시자,NULL +SHI1,CMCTB_VENDOR_COMPNY,SPRT_SPLY_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),분리지급지시자,NULL +SHI1,CMCTB_VENDOR_COMPNY,CSTM_VNDR_CLR_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),CUSTOMERVENDOR반제지시자,NULL +SHI1,CMCTB_VENDOR_COMPNY,SRCE_TX_CD,VARCHAR2,2,Y,Vendor 마스터 (Company),원천세코드,NULL +SHI1,CMCTB_VENDOR_COMPNY,IATA_BIC_GB,VARCHAR2,4,Y,Vendor 마스터 (Company),IATABIC구분,NULL +SHI1,CMCTB_VENDOR_COMPNY,REP_TP,VARCHAR2,6,Y,Vendor 마스터 (Company),대표유형,NULL +SHI1,CMCTB_VENDOR_COMPNY,LOGST_VNDR_TP,VARCHAR2,6,Y,Vendor 마스터 (Company),물류VENDOR유형,NULL +SHI1,CMCTB_VENDOR_COMPNY,VNDR_ACNT_NO,VARCHAR2,12,Y,Vendor 마스터 (Company),VENDOR계정번호,NULL +SHI1,CMCTB_VENDOR_COMPNY,VNDR_CHRGR_NM,VARCHAR2,45,Y,Vendor 마스터 (Company),VENDOR담당자명,NULL +SHI1,CMCTB_VENDOR_COMPNY,ACOT_CHRGR_TELNO,VARCHAR2,30,Y,Vendor 마스터 (Company),회계담당자전화번호,NULL +SHI1,CMCTB_VENDOR_COMPNY,AUTH_GRP,VARCHAR2,8,Y,Vendor 마스터 (Company),권한그룹,NULL +SHI1,CMCTB_VENDOR_COMPNY,FIN_IR_CALC_DT,VARCHAR2,8,Y,Vendor 마스터 (Company),최종이자계산일자,NULL +SHI1,CMCTB_VENDOR_COMPNY,FIN_IR_ACT_DT,VARCHAR2,8,Y,Vendor 마스터 (Company),최종이자실행일자,NULL +SHI1,CMCTB_VENDOR_COMPNY,ACOT_CHRGR_FAXNO,VARCHAR2,31,Y,Vendor 마스터 (Company),회계담당자FAX번호,NULL +SHI1,CMCTB_VENDOR_COMPNY,MK_CHRGR_EMAIL,VARCHAR2,241,Y,Vendor 마스터 (Company),MAKER담당자이메일,NULL +SHI1,CMCTB_VENDOR_COMPNY,MEMO,VARCHAR2,120,Y,Vendor 마스터 (Company),메모,NULL +SHI1,CMCTB_VENDOR_COMPNY,MOFFC_ACNT_NO,VARCHAR2,10,Y,Vendor 마스터 (Company),본사계정번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (일반),벤더코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_GENERAL,ACNT_GRP,VARCHAR2,4,Y,Vendor 마스터 (일반),계정그룹,NULL +SHI1,CMCTB_VENDOR_GENERAL,ACNT_GRP_TP,VARCHAR2,2,Y,Vendor 마스터 (일반),계정그룹종류,NULL +SHI1,CMCTB_VENDOR_GENERAL,CSTM_CD,VARCHAR2,10,Y,Vendor 마스터 (일반),고객코드,NULL +SHI1,CMCTB_VENDOR_GENERAL,PST_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),전기보류지시자,CHECK +SHI1,CMCTB_VENDOR_GENERAL,PUR_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),구매보류지시자,CHECK +SHI1,CMCTB_VENDOR_GENERAL,HOLD_CAUS,VARCHAR2,200,Y,Vendor 마스터 (일반),보류사유,NULL +SHI1,CMCTB_VENDOR_GENERAL,DEL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),삭제지시자,CHECK +SHI1,CMCTB_VENDOR_GENERAL,CO_ID,VARCHAR2,6,Y,Vendor 마스터 (일반),법인ID,NULL +SHI1,CMCTB_VENDOR_GENERAL,REPR_NM,VARCHAR2,30,Y,Vendor 마스터 (일반),대표자명,NULL +SHI1,CMCTB_VENDOR_GENERAL,BIZTP,VARCHAR2,90,Y,Vendor 마스터 (일반),사업유형,NULL +SHI1,CMCTB_VENDOR_GENERAL,BIZCON,VARCHAR2,90,Y,Vendor 마스터 (일반),산업유형,NULL +SHI1,CMCTB_VENDOR_GENERAL,REG_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),등록일자,NULL +SHI1,CMCTB_VENDOR_GENERAL,REG_DTM,VARCHAR2,6,Y,Vendor 마스터 (일반),등록시간,NULL +SHI1,CMCTB_VENDOR_GENERAL,REGR_ID,VARCHAR2,13,Y,Vendor 마스터 (일반),등록자,NULL +SHI1,CMCTB_VENDOR_GENERAL,AGR_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),승인일자,NULL +SHI1,CMCTB_VENDOR_GENERAL,AGR_TM,VARCHAR2,6,Y,Vendor 마스터 (일반),승인시간,NULL +SHI1,CMCTB_VENDOR_GENERAL,AGR_R_ID,VARCHAR2,13,Y,Vendor 마스터 (일반),승인자ID,NULL +SHI1,CMCTB_VENDOR_GENERAL,CHG_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),변경일자,NULL +SHI1,CMCTB_VENDOR_GENERAL,CHG_TM,VARCHAR2,6,Y,Vendor 마스터 (일반),변경시간,NULL +SHI1,CMCTB_VENDOR_GENERAL,CHGR_ID,VARCHAR2,13,Y,Vendor 마스터 (일반),변경자ID,NULL +SHI1,CMCTB_VENDOR_GENERAL,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (일반),국가코드,NULL +SHI1,CMCTB_VENDOR_GENERAL,REP_TEL_NO,VARCHAR2,30,Y,Vendor 마스터 (일반),대표전화번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,REP_FAX_NO,VARCHAR2,31,Y,Vendor 마스터 (일반),대표FAX번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,BIZR_NO,VARCHAR2,10,Y,Vendor 마스터 (일반),사업자번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,CO_REG_NO,VARCHAR2,18,Y,Vendor 마스터 (일반),법인등록번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,TX_CD_4,VARCHAR2,54,Y,Vendor 마스터 (일반),세금번호4,NULL +SHI1,CMCTB_VENDOR_GENERAL,CO_INST_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),설립일자,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDR_TP,VARCHAR2,2,Y,Vendor 마스터 (일반),구매처유형,NULL +SHI1,CMCTB_VENDOR_GENERAL,GBL_TOP_CD,VARCHAR2,11,Y,Vendor 마스터 (일반),GLOBALTOP코드,NULL +SHI1,CMCTB_VENDOR_GENERAL,GBL_TOP_NM,VARCHAR2,120,Y,Vendor 마스터 (일반),GLOBALTOP명,NULL +SHI1,CMCTB_VENDOR_GENERAL,DMST_TOP_CD,VARCHAR2,11,Y,Vendor 마스터 (일반),국내TOP코드,NULL +SHI1,CMCTB_VENDOR_GENERAL,DMST_TOP_NM,VARCHAR2,120,Y,Vendor 마스터 (일반),국내TOP명,NULL +SHI1,CMCTB_VENDOR_GENERAL,BIZ_UOM_CD,VARCHAR2,11,Y,Vendor 마스터 (일반),사업단위코드,NULL +SHI1,CMCTB_VENDOR_GENERAL,BIZ_UOM_NM,VARCHAR2,120,Y,Vendor 마스터 (일반),사업단위명,NULL +SHI1,CMCTB_VENDOR_GENERAL,DNS_NO,VARCHAR2,11,Y,Vendor 마스터 (일반),DUNS번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_GENERAL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (일반),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_GENERAL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (일반),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_GENERAL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (일반),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_GENERAL,TTL,VARCHAR2,45,Y,Vendor 마스터 (일반),타이틀,NULL +SHI1,CMCTB_VENDOR_GENERAL,VAT_REG_NO,VARCHAR2,20,Y,Vendor 마스터 (일반),부가세등록번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,GIRO_VNDR_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),지로VENDOR지시자,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_1,VARCHAR2,120,Y,Vendor 마스터 (일반),Vendor명1,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_2,VARCHAR2,120,Y,Vendor 마스터 (일반),VENDOR명2,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_3,VARCHAR2,120,Y,Vendor 마스터 (일반),VENDOR명3,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_4,VARCHAR2,120,Y,Vendor 마스터 (일반),VENDOR명4,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_ABRV_1,VARCHAR2,60,Y,Vendor 마스터 (일반),VENDOR명약어1,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_ABRV_2,VARCHAR2,60,Y,Vendor 마스터 (일반),VENDOR명약어2,NULL +SHI1,CMCTB_VENDOR_GENERAL,PTNT_VNDRCD,VARCHAR2,10,Y,Vendor 마스터 (일반),잠재VENDOR코드,NULL +SHI1,CMCTB_VENDOR_GENERAL,ADR_1,VARCHAR2,120,Y,Vendor 마스터 (일반),주소1,NULL +SHI1,CMCTB_VENDOR_GENERAL,ADR_2,VARCHAR2,512,Y,Vendor 마스터 (일반),주소2,NULL +SHI1,CMCTB_VENDOR_GENERAL,QLT_CHRGR_NM,VARCHAR2,60,Y,Vendor 마스터 (일반),품질담당자명,NULL +SHI1,CMCTB_VENDOR_GENERAL,QLT_CHRGR_TELNO,VARCHAR2,30,Y,Vendor 마스터 (일반),품질담당자전화번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,QLT_CHRGR_EMAIL,VARCHAR2,241,Y,Vendor 마스터 (일반),품질담당자이메일,NULL +SHI1,CMCTB_VENDOR_GENERAL,SB_WKA_SEQ,VARCHAR2,16,Y,Vendor 마스터 (일반),SUB작업장순서,NULL +SHI1,CMCTB_VENDOR_GENERAL,OVLAP_CAUS_CD,VARCHAR2,2,Y,Vendor 마스터 (일반),중복사유코드,NULL +SHI1,CMCTB_VENDOR_GENERAL,DOC_TP,VARCHAR2,3,Y,Vendor 마스터 (일반),문서유형,NULL +SHI1,CMCTB_VENDOR_GENERAL,DOC_NO,VARCHAR2,25,Y,Vendor 마스터 (일반),문서번호,NULL +SHI1,CMCTB_VENDOR_GENERAL,PTN_DOC,VARCHAR2,3,Y,Vendor 마스터 (일반),부분문서,NULL +SHI1,CMCTB_VENDOR_GENERAL,DOC_VER,VARCHAR2,2,Y,Vendor 마스터 (일반),문서버전,NULL +SHI1,CMCTB_VENDOR_GENERAL,INB_FLAG,VARCHAR2,1,Y,Vendor 마스터 (일반),인바운드플래그,NULL +SHI1,CMCTB_VENDOR_GENERAL,DEL_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),삭제보류지시자,NULL +SHI1,CMCTB_VENDOR_GENERAL,PUR_HOLD_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),구매보류일자,NULL +SHI1,CMCTB_VENDOR_GENERAL,POBX,VARCHAR2,30,Y,Vendor 마스터 (일반),사서함,NULL +SHI1,CMCTB_VENDOR_GENERAL,INTL_LCTN_CHK_NUM,NUMBER,22,Y,Vendor 마스터 (일반),국제LOCATION점검숫자,NULL +SHI1,CMCTB_VENDOR_GENERAL,SRCETX_RP_SEX_KEY,VARCHAR2,1,Y,Vendor 마스터 (일반),원천세의무자성별키,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDR_CNRT_CHRGR_1,VARCHAR2,105,Y,Vendor 마스터 (일반),VENDOR계약담당자1,NULL +SHI1,CMCTB_VENDOR_GENERAL,VNDR_CNRT_CHRGR_2,VARCHAR2,105,Y,Vendor 마스터 (일반),VENDOR계약담당자2,NULL +SHI1,CMCTB_VENDOR_GENERAL,REPR_RESNO,VARCHAR2,13,Y,Vendor 마스터 (일반),대표생년월일,NULL +SHI1,CMCTB_VENDOR_GENERAL,CO_VLM,VARCHAR2,1,Y,Vendor 마스터 (일반),기업규모,NULL +SHI1,CMCTB_VENDOR_GRP,VNDRCD,VARCHAR2,10,N,VENDOR마스터(협력사분류),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_GRP,BIZ_GRP_CD,VARCHAR2,3,N,VENDOR마스터(협력사분류),업무그룹코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_GRP,CRTE_DT,VARCHAR2,8,Y,VENDOR마스터(협력사분류),생성일자,NULL +SHI1,CMCTB_VENDOR_GRP,CRTE_TM,VARCHAR2,6,Y,VENDOR마스터(협력사분류),생성시간,NULL +SHI1,CMCTB_VENDOR_GRP,CRTER_ID,VARCHAR2,13,Y,VENDOR마스터(협력사분류),생성자ID,NULL +SHI1,CMCTB_VENDOR_GRP,CHG_DT,VARCHAR2,8,Y,VENDOR마스터(협력사분류),변경일자,NULL +SHI1,CMCTB_VENDOR_GRP,CHG_TM,VARCHAR2,6,Y,VENDOR마스터(협력사분류),변경시간,NULL +SHI1,CMCTB_VENDOR_GRP,CHGR_ID,VARCHAR2,13,Y,VENDOR마스터(협력사분류),변경자ID,NULL +SHI1,CMCTB_VENDOR_INCO,VNDRCD,VARCHAR2,10,N,사내협력사VENDOR,VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_INCO,VNDRNM,VARCHAR2,120,Y,사내협력사VENDOR,VENDOR코명,CHECK +SHI1,CMCTB_VENDOR_INCO,REPR_NM,VARCHAR2,30,Y,사내협력사VENDOR,대표자명,NULL +SHI1,CMCTB_VENDOR_INCO,PRTNR_GB,VARCHAR2,1,Y,사내협력사VENDOR,협력사구분,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_CD,VARCHAR2,3,Y,사내협력사VENDOR,사내협력사코드,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_WKA_1,VARCHAR2,1,Y,사내협력사VENDOR,사내협력사작업장1,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_WKA_2,VARCHAR2,1,Y,사내협력사VENDOR,사내협력사작업장2,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_WKA_3,VARCHAR2,1,Y,사내협력사VENDOR,사내협력사작업장3,NULL +SHI1,CMCTB_VENDOR_INCO,JBTYPE_CD,VARCHAR2,2,Y,사내협력사VENDOR,직종코드,NULL +SHI1,CMCTB_VENDOR_INCO,JBTYPE_CD_2,VARCHAR2,2,Y,사내협력사VENDOR,직종코드2,NULL +SHI1,CMCTB_VENDOR_INCO,INDV_CO_GB,VARCHAR2,2,Y,사내협력사VENDOR,개인법인구분,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_FOND_YN,VARCHAR2,1,Y,사내협력사VENDOR,사내창립유무,NULL +SHI1,CMCTB_VENDOR_INCO,DOCK_NO,VARCHAR2,25,Y,사내협력사VENDOR,도크번호,NULL +SHI1,CMCTB_VENDOR_INCO,OCMP_INP_DT,VARCHAR2,8,Y,사내협력사VENDOR,당사투입일자,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_DUSE_DT,VARCHAR2,8,Y,사내협력사VENDOR,사내철수일자,NULL +SHI1,CMCTB_VENDOR_INCO,INDST_INS_PMRAT,NUMBER,22,Y,사내협력사VENDOR,산재보험요율,NULL +SHI1,CMCTB_VENDOR_INCO,CNRT_PFRM_GRAMT,NUMBER,22,Y,사내협력사VENDOR,계약이행보증금,NULL +SHI1,CMCTB_VENDOR_INCO,WGE_RAT,NUMBER,22,Y,사내협력사VENDOR,임금율,NULL +SHI1,CMCTB_VENDOR_INCO,CRSPD_DEPTCD_1,VARCHAR2,30,Y,사내협력사VENDOR,해당부서코드1,NULL +SHI1,CMCTB_VENDOR_INCO,CRSPD_DEPTCD_2,VARCHAR2,30,Y,사내협력사VENDOR,해당부서코드2,NULL +SHI1,CMCTB_VENDOR_INCO,CRSPD_TEAM_BLNG,VARCHAR2,100,Y,사내협력사VENDOR,해당팀소속,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_ITM_1,VARCHAR2,120,Y,사내협력사VENDOR,사내협력사종목1,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_ITM_2,VARCHAR2,120,Y,사내협력사VENDOR,사내협력사종목2,NULL +SHI1,CMCTB_VENDOR_INCO,OFC_LOC,VARCHAR2,240,Y,사내협력사VENDOR,사무실위치,NULL +SHI1,CMCTB_VENDOR_INCO,REP_OCMP_CARR,VARCHAR2,300,Y,사내협력사VENDOR,대표당사경력,NULL +SHI1,CMCTB_VENDOR_INCO,INCO_DUSE_CAUS,VARCHAR2,600,Y,사내협력사VENDOR,사내철수사유,NULL +SHI1,CMCTB_VENDOR_INCO,TEL_NO,VARCHAR2,30,Y,사내협력사VENDOR,전화번호,NULL +SHI1,CMCTB_VENDOR_INCO,ADR1,VARCHAR2,200,Y,사내협력사VENDOR,주소,NULL +SHI1,CMCTB_VENDOR_INCO,ADR2,VARCHAR2,200,Y,사내협력사VENDOR,상세주소,NULL +SHI1,CMCTB_VENDOR_INCO,OLD_VNDRCD,VARCHAR2,10,Y,사내협력사VENDOR,이전 VENDOR코드,NULL +SHI1,CMCTB_VENDOR_INCO,TREE_NUM,VARCHAR2,1,Y,사내협력사VENDOR,하위 VENDOR 갯수,NULL +SHI1,CMCTB_VENDOR_INCO,CRTE_DT,VARCHAR2,8,Y,사내협력사VENDOR,생성일자,NULL +SHI1,CMCTB_VENDOR_INCO,CRTE_TM,VARCHAR2,6,Y,사내협력사VENDOR,생성시간,NULL +SHI1,CMCTB_VENDOR_INCO,CRTE_USR_ID,VARCHAR2,13,Y,사내협력사VENDOR,생성사용자ID,NULL +SHI1,CMCTB_VENDOR_INCO,CHG_DT,VARCHAR2,8,Y,사내협력사VENDOR,수정일자,NULL +SHI1,CMCTB_VENDOR_INCO,CHG_TM,VARCHAR2,6,Y,사내협력사VENDOR,수정시간,NULL +SHI1,CMCTB_VENDOR_INCO,CHG_USR_ID,VARCHAR2,13,Y,사내협력사VENDOR,수정사용자ID,NULL +SHI1,CMCTB_VENDOR_INCO,UPR_JBTYPE,VARCHAR2,2,Y,사내협력사VENDOR,직종단가,NULL +SHI1,CMCTB_VENDOR_INCO,ZBYBP,VARCHAR2,4,Y,사내협력사VENDOR,공급받는자 종사업장 식별코드,NULL +SHI1,CMCTB_VENDOR_INCO,RMK,VARCHAR2,4000,Y,사내협력사VENDOR,비고,NULL +SHI1,CMCTB_VENDOR_INCO,WDL_PLN_YN,VARCHAR2,1,Y,사내협력사VENDOR,철수예정유무,NULL +SHI1,CMCTB_VENDOR_INCO,WGE_DELY_DVL,VARCHAR2,8,Y,사내협력사VENDOR,임금체불발생,NULL +SHI1,CMCTB_VENDOR_INCO,ESCROW_YN,VARCHAR2,1,Y,사내협력사VENDOR,에스크로가입유무,NULL +SHI1,CMCTB_VENDOR_PORG,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (구매조직),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_PORG,PUR_ORG_CD,VARCHAR2,4,N,Vendor 마스터 (구매조직),구매조직,"CHECK, PK" +SHI1,CMCTB_VENDOR_PORG,PUR_ORD_CUR,VARCHAR2,5,Y,Vendor 마스터 (구매조직),구매오더통화,NULL +SHI1,CMCTB_VENDOR_PORG,SPLY_COND,VARCHAR2,4,Y,Vendor 마스터 (구매조직),지급조건,NULL +SHI1,CMCTB_VENDOR_PORG,DL_COND_1,VARCHAR2,3,Y,Vendor 마스터 (구매조직),인도조건1,NULL +SHI1,CMCTB_VENDOR_PORG,DL_COND_2,VARCHAR2,90,Y,Vendor 마스터 (구매조직),인도조건2,NULL +SHI1,CMCTB_VENDOR_PORG,CALC_SHM_GRP,VARCHAR2,2,Y,Vendor 마스터 (구매조직),계산스키마그룹,NULL +SHI1,CMCTB_VENDOR_PORG,GR_BSE_INVC_VR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),GR기준송장검증,NULL +SHI1,CMCTB_VENDOR_PORG,AT_PUR_ORD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),자동구매오더지시자,CHECK +SHI1,CMCTB_VENDOR_PORG,PUR_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),구매보류지시자,CHECK +SHI1,CMCTB_VENDOR_PORG,DEL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),삭제지시자,CHECK +SHI1,CMCTB_VENDOR_PORG,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (구매조직),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_PORG,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (구매조직),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_PORG,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (구매조직),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_PORG,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (구매조직),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_PORG,ORD_CNFM_REQ_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),오더확인요청지시자,NULL +SHI1,CMCTB_VENDOR_PORG,SALE_CHRGR_NM,VARCHAR2,120,Y,Vendor 마스터 (구매조직),영업담당자명,NULL +SHI1,CMCTB_VENDOR_PORG,VNDR_TELNO,VARCHAR2,30,Y,Vendor 마스터 (구매조직),VENDOR전화번호,NULL +SHI1,CMCTB_VENDOR_PORG,CNFM_CTL_KEY,VARCHAR2,4,Y,Vendor 마스터 (구매조직),확정제어키,NULL +SHI1,CMCTB_VENDOR_PORG,PUR_HOLD_DT,VARCHAR2,8,Y,Vendor 마스터 (구매조직),구매보류일자,NULL +SHI1,CMCTB_VENDOR_PORG,PUR_HOLD_CAUS,VARCHAR2,120,Y,Vendor 마스터 (구매조직),구매보류사유,NULL +SHI1,CMCTB_VENDOR_REPREMAIL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 EMAIL),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPREMAIL,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 EMAIL),주소번호,CHECK +SHI1,CMCTB_VENDOR_REPREMAIL,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 EMAIL),대표자순번,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPREMAIL,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 EMAIL),유효시작일자,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPREMAIL,EMAIL_ADR,VARCHAR2,241,Y,Vendor 마스터 (대표자 EMAIL),이메일주소,NULL +SHI1,CMCTB_VENDOR_REPREMAIL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 EMAIL),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_REPREMAIL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 EMAIL),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_REPREMAIL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 EMAIL),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_REPREMAIL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 EMAIL),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_REPRFAX,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 팩스번호),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRFAX,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 팩스번호),주소번호,CHECK +SHI1,CMCTB_VENDOR_REPRFAX,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 팩스번호),대표자순번,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRFAX,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 팩스번호),유효시작일자,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRFAX,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (대표자 팩스번호),국가코드,NULL +SHI1,CMCTB_VENDOR_REPRFAX,FAXNO,VARCHAR2,30,Y,Vendor 마스터 (대표자 팩스번호),팩스번호,NULL +SHI1,CMCTB_VENDOR_REPRFAX,FAX_ETS_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 팩스번호),팩스내선번호,NULL +SHI1,CMCTB_VENDOR_REPRFAX,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 팩스번호),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_REPRFAX,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 팩스번호),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_REPRFAX,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 팩스번호),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_REPRFAX,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 팩스번호),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_REPRTEL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 전화번호),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRTEL,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 전화번호),주소번호,CHECK +SHI1,CMCTB_VENDOR_REPRTEL,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 전화번호),대표자순번,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRTEL,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 전화번호),유효시작일자,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRTEL,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (대표자 전화번호),국가코드,NULL +SHI1,CMCTB_VENDOR_REPRTEL,TELNO,VARCHAR2,30,Y,Vendor 마스터 (대표자 전화번호),전화번호,NULL +SHI1,CMCTB_VENDOR_REPRTEL,ETX_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 전화번호),내선번호,NULL +SHI1,CMCTB_VENDOR_REPRTEL,HP_ORDR,VARCHAR2,1,Y,Vendor 마스터 (대표자 전화번호),핸드폰지시자,CHECK +SHI1,CMCTB_VENDOR_REPRTEL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 전화번호),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_REPRTEL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 전화번호),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_REPRTEL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 전화번호),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_REPRTEL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 전화번호),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_REPRURL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 URL),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRURL,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 URL),주소번호,CHECK +SHI1,CMCTB_VENDOR_REPRURL,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 URL),대표자순번,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRURL,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 URL),유효시작일자,"CHECK, PK" +SHI1,CMCTB_VENDOR_REPRURL,URL,VARCHAR2,2048,Y,Vendor 마스터 (대표자 URL),URL,NULL +SHI1,CMCTB_VENDOR_REPRURL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 URL),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_REPRURL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 URL),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_REPRURL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 URL),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_REPRURL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 URL),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_TAXNUM,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (세금번호),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_TAXNUM,TX_NO_CTG,VARCHAR2,4,N,Vendor 마스터 (세금번호),세금번호범주,"CHECK, PK" +SHI1,CMCTB_VENDOR_TAXNUM,BIZ_PTNR_TX_NO,VARCHAR2,20,Y,Vendor 마스터 (세금번호),사업파트너세금번호,NULL +SHI1,CMCTB_VENDOR_TAXNUM,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (세금번호),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_TAXNUM,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (세금번호),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_TAXNUM,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (세금번호),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_TAXNUM,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (세금번호),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_VFPN,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (파트너역할),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_VFPN,PUR_ORG_CD,VARCHAR2,4,N,Vendor 마스터 (파트너역할),구매조직,"CHECK, PK" +SHI1,CMCTB_VENDOR_VFPN,VNDR_SUB_NO,VARCHAR2,6,N,Vendor 마스터 (파트너역할),VENDOR서브번호,"CHECK, PK" +SHI1,CMCTB_VENDOR_VFPN,PLNT_CD,VARCHAR2,4,N,Vendor 마스터 (파트너역할),플랜트코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_VFPN,PTNR_SKL,VARCHAR2,2,N,Vendor 마스터 (파트너역할),파트너기능,"CHECK, PK" +SHI1,CMCTB_VENDOR_VFPN,PTNR_CNT,VARCHAR2,3,N,Vendor 마스터 (파트너역할),파트너카운터,"CHECK, PK" +SHI1,CMCTB_VENDOR_VFPN,ETC_REF_VNDRCD,VARCHAR2,10,Y,Vendor 마스터 (파트너역할),기타참조VENDOR코드,NULL +SHI1,CMCTB_VENDOR_VFPN,BSE_PTNR_ORDR,VARCHAR2,1,Y,Vendor 마스터 (파트너역할),기본파트너지시자,CHECK +SHI1,CMCTB_VENDOR_VFPN,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (파트너역할),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_VFPN,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (파트너역할),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_VFPN,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (파트너역할),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_VFPN,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (파트너역할),인터페이스메시지,NULL +SHI1,CMCTB_VENDOR_WHTHX,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (원천세유형),VENDOR코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_WHTHX,CO_CD,VARCHAR2,4,N,Vendor 마스터 (원천세유형),회사코드,"CHECK, PK" +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_TP,VARCHAR2,2,N,Vendor 마스터 (원천세유형),원천세유형,"CHECK, PK" +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_REL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (원천세유형),원천세관련지시자,NULL +SHI1,CMCTB_VENDOR_WHTHX,RECIP_TP,VARCHAR2,2,Y,Vendor 마스터 (원천세유형),수취인유형,NULL +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_IDENT_NO,VARCHAR2,16,Y,Vendor 마스터 (원천세유형),원천세식별번호,NULL +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_NO,VARCHAR2,2,Y,Vendor 마스터 (원천세유형),원천세코드,NULL +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_CERT_NO,VARCHAR2,15,Y,Vendor 마스터 (원천세유형),면제증명서번호,NULL +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_RAT,NUMBER,22,Y,Vendor 마스터 (원천세유형),면제율,NULL +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_ST_DT,VARCHAR2,8,Y,Vendor 마스터 (원천세유형),면제시작일자,NULL +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_ED_DT,VARCHAR2,8,Y,Vendor 마스터 (원천세유형),면제종료일,NULL +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_CAUS,VARCHAR2,200,Y,Vendor 마스터 (원천세유형),면제사유,NULL +SHI1,CMCTB_VENDOR_WHTHX,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (원천세유형),인터페이스일자,NULL +SHI1,CMCTB_VENDOR_WHTHX,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (원천세유형),인터페이스시간,NULL +SHI1,CMCTB_VENDOR_WHTHX,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (원천세유형),인터페이스상태,NULL +SHI1,CMCTB_VENDOR_WHTHX,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (원천세유형),인터페이스메시지,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_PROJ_NO,VARCHAR2,24,N,견적프로젝트기준정보,견적프로젝트번호,PK +SHI1,PLFTB_ESTM_PROJ_MAST,AGND_NO,VARCHAR2,8,Y,견적프로젝트기준정보,안건번호,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_PROJ_NM,VARCHAR2,100,Y,견적프로젝트기준정보,견적프로젝트명,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,BIZ_CLS,VARCHAR2,1,Y,견적프로젝트기준정보,사업부문,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,REV_NO,NUMBER,22,Y,견적프로젝트기준정보,리비젼번호,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_TYPE,VARCHAR2,1,Y,견적프로젝트기준정보,견적유형,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,OWNER_CD,VARCHAR2,10,Y,견적프로젝트기준정보,선주사코드,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,SERS_CNT,NUMBER,22,Y,견적프로젝트기준정보,시리즈순번,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,SKND_CD,VARCHAR2,10,Y,견적프로젝트기준정보,선종코드,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,SHTYPE_CD,VARCHAR2,10,Y,견적프로젝트기준정보,선형코드,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,SHTYPE_SIZE,NUMBER,22,Y,견적프로젝트기준정보,선형크기,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,SHTYPE_UOM,VARCHAR2,10,Y,견적프로젝트기준정보,선형단위,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,CHRTR_CD,VARCHAR2,10,Y,견적프로젝트기준정보,관청코드,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,NATN_CD,VARCHAR2,10,Y,견적프로젝트기준정보,국가코드,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,CLS_1,VARCHAR2,10,Y,견적프로젝트기준정보,선급1,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,CLS_2,VARCHAR2,10,Y,견적프로젝트기준정보,선급2,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,CLS_3,VARCHAR2,10,Y,견적프로젝트기준정보,선급3,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,DATA_CRTE_GB,VARCHAR2,2,Y,견적프로젝트기준정보,데이터생성구분,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,FS_INPR_ID,VARCHAR2,13,Y,견적프로젝트기준정보,최초등록자ID,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,FS_INP_DTM,VARCHAR2,14,Y,견적프로젝트기준정보,최초등록일시,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,FIN_CHGR_ID,VARCHAR2,13,Y,견적프로젝트기준정보,최종수정자ID,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,FIN_CHG_DTM,VARCHAR2,14,Y,견적프로젝트기준정보,최종수정일시,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_1,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값1,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_2,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값2,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_3,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값3,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_4,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값4,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_APP_ID,VARCHAR2,32,Y,견적프로젝트기준정보,견적물량결재ID,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_STAT,VARCHAR2,1,Y,견적프로젝트기준정보,견적물량상태,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_STAT_CHGR_ID,VARCHAR2,13,Y,견적프로젝트기준정보,견적물량상태변경자ID,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_STAT_CHG_DTM,VARCHAR2,14,Y,견적프로젝트기준정보,견적물량상태변경일시,NULL +SHI1,PLFTB_ESTM_PROJ_MAST,IF_TRGT_YN,VARCHAR2,1,Y,견적프로젝트기준정보,IF대상여부,NULL diff --git a/lib/oracle-db/nonsap/1.table-and-columns-info.csv.before b/lib/oracle-db/nonsap/1.table-and-columns-info.csv.before new file mode 100644 index 00000000..1b54e714 --- /dev/null +++ b/lib/oracle-db/nonsap/1.table-and-columns-info.csv.before @@ -0,0 +1,922 @@ +OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,NULLABLE,TABLE_COMMENTS,COLUMN_COMMENTS +SHI1,CMCTB_CD,CD_CLF,VARCHAR2,10,N,코드,코드분류 +SHI1,CMCTB_CD,CD,VARCHAR2,10,N,코드,코드 +SHI1,CMCTB_CD,CD2,VARCHAR2,10,N,코드,코드2 +SHI1,CMCTB_CD,CD3,VARCHAR2,10,N,코드,코드3 +SHI1,CMCTB_CD,USR_DF_CHAR_1,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_2,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_3,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_4,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_5,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_6,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_7,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_8,VARCHAR2,60,Y,코드,사용자정의문자열10 +SHI1,CMCTB_CD,USR_DF_CHAR_9,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_10,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_11,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_12,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_13,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_14,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_15,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_16,VARCHAR2,60,Y,코드,사용자정의문자열20 +SHI1,CMCTB_CD,USR_DF_CHAR_17,VARCHAR2,120,Y,코드,사용자정의문자열40 +SHI1,CMCTB_CD,USR_DF_CHAR_18,VARCHAR2,120,Y,코드,사용자정의문자열40 +SHI1,CMCTB_CD,USR_DF_CHAR_19,VARCHAR2,765,Y,코드,사용자정의문자열255 +SHI1,CMCTB_CD,USR_DF_CHAR_20,VARCHAR2,765,Y,코드,사용자정의문자열255 +SHI1,CMCTB_CD,USR_DF_CHK_1,VARCHAR2,1,Y,코드,사용자정의체크1 +SHI1,CMCTB_CD,USR_DF_CHK_2,VARCHAR2,1,Y,코드,사용자정의체크2 +SHI1,CMCTB_CD,USR_DF_CHK_3,VARCHAR2,1,Y,코드,사용자정의체크3 +SHI1,CMCTB_CD,USR_DF_CHK_4,VARCHAR2,1,Y,코드,사용자정의체크4 +SHI1,CMCTB_CD,USR_DF_CHK_5,VARCHAR2,1,Y,코드,사용자정의체크5 +SHI1,CMCTB_CD,USR_DF_CHK_6,VARCHAR2,1,Y,코드,사용자정의체크6 +SHI1,CMCTB_CD,USR_DF_CHK_7,VARCHAR2,1,Y,코드,사용자정의체크7 +SHI1,CMCTB_CD,USR_DF_CHK_8,VARCHAR2,1,Y,코드,사용자정의체크8 +SHI1,CMCTB_CD,USR_DF_DT_1,VARCHAR2,8,Y,코드,사용자정의일자1 +SHI1,CMCTB_CD,USR_DF_DT_2,VARCHAR2,8,Y,코드,사용자정의일자2 +SHI1,CMCTB_CD,USR_DF_DT_3,VARCHAR2,8,Y,코드,사용자정의일자3 +SHI1,CMCTB_CD,USR_DF_DT_4,VARCHAR2,8,Y,코드,사용자정의일자4 +SHI1,CMCTB_CD,USR_DF_TM_1,VARCHAR2,6,Y,코드,사용자정의시간1 +SHI1,CMCTB_CD,USR_DF_TM_2,VARCHAR2,6,Y,코드,사용자정의시간2 +SHI1,CMCTB_CD,USR_DF_TM_3,VARCHAR2,6,Y,코드,사용자정의시간3 +SHI1,CMCTB_CD,USR_DF_TM_4,VARCHAR2,6,Y,코드,사용자정의시간4 +SHI1,CMCTB_CD,CRTER,VARCHAR2,13,Y,코드,생성자 +SHI1,CMCTB_CD,CRTE_DT,VARCHAR2,8,Y,코드,생성일자 +SHI1,CMCTB_CD,CRTE_TM,VARCHAR2,6,Y,코드,생성시간 +SHI1,CMCTB_CD,CHGR,VARCHAR2,13,Y,코드,수정자 +SHI1,CMCTB_CD,CHG_DT,VARCHAR2,8,Y,코드,수정일자 +SHI1,CMCTB_CD,CHG_TM,VARCHAR2,6,Y,코드,수정시간 +SHI1,CMCTB_CD,DEL_YN,VARCHAR2,1,Y,코드,삭제여부 +SHI1,CMCTB_CDNM,LANG_KEY,VARCHAR2,1,N,코드내역,언어키 +SHI1,CMCTB_CDNM,CD_CLF,VARCHAR2,10,N,코드내역,코드분류 +SHI1,CMCTB_CDNM,CD,VARCHAR2,10,N,코드내역,코드 +SHI1,CMCTB_CDNM,CD2,VARCHAR2,10,N,코드내역,코드2 +SHI1,CMCTB_CDNM,CD3,VARCHAR2,10,N,코드내역,코드3 +SHI1,CMCTB_CDNM,CDNM,VARCHAR2,120,Y,코드내역,코드명 +SHI1,CMCTB_CDNM,GRP_DSC,VARCHAR2,500,Y,코드내역,그룹설명 +SHI1,CMCTB_CDNM,CRTER,VARCHAR2,13,Y,코드내역,생성자 +SHI1,CMCTB_CDNM,CRTE_DT,VARCHAR2,8,Y,코드내역,생성일자 +SHI1,CMCTB_CDNM,CRTE_TM,VARCHAR2,6,Y,코드내역,생성시간 +SHI1,CMCTB_CDNM,CHGR,VARCHAR2,13,Y,코드내역,수정자 +SHI1,CMCTB_CDNM,CHG_DT,VARCHAR2,8,Y,코드내역,수정일자 +SHI1,CMCTB_CDNM,CHG_TM,VARCHAR2,6,Y,코드내역,수정시간 +SHI1,CMCTB_CDNM,DEL_YN,VARCHAR2,1,Y,코드내역,삭제여부 +SHI1,CMCTB_CD_CLF,CD_CLF,VARCHAR2,10,N,공통코드클래스,코드분류 +SHI1,CMCTB_CD_CLF,CRTER,VARCHAR2,13,Y,공통코드클래스,생성자 +SHI1,CMCTB_CD_CLF,CRTE_DT,VARCHAR2,8,Y,공통코드클래스,생성일자 +SHI1,CMCTB_CD_CLF,CRTE_TM,VARCHAR2,6,Y,공통코드클래스,생성시간 +SHI1,CMCTB_CD_CLF,CHGR,VARCHAR2,13,Y,공통코드클래스,수정자 +SHI1,CMCTB_CD_CLF,CHG_DT,VARCHAR2,8,Y,공통코드클래스,수정일자 +SHI1,CMCTB_CD_CLF,CHG_TM,VARCHAR2,6,Y,공통코드클래스,수정시간 +SHI1,CMCTB_CD_CLF,DEL_YN,VARCHAR2,1,Y,공통코드클래스,삭제여부 +SHI1,CMCTB_CD_CLF,XSTAT,VARCHAR2,1,Y,공통코드클래스,I/F 상태 +SHI1,CMCTB_CD_CLF,XMSGS,VARCHAR2,300,Y,공통코드클래스,I/F Message +SHI1,CMCTB_CD_CLF,XDATS,VARCHAR2,8,Y,공통코드클래스,I/F 일자 +SHI1,CMCTB_CD_CLF,XTIMS,VARCHAR2,6,Y,공통코드클래스,I/F 시간 +SHI1,CMCTB_CD_CLF_NM,LANG_KEY,VARCHAR2,1,N,공통코드클래스,언어키 +SHI1,CMCTB_CD_CLF_NM,CD_CLF,VARCHAR2,10,N,공통코드클래스,코드분류 +SHI1,CMCTB_CD_CLF_NM,CD_CLF_NM,VARCHAR2,120,Y,공통코드클래스,코드분류명 +SHI1,CMCTB_CD_CLF_NM,GRP_DSC,VARCHAR2,120,Y,공통코드클래스,그룹설명 +SHI1,CMCTB_CD_CLF_NM,CRTER,VARCHAR2,13,Y,공통코드클래스,생성자 +SHI1,CMCTB_CD_CLF_NM,CRTE_DT,VARCHAR2,8,Y,공통코드클래스,생성일자 +SHI1,CMCTB_CD_CLF_NM,CRTE_TM,VARCHAR2,6,Y,공통코드클래스,생성시간 +SHI1,CMCTB_CD_CLF_NM,CHGR,VARCHAR2,13,Y,공통코드클래스,수정자 +SHI1,CMCTB_CD_CLF_NM,CHG_DT,VARCHAR2,8,Y,공통코드클래스,수정일자 +SHI1,CMCTB_CD_CLF_NM,CHG_TM,VARCHAR2,6,Y,공통코드클래스,수정시간 +SHI1,CMCTB_CD_CLF_NM,DEL_YN,VARCHAR2,1,Y,공통코드클래스,삭제여부 +SHI1,CMCTB_CUSTOMER_ADDR,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(주소),내부고객번호 +SHI1,CMCTB_CUSTOMER_ADDR,ADR_NO,VARCHAR2,10,N,CUSTOMER 마스터(주소),주소번호 +SHI1,CMCTB_CUSTOMER_ADDR,INTL_ADR_VER_ID,VARCHAR2,1,N,CUSTOMER 마스터(주소),국제주소버전ID +SHI1,CMCTB_CUSTOMER_ADDR,NTN_CD,VARCHAR2,3,Y,CUSTOMER 마스터(주소),국가코드 +SHI1,CMCTB_CUSTOMER_ADDR,CITY_ZIP_NO,VARCHAR2,10,Y,CUSTOMER 마스터(주소),도시우편번호 +SHI1,CMCTB_CUSTOMER_ADDR,POBX_ZIP_NO,VARCHAR2,10,Y,CUSTOMER 마스터(주소),사서함우편번호 +SHI1,CMCTB_CUSTOMER_ADDR,ADR_1,VARCHAR2,120,Y,CUSTOMER 마스터(주소),주소1 +SHI1,CMCTB_CUSTOMER_ADDR,ADR_2,VARCHAR2,120,Y,CUSTOMER 마스터(주소),주소2 +SHI1,CMCTB_CUSTOMER_ADDR,REGN_CD,VARCHAR2,3,Y,CUSTOMER 마스터(주소),지역코드 +SHI1,CMCTB_CUSTOMER_ADDR,ETC_ADR_1,VARCHAR2,180,Y,CUSTOMER 마스터(주소),기타주소1 +SHI1,CMCTB_CUSTOMER_ADDR,ETC_ADR_2,VARCHAR2,30,Y,CUSTOMER 마스터(주소),기타주소2 +SHI1,CMCTB_CUSTOMER_ADDR,HOUSE_NR1,VARCHAR2,10,Y,CUSTOMER 마스터(주소),House Number +SHI1,CMCTB_CUSTOMER_ADDR,POBX,VARCHAR2,30,Y,CUSTOMER 마스터(주소),사서함 +SHI1,CMCTB_CUSTOMER_ADDR,LANG_KEY,VARCHAR2,1,Y,CUSTOMER 마스터(주소),언어키 +SHI1,CMCTB_CUSTOMER_ADDR,VNDRNM_1,VARCHAR2,120,Y,CUSTOMER 마스터(주소),업체명1 +SHI1,CMCTB_CUSTOMER_ADDR,VNDRNM_2,VARCHAR2,120,Y,CUSTOMER 마스터(주소),업체명2 +SHI1,CMCTB_CUSTOMER_ADDR,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(주소),인터페이스일자 +SHI1,CMCTB_CUSTOMER_ADDR,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(주소),인터페이스시간 +SHI1,CMCTB_CUSTOMER_ADDR,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(주소),인터페이스상태 +SHI1,CMCTB_CUSTOMER_ADDR,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(주소),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_ADDR,TRANS_ZONE,VARCHAR2,10,Y,CUSTOMER 마스터(주소),운송구역 +SHI1,CMCTB_CUSTOMER_CFPN,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터 (파트너역할),내부고객번호 +SHI1,CMCTB_CUSTOMER_CFPN,SALE_ORG_CD,VARCHAR2,4,N,CUSTOMER 마스터 (파트너역할),영업조직코드 +SHI1,CMCTB_CUSTOMER_CFPN,DIST_PATH,VARCHAR2,2,N,CUSTOMER 마스터 (파트너역할),유통경로 +SHI1,CMCTB_CUSTOMER_CFPN,PDT_GRP,VARCHAR2,2,N,CUSTOMER 마스터 (파트너역할),제품군 +SHI1,CMCTB_CUSTOMER_CFPN,PTNR_SKL,VARCHAR2,2,N,CUSTOMER 마스터 (파트너역할),파트너기능 +SHI1,CMCTB_CUSTOMER_CFPN,PTNR_CNT,VARCHAR2,3,N,CUSTOMER 마스터 (파트너역할),파트너카운터 +SHI1,CMCTB_CUSTOMER_CFPN,BSE_PTNR_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (파트너역할),기본파트너지시자 +SHI1,CMCTB_CUSTOMER_CFPN,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (파트너역할),인터페이스일자 +SHI1,CMCTB_CUSTOMER_CFPN,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (파트너역할),인터페이스시간 +SHI1,CMCTB_CUSTOMER_CFPN,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터 (파트너역할),인터페이스상태 +SHI1,CMCTB_CUSTOMER_CFPN,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터 (파트너역할),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_COMPNY,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터 (Company),내부고객번호 +SHI1,CMCTB_CUSTOMER_COMPNY,CO_ID,VARCHAR2,4,N,CUSTOMER 마스터 (Company),법인ID +SHI1,CMCTB_CUSTOMER_COMPNY,AR_ACNT_HDL_GB,VARCHAR2,10,Y,CUSTOMER 마스터 (Company),AR계정처리구분 +SHI1,CMCTB_CUSTOMER_COMPNY,SRT_KEY,VARCHAR2,3,Y,CUSTOMER 마스터 (Company),정렬Key +SHI1,CMCTB_CUSTOMER_COMPNY,AMT_RNE_GB,VARCHAR2,10,Y,CUSTOMER 마스터 (Company),자금수지구분 +SHI1,CMCTB_CUSTOMER_COMPNY,VNDR_PAY_FRM,VARCHAR2,10,Y,CUSTOMER 마스터 (Company),거래선 지불형태 +SHI1,CMCTB_CUSTOMER_COMPNY,BILL_PAY_COND_CD,VARCHAR2,4,Y,CUSTOMER 마스터 (Company),대금지블조건코드 +SHI1,CMCTB_CUSTOMER_COMPNY,BILL_PAY_BLOC_CD,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),대금지불Block코드 +SHI1,CMCTB_CUSTOMER_COMPNY,PST_HOLD_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),전기보류지시자 +SHI1,CMCTB_CUSTOMER_COMPNY,DEL_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),삭제지시자 +SHI1,CMCTB_CUSTOMER_COMPNY,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (Company),인터페이스일자 +SHI1,CMCTB_CUSTOMER_COMPNY,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (Company),인터페이스시간 +SHI1,CMCTB_CUSTOMER_COMPNY,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터 (Company),인터페이스상태 +SHI1,CMCTB_CUSTOMER_COMPNY,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터 (Company),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_GENERAL,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터 (일반 ),내부고객번호 +SHI1,CMCTB_CUSTOMER_GENERAL,ADR_NO,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),주소번호 +SHI1,CMCTB_CUSTOMER_GENERAL,REPR_SER,VARCHAR2,3,Y,CUSTOMER 마스터 (일반 ),대표순번 +SHI1,CMCTB_CUSTOMER_GENERAL,ACNT_GRP,VARCHAR2,4,Y,CUSTOMER 마스터 (일반 ),계정그룹 +SHI1,CMCTB_CUSTOMER_GENERAL,OVLAP_CAUS,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),중복사유 +SHI1,CMCTB_CUSTOMER_GENERAL,CSTM_TP,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),고객타입 +SHI1,CMCTB_CUSTOMER_GENERAL,DEL_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),삭제지시자 +SHI1,CMCTB_CUSTOMER_GENERAL,DEL_BLOCK,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),삭제블락 +SHI1,CMCTB_CUSTOMER_GENERAL,PST_HOLD_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),전기보류지시자 +SHI1,CMCTB_CUSTOMER_GENERAL,CO_ID,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),법인ID +SHI1,CMCTB_CUSTOMER_GENERAL,TTL,VARCHAR2,45,Y,CUSTOMER 마스터 (일반 ),타이틀 +SHI1,CMCTB_CUSTOMER_GENERAL,COND_GRP_1,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),조건 그룹 1 +SHI1,CMCTB_CUSTOMER_GENERAL,CSTM_GRP_NM,VARCHAR2,60,Y,CUSTOMER 마스터 (일반 ),고객 그룹 명 +SHI1,CMCTB_CUSTOMER_GENERAL,REPR_NM,VARCHAR2,30,Y,CUSTOMER 마스터 (일반 ),대표자명 +SHI1,CMCTB_CUSTOMER_GENERAL,BIZTP,VARCHAR2,90,Y,CUSTOMER 마스터 (일반 ),사업유형 +SHI1,CMCTB_CUSTOMER_GENERAL,BIZCON,VARCHAR2,90,Y,CUSTOMER 마스터 (일반 ),산업유형 +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_2,VARCHAR2,11,Y,CUSTOMER 마스터 (일반 ),Tax Number 2 +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_3,VARCHAR2,18,Y,CUSTOMER 마스터 (일반 ),Tax Number 3 +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_4,VARCHAR2,18,Y,CUSTOMER 마스터 (일반 ),Tax Number 4 +SHI1,CMCTB_CUSTOMER_GENERAL,TX_REG_NO,VARCHAR2,20,Y,CUSTOMER 마스터 (일반 ),세금 등록 번호 +SHI1,CMCTB_CUSTOMER_GENERAL,BA_CD,VARCHAR2,4,Y,CUSTOMER 마스터 (일반 ),BA코드 +SHI1,CMCTB_CUSTOMER_GENERAL,VNDRCD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),벤더코드 +SHI1,CMCTB_CUSTOMER_GENERAL,SRCH_COND_1,VARCHAR2,60,Y,CUSTOMER 마스터 (일반 ),검색조건1 +SHI1,CMCTB_CUSTOMER_GENERAL,SRCH_COND_2,VARCHAR2,60,Y,CUSTOMER 마스터 (일반 ),검색조건2 +SHI1,CMCTB_CUSTOMER_GENERAL,CITY_DISP_NM,VARCHAR2,105,Y,CUSTOMER 마스터 (일반 ),도시 거리 명 +SHI1,CMCTB_CUSTOMER_GENERAL,CRM_CD,VARCHAR2,20,Y,CUSTOMER 마스터 (일반 ),CRM Code +SHI1,CMCTB_CUSTOMER_GENERAL,IN_FLAG,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),Inbound Flag +SHI1,CMCTB_CUSTOMER_GENERAL,INDST_CD,VARCHAR2,4,Y,CUSTOMER 마스터 (일반 ),Industry +SHI1,CMCTB_CUSTOMER_GENERAL,TX_NO_TP,VARCHAR2,2,Y,CUSTOMER 마스터 (일반 ),세금 번호 타입 +SHI1,CMCTB_CUSTOMER_GENERAL,LANG_KEY,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),언어 키 +SHI1,CMCTB_CUSTOMER_GENERAL,REG_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),등록일자 +SHI1,CMCTB_CUSTOMER_GENERAL,REG_DTM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),등록시간 +SHI1,CMCTB_CUSTOMER_GENERAL,REGR_ID,VARCHAR2,13,Y,CUSTOMER 마스터 (일반 ),등록자ID +SHI1,CMCTB_CUSTOMER_GENERAL,AGR_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),승인일자 +SHI1,CMCTB_CUSTOMER_GENERAL,AGR_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),승인시간 +SHI1,CMCTB_CUSTOMER_GENERAL,AGR_R_ID,VARCHAR2,13,Y,CUSTOMER 마스터 (일반 ),승인자ID +SHI1,CMCTB_CUSTOMER_GENERAL,CHG_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),변경일자 +SHI1,CMCTB_CUSTOMER_GENERAL,CHG_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),변경시간 +SHI1,CMCTB_CUSTOMER_GENERAL,CHGR_ID,VARCHAR2,13,Y,CUSTOMER 마스터 (일반 ),변경자ID +SHI1,CMCTB_CUSTOMER_GENERAL,FTGT_CD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),F-Tree GT코드 +SHI1,CMCTB_CUSTOMER_GENERAL,FTGT_NM,VARCHAR2,120,Y,CUSTOMER 마스터 (일반 ),F-Tree GT Name +SHI1,CMCTB_CUSTOMER_GENERAL,FTDT_CD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),F-Tree DT 코드 +SHI1,CMCTB_CUSTOMER_GENERAL,FTDT_NM,VARCHAR2,120,Y,CUSTOMER 마스터 (일반 ),F-Tree DT 이름 +SHI1,CMCTB_CUSTOMER_GENERAL,FTBU_CD,VARCHAR2,10,Y,CUSTOMER 마스터 (일반 ),F-Tree BU 코드 +SHI1,CMCTB_CUSTOMER_GENERAL,FTBU_NM,VARCHAR2,120,Y,CUSTOMER 마스터 (일반 ),F-Tree BU 이름 +SHI1,CMCTB_CUSTOMER_GENERAL,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터 (일반 ),인터페이스일자 +SHI1,CMCTB_CUSTOMER_GENERAL,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터 (일반 ),인터페이스시간 +SHI1,CMCTB_CUSTOMER_GENERAL,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터 (일반 ),인터페이스상태 +SHI1,CMCTB_CUSTOMER_GENERAL,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터 (일반 ),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_REPREMAIL,CSTM_CD,VARCHAR2,10,N,CUSTOMER마스터(대표자 EMAIL),내부고객번호 +SHI1,CMCTB_CUSTOMER_REPREMAIL,ADR_NO,VARCHAR2,10,N,CUSTOMER마스터(대표자 EMAIL),주소번호 +SHI1,CMCTB_CUSTOMER_REPREMAIL,REPR_SER,VARCHAR2,3,N,CUSTOMER마스터(대표자 EMAIL),대표자순번 +SHI1,CMCTB_CUSTOMER_REPREMAIL,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER마스터(대표자 EMAIL),유효시작일자 +SHI1,CMCTB_CUSTOMER_REPREMAIL,EMAIL_ADR,VARCHAR2,241,Y,CUSTOMER마스터(대표자 EMAIL),이메일주소 +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_DT,VARCHAR2,8,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스일자 +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_TM,VARCHAR2,6,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스시간 +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_STAT,VARCHAR2,1,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스상태 +SHI1,CMCTB_CUSTOMER_REPREMAIL,IF_MSG,VARCHAR2,100,Y,CUSTOMER마스터(대표자 EMAIL),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_REPRFAX,CSTM_CD,VARCHAR2,10,N,CUSTOMER마스터(대표자 팩스번호),내부고객번호 +SHI1,CMCTB_CUSTOMER_REPRFAX,ADR_NO,VARCHAR2,10,N,CUSTOMER마스터(대표자 팩스번호),주소번호 +SHI1,CMCTB_CUSTOMER_REPRFAX,REPR_SER,VARCHAR2,3,N,CUSTOMER마스터(대표자 팩스번호),대표자순번 +SHI1,CMCTB_CUSTOMER_REPRFAX,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER마스터(대표자 팩스번호),유효시작일자 +SHI1,CMCTB_CUSTOMER_REPRFAX,NTN_CD,VARCHAR2,3,Y,CUSTOMER마스터(대표자 팩스번호),국가코드 +SHI1,CMCTB_CUSTOMER_REPRFAX,FAXNO,VARCHAR2,30,Y,CUSTOMER마스터(대표자 팩스번호),팩스번호 +SHI1,CMCTB_CUSTOMER_REPRFAX,FAX_ETS_NO,VARCHAR2,10,Y,CUSTOMER마스터(대표자 팩스번호),팩스내선번호 +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_DT,VARCHAR2,8,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스일자 +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_TM,VARCHAR2,6,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스시간 +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_STAT,VARCHAR2,1,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스상태 +SHI1,CMCTB_CUSTOMER_REPRFAX,IF_MSG,VARCHAR2,100,Y,CUSTOMER마스터(대표자 팩스번호),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_REPRTEL,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(대표자 전화번호),내부고객번호 +SHI1,CMCTB_CUSTOMER_REPRTEL,ADR_NO,VARCHAR2,10,N,CUSTOMER 마스터(대표자 전화번호),주소번호 +SHI1,CMCTB_CUSTOMER_REPRTEL,REPR_SER,VARCHAR2,3,N,CUSTOMER 마스터(대표자 전화번호),대표자순번 +SHI1,CMCTB_CUSTOMER_REPRTEL,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER 마스터(대표자 전화번호),유효시작일자 +SHI1,CMCTB_CUSTOMER_REPRTEL,NTN_CD,VARCHAR2,3,Y,CUSTOMER 마스터(대표자 전화번호),국가코드 +SHI1,CMCTB_CUSTOMER_REPRTEL,TELNO,VARCHAR2,30,Y,CUSTOMER 마스터(대표자 전화번호),전화번호 +SHI1,CMCTB_CUSTOMER_REPRTEL,ETX_NO,VARCHAR2,10,Y,CUSTOMER 마스터(대표자 전화번호),내선번호 +SHI1,CMCTB_CUSTOMER_REPRTEL,HP_ORDR,VARCHAR2,1,Y,CUSTOMER 마스터(대표자 전화번호),핸드폰지시자 +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스일자 +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스시간 +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스상태 +SHI1,CMCTB_CUSTOMER_REPRTEL,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(대표자 전화번호),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_REPRURL,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(대표자 URL),내부고객번호 +SHI1,CMCTB_CUSTOMER_REPRURL,ADR_NO,VARCHAR2,10,N,CUSTOMER 마스터(대표자 URL),주소번호 +SHI1,CMCTB_CUSTOMER_REPRURL,REPR_SER,VARCHAR2,3,N,CUSTOMER 마스터(대표자 URL),대표자순번 +SHI1,CMCTB_CUSTOMER_REPRURL,VLD_ST_DT,VARCHAR2,8,N,CUSTOMER 마스터(대표자 URL),유효시작일자 +SHI1,CMCTB_CUSTOMER_REPRURL,URL,VARCHAR2,2048,Y,CUSTOMER 마스터(대표자 URL),URL +SHI1,CMCTB_CUSTOMER_REPRURL,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(대표자 URL),인터페이스일자 +SHI1,CMCTB_CUSTOMER_REPRURL,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(대표자 URL),인터페이스시간 +SHI1,CMCTB_CUSTOMER_REPRURL,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(대표자 URL),인터페이스상태 +SHI1,CMCTB_CUSTOMER_REPRURL,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(대표자 URL),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_SORG,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(영업조직),내부고객번호 +SHI1,CMCTB_CUSTOMER_SORG,SALE_ORG_CD,VARCHAR2,4,N,CUSTOMER 마스터(영업조직),영업조직코드 +SHI1,CMCTB_CUSTOMER_SORG,DIST_PATH,VARCHAR2,2,N,CUSTOMER 마스터(영업조직),유통경로 +SHI1,CMCTB_CUSTOMER_SORG,PDT_GRP,VARCHAR2,2,N,CUSTOMER 마스터(영업조직),제품군 +SHI1,CMCTB_CUSTOMER_SORG,SALE_REGN,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),판매지역 +SHI1,CMCTB_CUSTOMER_SORG,SALE_OFC,VARCHAR2,4,Y,CUSTOMER 마스터(영업조직),판매사무실 +SHI1,CMCTB_CUSTOMER_SORG,SALE_GRP,VARCHAR2,3,Y,CUSTOMER 마스터(영업조직),판매그룹 +SHI1,CMCTB_CUSTOMER_SORG,CSTM_GRP,VARCHAR2,2,Y,CUSTOMER 마스터(영업조직),고객그룹 +SHI1,CMCTB_CUSTOMER_SORG,PSBL,VARCHAR2,3,Y,CUSTOMER 마스터(영업조직),확도 +SHI1,CMCTB_CUSTOMER_SORG,TRD_CUR,VARCHAR2,5,Y,CUSTOMER 마스터(영업조직),거래 통화 +SHI1,CMCTB_CUSTOMER_SORG,EXRAT_TP,VARCHAR2,4,Y,CUSTOMER 마스터(영업조직),환율유형 +SHI1,CMCTB_CUSTOMER_SORG,PRC_PRCS_DSC_CD,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),가격절차결정코드 +SHI1,CMCTB_CUSTOMER_SORG,CSTM_STAT_GRP,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),고객통계그룹 +SHI1,CMCTB_CUSTOMER_SORG,SHIPMT_COND,VARCHAR2,2,Y,CUSTOMER 마스터(영업조직),선적조건 +SHI1,CMCTB_CUSTOMER_SORG,MAX_TRD_QTY,NUMBER,22,Y,CUSTOMER 마스터(영업조직),최대거래수량 +SHI1,CMCTB_CUSTOMER_SORG,DL_COND_1,VARCHAR2,3,Y,CUSTOMER 마스터(영업조직),인도조건1 +SHI1,CMCTB_CUSTOMER_SORG,DL_COND_2,VARCHAR2,84,Y,CUSTOMER 마스터(영업조직),인도조건2 +SHI1,CMCTB_CUSTOMER_SORG,SPLY_COND,VARCHAR2,4,Y,CUSTOMER 마스터(영업조직),지급조건 +SHI1,CMCTB_CUSTOMER_SORG,ACNT_ASGN_GRP,VARCHAR2,2,Y,CUSTOMER 마스터(영업조직),계정할당그룹 +SHI1,CMCTB_CUSTOMER_SORG,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(영업조직),인터페이스일자 +SHI1,CMCTB_CUSTOMER_SORG,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(영업조직),인터페이스시간 +SHI1,CMCTB_CUSTOMER_SORG,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(영업조직),인터페이스상태 +SHI1,CMCTB_CUSTOMER_SORG,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(영업조직),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_TAXCD,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(세금정보),내부고객번호 +SHI1,CMCTB_CUSTOMER_TAXCD,DPRT_NTN,VARCHAR2,3,N,CUSTOMER 마스터(세금정보),출발국가 +SHI1,CMCTB_CUSTOMER_TAXCD,TX_CTG,VARCHAR2,4,N,CUSTOMER 마스터(세금정보),세금번호범주 +SHI1,CMCTB_CUSTOMER_TAXCD,CSTM_TX_CLF,VARCHAR2,1,Y,CUSTOMER 마스터(세금정보),고객세금분류 +SHI1,CMCTB_CUSTOMER_TAXCD,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(세금정보),인터페이스일자 +SHI1,CMCTB_CUSTOMER_TAXCD,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(세금정보),인터페이스시간 +SHI1,CMCTB_CUSTOMER_TAXCD,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(세금정보),인터페이스상태 +SHI1,CMCTB_CUSTOMER_TAXCD,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(세금정보),인터페이스메시지 +SHI1,CMCTB_CUSTOMER_TAXNUM,CSTM_CD,VARCHAR2,10,N,CUSTOMER 마스터(세금정보),내부고객번호 +SHI1,CMCTB_CUSTOMER_TAXNUM,TX_NO_CTG,VARCHAR2,4,N,CUSTOMER 마스터(세금정보),세금번호범주 +SHI1,CMCTB_CUSTOMER_TAXNUM,BIZ_PTNR_TX_NO,VARCHAR2,20,Y,CUSTOMER 마스터(세금정보),사업파트너세금번호 +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_DT,VARCHAR2,8,Y,CUSTOMER 마스터(세금정보),인터페이스일자 +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_TM,VARCHAR2,6,Y,CUSTOMER 마스터(세금정보),인터페이스시간 +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_STAT,VARCHAR2,1,Y,CUSTOMER 마스터(세금정보),인터페이스상태 +SHI1,CMCTB_CUSTOMER_TAXNUM,IF_MSG,VARCHAR2,100,Y,CUSTOMER 마스터(세금정보),인터페이스메시지 +SHI1,CMCTB_MAT_BSE,MAT_NO,VARCHAR2,18,N,자재마스터(기본),자재번호 +SHI1,CMCTB_MAT_BSE,SM_CD,VARCHAR2,18,Y,자재마스터(기본),SM코드 +SHI1,CMCTB_MAT_BSE,MAT_ID,VARCHAR2,50,Y,자재마스터(기본),자재ID +SHI1,CMCTB_MAT_BSE,CLAS_CD,VARCHAR2,18,Y,자재마스터(기본),클래스코드 +SHI1,CMCTB_MAT_BSE,MAT_TP,VARCHAR2,4,Y,자재마스터(기본),자재유형 +SHI1,CMCTB_MAT_BSE,MAT_GB,VARCHAR2,1,Y,자재마스터(기본),자재구분 +SHI1,CMCTB_MAT_BSE,MAT_DTL,VARCHAR2,120,Y,자재마스터(기본),자재내역 +SHI1,CMCTB_MAT_BSE,MAT_DTL_SPEC,VARCHAR2,765,Y,자재마스터(기본),자재내역사양 +SHI1,CMCTB_MAT_BSE,MATL,VARCHAR2,50,Y,자재마스터(기본),재질 +SHI1,CMCTB_MAT_BSE,OLD_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),구자재번호 +SHI1,CMCTB_MAT_BSE,SBST_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),대체자재번호 +SHI1,CMCTB_MAT_BSE,UOM,VARCHAR2,3,Y,자재마스터(기본),단위 +SHI1,CMCTB_MAT_BSE,PDT_GRP,VARCHAR2,2,Y,자재마스터(기본),제품군 +SHI1,CMCTB_MAT_BSE,MRC,VARCHAR2,1,Y,자재마스터(기본),MRC +SHI1,CMCTB_MAT_BSE,STOR_MAT_ORDR,VARCHAR2,1,Y,자재마스터(기본),저장자재지시자 +SHI1,CMCTB_MAT_BSE,STYPE,VARCHAR2,2,Y,자재마스터(기본),강종 +SHI1,CMCTB_MAT_BSE,CLS,VARCHAR2,8,Y,자재마스터(기본),선급 +SHI1,CMCTB_MAT_BSE,WGT,NUMBER,22,Y,자재마스터(기본),중량 +SHI1,CMCTB_MAT_BSE,NET_WGT,NUMBER,22,Y,자재마스터(기본),고유중량 +SHI1,CMCTB_MAT_BSE,WGT_UOM,VARCHAR2,3,Y,자재마스터(기본),중량단위 +SHI1,CMCTB_MAT_BSE,LTH,NUMBER,22,Y,자재마스터(기본),길이 +SHI1,CMCTB_MAT_BSE,LTH_2,NUMBER,22,Y,자재마스터(기본),길이2 +SHI1,CMCTB_MAT_BSE,WTH,NUMBER,22,Y,자재마스터(기본),폭 +SHI1,CMCTB_MAT_BSE,WTH_2,NUMBER,22,Y,자재마스터(기본),폭2 +SHI1,CMCTB_MAT_BSE,THK,NUMBER,22,Y,자재마스터(기본),두께 +SHI1,CMCTB_MAT_BSE,STD,VARCHAR2,70,Y,자재마스터(기본),규격 +SHI1,CMCTB_MAT_BSE,PROF_STD,VARCHAR2,30,Y,자재마스터(기본),형강규격 +SHI1,CMCTB_MAT_BSE,CBL_OUT_DIA,NUMBER,22,Y,자재마스터(기본),CABLE바깥지름 +SHI1,CMCTB_MAT_BSE,LTRM_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),LTRM_MAT_YN +SHI1,CMCTB_MAT_BSE,PNT_AREA,NUMBER,22,Y,자재마스터(기본),도장면적 +SHI1,CMCTB_MAT_BSE,PNTIN_AREA,NUMBER,22,Y,자재마스터(기본),도장내부면적 +SHI1,CMCTB_MAT_BSE,PNTIN_SPEC,VARCHAR2,5,Y,자재마스터(기본),도장내부사양 +SHI1,CMCTB_MAT_BSE,PNTOUT_AREA,NUMBER,22,Y,자재마스터(기본),도장외부면적 +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_1,VARCHAR2,5,Y,자재마스터(기본),도장외부사양1 +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_2,VARCHAR2,5,Y,자재마스터(기본),도장외부사양2 +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_3,VARCHAR2,5,Y,자재마스터(기본),도장외부사양3 +SHI1,CMCTB_MAT_BSE,RT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),RT검사사양 +SHI1,CMCTB_MAT_BSE,UT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),UT검사사양 +SHI1,CMCTB_MAT_BSE,MT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),MT검사사양 +SHI1,CMCTB_MAT_BSE,PT_INSPEC,VARCHAR2,2,Y,자재마스터(기본),PT검사사양 +SHI1,CMCTB_MAT_BSE,MK_DWG_NO,VARCHAR2,50,Y,자재마스터(기본),제작도면번호 +SHI1,CMCTB_MAT_BSE,CUT_DWG_NO,VARCHAR2,120,Y,자재마스터(기본),가공도면번호 +SHI1,CMCTB_MAT_BSE,PIPE_SPL_NO,VARCHAR2,40,Y,자재마스터(기본),배관SPOOL번호 +SHI1,CMCTB_MAT_BSE,PIPE_LINE_NO,VARCHAR2,40,Y,자재마스터(기본),배관LINE번호 +SHI1,CMCTB_MAT_BSE,PIPE_CLAS,VARCHAR2,10,Y,자재마스터(기본),배관클래스 +SHI1,CMCTB_MAT_BSE,FLUID_KND,VARCHAR2,5,Y,자재마스터(기본),유체종류 +SHI1,CMCTB_MAT_BSE,REP_ITM_MATL,VARCHAR2,60,Y,자재마스터(기본),대표품명재질 +SHI1,CMCTB_MAT_BSE,REP_DIA,VARCHAR2,10,Y,자재마스터(기본),대표지름 +SHI1,CMCTB_MAT_BSE,REP_DIA_UOM,VARCHAR2,3,Y,자재마스터(기본),대표지름단위 +SHI1,CMCTB_MAT_BSE,REP_SCH,VARCHAR2,20,Y,자재마스터(기본),대표스케쥴 +SHI1,CMCTB_MAT_BSE,REP_DIA_LTH,NUMBER,22,Y,자재마스터(기본),대표지름길이 +SHI1,CMCTB_MAT_BSE,DBLN_GB,VARCHAR2,1,Y,자재마스터(기본),직곡관구분 +SHI1,CMCTB_MAT_BSE,PIPE_GRD,VARCHAR2,1,Y,자재마스터(기본),배관등급 +SHI1,CMCTB_MAT_BSE,HTRET_YN,VARCHAR2,1,Y,자재마스터(기본),열처리유무 +SHI1,CMCTB_MAT_BSE,BA_GALV_SPEC,VARCHAR2,3,Y,자재마스터(기본),선후도금사양 +SHI1,CMCTB_MAT_BSE,SSIDE_YN,VARCHAR2,1,Y,자재마스터(기본),SHIPSIDE여부 +SHI1,CMCTB_MAT_BSE,PNTR_PIPE_YN,VARCHAR2,1,Y,자재마스터(기본),관통관여부 +SHI1,CMCTB_MAT_BSE,UBOLT_YN,VARCHAR2,1,Y,자재마스터(기본),UBOLT유무 +SHI1,CMCTB_MAT_BSE,CTLP_PRCD_PNT,VARCHAR2,1,Y,자재마스터(기본),조정관선행도장 +SHI1,CMCTB_MAT_BSE,PRCD_SCV_CTLP,VARCHAR2,2,Y,자재마스터(기본),선행후행조정관 +SHI1,CMCTB_MAT_BSE,PMI_INSPEC,VARCHAR2,2,Y,자재마스터(기본),PMI검사사양 +SHI1,CMCTB_MAT_BSE,WTRPRS,NUMBER,22,Y,자재마스터(기본),수압 +SHI1,CMCTB_MAT_BSE,VLV_FIT_NO,VARCHAR2,18,Y,자재마스터(기본),VALVEFITTING번호 +SHI1,CMCTB_MAT_BSE,TAG_NO,VARCHAR2,50,Y,자재마스터(기본),TAG번호 +SHI1,CMCTB_MAT_BSE,TAG_SB_NO,VARCHAR2,10,Y,자재마스터(기본),TAGSUB번호 +SHI1,CMCTB_MAT_BSE,NM_PLATE_TP,VARCHAR2,5,Y,자재마스터(기본),네임플레이트유형 +SHI1,CMCTB_MAT_BSE,NM_PLATE_SVC_NM,VARCHAR2,60,Y,자재마스터(기본),네임플레이트서비스명 +SHI1,CMCTB_MAT_BSE,VRCS_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),VRCS자재번호 +SHI1,CMCTB_MAT_BSE,TRSM_FIT_NO,VARCHAR2,7,Y,자재마스터(기본),TRANSMITTERFITTING번호 +SHI1,CMCTB_MAT_BSE,VLV_OPT_CD_LIST,VARCHAR2,20,Y,자재마스터(기본),VALVE옵션코드리스트 +SHI1,CMCTB_MAT_BSE,PUR_REQ_NO,VARCHAR2,10,Y,자재마스터(기본),구매요청번호 +SHI1,CMCTB_MAT_BSE,ITM_NO,VARCHAR2,20,Y,자재마스터(기본),ITEM번호 +SHI1,CMCTB_MAT_BSE,MDL_NO,VARCHAR2,30,Y,자재마스터(기본),모델번호 +SHI1,CMCTB_MAT_BSE,BL_NO,VARCHAR2,30,Y,자재마스터(기본),BL번호 +SHI1,CMCTB_MAT_BSE,VNDR_EQP_NO,VARCHAR2,10,Y,자재마스터(기본),업체장비번호 +SHI1,CMCTB_MAT_BSE,BOX_NO,VARCHAR2,20,Y,자재마스터(기본),BOX번호 +SHI1,CMCTB_MAT_BSE,MMT_NO,VARCHAR2,10,Y,자재마스터(기본),자재운송관리번호 +SHI1,CMCTB_MAT_BSE,INSTL_LOC,VARCHAR2,30,Y,자재마스터(기본),설치위치 +SHI1,CMCTB_MAT_BSE,MN_EQP_YN,VARCHAR2,1,Y,자재마스터(기본),메인장비여부 +SHI1,CMCTB_MAT_BSE,FIXED_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),체결재여부 +SHI1,CMCTB_MAT_BSE,SPRE_YN,VARCHAR2,1,Y,자재마스터(기본),SPARE여부 +SHI1,CMCTB_MAT_BSE,TOOL_YN,VARCHAR2,1,Y,자재마스터(기본),TOOL여부 +SHI1,CMCTB_MAT_BSE,CBL_YN,VARCHAR2,1,Y,자재마스터(기본),CABLE여부 +SHI1,CMCTB_MAT_BSE,OWN_INSTL_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),선주설치자재여부 +SHI1,CMCTB_MAT_BSE,NONINSTL_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),비설치자재여부 +SHI1,CMCTB_MAT_BSE,BLK_NO,VARCHAR2,5,Y,자재마스터(기본),블록번호 +SHI1,CMCTB_MAT_BSE,GYEL,VARCHAR2,2,Y,자재마스터(기본),계열 +SHI1,CMCTB_MAT_BSE,LNK_PTLST_NO,VARCHAR2,40,Y,자재마스터(기본),연결부재번호 +SHI1,CMCTB_MAT_BSE,AREA,NUMBER,22,Y,자재마스터(기본),면적 +SHI1,CMCTB_MAT_BSE,STOR_LOC,VARCHAR2,10,Y,자재마스터(기본),저장위치 +SHI1,CMCTB_MAT_BSE,SGUB_WGT,NUMBER,22,Y,자재마스터(기본),사급중량 +SHI1,CMCTB_MAT_BSE,DGUB_WGT,NUMBER,22,Y,자재마스터(기본),도급중량 +SHI1,CMCTB_MAT_BSE,PROJ_NO,VARCHAR2,24,Y,자재마스터(기본),프로젝트번호 +SHI1,CMCTB_MAT_BSE,DSN_SKL,VARCHAR2,2,Y,자재마스터(기본),설계기능 +SHI1,CMCTB_MAT_BSE,RMK,VARCHAR2,500,Y,자재마스터(기본),비고 +SHI1,CMCTB_MAT_BSE,DEL_ORDR,VARCHAR2,1,Y,자재마스터(기본),삭제지시자 +SHI1,CMCTB_MAT_BSE,DEL_DT,VARCHAR2,8,Y,자재마스터(기본),삭제일자 +SHI1,CMCTB_MAT_BSE,MAT_STAT,VARCHAR2,2,Y,자재마스터(기본),자재상태 +SHI1,CMCTB_MAT_BSE,IF_SYS_NO,VARCHAR2,1,Y,자재마스터(기본),인터페이스시스템번호 +SHI1,CMCTB_MAT_BSE,IF_STAT,VARCHAR2,1,Y,자재마스터(기본),인터페이스상태 +SHI1,CMCTB_MAT_BSE,IF_MSG,VARCHAR2,255,Y,자재마스터(기본),인터페이스메시지 +SHI1,CMCTB_MAT_BSE,IF_DT,VARCHAR2,8,Y,자재마스터(기본),인터페이스일자 +SHI1,CMCTB_MAT_BSE,IF_TM,VARCHAR2,6,Y,자재마스터(기본),인터페이스시간 +SHI1,CMCTB_MAT_BSE,GLAND_SPEC_1,VARCHAR2,30,Y,자재마스터(기본),GLAND사양1 +SHI1,CMCTB_MAT_BSE,GLAND_SPEC_2,VARCHAR2,30,Y,자재마스터(기본),GLAND사양2 +SHI1,CMCTB_MAT_BSE,GLAND_SPEC_3,VARCHAR2,30,Y,자재마스터(기본),GLAND사양3 +SHI1,CMCTB_MAT_BSE,MCT_MDLE_STD_1,VARCHAR2,30,Y,자재마스터(기본),MCT모듈규격1 +SHI1,CMCTB_MAT_BSE,MCT_MDLE_STD_2,VARCHAR2,30,Y,자재마스터(기본),MCT모듈규격2 +SHI1,CMCTB_MAT_BSE,BEELE_RISE,VARCHAR2,12,Y,자재마스터(기본),BEELERISE +SHI1,CMCTB_MAT_BSE,MAX_DRUM_LTH,NUMBER,22,Y,자재마스터(기본),최대DRUM길이 +SHI1,CMCTB_MAT_BSE,AGR_DTM,VARCHAR2,14,Y,자재마스터(기본),승인일시 +SHI1,CMCTB_MAT_BSE,AGR_R_ID,VARCHAR2,13,Y,자재마스터(기본),승인자ID +SHI1,CMCTB_MAT_BSE,DISPLN,VARCHAR2,1,Y,자재마스터(기본),DISCIPLINE +SHI1,CMCTB_MAT_BSE,LRG_KWK,VARCHAR2,1,Y,자재마스터(기본),대공종 +SHI1,CMCTB_MAT_BSE,DTL_KWK,VARCHAR2,1,Y,자재마스터(기본),세부공종 +SHI1,CMCTB_MAT_BSE,SP_INSP_GB,VARCHAR2,1,Y,자재마스터(기본),특별검사구분 +SHI1,CMCTB_MAT_BSE,PNTOUT_SPEC_4,VARCHAR2,5,Y,자재마스터(기본),도장외부사양4 +SHI1,CMCTB_MAT_BSE,OFE_MAT_NO,VARCHAR2,18,Y,자재마스터(기본),OFE자재번호 +SHI1,CMCTB_MAT_BSE,OFE_CAB_YN,VARCHAR2,1,Y,자재마스터(기본),OFE케이블여부 +SHI1,CMCTB_MAT_BSE,INSTL_PSB_CNT,NUMBER,22,Y,자재마스터(기본),포설가능개수 +SHI1,CMCTB_MAT_BSE,CUTL_ML_GB,VARCHAR2,1,Y,자재마스터(기본),태선세선구분 +SHI1,CMCTB_MAT_BSE,FCM_INSP,VARCHAR2,2,Y,자재마스터(기본),FCM검사 +SHI1,CMCTB_MAT_BSE,DOC_NO,VARCHAR2,25,Y,자재마스터(기본),서류번호 +SHI1,CMCTB_MAT_BSE,HOLD_CAUS,VARCHAR2,200,Y,자재마스터(기본),보류원인 +SHI1,CMCTB_MAT_BSE,HOLD_DT,VARCHAR2,8,Y,자재마스터(기본),보류일자 +SHI1,CMCTB_MAT_BSE,HOLD_LIFT_DT,VARCHAR2,8,Y,자재마스터(기본),NULL +SHI1,CMCTB_MAT_BSE,MAT_KND_GB,VARCHAR2,1,Y,자재마스터(기본),자재종류구분 +SHI1,CMCTB_MAT_BSE,BATCH_MNG_ORDR,VARCHAR2,1,Y,자재마스터(기본),BATCH관리지시자 +SHI1,CMCTB_MAT_BSE,FS_INPR_ID,VARCHAR2,13,Y,자재마스터(기본),최초입력자ID +SHI1,CMCTB_MAT_BSE,FS_INP_DTM,VARCHAR2,14,Y,자재마스터(기본),최초입력일시 +SHI1,CMCTB_MAT_BSE,FIN_CHGR_ID,VARCHAR2,13,Y,자재마스터(기본),최종수정자ID +SHI1,CMCTB_MAT_BSE,FIN_CHG_DTM,VARCHAR2,14,Y,자재마스터(기본),최종수정일시 +SHI1,CMCTB_MAT_BSE,DWG_FILE_NM,VARCHAR2,256,Y,자재마스터(기본),NULL +SHI1,CMCTB_MAT_BSE,TAG_NO_CHG_DT,VARCHAR2,8,Y,자재마스터(기본),NULL +SHI1,CMCTB_MAT_BSE,SUB_EQP_YN,VARCHAR2,1,Y,자재마스터(기본),SUB장비여부 +SHI1,CMCTB_MAT_BSE,ATT_MAT_YN,VARCHAR2,1,Y,자재마스터(기본),부속자재여부 +SHI1,CMCTB_MAT_BSE,DSN_REV_NO,VARCHAR2,4,Y,자재마스터(기본),설계계정번호 +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR1,VARCHAR2,50,Y,자재마스터(기본),사용자정의필드1 +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR2,VARCHAR2,50,Y,자재마스터(기본),인도선적품여부(DL_SHIPMT_ITM_YN) +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR3,VARCHAR2,50,Y,자재마스터(기본),사용자정의필드3 +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR4,VARCHAR2,50,Y,자재마스터(기본),사용자정의필드4 +SHI1,CMCTB_MAT_BSE,USR_DF_CHAR5,VARCHAR2,50,Y,자재마스터(기본),변경이력 +SHI1,CMCTB_MAT_CLAS,CLAS_CD,VARCHAR2,18,N,자재마스터 클래스 정보,클래스코드 +SHI1,CMCTB_MAT_CLAS,CLAS_NM,VARCHAR2,60,Y,자재마스터 클래스 정보,클래스명 +SHI1,CMCTB_MAT_CLAS,CLAS_DTL,VARCHAR2,180,Y,자재마스터 클래스 정보,클래스내역 +SHI1,CMCTB_MAT_CLAS,PRNT_CLAS_CD,VARCHAR2,18,Y,자재마스터 클래스 정보,부모클래스코드 +SHI1,CMCTB_MAT_CLAS,CLAS_LVL,NUMBER,22,Y,자재마스터 클래스 정보,클래스레벨 +SHI1,CMCTB_MAT_CLAS,DEL_ORDR,VARCHAR2,1,Y,자재마스터 클래스 정보,삭제지시자 +SHI1,CMCTB_MAT_CLAS,UOM,VARCHAR2,3,Y,자재마스터 클래스 정보,단위 +SHI1,CMCTB_MAT_CLAS,STYPE,VARCHAR2,2,Y,자재마스터 클래스 정보,강종 +SHI1,CMCTB_MAT_CLAS,GRD_MATL,VARCHAR2,50,Y,자재마스터 클래스 정보,등급재질 +SHI1,CMCTB_MAT_CLAS,CHG_DT,VARCHAR2,8,Y,자재마스터 클래스 정보,수정일자 +SHI1,CMCTB_MAT_CLAS,BSE_UOM,VARCHAR2,3,Y,자재마스터 클래스 정보,기준단위 +SHI1,CMCTB_MAT_CLAS_SPCHAR,CLAS_CD,VARCHAR2,18,N,자재마스터 클래스별 특성,클래스코드 +SHI1,CMCTB_MAT_CLAS_SPCHAR,SPCHAR_CD,VARCHAR2,30,N,자재마스터 클래스별 특성,특성코드 +SHI1,CMCTB_MAT_CLAS_SPCHAR,SPCHAR_SEQ,VARCHAR2,3,Y,자재마스터 클래스별 특성,특선순서 +SHI1,CMCTB_MAT_CLAS_SPCHAR,MNDT_YN,VARCHAR2,1,Y,자재마스터 클래스별 특성,필수여부 +SHI1,CMCTB_MAT_CLAS_SPCHAR,CHG_DT,VARCHAR2,8,Y,자재마스터 클래스별 특성,수정일자 +SHI1,CMCTB_MAT_CLAS_SPCHAR,DEL_ORDR,VARCHAR2,1,Y,자재마스터 클래스별 특성,삭제지시자 +SHI1,CMCTB_MAT_DSC,MAT_NO,VARCHAR2,18,N,CMCTB_MAT_DSC,자재번호 +SHI1,CMCTB_MAT_DSC,LANG_KEY,VARCHAR2,1,N,CMCTB_MAT_DSC,언어키 +SHI1,CMCTB_MAT_DSC,MAT_DTL,VARCHAR2,120,Y,CMCTB_MAT_DSC,자재내역 +SHI1,CMCTB_MAT_PLNT,MAT_NO,VARCHAR2,18,N,자재마스터 플랜트 정보,자재번호 +SHI1,CMCTB_MAT_PLNT,PLNT,VARCHAR2,4,N,자재마스터 플랜트 정보,플랜트 +SHI1,CMCTB_MAT_PLNT,DELV_UOM,VARCHAR2,3,Y,자재마스터 플랜트 정보,출고단위 +SHI1,CMCTB_MAT_PLNT,EA_BTCH_ND_GB,VARCHAR2,1,Y,자재마스터 플랜트 정보,개별일괄소요구분 +SHI1,CMCTB_MAT_PLNT,PRCR_CLF,VARCHAR2,4,Y,자재마스터 플랜트 정보,조달분류 +SHI1,CMCTB_MAT_PLNT,PUR_CHRGR_CD,VARCHAR2,3,Y,자재마스터 플랜트 정보,구매담당자코드 +SHI1,CMCTB_MAT_PLNT,PRCR_CHRGR_CD,VARCHAR2,3,Y,자재마스터 플랜트 정보,조달담당자코드 +SHI1,CMCTB_MAT_PLNT,GOODS_CHRGR_CD,VARCHAR2,3,Y,자재마스터 플랜트 정보,현물담당자코드 +SHI1,CMCTB_MAT_PLNT,PUR_LT,NUMBER,22,Y,자재마스터 플랜트 정보,구매리드타임 +SHI1,CMCTB_MAT_PLNT,MRP_TP,VARCHAR2,2,Y,자재마스터 플랜트 정보,MRP유형 +SHI1,CMCTB_MAT_PLNT,MAT_STAT,VARCHAR2,2,Y,자재마스터 플랜트 정보,자재상태 +SHI1,CMCTB_MAT_PLNT,BULK_MAT_ORDR,VARCHAR2,1,Y,자재마스터 플랜트 정보,벌크자재지시자 +SHI1,CMCTB_MAT_PLNT,PRCR_TP,VARCHAR2,1,Y,자재마스터 플랜트 정보,조달유형 +SHI1,CMCTB_MAT_PLNT,SFTY_STCK_QTY,NUMBER,22,Y,자재마스터 플랜트 정보,안전재고수량 +SHI1,CMCTB_MAT_PLNT,SER_PROF,VARCHAR2,4,Y,자재마스터 플랜트 정보,일련번호프로파일 +SHI1,CMCTB_MAT_PLNT,DEL_ORDR,VARCHAR2,1,Y,자재마스터 플랜트 정보,삭제지시자 +SHI1,CMCTB_MAT_PLNT,BATCH_MNG_ORDR,VARCHAR2,1,Y,자재마스터 플랜트 정보,BATCH관리지시자 +SHI1,CMCTB_MAT_PLNT,IF_STAT,VARCHAR2,1,Y,자재마스터 플랜트 정보,인터페이스상태 +SHI1,CMCTB_MAT_PLNT,IF_MSG,VARCHAR2,100,Y,자재마스터 플랜트 정보,인터페이스메시지 +SHI1,CMCTB_MAT_PLNT,IF_DT,VARCHAR2,8,Y,자재마스터 플랜트 정보,인터페이스일자 +SHI1,CMCTB_MAT_PLNT,IF_TM,VARCHAR2,6,Y,자재마스터 플랜트 정보,인터페이스시간 +SHI1,CMCTB_MAT_PLNT,SP_PRCR_TP,VARCHAR2,2,Y,자재마스터 플랜트 정보,특별조달유형 +SHI1,CMCTB_MAT_SPCHAR,MAT_NO,VARCHAR2,18,N,자재마스터특성,자재번호 +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_CD,VARCHAR2,30,N,자재마스터특성,특성코드 +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_DTL,VARCHAR2,90,Y,자재마스터특성,특성내역 +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_CD,VARCHAR2,90,Y,자재마스터특성,특성값코드 +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_DTL,VARCHAR2,90,Y,자재마스터특성,특성값내역 +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_NUM,NUMBER,22,Y,자재마스터특성,특성값넘버 +SHI1,CMCTB_MAT_SPCHAR,SPCHAR_VAL_UOM,VARCHAR2,3,Y,자재마스터특성,특성값단위 +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_CD,VARCHAR2,30,N,자재마스터 특성정보,특성코드 +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_DTL,VARCHAR2,90,Y,자재마스터 특성정보,특성내역 +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_TP,VARCHAR2,10,Y,자재마스터 특성정보,특성타입 +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_VAL_UOM,VARCHAR2,3,Y,자재마스터 특성정보,특성값단위 +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_VAL_YN,VARCHAR2,1,Y,자재마스터 특성정보,특성값여부 +SHI1,CMCTB_MAT_SPCHAR_MAST,SPCHAR_GRP,VARCHAR2,10,Y,자재마스터 특성정보,특성그룹 +SHI1,CMCTB_MAT_SPCHAR_MAST,CHG_DT,VARCHAR2,8,Y,자재마스터 특성정보,수정일자 +SHI1,CMCTB_MAT_SPCHAR_MAST,DEL_ORDR,VARCHAR2,1,Y,자재마스터 특성정보,삭제지시자 +SHI1,CMCTB_MAT_SPCHAR_VAL,SPCHAR_CD,VARCHAR2,30,N,자재마스터 특성별 특성값,특성코드 +SHI1,CMCTB_MAT_SPCHAR_VAL,SPCHAR_VAL_CD,VARCHAR2,90,N,자재마스터 특성별 특성값,특성값코드 +SHI1,CMCTB_MAT_SPCHAR_VAL,SPCHAR_VAL_DTL,VARCHAR2,90,Y,자재마스터 특성별 특성값,특성값내역 +SHI1,CMCTB_MAT_SPCHAR_VAL,CHG_DT,VARCHAR2,8,Y,자재마스터 특성별 특성값,수정일자 +SHI1,CMCTB_MAT_SPCHAR_VAL,DEL_ORDR,VARCHAR2,1,Y,자재마스터 특성별 특성값,삭제지시자 +SHI1,CMCTB_MAT_UOM,MAT_NO,VARCHAR2,18,N,자재마스터 단위정보,자재번호 +SHI1,CMCTB_MAT_UOM,SBST_UOM,VARCHAR2,3,N,자재마스터 단위정보,대체단위 +SHI1,CMCTB_MAT_UOM,CNVRT_FCTR_1,NUMBER,22,Y,자재마스터 단위정보,전환 FOCTOR1 +SHI1,CMCTB_MAT_UOM,CNVRT_FCTR_2,NUMBER,22,Y,자재마스터 단위정보,전환 FOCTOR2 +SHI1,CMCTB_MAT_UOM,LTH,NUMBER,22,Y,자재마스터 단위정보,길이 +SHI1,CMCTB_MAT_UOM,WTH,NUMBER,22,Y,자재마스터 단위정보,폭 +SHI1,CMCTB_MAT_UOM,HGT,NUMBER,22,Y,자재마스터 단위정보,높이 +SHI1,CMCTB_MAT_UOM,SZ_UOM,VARCHAR2,3,Y,자재마스터 단위정보,치수단위 +SHI1,CMCTB_PROJ_BIZCLS,PROJ_NO,VARCHAR2,24,N,프로젝트 비즈니스 클래스,프로젝트번호 +SHI1,CMCTB_PROJ_BIZCLS,TYPE,VARCHAR2,1,N,프로젝트 비즈니스 클래스,TYPE +SHI1,CMCTB_PROJ_BIZCLS,BIZCLS,VARCHAR2,1,Y,프로젝트 비즈니스 클래스,비지니스클래스 +SHI1,CMCTB_PROJ_BIZCLS,QM_CLS,VARCHAR2,10,Y,프로젝트 비즈니스 클래스,NULL +SHI1,CMCTB_PROJ_BIZCLS,NEW_MC_YN,VARCHAR2,1,Y,프로젝트 비즈니스 클래스,신규MC여부 +SHI1,CMCTB_PROJ_MAST,PROJ_NO,VARCHAR2,24,N,프로젝트 마스터,프로젝트번호 +SHI1,CMCTB_PROJ_MAST,MSHIP_NO,VARCHAR2,24,Y,프로젝트 마스터,기준호선 +SHI1,CMCTB_PROJ_MAST,SERS_NO,VARCHAR2,24,Y,프로젝트 마스터,시리즈첫프로젝트번호 +SHI1,CMCTB_PROJ_MAST,REF_NO,VARCHAR2,5,Y,프로젝트 마스터,시리즈번호 +SHI1,CMCTB_PROJ_MAST,SKND,VARCHAR2,3,Y,프로젝트 마스터,선종 +SHI1,CMCTB_PROJ_MAST,SHTYPE,VARCHAR2,8,Y,프로젝트 마스터,선형 +SHI1,CMCTB_PROJ_MAST,SHTYPE_UOM,VARCHAR2,5,Y,프로젝트 마스터,선형단위 +SHI1,CMCTB_PROJ_MAST,DOCK_CD,VARCHAR2,3,Y,프로젝트 마스터,도크 +SHI1,CMCTB_PROJ_MAST,OWN_1,VARCHAR2,32,Y,프로젝트 마스터,선주1 +SHI1,CMCTB_PROJ_MAST,CLS_1,VARCHAR2,20,Y,프로젝트 마스터,선급1 +SHI1,CMCTB_PROJ_MAST,CNRT_DT,VARCHAR2,8,Y,프로젝트 마스터,계약일자 +SHI1,CMCTB_PROJ_MAST,CNRT_DL_DT,VARCHAR2,8,Y,프로젝트 마스터,계약인도일자 +SHI1,CMCTB_PROJ_MAST,PROJ_DSC,VARCHAR2,120,Y,프로젝트 마스터,프로젝트 설명 +SHI1,CMCTB_PROJ_MAST,PROJ_GB,VARCHAR2,2,Y,프로젝트 마스터,프로젝트구분 +SHI1,CMCTB_PROJ_MAST,OWN_NM,VARCHAR2,120,Y,프로젝트 마스터,선주명 +SHI1,CMCTB_PROJ_MAST,NEW_SKND2,VARCHAR2,30,Y,프로젝트 마스터,신선종2 +SHI1,CMCTB_PROJ_MAST,OWN_AB,VARCHAR2,60,Y,프로젝트 마스터,선주약어 +SHI1,CMCTB_PROJ_MAST,CHINA_YN,VARCHAR2,3,Y,프로젝트 마스터,중국여부 +SHI1,CMCTB_PROJ_MAST,PROJ_DTL_TP,VARCHAR2,2,Y,프로젝트 마스터,프로젝트세부타입 +SHI1,CMCTB_PROJ_MAST,PROJ_PROF,VARCHAR2,7,Y,프로젝트 마스터,프로젝트프로파일 +SHI1,CMCTB_PROJ_MAST,INQY_NO,VARCHAR2,30,Y,프로젝트 마스터,안건번호 +SHI1,CMCTB_PROJ_MAST,INQY_SEQ,VARCHAR2,2,Y,프로젝트 마스터,안건순번 +SHI1,CMCTB_PROJ_MAST,NTTP,VARCHAR2,3,Y,프로젝트 마스터,국적 +SHI1,CMCTB_PROJ_MAST,RLTD_PROJ,VARCHAR2,40,Y,프로젝트 마스터,연관프로젝트 +SHI1,CMCTB_PROJ_MAST,DIGT_PDT_GRP,VARCHAR2,1,Y,프로젝트 마스터,디지털제품군 +SHI1,CMCTB_PROJ_MAST,WP_PROJ_TP,VARCHAR2,1,Y,프로젝트 마스터,풍력프로젝트타입 +SHI1,CMCTB_PROJ_MAST,TOT_CNRT_CNT,VARCHAR2,3,Y,프로젝트 마스터,전체계약개수 +SHI1,CMCTB_PROJ_MAST,PROJ_ETC_TP,VARCHAR2,1,Y,프로젝트 마스터,프로젝트기타타입 +SHI1,CMCTB_PROJ_MAST,IF_STAT,VARCHAR2,1,Y,프로젝트 마스터,인터페이스상태 +SHI1,CMCTB_PROJ_MAST,SRC_SYS_ID,VARCHAR2,1,Y,프로젝트 마스터,소스시스템ID +SHI1,CMCTB_PROJ_MAST,PRGS_STAT,VARCHAR2,1,Y,프로젝트 마스터,진행상태 +SHI1,CMCTB_PROJ_MAST,DEL_YN,VARCHAR2,1,Y,프로젝트 마스터,삭제여부 +SHI1,CMCTB_PROJ_MAST,DL_CSTM_CD,VARCHAR2,10,Y,프로젝트 마스터,인도고객코드 +SHI1,CMCTB_PROJ_MAST,PDT_LVL_4,VARCHAR2,14,Y,프로젝트 마스터,제품레벨4 +SHI1,CMCTB_PROJ_MAST,AS_GRNT_PRD,NUMBER,22,Y,프로젝트 마스터,AS보증기간 +SHI1,CMCTB_PROJ_MAST,RL_DL_DT,VARCHAR2,8,Y,프로젝트 마스터,실인도일자 +SHI1,CMCTB_PROJ_MAST,SA_DT,VARCHAR2,8,Y,프로젝트 마스터,SAILAWAYDATE +SHI1,CMCTB_PROJ_MAST,GOV,VARCHAR2,60,Y,프로젝트 마스터,관청 +SHI1,CMCTB_PROJ_MAST,DL_BF_PROJ_NM,VARCHAR2,120,Y,프로젝트 마스터,인도전공사명 +SHI1,CMCTB_PROJ_MAST,IMO_NO,VARCHAR2,8,Y,프로젝트 마스터,IMO번호 +SHI1,CMCTB_PROJ_MAST,DIST_PATH,VARCHAR2,2,Y,프로젝트 마스터,유통경로 +SHI1,CMCTB_PROJ_MAST,SALE_ORG_CD,VARCHAR2,4,Y,프로젝트 마스터,영업조직코드 +SHI1,CMCTB_PROJ_MAST,SALE_GRP,VARCHAR2,3,Y,프로젝트 마스터,판매그룹 +SHI1,CMCTB_PROJ_MAST,BIZLOC_CD,VARCHAR2,4,Y,프로젝트 마스터,사업장코드 +SHI1,CMCTB_PROJ_MAST,MNG_ACOT_DMN,VARCHAR2,4,Y,프로젝트 마스터,관리회계영역 +SHI1,CMCTB_PROJ_MAST,CO_CD,VARCHAR2,4,Y,프로젝트 마스터,회사코드 +SHI1,CMCTB_PROJ_MAST,BIZ_DMN,VARCHAR2,4,Y,프로젝트 마스터,사업영역 +SHI1,CMCTB_PROJ_MAST,PLNT_CD,VARCHAR2,4,Y,프로젝트 마스터,플랜트코드 +SHI1,CMCTB_PROJ_MAST,PRCTR,VARCHAR2,10,Y,프로젝트 마스터,손익센터 +SHI1,CMCTB_PROJ_MAST,CNRT_CNTN_YN,VARCHAR2,1,Y,프로젝트 마스터,계약존속여부 +SHI1,CMCTB_PROJ_MAST,CNRT_RESV_YN,VARCHAR2,1,Y,프로젝트 마스터,계약유보여부 +SHI1,CMCTB_PROJ_MAST,PROJ_PRGS_YN,VARCHAR2,1,Y,프로젝트 마스터,프로젝트진행여부 +SHI1,CMCTB_PROJ_MAST,SYS_ACOT_CLSD_DT,VARCHAR2,8,Y,프로젝트 마스터,시스템회계마감일자 +SHI1,CMCTB_PROJ_MAST,PROJ_SCP,VARCHAR2,5,Y,프로젝트 마스터,프로젝트범위 +SHI1,CMCTB_PROJ_MAST,LOA,NUMBER,22,Y,프로젝트 마스터,전길이 +SHI1,CMCTB_PROJ_MAST,MN_ENGN_TP_CD,VARCHAR2,30,Y,프로젝트 마스터,MAINENGINETYPECODE +SHI1,CMCTB_PROJ_MAST,SPD,NUMBER,22,Y,프로젝트 마스터,속도 +SHI1,CMCTB_PROJ_MAST,GT,NUMBER,22,Y,프로젝트 마스터,GT +SHI1,CMCTB_PROJ_MAST,BP_DL_DT,VARCHAR2,8,Y,프로젝트 마스터,선표인도일자 +SHI1,CMCTB_PROJ_MAST,SHTYPE_GRP,VARCHAR2,4,Y,프로젝트 마스터,선형군 +SHI1,CMCTB_PROJ_MAST,PROJ_CRTE_REQ_EMPNO,VARCHAR2,13,Y,프로젝트 마스터,프로젝트생성요청사번 +SHI1,CMCTB_PROJ_MAST,PROJ_CRTE_REQ_DT,VARCHAR2,8,Y,프로젝트 마스터,프로젝트생성요청일자 +SHI1,CMCTB_PROJ_MAST,IO_GB,VARCHAR2,1,Y,프로젝트 마스터,사내외구분 +SHI1,CMCTB_PROJ_MAST,CSTM_PO_NO,VARCHAR2,35,Y,프로젝트 마스터,고객발주번호 +SHI1,CMCTB_PROJ_MAST,GENT_CNT,VARCHAR2,5,Y,프로젝트 마스터,세대개수 +SHI1,CMCTB_PROJ_MAST,ORDR_GRNT_PRD,VARCHAR2,5,Y,프로젝트 마스터,주문주보증기간 +SHI1,CMCTB_PROJ_MAST,ORDR_GRNT_FN_DT,VARCHAR2,8,Y,프로젝트 마스터,주문주보증종료일 +SHI1,CMCTB_PROJ_MAST,DSN_CHRGR,VARCHAR2,13,Y,프로젝트 마스터,설계담당자 +SHI1,CMCTB_PROJ_MAST,DL_AF_PROJ_NM,VARCHAR2,120,Y,프로젝트 마스터,인도후공사명 +SHI1,CMCTB_PROJ_MAST,DL_AF_RL_CLNT,VARCHAR2,10,Y,프로젝트 마스터,인도후실고객사 +SHI1,CMCTB_PROJ_MAST,DL_AF_SHPSRV_SCP,VARCHAR2,10,Y,프로젝트 마스터,인도후운항선사 +SHI1,CMCTB_PROJ_MAST,DL_AF_NTTP,VARCHAR2,3,Y,프로젝트 마스터,인도후국적 +SHI1,CMCTB_PROJ_MAST,DL_AF_CLS,VARCHAR2,20,Y,프로젝트 마스터,인도후선급 +SHI1,CMCTB_PROJ_MAST,DL_AF_CALL_SIGN,VARCHAR2,20,Y,프로젝트 마스터,인도후CALLSIGN +SHI1,CMCTB_PROJ_MAST,DL_AF_TEL_NO,VARCHAR2,20,Y,프로젝트 마스터,인도후전화번호 +SHI1,CMCTB_PROJ_MAST,DL_AF_FAX_NO,VARCHAR2,20,Y,프로젝트 마스터,인도후팩스번호 +SHI1,CMCTB_PROJ_MAST,DL_AF_EMAIL_ADR,VARCHAR2,60,Y,프로젝트 마스터,인도후이메일주소 +SHI1,CMCTB_PROJ_MAST,PROJ_WBS_TP,VARCHAR2,7,Y,프로젝트 마스터,프로젝트WBS타입 +SHI1,CMCTB_PROJ_MAST,XSTAT,VARCHAR2,1,Y,프로젝트 마스터,INTERFACE상태 +SHI1,CMCTB_PROJ_MAST,XMSGS,VARCHAR2,300,Y,프로젝트 마스터,INTERFACE메세지 +SHI1,CMCTB_PROJ_MAST,XDATS,VARCHAR2,8,Y,프로젝트 마스터,INTERFACE일자 +SHI1,CMCTB_PROJ_MAST,XTIMS,VARCHAR2,6,Y,프로젝트 마스터,INTERFACE시간 +SHI1,CMCTB_PROJ_MAST,CHN_PROJ_TP,VARCHAR2,1,Y,프로젝트 마스터,중국프로젝트타입 +SHI1,CMCTB_PROJ_MAST,FIN_GRNT_FN_DT,VARCHAR2,8,Y,프로젝트 마스터,최종수요자 보증종료일 +SHI1,CMCTB_PROJ_MAST,STDT,VARCHAR2,8,Y,프로젝트 마스터,시작일자 +SHI1,CMCTB_PROJ_MAST,SERS_YN,VARCHAR2,1,Y,프로젝트 마스터,시리즈여부 +SHI1,CMCTB_PROJ_MAST,TYPE,VARCHAR2,10,Y,프로젝트 마스터,HULL TOP 구분 +SHI1,CMCTB_PROJ_MAST,PRO_PROJ_NO,VARCHAR2,24,Y,프로젝트 마스터,PROPOSAL 프로젝트번호 +SHI1,CMCTB_PROJ_MAST,PBSD_PROJ_NO,VARCHAR2,24,Y,프로젝트 마스터,전기전자프로젝트번호 +SHI1,CMCTB_PROJ_MAST,PBSD_SHIP_NM,VARCHAR2,150,Y,프로젝트 마스터,선박명 +SHI1,CMCTB_PROJ_MAST,BIZCLS,VARCHAR2,10,Y,프로젝트 마스터,사업부 +SHI1,CMCTB_PROJ_MAST,CLS_2,VARCHAR2,20,Y,프로젝트 마스터,선급2 +SHI1,CMCTB_PROJ_MAST,SHTYPE_CD,VARCHAR2,6,Y,프로젝트 마스터,선형코드 +SHI1,CMCTB_PROJ_MAST,PROJ_DL_PLN_DT,VARCHAR2,8,Y,프로젝트 마스터,프로젝트 인도계획일 +SHI1,CMCTB_PROJ_MAST,PROJ_DL_RT_DT,VARCHAR2,8,Y,프로젝트 마스터,프로젝트 인도실적일 +SHI1,CMCTB_PROJ_MAST,TOT_AREA,NUMBER,22,Y,프로젝트 마스터,전체면적 +SHI1,CMCTB_PROJ_MAST,EXMPT_AREA,NUMBER,22,Y,프로젝트 마스터,면세면적 +SHI1,CMCTB_PROJ_MAST,EXMPT_RAT,NUMBER,22,Y,프로젝트 마스터,면세율 +SHI1,CMCTB_PROJ_MAST,QM_CLS,VARCHAR2,10,Y,프로젝트 마스터,품질사업부 +SHI1,CMCTB_PROJ_MAST,CNCT_PROJ_NO,VARCHAR2,24,Y,프로젝트 마스터,연계 프로젝트 번호 +SHI1,CMCTB_PROJ_MAST,EQP_DTL_YN,VARCHAR2,1,Y,프로젝트 마스터,기자재 세분화 및 생산일정 연계여부 +SHI1,CMCTB_PROJ_MAST,EXP_YN,VARCHAR2,1,Y,프로젝트 마스터,ExP 연계여부 +SHI1,CMCTB_PROJ_MAST,ACT_MH_YN,VARCHAR2,1,Y,프로젝트 마스터,생산실적 연계여부 +SHI1,CMCTB_PROJ_MAST,SPEC,VARCHAR2,10,Y,프로젝트 마스터,사양 +SHI1,CMCTB_PROJ_MAST,DSGN_LIFE,VARCHAR2,10,Y,프로젝트 마스터,디자인수명 +SHI1,CMCTB_PROJ_MAST,NEW_MC_YN,VARCHAR2,10,Y,프로젝트 마스터,신규MC여부 +SHI1,CMCTB_PROJ_MAST,WK_ENV_WT_VAL_YN,VARCHAR2,1,Y,프로젝트 마스터,작업환경가중치여부 +SHI1,CMCTB_PROJ_MAST,GRNT_STDT,VARCHAR2,8,Y,프로젝트 마스터,보증시작일 +SHI1,CMCTB_PROJ_MAST,TMH_ADPT_YN,VARCHAR2,1,Y,프로젝트 마스터,목표공수 적용 여부 +SHI1,CMCTB_PROJ_MAST,ZV_YN,VARCHAR2,1,Y,프로젝트 마스터,ZVEZDA 프로젝트 여부 +SHI1,CMCTB_PROJ_MAST,SEC_YN,VARCHAR2,1,Y,프로젝트 마스터,평택지원 프로젝트 여부 +SHI1,CMCTB_PROJ_WBS,PROJ_NO,VARCHAR2,24,N,프로젝트WBS,프로젝트번호 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT,VARCHAR2,24,N,프로젝트WBS,WBS요소 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_NM,VARCHAR2,255,Y,프로젝트WBS,WBS요소명 +SHI1,CMCTB_PROJ_WBS,WBS_LVL,VARCHAR2,3,Y,프로젝트WBS,WBS레벨 +SHI1,CMCTB_PROJ_WBS,FLAG,VARCHAR2,1,Y,프로젝트WBS,FLAG +SHI1,CMCTB_PROJ_WBS,WBS_INSD_ELMT,VARCHAR2,8,Y,프로젝트WBS,WBS내부요소 +SHI1,CMCTB_PROJ_WBS,HGRK_WBS_ELMT,VARCHAR2,24,Y,프로젝트WBS,상위WBS요소 +SHI1,CMCTB_PROJ_WBS,XSTAT,VARCHAR2,1,Y,프로젝트WBS,INTERFACE상태 +SHI1,CMCTB_PROJ_WBS,XMSGS,VARCHAR2,100,Y,프로젝트WBS,INTERFACE메세지 +SHI1,CMCTB_PROJ_WBS,XDATS,VARCHAR2,8,Y,프로젝트WBS,INTERFACE일자 +SHI1,CMCTB_PROJ_WBS,XTIMS,VARCHAR2,6,Y,프로젝트WBS,INTERFACE시간 +SHI1,CMCTB_PROJ_WBS,SYS_STAT,VARCHAR2,8,Y,프로젝트WBS,시스템상태 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_1,VARCHAR2,24,Y,프로젝트WBS,WBS요소_1 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_2,VARCHAR2,24,Y,프로젝트WBS,WBS요소_2 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_3,VARCHAR2,24,Y,프로젝트WBS,WBS요소_3 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_4,VARCHAR2,24,Y,프로젝트WBS,WBS요소_4 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_5,VARCHAR2,24,Y,프로젝트WBS,WBS요소_5 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_6,VARCHAR2,24,Y,프로젝트WBS,WBS요소_6 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_7,VARCHAR2,24,Y,프로젝트WBS,WBS요소_7 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_8,VARCHAR2,24,Y,프로젝트WBS,WBS요소_8 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_9,VARCHAR2,24,Y,프로젝트WBS,WBS요소_9 +SHI1,CMCTB_PROJ_WBS,WBS_ELMT_10,VARCHAR2,24,Y,프로젝트WBS,WBS요소_10 +SHI1,CMCTB_VENDOR_ADDR,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (주소),VENDOR코드 +SHI1,CMCTB_VENDOR_ADDR,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (주소),주소번호 +SHI1,CMCTB_VENDOR_ADDR,INTL_ADR_VER_ID,VARCHAR2,1,N,Vendor 마스터 (주소),국제주소버전ID +SHI1,CMCTB_VENDOR_ADDR,CITY_ZIP_NO,VARCHAR2,10,Y,Vendor 마스터 (주소),도시우편번호 +SHI1,CMCTB_VENDOR_ADDR,POBX_ZIP_NO,VARCHAR2,10,Y,Vendor 마스터 (주소),사서함우편번호 +SHI1,CMCTB_VENDOR_ADDR,ADR_1,VARCHAR2,120,Y,Vendor 마스터 (주소),주소1 +SHI1,CMCTB_VENDOR_ADDR,ADR_2,VARCHAR2,120,Y,Vendor 마스터 (주소),주소2 +SHI1,CMCTB_VENDOR_ADDR,REGN_CD,VARCHAR2,5,Y,Vendor 마스터 (주소),지역코드 +SHI1,CMCTB_VENDOR_ADDR,TTL,VARCHAR2,90,Y,Vendor 마스터 (주소),타이틀 +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_ABRV_1,VARCHAR2,60,Y,Vendor 마스터 (주소),VENDOR명약어1 +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_ABRV_2,VARCHAR2,60,Y,Vendor 마스터 (주소),VENDOR명약어2 +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_1,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명 +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_2,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명2 +SHI1,CMCTB_VENDOR_ADDR,LANG_KEY,VARCHAR2,1,Y,Vendor 마스터 (주소),언어키 +SHI1,CMCTB_VENDOR_ADDR,ETC_ADR_1,VARCHAR2,180,Y,Vendor 마스터 (주소),기타주소1 +SHI1,CMCTB_VENDOR_ADDR,ETC_ADR_2,VARCHAR2,180,Y,Vendor 마스터 (주소),기타주소2 +SHI1,CMCTB_VENDOR_ADDR,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (주소),국가코드 +SHI1,CMCTB_VENDOR_ADDR,POBX,VARCHAR2,30,Y,Vendor 마스터 (주소),사서함 +SHI1,CMCTB_VENDOR_ADDR,TRANS_ZONE,VARCHAR2,10,Y,Vendor 마스터 (주소),운송구역 +SHI1,CMCTB_VENDOR_ADDR,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (주소),인터페이스일자 +SHI1,CMCTB_VENDOR_ADDR,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (주소),인터페이스시간 +SHI1,CMCTB_VENDOR_ADDR,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (주소),인터페이스상태 +SHI1,CMCTB_VENDOR_ADDR,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (주소),인터페이스메시지 +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_3,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명3 +SHI1,CMCTB_VENDOR_ADDR,VNDRNM_4,VARCHAR2,120,Y,Vendor 마스터 (주소),VENDOR명4 +SHI1,CMCTB_VENDOR_ADDR,TAX_JRDT_ZONE_CD,VARCHAR2,15,Y,Vendor 마스터 (주소),조세관할구역코드 +SHI1,CMCTB_VENDOR_ADDR,ADR_TMZ,VARCHAR2,10,Y,Vendor 마스터 (주소),주소시간대 +SHI1,CMCTB_VENDOR_COMPNY,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (Company),VENDOR코드 +SHI1,CMCTB_VENDOR_COMPNY,CO_CD,VARCHAR2,4,N,Vendor 마스터 (Company),회사코드 +SHI1,CMCTB_VENDOR_COMPNY,CTL_ACNT,VARCHAR2,10,Y,Vendor 마스터 (Company),조정계정 +SHI1,CMCTB_VENDOR_COMPNY,SRT_KEY,VARCHAR2,3,Y,Vendor 마스터 (Company),정렬키 +SHI1,CMCTB_VENDOR_COMPNY,PLN_GRP,VARCHAR2,10,Y,Vendor 마스터 (Company),계획그룹 +SHI1,CMCTB_VENDOR_COMPNY,BF_VNDRCD,VARCHAR2,10,Y,Vendor 마스터 (Company),이전VENDOR코드 +SHI1,CMCTB_VENDOR_COMPNY,SPLY_COND,VARCHAR2,4,Y,Vendor 마스터 (Company),지급조건 +SHI1,CMCTB_VENDOR_COMPNY,OVLAP_INVC_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),중복송장지시자 +SHI1,CMCTB_VENDOR_COMPNY,SPLY_MTHD,VARCHAR2,10,Y,Vendor 마스터 (Company),지급방법 +SHI1,CMCTB_VENDOR_COMPNY,SPLY_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),지급보류지시자 +SHI1,CMCTB_VENDOR_COMPNY,TRD_BANK_SHRT_KEY,VARCHAR2,5,Y,Vendor 마스터 (Company),거래은행단축키 +SHI1,CMCTB_VENDOR_COMPNY,PST_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),전기보류지시자 +SHI1,CMCTB_VENDOR_COMPNY,HOLD_CAUS,VARCHAR2,200,Y,Vendor 마스터 (Company),보류사유 +SHI1,CMCTB_VENDOR_COMPNY,DEL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),삭제지시자 +SHI1,CMCTB_VENDOR_COMPNY,SRCE_TX_NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (Company),원천세국가코드 +SHI1,CMCTB_VENDOR_COMPNY,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (Company),인터페이스일자 +SHI1,CMCTB_VENDOR_COMPNY,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (Company),인터페이스시간 +SHI1,CMCTB_VENDOR_COMPNY,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (Company),인터페이스상태 +SHI1,CMCTB_VENDOR_COMPNY,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (Company),인터페이스메시지 +SHI1,CMCTB_VENDOR_COMPNY,MIN_ORDR,VARCHAR2,3,Y,Vendor 마스터 (Company),소수지시자 +SHI1,CMCTB_VENDOR_COMPNY,SPRT_SPLY_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),분리지급지시자 +SHI1,CMCTB_VENDOR_COMPNY,CSTM_VNDR_CLR_ORDR,VARCHAR2,1,Y,Vendor 마스터 (Company),CUSTOMERVENDOR반제지시자 +SHI1,CMCTB_VENDOR_COMPNY,SRCE_TX_CD,VARCHAR2,2,Y,Vendor 마스터 (Company),원천세코드 +SHI1,CMCTB_VENDOR_COMPNY,IATA_BIC_GB,VARCHAR2,4,Y,Vendor 마스터 (Company),IATABIC구분 +SHI1,CMCTB_VENDOR_COMPNY,REP_TP,VARCHAR2,6,Y,Vendor 마스터 (Company),대표유형 +SHI1,CMCTB_VENDOR_COMPNY,LOGST_VNDR_TP,VARCHAR2,6,Y,Vendor 마스터 (Company),물류VENDOR유형 +SHI1,CMCTB_VENDOR_COMPNY,VNDR_ACNT_NO,VARCHAR2,12,Y,Vendor 마스터 (Company),VENDOR계정번호 +SHI1,CMCTB_VENDOR_COMPNY,VNDR_CHRGR_NM,VARCHAR2,45,Y,Vendor 마스터 (Company),VENDOR담당자명 +SHI1,CMCTB_VENDOR_COMPNY,ACOT_CHRGR_TELNO,VARCHAR2,30,Y,Vendor 마스터 (Company),회계담당자전화번호 +SHI1,CMCTB_VENDOR_COMPNY,AUTH_GRP,VARCHAR2,8,Y,Vendor 마스터 (Company),권한그룹 +SHI1,CMCTB_VENDOR_COMPNY,FIN_IR_CALC_DT,VARCHAR2,8,Y,Vendor 마스터 (Company),최종이자계산일자 +SHI1,CMCTB_VENDOR_COMPNY,FIN_IR_ACT_DT,VARCHAR2,8,Y,Vendor 마스터 (Company),최종이자실행일자 +SHI1,CMCTB_VENDOR_COMPNY,ACOT_CHRGR_FAXNO,VARCHAR2,31,Y,Vendor 마스터 (Company),회계담당자FAX번호 +SHI1,CMCTB_VENDOR_COMPNY,MK_CHRGR_EMAIL,VARCHAR2,241,Y,Vendor 마스터 (Company),MAKER담당자이메일 +SHI1,CMCTB_VENDOR_COMPNY,MEMO,VARCHAR2,120,Y,Vendor 마스터 (Company),메모 +SHI1,CMCTB_VENDOR_COMPNY,MOFFC_ACNT_NO,VARCHAR2,10,Y,Vendor 마스터 (Company),본사계정번호 +SHI1,CMCTB_VENDOR_GENERAL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (일반),벤더코드 +SHI1,CMCTB_VENDOR_GENERAL,ACNT_GRP,VARCHAR2,4,Y,Vendor 마스터 (일반),계정그룹 +SHI1,CMCTB_VENDOR_GENERAL,ACNT_GRP_TP,VARCHAR2,2,Y,Vendor 마스터 (일반),계정그룹종류 +SHI1,CMCTB_VENDOR_GENERAL,CSTM_CD,VARCHAR2,10,Y,Vendor 마스터 (일반),고객코드 +SHI1,CMCTB_VENDOR_GENERAL,PST_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),전기보류지시자 +SHI1,CMCTB_VENDOR_GENERAL,PUR_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),구매보류지시자 +SHI1,CMCTB_VENDOR_GENERAL,HOLD_CAUS,VARCHAR2,200,Y,Vendor 마스터 (일반),보류사유 +SHI1,CMCTB_VENDOR_GENERAL,DEL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),삭제지시자 +SHI1,CMCTB_VENDOR_GENERAL,CO_ID,VARCHAR2,6,Y,Vendor 마스터 (일반),법인ID +SHI1,CMCTB_VENDOR_GENERAL,REPR_NM,VARCHAR2,30,Y,Vendor 마스터 (일반),대표자명 +SHI1,CMCTB_VENDOR_GENERAL,BIZTP,VARCHAR2,90,Y,Vendor 마스터 (일반),사업유형 +SHI1,CMCTB_VENDOR_GENERAL,BIZCON,VARCHAR2,90,Y,Vendor 마스터 (일반),산업유형 +SHI1,CMCTB_VENDOR_GENERAL,REG_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),등록일자 +SHI1,CMCTB_VENDOR_GENERAL,REG_DTM,VARCHAR2,6,Y,Vendor 마스터 (일반),등록시간 +SHI1,CMCTB_VENDOR_GENERAL,REGR_ID,VARCHAR2,13,Y,Vendor 마스터 (일반),등록자 +SHI1,CMCTB_VENDOR_GENERAL,AGR_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),승인일자 +SHI1,CMCTB_VENDOR_GENERAL,AGR_TM,VARCHAR2,6,Y,Vendor 마스터 (일반),승인시간 +SHI1,CMCTB_VENDOR_GENERAL,AGR_R_ID,VARCHAR2,13,Y,Vendor 마스터 (일반),승인자ID +SHI1,CMCTB_VENDOR_GENERAL,CHG_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),변경일자 +SHI1,CMCTB_VENDOR_GENERAL,CHG_TM,VARCHAR2,6,Y,Vendor 마스터 (일반),변경시간 +SHI1,CMCTB_VENDOR_GENERAL,CHGR_ID,VARCHAR2,13,Y,Vendor 마스터 (일반),변경자ID +SHI1,CMCTB_VENDOR_GENERAL,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (일반),국가코드 +SHI1,CMCTB_VENDOR_GENERAL,REP_TEL_NO,VARCHAR2,30,Y,Vendor 마스터 (일반),대표전화번호 +SHI1,CMCTB_VENDOR_GENERAL,REP_FAX_NO,VARCHAR2,31,Y,Vendor 마스터 (일반),대표FAX번호 +SHI1,CMCTB_VENDOR_GENERAL,BIZR_NO,VARCHAR2,10,Y,Vendor 마스터 (일반),사업자번호 +SHI1,CMCTB_VENDOR_GENERAL,CO_REG_NO,VARCHAR2,18,Y,Vendor 마스터 (일반),법인등록번호 +SHI1,CMCTB_VENDOR_GENERAL,TX_CD_4,VARCHAR2,54,Y,Vendor 마스터 (일반),세금번호4 +SHI1,CMCTB_VENDOR_GENERAL,CO_INST_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),설립일자 +SHI1,CMCTB_VENDOR_GENERAL,VNDR_TP,VARCHAR2,2,Y,Vendor 마스터 (일반),구매처유형 +SHI1,CMCTB_VENDOR_GENERAL,GBL_TOP_CD,VARCHAR2,11,Y,Vendor 마스터 (일반),GLOBALTOP코드 +SHI1,CMCTB_VENDOR_GENERAL,GBL_TOP_NM,VARCHAR2,120,Y,Vendor 마스터 (일반),GLOBALTOP명 +SHI1,CMCTB_VENDOR_GENERAL,DMST_TOP_CD,VARCHAR2,11,Y,Vendor 마스터 (일반),국내TOP코드 +SHI1,CMCTB_VENDOR_GENERAL,DMST_TOP_NM,VARCHAR2,120,Y,Vendor 마스터 (일반),국내TOP명 +SHI1,CMCTB_VENDOR_GENERAL,BIZ_UOM_CD,VARCHAR2,11,Y,Vendor 마스터 (일반),사업단위코드 +SHI1,CMCTB_VENDOR_GENERAL,BIZ_UOM_NM,VARCHAR2,120,Y,Vendor 마스터 (일반),사업단위명 +SHI1,CMCTB_VENDOR_GENERAL,DNS_NO,VARCHAR2,11,Y,Vendor 마스터 (일반),DUNS번호 +SHI1,CMCTB_VENDOR_GENERAL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),인터페이스일자 +SHI1,CMCTB_VENDOR_GENERAL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (일반),인터페이스시간 +SHI1,CMCTB_VENDOR_GENERAL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (일반),인터페이스상태 +SHI1,CMCTB_VENDOR_GENERAL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (일반),인터페이스메시지 +SHI1,CMCTB_VENDOR_GENERAL,TTL,VARCHAR2,45,Y,Vendor 마스터 (일반),타이틀 +SHI1,CMCTB_VENDOR_GENERAL,VAT_REG_NO,VARCHAR2,20,Y,Vendor 마스터 (일반),부가세등록번호 +SHI1,CMCTB_VENDOR_GENERAL,GIRO_VNDR_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),지로VENDOR지시자 +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_1,VARCHAR2,120,Y,Vendor 마스터 (일반),Vendor명1 +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_2,VARCHAR2,120,Y,Vendor 마스터 (일반),VENDOR명2 +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_3,VARCHAR2,120,Y,Vendor 마스터 (일반),VENDOR명3 +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_4,VARCHAR2,120,Y,Vendor 마스터 (일반),VENDOR명4 +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_ABRV_1,VARCHAR2,60,Y,Vendor 마스터 (일반),VENDOR명약어1 +SHI1,CMCTB_VENDOR_GENERAL,VNDRNM_ABRV_2,VARCHAR2,60,Y,Vendor 마스터 (일반),VENDOR명약어2 +SHI1,CMCTB_VENDOR_GENERAL,PTNT_VNDRCD,VARCHAR2,10,Y,Vendor 마스터 (일반),잠재VENDOR코드 +SHI1,CMCTB_VENDOR_GENERAL,ADR_1,VARCHAR2,120,Y,Vendor 마스터 (일반),주소1 +SHI1,CMCTB_VENDOR_GENERAL,ADR_2,VARCHAR2,512,Y,Vendor 마스터 (일반),주소2 +SHI1,CMCTB_VENDOR_GENERAL,QLT_CHRGR_NM,VARCHAR2,60,Y,Vendor 마스터 (일반),품질담당자명 +SHI1,CMCTB_VENDOR_GENERAL,QLT_CHRGR_TELNO,VARCHAR2,30,Y,Vendor 마스터 (일반),품질담당자전화번호 +SHI1,CMCTB_VENDOR_GENERAL,QLT_CHRGR_EMAIL,VARCHAR2,241,Y,Vendor 마스터 (일반),품질담당자이메일 +SHI1,CMCTB_VENDOR_GENERAL,SB_WKA_SEQ,VARCHAR2,16,Y,Vendor 마스터 (일반),SUB작업장순서 +SHI1,CMCTB_VENDOR_GENERAL,OVLAP_CAUS_CD,VARCHAR2,2,Y,Vendor 마스터 (일반),중복사유코드 +SHI1,CMCTB_VENDOR_GENERAL,DOC_TP,VARCHAR2,3,Y,Vendor 마스터 (일반),문서유형 +SHI1,CMCTB_VENDOR_GENERAL,DOC_NO,VARCHAR2,25,Y,Vendor 마스터 (일반),문서번호 +SHI1,CMCTB_VENDOR_GENERAL,PTN_DOC,VARCHAR2,3,Y,Vendor 마스터 (일반),부분문서 +SHI1,CMCTB_VENDOR_GENERAL,DOC_VER,VARCHAR2,2,Y,Vendor 마스터 (일반),문서버전 +SHI1,CMCTB_VENDOR_GENERAL,INB_FLAG,VARCHAR2,1,Y,Vendor 마스터 (일반),인바운드플래그 +SHI1,CMCTB_VENDOR_GENERAL,DEL_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (일반),삭제보류지시자 +SHI1,CMCTB_VENDOR_GENERAL,PUR_HOLD_DT,VARCHAR2,8,Y,Vendor 마스터 (일반),구매보류일자 +SHI1,CMCTB_VENDOR_GENERAL,POBX,VARCHAR2,30,Y,Vendor 마스터 (일반),사서함 +SHI1,CMCTB_VENDOR_GENERAL,INTL_LCTN_CHK_NUM,NUMBER,22,Y,Vendor 마스터 (일반),국제LOCATION점검숫자 +SHI1,CMCTB_VENDOR_GENERAL,SRCETX_RP_SEX_KEY,VARCHAR2,1,Y,Vendor 마스터 (일반),원천세의무자성별키 +SHI1,CMCTB_VENDOR_GENERAL,VNDR_CNRT_CHRGR_1,VARCHAR2,105,Y,Vendor 마스터 (일반),VENDOR계약담당자1 +SHI1,CMCTB_VENDOR_GENERAL,VNDR_CNRT_CHRGR_2,VARCHAR2,105,Y,Vendor 마스터 (일반),VENDOR계약담당자2 +SHI1,CMCTB_VENDOR_GENERAL,REPR_RESNO,VARCHAR2,13,Y,Vendor 마스터 (일반),대표생년월일 +SHI1,CMCTB_VENDOR_GENERAL,CO_VLM,VARCHAR2,1,Y,Vendor 마스터 (일반),기업규모 +SHI1,CMCTB_VENDOR_GRP,VNDRCD,VARCHAR2,10,N,VENDOR마스터(협력사분류),VENDOR코드 +SHI1,CMCTB_VENDOR_GRP,BIZ_GRP_CD,VARCHAR2,3,N,VENDOR마스터(협력사분류),업무그룹코드 +SHI1,CMCTB_VENDOR_GRP,CRTE_DT,VARCHAR2,8,Y,VENDOR마스터(협력사분류),생성일자 +SHI1,CMCTB_VENDOR_GRP,CRTE_TM,VARCHAR2,6,Y,VENDOR마스터(협력사분류),생성시간 +SHI1,CMCTB_VENDOR_GRP,CRTER_ID,VARCHAR2,13,Y,VENDOR마스터(협력사분류),생성자ID +SHI1,CMCTB_VENDOR_GRP,CHG_DT,VARCHAR2,8,Y,VENDOR마스터(협력사분류),변경일자 +SHI1,CMCTB_VENDOR_GRP,CHG_TM,VARCHAR2,6,Y,VENDOR마스터(협력사분류),변경시간 +SHI1,CMCTB_VENDOR_GRP,CHGR_ID,VARCHAR2,13,Y,VENDOR마스터(협력사분류),변경자ID +SHI1,CMCTB_VENDOR_INCO,VNDRCD,VARCHAR2,10,N,사내협력사VENDOR,VENDOR코드 +SHI1,CMCTB_VENDOR_INCO,VNDRNM,VARCHAR2,120,Y,사내협력사VENDOR,VENDOR코명 +SHI1,CMCTB_VENDOR_INCO,REPR_NM,VARCHAR2,30,Y,사내협력사VENDOR,대표자명 +SHI1,CMCTB_VENDOR_INCO,PRTNR_GB,VARCHAR2,1,Y,사내협력사VENDOR,협력사구분 +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_CD,VARCHAR2,3,Y,사내협력사VENDOR,사내협력사코드 +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_WKA_1,VARCHAR2,1,Y,사내협력사VENDOR,사내협력사작업장1 +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_WKA_2,VARCHAR2,1,Y,사내협력사VENDOR,사내협력사작업장2 +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_WKA_3,VARCHAR2,1,Y,사내협력사VENDOR,사내협력사작업장3 +SHI1,CMCTB_VENDOR_INCO,JBTYPE_CD,VARCHAR2,2,Y,사내협력사VENDOR,직종코드 +SHI1,CMCTB_VENDOR_INCO,JBTYPE_CD_2,VARCHAR2,2,Y,사내협력사VENDOR,직종코드2 +SHI1,CMCTB_VENDOR_INCO,INDV_CO_GB,VARCHAR2,2,Y,사내협력사VENDOR,개인법인구분 +SHI1,CMCTB_VENDOR_INCO,INCO_FOND_YN,VARCHAR2,1,Y,사내협력사VENDOR,사내창립유무 +SHI1,CMCTB_VENDOR_INCO,DOCK_NO,VARCHAR2,25,Y,사내협력사VENDOR,도크번호 +SHI1,CMCTB_VENDOR_INCO,OCMP_INP_DT,VARCHAR2,8,Y,사내협력사VENDOR,당사투입일자 +SHI1,CMCTB_VENDOR_INCO,INCO_DUSE_DT,VARCHAR2,8,Y,사내협력사VENDOR,사내철수일자 +SHI1,CMCTB_VENDOR_INCO,INDST_INS_PMRAT,NUMBER,22,Y,사내협력사VENDOR,산재보험요율 +SHI1,CMCTB_VENDOR_INCO,CNRT_PFRM_GRAMT,NUMBER,22,Y,사내협력사VENDOR,계약이행보증금 +SHI1,CMCTB_VENDOR_INCO,WGE_RAT,NUMBER,22,Y,사내협력사VENDOR,임금율 +SHI1,CMCTB_VENDOR_INCO,CRSPD_DEPTCD_1,VARCHAR2,30,Y,사내협력사VENDOR,해당부서코드1 +SHI1,CMCTB_VENDOR_INCO,CRSPD_DEPTCD_2,VARCHAR2,30,Y,사내협력사VENDOR,해당부서코드2 +SHI1,CMCTB_VENDOR_INCO,CRSPD_TEAM_BLNG,VARCHAR2,100,Y,사내협력사VENDOR,해당팀소속 +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_ITM_1,VARCHAR2,120,Y,사내협력사VENDOR,사내협력사종목1 +SHI1,CMCTB_VENDOR_INCO,INCO_PRTNR_ITM_2,VARCHAR2,120,Y,사내협력사VENDOR,사내협력사종목2 +SHI1,CMCTB_VENDOR_INCO,OFC_LOC,VARCHAR2,240,Y,사내협력사VENDOR,사무실위치 +SHI1,CMCTB_VENDOR_INCO,REP_OCMP_CARR,VARCHAR2,300,Y,사내협력사VENDOR,대표당사경력 +SHI1,CMCTB_VENDOR_INCO,INCO_DUSE_CAUS,VARCHAR2,600,Y,사내협력사VENDOR,사내철수사유 +SHI1,CMCTB_VENDOR_INCO,TEL_NO,VARCHAR2,30,Y,사내협력사VENDOR,전화번호 +SHI1,CMCTB_VENDOR_INCO,ADR1,VARCHAR2,200,Y,사내협력사VENDOR,주소 +SHI1,CMCTB_VENDOR_INCO,ADR2,VARCHAR2,200,Y,사내협력사VENDOR,상세주소 +SHI1,CMCTB_VENDOR_INCO,OLD_VNDRCD,VARCHAR2,10,Y,사내협력사VENDOR,이전 VENDOR코드 +SHI1,CMCTB_VENDOR_INCO,TREE_NUM,VARCHAR2,1,Y,사내협력사VENDOR,하위 VENDOR 갯수 +SHI1,CMCTB_VENDOR_INCO,CRTE_DT,VARCHAR2,8,Y,사내협력사VENDOR,생성일자 +SHI1,CMCTB_VENDOR_INCO,CRTE_TM,VARCHAR2,6,Y,사내협력사VENDOR,생성시간 +SHI1,CMCTB_VENDOR_INCO,CRTE_USR_ID,VARCHAR2,13,Y,사내협력사VENDOR,생성사용자ID +SHI1,CMCTB_VENDOR_INCO,CHG_DT,VARCHAR2,8,Y,사내협력사VENDOR,수정일자 +SHI1,CMCTB_VENDOR_INCO,CHG_TM,VARCHAR2,6,Y,사내협력사VENDOR,수정시간 +SHI1,CMCTB_VENDOR_INCO,CHG_USR_ID,VARCHAR2,13,Y,사내협력사VENDOR,수정사용자ID +SHI1,CMCTB_VENDOR_INCO,UPR_JBTYPE,VARCHAR2,2,Y,사내협력사VENDOR,직종단가 +SHI1,CMCTB_VENDOR_INCO,ZBYBP,VARCHAR2,4,Y,사내협력사VENDOR,공급받는자 종사업장 식별코드 +SHI1,CMCTB_VENDOR_INCO,RMK,VARCHAR2,4000,Y,사내협력사VENDOR,비고 +SHI1,CMCTB_VENDOR_INCO,WDL_PLN_YN,VARCHAR2,1,Y,사내협력사VENDOR,철수예정유무 +SHI1,CMCTB_VENDOR_INCO,WGE_DELY_DVL,VARCHAR2,8,Y,사내협력사VENDOR,임금체불발생 +SHI1,CMCTB_VENDOR_INCO,ESCROW_YN,VARCHAR2,1,Y,사내협력사VENDOR,에스크로가입유무 +SHI1,CMCTB_VENDOR_PORG,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (구매조직),VENDOR코드 +SHI1,CMCTB_VENDOR_PORG,PUR_ORG_CD,VARCHAR2,4,N,Vendor 마스터 (구매조직),구매조직 +SHI1,CMCTB_VENDOR_PORG,PUR_ORD_CUR,VARCHAR2,5,Y,Vendor 마스터 (구매조직),구매오더통화 +SHI1,CMCTB_VENDOR_PORG,SPLY_COND,VARCHAR2,4,Y,Vendor 마스터 (구매조직),지급조건 +SHI1,CMCTB_VENDOR_PORG,DL_COND_1,VARCHAR2,3,Y,Vendor 마스터 (구매조직),인도조건1 +SHI1,CMCTB_VENDOR_PORG,DL_COND_2,VARCHAR2,90,Y,Vendor 마스터 (구매조직),인도조건2 +SHI1,CMCTB_VENDOR_PORG,CALC_SHM_GRP,VARCHAR2,2,Y,Vendor 마스터 (구매조직),계산스키마그룹 +SHI1,CMCTB_VENDOR_PORG,GR_BSE_INVC_VR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),GR기준송장검증 +SHI1,CMCTB_VENDOR_PORG,AT_PUR_ORD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),자동구매오더지시자 +SHI1,CMCTB_VENDOR_PORG,PUR_HOLD_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),구매보류지시자 +SHI1,CMCTB_VENDOR_PORG,DEL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),삭제지시자 +SHI1,CMCTB_VENDOR_PORG,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (구매조직),인터페이스일자 +SHI1,CMCTB_VENDOR_PORG,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (구매조직),인터페이스시간 +SHI1,CMCTB_VENDOR_PORG,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (구매조직),인터페이스상태 +SHI1,CMCTB_VENDOR_PORG,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (구매조직),인터페이스메시지 +SHI1,CMCTB_VENDOR_PORG,ORD_CNFM_REQ_ORDR,VARCHAR2,1,Y,Vendor 마스터 (구매조직),오더확인요청지시자 +SHI1,CMCTB_VENDOR_PORG,SALE_CHRGR_NM,VARCHAR2,120,Y,Vendor 마스터 (구매조직),영업담당자명 +SHI1,CMCTB_VENDOR_PORG,VNDR_TELNO,VARCHAR2,30,Y,Vendor 마스터 (구매조직),VENDOR전화번호 +SHI1,CMCTB_VENDOR_PORG,CNFM_CTL_KEY,VARCHAR2,4,Y,Vendor 마스터 (구매조직),확정제어키 +SHI1,CMCTB_VENDOR_PORG,PUR_HOLD_DT,VARCHAR2,8,Y,Vendor 마스터 (구매조직),구매보류일자 +SHI1,CMCTB_VENDOR_PORG,PUR_HOLD_CAUS,VARCHAR2,120,Y,Vendor 마스터 (구매조직),구매보류사유 +SHI1,CMCTB_VENDOR_REPREMAIL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 EMAIL),VENDOR코드 +SHI1,CMCTB_VENDOR_REPREMAIL,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 EMAIL),주소번호 +SHI1,CMCTB_VENDOR_REPREMAIL,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 EMAIL),대표자순번 +SHI1,CMCTB_VENDOR_REPREMAIL,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 EMAIL),유효시작일자 +SHI1,CMCTB_VENDOR_REPREMAIL,EMAIL_ADR,VARCHAR2,241,Y,Vendor 마스터 (대표자 EMAIL),이메일주소 +SHI1,CMCTB_VENDOR_REPREMAIL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 EMAIL),인터페이스일자 +SHI1,CMCTB_VENDOR_REPREMAIL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 EMAIL),인터페이스시간 +SHI1,CMCTB_VENDOR_REPREMAIL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 EMAIL),인터페이스상태 +SHI1,CMCTB_VENDOR_REPREMAIL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 EMAIL),인터페이스메시지 +SHI1,CMCTB_VENDOR_REPRFAX,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 팩스번호),VENDOR코드 +SHI1,CMCTB_VENDOR_REPRFAX,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 팩스번호),주소번호 +SHI1,CMCTB_VENDOR_REPRFAX,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 팩스번호),대표자순번 +SHI1,CMCTB_VENDOR_REPRFAX,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 팩스번호),유효시작일자 +SHI1,CMCTB_VENDOR_REPRFAX,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (대표자 팩스번호),국가코드 +SHI1,CMCTB_VENDOR_REPRFAX,FAXNO,VARCHAR2,30,Y,Vendor 마스터 (대표자 팩스번호),팩스번호 +SHI1,CMCTB_VENDOR_REPRFAX,FAX_ETS_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 팩스번호),팩스내선번호 +SHI1,CMCTB_VENDOR_REPRFAX,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 팩스번호),인터페이스일자 +SHI1,CMCTB_VENDOR_REPRFAX,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 팩스번호),인터페이스시간 +SHI1,CMCTB_VENDOR_REPRFAX,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 팩스번호),인터페이스상태 +SHI1,CMCTB_VENDOR_REPRFAX,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 팩스번호),인터페이스메시지 +SHI1,CMCTB_VENDOR_REPRTEL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 전화번호),VENDOR코드 +SHI1,CMCTB_VENDOR_REPRTEL,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 전화번호),주소번호 +SHI1,CMCTB_VENDOR_REPRTEL,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 전화번호),대표자순번 +SHI1,CMCTB_VENDOR_REPRTEL,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 전화번호),유효시작일자 +SHI1,CMCTB_VENDOR_REPRTEL,NTN_CD,VARCHAR2,3,Y,Vendor 마스터 (대표자 전화번호),국가코드 +SHI1,CMCTB_VENDOR_REPRTEL,TELNO,VARCHAR2,30,Y,Vendor 마스터 (대표자 전화번호),전화번호 +SHI1,CMCTB_VENDOR_REPRTEL,ETX_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 전화번호),내선번호 +SHI1,CMCTB_VENDOR_REPRTEL,HP_ORDR,VARCHAR2,1,Y,Vendor 마스터 (대표자 전화번호),핸드폰지시자 +SHI1,CMCTB_VENDOR_REPRTEL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 전화번호),인터페이스일자 +SHI1,CMCTB_VENDOR_REPRTEL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 전화번호),인터페이스시간 +SHI1,CMCTB_VENDOR_REPRTEL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 전화번호),인터페이스상태 +SHI1,CMCTB_VENDOR_REPRTEL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 전화번호),인터페이스메시지 +SHI1,CMCTB_VENDOR_REPRURL,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (대표자 URL),VENDOR코드 +SHI1,CMCTB_VENDOR_REPRURL,ADR_NO,VARCHAR2,10,Y,Vendor 마스터 (대표자 URL),주소번호 +SHI1,CMCTB_VENDOR_REPRURL,REPR_SER,VARCHAR2,3,N,Vendor 마스터 (대표자 URL),대표자순번 +SHI1,CMCTB_VENDOR_REPRURL,VLD_ST_DT,VARCHAR2,8,N,Vendor 마스터 (대표자 URL),유효시작일자 +SHI1,CMCTB_VENDOR_REPRURL,URL,VARCHAR2,2048,Y,Vendor 마스터 (대표자 URL),URL +SHI1,CMCTB_VENDOR_REPRURL,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (대표자 URL),인터페이스일자 +SHI1,CMCTB_VENDOR_REPRURL,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (대표자 URL),인터페이스시간 +SHI1,CMCTB_VENDOR_REPRURL,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (대표자 URL),인터페이스상태 +SHI1,CMCTB_VENDOR_REPRURL,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (대표자 URL),인터페이스메시지 +SHI1,CMCTB_VENDOR_TAXNUM,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (세금번호),VENDOR코드 +SHI1,CMCTB_VENDOR_TAXNUM,TX_NO_CTG,VARCHAR2,4,N,Vendor 마스터 (세금번호),세금번호범주 +SHI1,CMCTB_VENDOR_TAXNUM,BIZ_PTNR_TX_NO,VARCHAR2,20,Y,Vendor 마스터 (세금번호),사업파트너세금번호 +SHI1,CMCTB_VENDOR_TAXNUM,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (세금번호),인터페이스일자 +SHI1,CMCTB_VENDOR_TAXNUM,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (세금번호),인터페이스시간 +SHI1,CMCTB_VENDOR_TAXNUM,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (세금번호),인터페이스상태 +SHI1,CMCTB_VENDOR_TAXNUM,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (세금번호),인터페이스메시지 +SHI1,CMCTB_VENDOR_VFPN,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (파트너역할),VENDOR코드 +SHI1,CMCTB_VENDOR_VFPN,PUR_ORG_CD,VARCHAR2,4,N,Vendor 마스터 (파트너역할),구매조직 +SHI1,CMCTB_VENDOR_VFPN,VNDR_SUB_NO,VARCHAR2,6,N,Vendor 마스터 (파트너역할),VENDOR서브번호 +SHI1,CMCTB_VENDOR_VFPN,PLNT_CD,VARCHAR2,4,N,Vendor 마스터 (파트너역할),플랜트코드 +SHI1,CMCTB_VENDOR_VFPN,PTNR_SKL,VARCHAR2,2,N,Vendor 마스터 (파트너역할),파트너기능 +SHI1,CMCTB_VENDOR_VFPN,PTNR_CNT,VARCHAR2,3,N,Vendor 마스터 (파트너역할),파트너카운터 +SHI1,CMCTB_VENDOR_VFPN,ETC_REF_VNDRCD,VARCHAR2,10,Y,Vendor 마스터 (파트너역할),기타참조VENDOR코드 +SHI1,CMCTB_VENDOR_VFPN,BSE_PTNR_ORDR,VARCHAR2,1,Y,Vendor 마스터 (파트너역할),기본파트너지시자 +SHI1,CMCTB_VENDOR_VFPN,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (파트너역할),인터페이스일자 +SHI1,CMCTB_VENDOR_VFPN,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (파트너역할),인터페이스시간 +SHI1,CMCTB_VENDOR_VFPN,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (파트너역할),인터페이스상태 +SHI1,CMCTB_VENDOR_VFPN,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (파트너역할),인터페이스메시지 +SHI1,CMCTB_VENDOR_WHTHX,VNDRCD,VARCHAR2,10,N,Vendor 마스터 (원천세유형),VENDOR코드 +SHI1,CMCTB_VENDOR_WHTHX,CO_CD,VARCHAR2,4,N,Vendor 마스터 (원천세유형),회사코드 +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_TP,VARCHAR2,2,N,Vendor 마스터 (원천세유형),원천세유형 +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_REL_ORDR,VARCHAR2,1,Y,Vendor 마스터 (원천세유형),원천세관련지시자 +SHI1,CMCTB_VENDOR_WHTHX,RECIP_TP,VARCHAR2,2,Y,Vendor 마스터 (원천세유형),수취인유형 +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_IDENT_NO,VARCHAR2,16,Y,Vendor 마스터 (원천세유형),원천세식별번호 +SHI1,CMCTB_VENDOR_WHTHX,SRCE_TX_NO,VARCHAR2,2,Y,Vendor 마스터 (원천세유형),원천세코드 +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_CERT_NO,VARCHAR2,15,Y,Vendor 마스터 (원천세유형),면제증명서번호 +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_RAT,NUMBER,22,Y,Vendor 마스터 (원천세유형),면제율 +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_ST_DT,VARCHAR2,8,Y,Vendor 마스터 (원천세유형),면제시작일자 +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_ED_DT,VARCHAR2,8,Y,Vendor 마스터 (원천세유형),면제종료일 +SHI1,CMCTB_VENDOR_WHTHX,DCHAG_CAUS,VARCHAR2,200,Y,Vendor 마스터 (원천세유형),면제사유 +SHI1,CMCTB_VENDOR_WHTHX,IF_DT,VARCHAR2,8,Y,Vendor 마스터 (원천세유형),인터페이스일자 +SHI1,CMCTB_VENDOR_WHTHX,IF_TM,VARCHAR2,6,Y,Vendor 마스터 (원천세유형),인터페이스시간 +SHI1,CMCTB_VENDOR_WHTHX,IF_STAT,VARCHAR2,1,Y,Vendor 마스터 (원천세유형),인터페이스상태 +SHI1,CMCTB_VENDOR_WHTHX,IF_MSG,VARCHAR2,100,Y,Vendor 마스터 (원천세유형),인터페이스메시지 +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_PROJ_NO,VARCHAR2,24,N,견적프로젝트기준정보,견적프로젝트번호 +SHI1,PLFTB_ESTM_PROJ_MAST,AGND_NO,VARCHAR2,8,Y,견적프로젝트기준정보,안건번호 +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_PROJ_NM,VARCHAR2,100,Y,견적프로젝트기준정보,견적프로젝트명 +SHI1,PLFTB_ESTM_PROJ_MAST,BIZ_CLS,VARCHAR2,1,Y,견적프로젝트기준정보,사업부문 +SHI1,PLFTB_ESTM_PROJ_MAST,REV_NO,NUMBER,22,Y,견적프로젝트기준정보,리비젼번호 +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_TYPE,VARCHAR2,1,Y,견적프로젝트기준정보,견적유형 +SHI1,PLFTB_ESTM_PROJ_MAST,OWNER_CD,VARCHAR2,10,Y,견적프로젝트기준정보,선주사코드 +SHI1,PLFTB_ESTM_PROJ_MAST,SERS_CNT,NUMBER,22,Y,견적프로젝트기준정보,시리즈순번 +SHI1,PLFTB_ESTM_PROJ_MAST,SKND_CD,VARCHAR2,10,Y,견적프로젝트기준정보,선종코드 +SHI1,PLFTB_ESTM_PROJ_MAST,SHTYPE_CD,VARCHAR2,10,Y,견적프로젝트기준정보,선형코드 +SHI1,PLFTB_ESTM_PROJ_MAST,SHTYPE_SIZE,NUMBER,22,Y,견적프로젝트기준정보,선형크기 +SHI1,PLFTB_ESTM_PROJ_MAST,SHTYPE_UOM,VARCHAR2,10,Y,견적프로젝트기준정보,선형단위 +SHI1,PLFTB_ESTM_PROJ_MAST,CHRTR_CD,VARCHAR2,10,Y,견적프로젝트기준정보,관청코드 +SHI1,PLFTB_ESTM_PROJ_MAST,NATN_CD,VARCHAR2,10,Y,견적프로젝트기준정보,국가코드 +SHI1,PLFTB_ESTM_PROJ_MAST,CLS_1,VARCHAR2,10,Y,견적프로젝트기준정보,선급1 +SHI1,PLFTB_ESTM_PROJ_MAST,CLS_2,VARCHAR2,10,Y,견적프로젝트기준정보,선급2 +SHI1,PLFTB_ESTM_PROJ_MAST,CLS_3,VARCHAR2,10,Y,견적프로젝트기준정보,선급3 +SHI1,PLFTB_ESTM_PROJ_MAST,DATA_CRTE_GB,VARCHAR2,2,Y,견적프로젝트기준정보,데이터생성구분 +SHI1,PLFTB_ESTM_PROJ_MAST,FS_INPR_ID,VARCHAR2,13,Y,견적프로젝트기준정보,최초등록자ID +SHI1,PLFTB_ESTM_PROJ_MAST,FS_INP_DTM,VARCHAR2,14,Y,견적프로젝트기준정보,최초등록일시 +SHI1,PLFTB_ESTM_PROJ_MAST,FIN_CHGR_ID,VARCHAR2,13,Y,견적프로젝트기준정보,최종수정자ID +SHI1,PLFTB_ESTM_PROJ_MAST,FIN_CHG_DTM,VARCHAR2,14,Y,견적프로젝트기준정보,최종수정일시 +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_1,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값1 +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_2,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값2 +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_3,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값3 +SHI1,PLFTB_ESTM_PROJ_MAST,VSL_VAG_4,NUMBER,22,Y,견적프로젝트기준정보,VESSEL 평균값4 +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_APP_ID,VARCHAR2,32,Y,견적프로젝트기준정보,견적물량결재ID +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_STAT,VARCHAR2,1,Y,견적프로젝트기준정보,견적물량상태 +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_STAT_CHGR_ID,VARCHAR2,13,Y,견적프로젝트기준정보,견적물량상태변경자ID +SHI1,PLFTB_ESTM_PROJ_MAST,ESTM_AOM_STAT_CHG_DTM,VARCHAR2,14,Y,견적프로젝트기준정보,견적물량상태변경일시 +SHI1,PLFTB_ESTM_PROJ_MAST,IF_TRGT_YN,VARCHAR2,1,Y,견적프로젝트기준정보,IF대상여부 diff --git a/lib/oracle-db/nonsap/2.generate-oracle-types.py b/lib/oracle-db/nonsap/2.generate-oracle-types.py new file mode 100644 index 00000000..921d7ac6 --- /dev/null +++ b/lib/oracle-db/nonsap/2.generate-oracle-types.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python3 +import csv +import json +from collections import defaultdict +from typing import Dict, List, Any + +def oracle_to_typescript_type(oracle_type: str, data_length: str, nullable: str) -> str: + """Oracle 데이터 타입을 TypeScript 타입으로 변환""" + oracle_type = oracle_type.upper() + is_nullable = nullable.upper() == 'Y' + + if oracle_type == 'VARCHAR2': + ts_type = 'string' + elif oracle_type == 'NUMBER': + ts_type = 'number' + elif oracle_type.startswith('DATE') or oracle_type.endswith('_DT'): + ts_type = 'string' # Oracle DATE는 보통 string으로 처리 + else: + ts_type = 'string' # 기본값 + + return f"{ts_type} | null" if is_nullable else ts_type + +def generate_column_object(table_name: str, columns: List[Dict[str, Any]]) -> str: + """테이블의 컬럼 객체 생성 - Table.테이블명.컬럼명 형태로 사용하기 위함""" + lines = [f" {table_name}: {{"] + + for col in columns: + column_name = col['COLUMN_NAME'] + comment = col['COLUMN_COMMENTS'] + + if comment: + lines.append(f" /** {comment} */") + lines.append(f" {column_name}: '{column_name}' as const,") + + lines.append(" },") + return "\n".join(lines) + +def generate_table_interface(table_name: str, columns: List[Dict[str, Any]]) -> str: + """테이블별 TypeScript 인터페이스 생성""" + interface_name = table_name # Oracle 테이블명 그대로 사용 + + lines = [f"export interface {interface_name} {{"] + + for col in columns: + column_name = col['COLUMN_NAME'] + ts_type = oracle_to_typescript_type( + col['DATA_TYPE'], + col['DATA_LENGTH'], + col['NULLABLE'] + ) + comment = col['COLUMN_COMMENTS'] + + if comment: + lines.append(f" /** {comment} */") + lines.append(f" {column_name}: {ts_type};") + + lines.append("}") + return "\n".join(lines) + +def generate_database_schema(tables: Dict[str, List[Dict[str, Any]]]) -> str: + """전체 데이터베이스 스키마 타입 생성""" + lines = ["// Auto-generated Oracle DB types", ""] + + # 1. 각 테이블 인터페이스 생성 + interfaces = [] + for table_name, columns in tables.items(): + interface_code = generate_table_interface(table_name, columns) + lines.extend([interface_code, ""]) + interfaces.append(table_name) # Oracle 테이블명 그대로 사용 + + # 2. Table 객체 생성 - 핵심 부분! + lines.extend([ + "// Table 객체 - Table.테이블명.컬럼명 형태로 사용", + "export const Table = {", + ]) + + for table_name, columns in tables.items(): + column_object = generate_column_object(table_name, columns) + lines.append(column_object) + + lines.extend(["} as const;", ""]) + + # 3. 기존 Database 스키마 타입도 유지 (Knex 호환성) + lines.extend([ + "// Database schema type for Knex", + "export interface DatabaseSchema {", + ]) + + for table_name, interface_name in zip(tables.keys(), interfaces): + lines.append(f" {table_name}: {interface_name};") + + lines.extend(["}", ""]) + + # 4. TableNames 객체 생성 (키-값 형태) + lines.extend([ + "// Table names constants (key-value pairs)", + "export const TableNames = {", + ]) + + for table_name in tables.keys(): + lines.append(f" {table_name}: '{table_name}' as const,") + + lines.extend(["} as const;", ""]) + + # 5. 테이블 목록 배열 생성 (동기화용) + lines.extend([ + "// Table names array for synchronization", + "export const ALL_TABLE_NAMES: TableName[] = [", + ]) + + for table_name in tables.keys(): + lines.append(f" '{table_name}',") + + lines.extend(["] as const;", ""]) + + # 6. 타입 헬퍼 추가 + lines.extend([ + "// 타입 헬퍼", + "export type TableName = keyof typeof Table;", + "export type ColumnName<T extends TableName> = keyof typeof Table[T];", + "export type TableRow<T extends TableName> = DatabaseSchema[T];", + "" + ]) + + return "\n".join(lines) + +def main(): + tables: Dict[str, List[Dict[str, Any]]] = defaultdict(list) + + # 기본 테이블 목록 (CSV 파일이 없을 때 fallback) + default_tables = [ + 'CMCTB_CD', 'CMCTB_CDNM', 'CMCTB_CD_CLF', 'CMCTB_CD_CLF_NM', + 'CMCTB_CUSTOMER_ADDR', 'CMCTB_CUSTOMER_CFPN', 'CMCTB_CUSTOMER_COMPNY', + 'CMCTB_CUSTOMER_GENERAL', 'CMCTB_CUSTOMER_REPREMAIL', 'CMCTB_CUSTOMER_REPRFAX', + 'CMCTB_CUSTOMER_REPRTEL', 'CMCTB_CUSTOMER_REPRURL', 'CMCTB_CUSTOMER_SORG', + 'CMCTB_CUSTOMER_TAXCD', 'CMCTB_CUSTOMER_TAXNUM', 'CMCTB_MAT_BSE', + 'CMCTB_MAT_CLAS', 'CMCTB_MAT_CLAS_SPCHAR', 'CMCTB_MAT_DSC', + 'CMCTB_MAT_PLNT', 'CMCTB_MAT_SPCHAR', 'CMCTB_MAT_SPCHAR_MAST', + 'CMCTB_MAT_SPCHAR_VAL', 'CMCTB_MAT_UOM', 'CMCTB_PROJ_BIZCLS', + 'CMCTB_PROJ_MAST', 'CMCTB_PROJ_WBS', 'CMCTB_VENDOR_ADDR', + 'CMCTB_VENDOR_COMPNY', 'CMCTB_VENDOR_GENERAL', 'CMCTB_VENDOR_GRP', + 'CMCTB_VENDOR_INCO', 'CMCTB_VENDOR_PORG', 'CMCTB_VENDOR_REPREMAIL', + 'CMCTB_VENDOR_REPRFAX', 'CMCTB_VENDOR_REPRTEL', 'CMCTB_VENDOR_REPRURL', + 'CMCTB_VENDOR_TAXNUM', 'CMCTB_VENDOR_VFPN', 'CMCTB_VENDOR_WHTHX', + 'PLFTB_ESTM_PROJ_MAST' + ] + + try: + # CSV 파일 읽기 + with open('1.table-and-columns-info.csv', 'r', encoding='utf-8') as f: + reader = csv.DictReader(f) + for row in reader: + table_name = row['TABLE_NAME'] + tables[table_name].append(row) + + print(f"Loaded {len(tables)} tables from CSV file") + except FileNotFoundError: + print("CSV file not found, using default table structure") + # 기본 테이블 구조 생성 + for table_name in default_tables: + tables[table_name] = [{ + 'TABLE_NAME': table_name, + 'COLUMN_NAME': 'ID', # 기본 컬럼 + 'DATA_TYPE': 'VARCHAR2', + 'DATA_LENGTH': '10', + 'NULLABLE': 'N', + 'COLUMN_COMMENTS': f'{table_name} Primary Key' + }] + + # 테이블이 없으면 기본 목록 사용 + if not tables: + print("No tables found, using default table list") + for table_name in default_tables: + tables[table_name] = [{ + 'TABLE_NAME': table_name, + 'COLUMN_NAME': 'ID', + 'DATA_TYPE': 'VARCHAR2', + 'DATA_LENGTH': '10', + 'NULLABLE': 'N', + 'COLUMN_COMMENTS': f'{table_name} Primary Key' + }] + + # TypeScript 코드 생성 + typescript_code = generate_database_schema(tables) + + # 파일 저장 + with open('oracle-schema.ts', 'w', encoding='utf-8') as f: + f.write(typescript_code) + + print(f"Generated TypeScript types for {len(tables)} tables") + print("Output: oracle-schema.ts") + print() + print("사용법:") + print(" import { Table } from './oracle-schema';") + print(" const vendorCode = Table.CMCTB_VENDOR_GENERAL.VNDRCD; // 'VNDRCD'") + print(" const tableName = 'CMCTB_VENDOR_GENERAL';") + print(" const columnName = Table[tableName].VNDRNM_1; // 'VNDRNM_1'") + +if __name__ == "__main__": + main()
\ No newline at end of file diff --git a/lib/oracle-db/nonsap/3.generate-postgres-drizzle-schema.ts b/lib/oracle-db/nonsap/3.generate-postgres-drizzle-schema.ts new file mode 100644 index 00000000..cfafb1e0 --- /dev/null +++ b/lib/oracle-db/nonsap/3.generate-postgres-drizzle-schema.ts @@ -0,0 +1,273 @@ +import fs from 'fs'; +import path from 'path'; + +interface TableColumn { + owner: string; + tableName: string; + columnName: string; + dataType: string; + dataLength: number; + nullable: string; + tableComments: string; + columnComments: string; + constraints: string; +} + +interface TableSchema { + tableName: string; + tableComments: string; + columns: TableColumn[]; +} + +// 컬러 로그 함수들 +const log = { + info: (msg: string) => console.log(`\x1b[34mℹ\x1b[0m ${msg}`), + success: (msg: string) => console.log(`\x1b[32m✓\x1b[0m ${msg}`), + warning: (msg: string) => console.log(`\x1b[33m⚠\x1b[0m ${msg}`), + error: (msg: string) => console.log(`\x1b[31m✗\x1b[0m ${msg}`), +}; + +// Oracle -> PostgreSQL 타입 매핑 (nonsap용) +function mapOracleTypeToPostgres(oracleType: string, dataLength: number): string { + const type = oracleType.toUpperCase(); + + switch (type) { + case 'VARCHAR2': + if (dataLength <= 255) { + return `varchar({ length: ${dataLength} })`; + } else { + return 'text()'; + } + case 'NUMBER': + return 'numeric()'; + case 'DATE': + return 'timestamp()'; + case 'CHAR': + return `char({ length: ${dataLength} })`; + case 'CLOB': + return 'text()'; + case 'BLOB': + return 'bytea()'; + case 'INTEGER': + return 'integer()'; + case 'DECIMAL': + return 'decimal()'; + case 'FLOAT': + return 'real()'; + case 'DOUBLE': + return 'doublePrecision()'; + default: + log.warning(`Unknown Oracle type: ${type}, defaulting to text()`); + return 'text()'; + } +} + +// 테이블명을 camelCase로 변환 +function toCamelCase(str: string): string { + return str.toLowerCase().replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()); +} + +// 컬럼명을 camelCase로 변환 +function toColumnName(str: string): string { + return str.toLowerCase().replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()); +} + +// CSV 파싱 함수 +function parseCSV(csvContent: string): TableColumn[] { + const lines = csvContent.split('\n'); + const data: TableColumn[] = []; + + for (let i = 1; i < lines.length; i++) { + const line = lines[i].trim(); + if (!line) continue; + + const values = line.split(','); + if (values.length < 9) continue; + + data.push({ + owner: values[0], + tableName: values[1], + columnName: values[2], + dataType: values[3], + dataLength: parseInt(values[4]) || 0, + nullable: values[5], + tableComments: values[6], + columnComments: values[7], + constraints: values[8] || '', + }); + } + + return data; +} + +// 테이블별로 그룹화 +function groupByTable(columns: TableColumn[]): TableSchema[] { + const tables = new Map<string, TableSchema>(); + + for (const column of columns) { + if (!tables.has(column.tableName)) { + tables.set(column.tableName, { + tableName: column.tableName, + tableComments: column.tableComments, + columns: [], + }); + } + tables.get(column.tableName)!.columns.push(column); + } + + return Array.from(tables.values()); +} + +// 제약조건 파싱 및 처리 +function parseConstraints(constraints: string) { + const result = { + isPrimaryKey: false, + isUnique: false, + hasCheck: false, + hasForeignKey: false, + }; + + if (!constraints) return result; + + const constraintUpper = constraints.toUpperCase(); + result.isPrimaryKey = constraintUpper.includes('PK'); + result.isUnique = constraintUpper.includes('UNIQUE'); + result.hasCheck = constraintUpper.includes('CHECK'); + result.hasForeignKey = constraintUpper.includes('FK') || constraintUpper.includes('FOREIGN'); + + return result; +} + +// Drizzle 스키마 생성 +function generateDrizzleSchema(tables: TableSchema[]): string { + let schema = `import { pgSchema, varchar, text, numeric, timestamp, char, bytea, integer, decimal, real, doublePrecision, primaryKey } from 'drizzle-orm/pg-core'; + +// NonSAP Oracle 데이터베이스 스키마 +export const nonsapSchema = pgSchema('nonsap'); + +`; + + // Primary key 정보를 추적하기 위한 Map + const primaryKeys = new Map<string, string[]>(); + + // 각 테이블에 대한 스키마 생성 + for (const table of tables) { + const tableName = toCamelCase(table.tableName); + const pkColumns: string[] = []; + + // Primary key 컬럼 찾기 + for (const column of table.columns) { + const constraintInfo = parseConstraints(column.constraints); + if (constraintInfo.isPrimaryKey) { + pkColumns.push(column.columnName); // 원본 컬럼명 그대로 사용 + } + } + + if (pkColumns.length > 0) { + primaryKeys.set(tableName, pkColumns); + } + + // 테이블 코멘트 추가 + if (table.tableComments) { + schema += `// ${table.tableComments}\n`; + } + + schema += `export const ${tableName} = nonsapSchema.table('${table.tableName.toLowerCase()}', {\n`; + + table.columns.forEach((column) => { + const columnName = column.columnName; // 원본 컬럼명 그대로 사용 + const postgresType = mapOracleTypeToPostgres(column.dataType, column.dataLength); + const nullable = column.nullable === 'Y' ? '' : '.notNull()'; + const constraintInfo = parseConstraints(column.constraints); + + // 컬럼 코멘트 추가 + if (column.columnComments) { + schema += ` // ${column.columnComments}\n`; + } + + let columnDef = ` ${columnName}: ${postgresType}${nullable}`; + + // Primary key는 별도로 처리되므로 여기서는 제외 + if (constraintInfo.isUnique && !constraintInfo.isPrimaryKey) { + columnDef += '.unique()'; + } + + columnDef += ',\n'; + schema += columnDef; + }); + + schema += '}'; + + // Primary key 추가 + if (pkColumns.length > 0) { + if (pkColumns.length === 1) { + schema += `, (table) => ({\n pk: primaryKey({ columns: [table.${pkColumns[0]}] })\n})`; + } else { + const pkColumnsStr = pkColumns.map(col => `table.${col}`).join(', '); + schema += `, (table) => ({\n pk: primaryKey({ columns: [${pkColumnsStr}] })\n})`; + } + } + + schema += ');\n\n'; + } + + // 타입 export 추가 + schema += `// 타입 정의\n`; + for (const table of tables) { + const tableName = toCamelCase(table.tableName); + const typeName = tableName.charAt(0).toUpperCase() + tableName.slice(1); + schema += `export type ${typeName} = typeof ${tableName}.$inferSelect;\n`; + schema += `export type New${typeName} = typeof ${tableName}.$inferInsert;\n`; + } + + return schema; +} + +async function main() { + try { + log.info('Starting NonSAP Oracle to PostgreSQL Drizzle schema generation...'); + + // CSV 파일 읽기 + const csvPath = path.join(__dirname, '1.table-and-columns-info.csv'); + const csvContent = fs.readFileSync(csvPath, 'utf-8'); + + log.info('Parsing CSV data...'); + const columns = parseCSV(csvContent); + + if (columns.length === 0) { + throw new Error('No data found in CSV file'); + } + + log.info(`Parsed ${columns.length} column definitions`); + + // 테이블별로 그룹화 + const tables = groupByTable(columns); + + log.info(`Found ${tables.length} tables`); + + // Drizzle 스키마 생성 + log.info('Generating Drizzle schema...'); + const schemaCode = generateDrizzleSchema(tables); + + // 파일 저장 + const outputPath = path.join(__dirname, 'schema.ts'); + fs.writeFileSync(outputPath, schemaCode, 'utf-8'); + + log.success(`Generated Drizzle schema: ${outputPath}`); + log.success(`Generated ${tables.length} table schemas with ${columns.length} total columns`); + + } catch (error: unknown) { + if (error instanceof Error) { + log.error(`Failed to generate schema: ${error.message}`); + } else { + log.error('Failed to generate schema: Unknown error'); + } + process.exit(1); + } +} + +if (require.main === module) { + main(); +} + +export { main };
\ No newline at end of file diff --git a/lib/oracle-db/nonsap/oracle-schema.ts b/lib/oracle-db/nonsap/oracle-schema.ts new file mode 100644 index 00000000..8067c100 --- /dev/null +++ b/lib/oracle-db/nonsap/oracle-schema.ts @@ -0,0 +1,4034 @@ +// Auto-generated Oracle DB types + +export interface CMCTB_CD { + /** 코드분류 */ + CD_CLF: string; + /** 코드 */ + CD: string; + /** 코드2 */ + CD2: string; + /** 코드3 */ + CD3: string; + /** 사용자정의문자열10 */ + USR_DF_CHAR_1: string | null; + /** 사용자정의문자열10 */ + USR_DF_CHAR_2: string | null; + /** 사용자정의문자열10 */ + USR_DF_CHAR_3: string | null; + /** 사용자정의문자열10 */ + USR_DF_CHAR_4: string | null; + /** 사용자정의문자열10 */ + USR_DF_CHAR_5: string | null; + /** 사용자정의문자열10 */ + USR_DF_CHAR_6: string | null; + /** 사용자정의문자열10 */ + USR_DF_CHAR_7: string | null; + /** 사용자정의문자열10 */ + USR_DF_CHAR_8: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_9: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_10: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_11: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_12: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_13: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_14: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_15: string | null; + /** 사용자정의문자열20 */ + USR_DF_CHAR_16: string | null; + /** 사용자정의문자열40 */ + USR_DF_CHAR_17: string | null; + /** 사용자정의문자열40 */ + USR_DF_CHAR_18: string | null; + /** 사용자정의문자열255 */ + USR_DF_CHAR_19: string | null; + /** 사용자정의문자열255 */ + USR_DF_CHAR_20: string | null; + /** 사용자정의체크1 */ + USR_DF_CHK_1: string | null; + /** 사용자정의체크2 */ + USR_DF_CHK_2: string | null; + /** 사용자정의체크3 */ + USR_DF_CHK_3: string | null; + /** 사용자정의체크4 */ + USR_DF_CHK_4: string | null; + /** 사용자정의체크5 */ + USR_DF_CHK_5: string | null; + /** 사용자정의체크6 */ + USR_DF_CHK_6: string | null; + /** 사용자정의체크7 */ + USR_DF_CHK_7: string | null; + /** 사용자정의체크8 */ + USR_DF_CHK_8: string | null; + /** 사용자정의일자1 */ + USR_DF_DT_1: string | null; + /** 사용자정의일자2 */ + USR_DF_DT_2: string | null; + /** 사용자정의일자3 */ + USR_DF_DT_3: string | null; + /** 사용자정의일자4 */ + USR_DF_DT_4: string | null; + /** 사용자정의시간1 */ + USR_DF_TM_1: string | null; + /** 사용자정의시간2 */ + USR_DF_TM_2: string | null; + /** 사용자정의시간3 */ + USR_DF_TM_3: string | null; + /** 사용자정의시간4 */ + USR_DF_TM_4: string | null; + /** 생성자 */ + CRTER: string | null; + /** 생성일자 */ + CRTE_DT: string | null; + /** 생성시간 */ + CRTE_TM: string | null; + /** 수정자 */ + CHGR: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 수정시간 */ + CHG_TM: string | null; + /** 삭제여부 */ + DEL_YN: string | null; +} + +export interface CMCTB_CDNM { + /** 언어키 */ + LANG_KEY: string; + /** 코드분류 */ + CD_CLF: string; + /** 코드 */ + CD: string; + /** 코드2 */ + CD2: string; + /** 코드3 */ + CD3: string; + /** 코드명 */ + CDNM: string | null; + /** 그룹설명 */ + GRP_DSC: string | null; + /** 생성자 */ + CRTER: string | null; + /** 생성일자 */ + CRTE_DT: string | null; + /** 생성시간 */ + CRTE_TM: string | null; + /** 수정자 */ + CHGR: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 수정시간 */ + CHG_TM: string | null; + /** 삭제여부 */ + DEL_YN: string | null; +} + +export interface CMCTB_CD_CLF { + /** 코드분류 */ + CD_CLF: string; + /** 생성자 */ + CRTER: string | null; + /** 생성일자 */ + CRTE_DT: string | null; + /** 생성시간 */ + CRTE_TM: string | null; + /** 수정자 */ + CHGR: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 수정시간 */ + CHG_TM: string | null; + /** 삭제여부 */ + DEL_YN: string | null; + /** I/F 상태 */ + XSTAT: string | null; + /** I/F Message */ + XMSGS: string | null; + /** I/F 일자 */ + XDATS: string | null; + /** I/F 시간 */ + XTIMS: string | null; +} + +export interface CMCTB_CD_CLF_NM { + /** 언어키 */ + LANG_KEY: string; + /** 코드분류 */ + CD_CLF: string; + /** 코드분류명 */ + CD_CLF_NM: string | null; + /** 그룹설명 */ + GRP_DSC: string | null; + /** 생성자 */ + CRTER: string | null; + /** 생성일자 */ + CRTE_DT: string | null; + /** 생성시간 */ + CRTE_TM: string | null; + /** 수정자 */ + CHGR: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 수정시간 */ + CHG_TM: string | null; + /** 삭제여부 */ + DEL_YN: string | null; +} + +export interface CMCTB_CUSTOMER_ADDR { + /** 내부고객번호 */ + CSTM_CD: string; + /** 주소번호 */ + ADR_NO: string; + /** 국제주소버전ID */ + INTL_ADR_VER_ID: string; + /** 국가코드 */ + NTN_CD: string | null; + /** 도시우편번호 */ + CITY_ZIP_NO: string | null; + /** 사서함우편번호 */ + POBX_ZIP_NO: string | null; + /** 주소1 */ + ADR_1: string | null; + /** 주소2 */ + ADR_2: string | null; + /** 지역코드 */ + REGN_CD: string | null; + /** 기타주소1 */ + ETC_ADR_1: string | null; + /** 기타주소2 */ + ETC_ADR_2: string | null; + /** House Number */ + HOUSE_NR1: string | null; + /** 사서함 */ + POBX: string | null; + /** 언어키 */ + LANG_KEY: string | null; + /** 업체명1 */ + VNDRNM_1: string | null; + /** 업체명2 */ + VNDRNM_2: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; + /** 운송구역 */ + TRANS_ZONE: string | null; +} + +export interface CMCTB_CUSTOMER_CFPN { + /** 내부고객번호 */ + CSTM_CD: string; + /** 영업조직코드 */ + SALE_ORG_CD: string; + /** 유통경로 */ + DIST_PATH: string; + /** 제품군 */ + PDT_GRP: string; + /** 파트너기능 */ + PTNR_SKL: string; + /** 파트너카운터 */ + PTNR_CNT: string; + /** 기본파트너지시자 */ + BSE_PTNR_ORDR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_COMPNY { + /** 내부고객번호 */ + CSTM_CD: string; + /** 법인ID */ + CO_ID: string; + /** AR계정처리구분 */ + AR_ACNT_HDL_GB: string | null; + /** 정렬Key */ + SRT_KEY: string | null; + /** 자금수지구분 */ + AMT_RNE_GB: string | null; + /** 거래선 지불형태 */ + VNDR_PAY_FRM: string | null; + /** 대금지블조건코드 */ + BILL_PAY_COND_CD: string | null; + /** 대금지불Block코드 */ + BILL_PAY_BLOC_CD: string | null; + /** 전기보류지시자 */ + PST_HOLD_ORDR: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_GENERAL { + /** 내부고객번호 */ + CSTM_CD: string; + /** 주소번호 */ + ADR_NO: string | null; + /** 대표순번 */ + REPR_SER: string | null; + /** 계정그룹 */ + ACNT_GRP: string | null; + /** 중복사유 */ + OVLAP_CAUS: string | null; + /** 고객타입 */ + CSTM_TP: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** 삭제블락 */ + DEL_BLOCK: string | null; + /** 전기보류지시자 */ + PST_HOLD_ORDR: string | null; + /** 법인ID */ + CO_ID: string | null; + /** 타이틀 */ + TTL: string | null; + /** 조건 그룹 1 */ + COND_GRP_1: string | null; + /** 고객 그룹 명 */ + CSTM_GRP_NM: string | null; + /** 대표자명 */ + REPR_NM: string | null; + /** 사업유형 */ + BIZTP: string | null; + /** 산업유형 */ + BIZCON: string | null; + /** Tax Number 2 */ + TX_NO_2: string | null; + /** Tax Number 3 */ + TX_NO_3: string | null; + /** Tax Number 4 */ + TX_NO_4: string | null; + /** 세금 등록 번호 */ + TX_REG_NO: string | null; + /** BA코드 */ + BA_CD: string | null; + /** 벤더코드 */ + VNDRCD: string | null; + /** 검색조건1 */ + SRCH_COND_1: string | null; + /** 검색조건2 */ + SRCH_COND_2: string | null; + /** 도시 거리 명 */ + CITY_DISP_NM: string | null; + /** CRM Code */ + CRM_CD: string | null; + /** Inbound Flag */ + IN_FLAG: string | null; + /** Industry */ + INDST_CD: string | null; + /** 세금 번호 타입 */ + TX_NO_TP: string | null; + /** 언어 키 */ + LANG_KEY: string | null; + /** 등록일자 */ + REG_DT: string | null; + /** 등록시간 */ + REG_DTM: string | null; + /** 등록자ID */ + REGR_ID: string | null; + /** 승인일자 */ + AGR_DT: string | null; + /** 승인시간 */ + AGR_TM: string | null; + /** 승인자ID */ + AGR_R_ID: string | null; + /** 변경일자 */ + CHG_DT: string | null; + /** 변경시간 */ + CHG_TM: string | null; + /** 변경자ID */ + CHGR_ID: string | null; + /** F-Tree GT코드 */ + FTGT_CD: string | null; + /** F-Tree GT Name */ + FTGT_NM: string | null; + /** F-Tree DT 코드 */ + FTDT_CD: string | null; + /** F-Tree DT 이름 */ + FTDT_NM: string | null; + /** F-Tree BU 코드 */ + FTBU_CD: string | null; + /** F-Tree BU 이름 */ + FTBU_NM: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_REPREMAIL { + /** 내부고객번호 */ + CSTM_CD: string; + /** 주소번호 */ + ADR_NO: string; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** 이메일주소 */ + EMAIL_ADR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_REPRFAX { + /** 내부고객번호 */ + CSTM_CD: string; + /** 주소번호 */ + ADR_NO: string; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** 국가코드 */ + NTN_CD: string | null; + /** 팩스번호 */ + FAXNO: string | null; + /** 팩스내선번호 */ + FAX_ETS_NO: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_REPRTEL { + /** 내부고객번호 */ + CSTM_CD: string; + /** 주소번호 */ + ADR_NO: string; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** 국가코드 */ + NTN_CD: string | null; + /** 전화번호 */ + TELNO: string | null; + /** 내선번호 */ + ETX_NO: string | null; + /** 핸드폰지시자 */ + HP_ORDR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_REPRURL { + /** 내부고객번호 */ + CSTM_CD: string; + /** 주소번호 */ + ADR_NO: string; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** URL */ + URL: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_SORG { + /** 내부고객번호 */ + CSTM_CD: string; + /** 영업조직코드 */ + SALE_ORG_CD: string; + /** 유통경로 */ + DIST_PATH: string; + /** 제품군 */ + PDT_GRP: string; + /** 판매지역 */ + SALE_REGN: string | null; + /** 판매사무실 */ + SALE_OFC: string | null; + /** 판매그룹 */ + SALE_GRP: string | null; + /** 고객그룹 */ + CSTM_GRP: string | null; + /** 확도 */ + PSBL: string | null; + /** 거래 통화 */ + TRD_CUR: string | null; + /** 환율유형 */ + EXRAT_TP: string | null; + /** 가격절차결정코드 */ + PRC_PRCS_DSC_CD: string | null; + /** 고객통계그룹 */ + CSTM_STAT_GRP: string | null; + /** 선적조건 */ + SHIPMT_COND: string | null; + /** 최대거래수량 */ + MAX_TRD_QTY: number | null; + /** 인도조건1 */ + DL_COND_1: string | null; + /** 인도조건2 */ + DL_COND_2: string | null; + /** 지급조건 */ + SPLY_COND: string | null; + /** 계정할당그룹 */ + ACNT_ASGN_GRP: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_TAXCD { + /** 내부고객번호 */ + CSTM_CD: string; + /** 출발국가 */ + DPRT_NTN: string; + /** 세금번호범주 */ + TX_CTG: string; + /** 고객세금분류 */ + CSTM_TX_CLF: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_CUSTOMER_TAXNUM { + /** 내부고객번호 */ + CSTM_CD: string; + /** 세금번호범주 */ + TX_NO_CTG: string; + /** 사업파트너세금번호 */ + BIZ_PTNR_TX_NO: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_MAT_BSE { + /** 자재번호 */ + MAT_NO: string; + /** SM코드 */ + SM_CD: string | null; + /** 자재ID */ + MAT_ID: string | null; + /** 클래스코드 */ + CLAS_CD: string | null; + /** 자재유형 */ + MAT_TP: string | null; + /** 자재구분 */ + MAT_GB: string | null; + /** 자재내역 */ + MAT_DTL: string | null; + /** 자재내역사양 */ + MAT_DTL_SPEC: string | null; + /** 재질 */ + MATL: string | null; + /** 구자재번호 */ + OLD_MAT_NO: string | null; + /** 대체자재번호 */ + SBST_MAT_NO: string | null; + /** 단위 */ + UOM: string | null; + /** 제품군 */ + PDT_GRP: string | null; + /** MRC */ + MRC: string | null; + /** 저장자재지시자 */ + STOR_MAT_ORDR: string | null; + /** 강종 */ + STYPE: string | null; + /** 선급 */ + CLS: string | null; + /** 중량 */ + WGT: number | null; + /** 고유중량 */ + NET_WGT: number | null; + /** 중량단위 */ + WGT_UOM: string | null; + /** 길이 */ + LTH: number | null; + /** 길이2 */ + LTH_2: number | null; + /** 폭 */ + WTH: number | null; + /** 폭2 */ + WTH_2: number | null; + /** 두께 */ + THK: number | null; + /** 규격 */ + STD: string | null; + /** 형강규격 */ + PROF_STD: string | null; + /** CABLE바깥지름 */ + CBL_OUT_DIA: number | null; + /** LTRM_MAT_YN */ + LTRM_MAT_YN: string | null; + /** 도장면적 */ + PNT_AREA: number | null; + /** 도장내부면적 */ + PNTIN_AREA: number | null; + /** 도장내부사양 */ + PNTIN_SPEC: string | null; + /** 도장외부면적 */ + PNTOUT_AREA: number | null; + /** 도장외부사양1 */ + PNTOUT_SPEC_1: string | null; + /** 도장외부사양2 */ + PNTOUT_SPEC_2: string | null; + /** 도장외부사양3 */ + PNTOUT_SPEC_3: string | null; + /** RT검사사양 */ + RT_INSPEC: string | null; + /** UT검사사양 */ + UT_INSPEC: string | null; + /** MT검사사양 */ + MT_INSPEC: string | null; + /** PT검사사양 */ + PT_INSPEC: string | null; + /** 제작도면번호 */ + MK_DWG_NO: string | null; + /** 가공도면번호 */ + CUT_DWG_NO: string | null; + /** 배관SPOOL번호 */ + PIPE_SPL_NO: string | null; + /** 배관LINE번호 */ + PIPE_LINE_NO: string | null; + /** 배관클래스 */ + PIPE_CLAS: string | null; + /** 유체종류 */ + FLUID_KND: string | null; + /** 대표품명재질 */ + REP_ITM_MATL: string | null; + /** 대표지름 */ + REP_DIA: string | null; + /** 대표지름단위 */ + REP_DIA_UOM: string | null; + /** 대표스케쥴 */ + REP_SCH: string | null; + /** 대표지름길이 */ + REP_DIA_LTH: number | null; + /** 직곡관구분 */ + DBLN_GB: string | null; + /** 배관등급 */ + PIPE_GRD: string | null; + /** 열처리유무 */ + HTRET_YN: string | null; + /** 선후도금사양 */ + BA_GALV_SPEC: string | null; + /** SHIPSIDE여부 */ + SSIDE_YN: string | null; + /** 관통관여부 */ + PNTR_PIPE_YN: string | null; + /** UBOLT유무 */ + UBOLT_YN: string | null; + /** 조정관선행도장 */ + CTLP_PRCD_PNT: string | null; + /** 선행후행조정관 */ + PRCD_SCV_CTLP: string | null; + /** PMI검사사양 */ + PMI_INSPEC: string | null; + /** 수압 */ + WTRPRS: number | null; + /** VALVEFITTING번호 */ + VLV_FIT_NO: string | null; + /** TAG번호 */ + TAG_NO: string | null; + /** TAGSUB번호 */ + TAG_SB_NO: string | null; + /** 네임플레이트유형 */ + NM_PLATE_TP: string | null; + /** 네임플레이트서비스명 */ + NM_PLATE_SVC_NM: string | null; + /** VRCS자재번호 */ + VRCS_MAT_NO: string | null; + /** TRANSMITTERFITTING번호 */ + TRSM_FIT_NO: string | null; + /** VALVE옵션코드리스트 */ + VLV_OPT_CD_LIST: string | null; + /** 구매요청번호 */ + PUR_REQ_NO: string | null; + /** ITEM번호 */ + ITM_NO: string | null; + /** 모델번호 */ + MDL_NO: string | null; + /** BL번호 */ + BL_NO: string | null; + /** 업체장비번호 */ + VNDR_EQP_NO: string | null; + /** BOX번호 */ + BOX_NO: string | null; + /** 자재운송관리번호 */ + MMT_NO: string | null; + /** 설치위치 */ + INSTL_LOC: string | null; + /** 메인장비여부 */ + MN_EQP_YN: string | null; + /** 체결재여부 */ + FIXED_MAT_YN: string | null; + /** SPARE여부 */ + SPRE_YN: string | null; + /** TOOL여부 */ + TOOL_YN: string | null; + /** CABLE여부 */ + CBL_YN: string | null; + /** 선주설치자재여부 */ + OWN_INSTL_MAT_YN: string | null; + /** 비설치자재여부 */ + NONINSTL_MAT_YN: string | null; + /** 블록번호 */ + BLK_NO: string | null; + /** 계열 */ + GYEL: string | null; + /** 연결부재번호 */ + LNK_PTLST_NO: string | null; + /** 면적 */ + AREA: number | null; + /** 저장위치 */ + STOR_LOC: string | null; + /** 사급중량 */ + SGUB_WGT: number | null; + /** 도급중량 */ + DGUB_WGT: number | null; + /** 프로젝트번호 */ + PROJ_NO: string | null; + /** 설계기능 */ + DSN_SKL: string | null; + /** 비고 */ + RMK: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** 삭제일자 */ + DEL_DT: string | null; + /** 자재상태 */ + MAT_STAT: string | null; + /** 인터페이스시스템번호 */ + IF_SYS_NO: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** GLAND사양1 */ + GLAND_SPEC_1: string | null; + /** GLAND사양2 */ + GLAND_SPEC_2: string | null; + /** GLAND사양3 */ + GLAND_SPEC_3: string | null; + /** MCT모듈규격1 */ + MCT_MDLE_STD_1: string | null; + /** MCT모듈규격2 */ + MCT_MDLE_STD_2: string | null; + /** BEELERISE */ + BEELE_RISE: string | null; + /** 최대DRUM길이 */ + MAX_DRUM_LTH: number | null; + /** 승인일시 */ + AGR_DTM: string | null; + /** 승인자ID */ + AGR_R_ID: string | null; + /** DISCIPLINE */ + DISPLN: string | null; + /** 대공종 */ + LRG_KWK: string | null; + /** 세부공종 */ + DTL_KWK: string | null; + /** 특별검사구분 */ + SP_INSP_GB: string | null; + /** 도장외부사양4 */ + PNTOUT_SPEC_4: string | null; + /** OFE자재번호 */ + OFE_MAT_NO: string | null; + /** OFE케이블여부 */ + OFE_CAB_YN: string | null; + /** 포설가능개수 */ + INSTL_PSB_CNT: number | null; + /** 태선세선구분 */ + CUTL_ML_GB: string | null; + /** FCM검사 */ + FCM_INSP: string | null; + /** 서류번호 */ + DOC_NO: string | null; + /** 보류원인 */ + HOLD_CAUS: string | null; + /** 보류일자 */ + HOLD_DT: string | null; + /** NULL */ + HOLD_LIFT_DT: string | null; + /** 자재종류구분 */ + MAT_KND_GB: string | null; + /** BATCH관리지시자 */ + BATCH_MNG_ORDR: string | null; + /** 최초입력자ID */ + FS_INPR_ID: string | null; + /** 최초입력일시 */ + FS_INP_DTM: string | null; + /** 최종수정자ID */ + FIN_CHGR_ID: string | null; + /** 최종수정일시 */ + FIN_CHG_DTM: string | null; + /** NULL */ + DWG_FILE_NM: string | null; + /** NULL */ + TAG_NO_CHG_DT: string | null; + /** SUB장비여부 */ + SUB_EQP_YN: string | null; + /** 부속자재여부 */ + ATT_MAT_YN: string | null; + /** 설계계정번호 */ + DSN_REV_NO: string | null; + /** 사용자정의필드1 */ + USR_DF_CHAR1: string | null; + /** 인도선적품여부(DL_SHIPMT_ITM_YN) */ + USR_DF_CHAR2: string | null; + /** 사용자정의필드3 */ + USR_DF_CHAR3: string | null; + /** 사용자정의필드4 */ + USR_DF_CHAR4: string | null; + /** 변경이력 */ + USR_DF_CHAR5: string | null; +} + +export interface CMCTB_MAT_CLAS { + /** 클래스코드 */ + CLAS_CD: string; + /** 클래스명 */ + CLAS_NM: string | null; + /** 클래스내역 */ + CLAS_DTL: string | null; + /** 부모클래스코드 */ + PRNT_CLAS_CD: string | null; + /** 클래스레벨 */ + CLAS_LVL: number | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** 단위 */ + UOM: string | null; + /** 강종 */ + STYPE: string | null; + /** 등급재질 */ + GRD_MATL: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 기준단위 */ + BSE_UOM: string | null; +} + +export interface CMCTB_MAT_CLAS_SPCHAR { + /** 클래스코드 */ + CLAS_CD: string; + /** 특성코드 */ + SPCHAR_CD: string; + /** 특선순서 */ + SPCHAR_SEQ: string | null; + /** 필수여부 */ + MNDT_YN: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; +} + +export interface CMCTB_MAT_DSC { + /** 자재번호 */ + MAT_NO: string; + /** 언어키 */ + LANG_KEY: string; + /** 자재내역 */ + MAT_DTL: string | null; +} + +export interface CMCTB_MAT_PLNT { + /** 자재번호 */ + MAT_NO: string; + /** 플랜트 */ + PLNT: string; + /** 출고단위 */ + DELV_UOM: string | null; + /** 개별일괄소요구분 */ + EA_BTCH_ND_GB: string | null; + /** 조달분류 */ + PRCR_CLF: string | null; + /** 구매담당자코드 */ + PUR_CHRGR_CD: string | null; + /** 조달담당자코드 */ + PRCR_CHRGR_CD: string | null; + /** 현물담당자코드 */ + GOODS_CHRGR_CD: string | null; + /** 구매리드타임 */ + PUR_LT: number | null; + /** MRP유형 */ + MRP_TP: string | null; + /** 자재상태 */ + MAT_STAT: string | null; + /** 벌크자재지시자 */ + BULK_MAT_ORDR: string | null; + /** 조달유형 */ + PRCR_TP: string | null; + /** 안전재고수량 */ + SFTY_STCK_QTY: number | null; + /** 일련번호프로파일 */ + SER_PROF: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** BATCH관리지시자 */ + BATCH_MNG_ORDR: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 특별조달유형 */ + SP_PRCR_TP: string | null; +} + +export interface CMCTB_MAT_SPCHAR { + /** 자재번호 */ + MAT_NO: string; + /** 특성코드 */ + SPCHAR_CD: string; + /** 특성내역 */ + SPCHAR_DTL: string | null; + /** 특성값코드 */ + SPCHAR_VAL_CD: string | null; + /** 특성값내역 */ + SPCHAR_VAL_DTL: string | null; + /** 특성값넘버 */ + SPCHAR_VAL_NUM: number | null; + /** 특성값단위 */ + SPCHAR_VAL_UOM: string | null; +} + +export interface CMCTB_MAT_SPCHAR_MAST { + /** 특성코드 */ + SPCHAR_CD: string; + /** 특성내역 */ + SPCHAR_DTL: string | null; + /** 특성타입 */ + SPCHAR_TP: string | null; + /** 특성값단위 */ + SPCHAR_VAL_UOM: string | null; + /** 특성값여부 */ + SPCHAR_VAL_YN: string | null; + /** 특성그룹 */ + SPCHAR_GRP: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; +} + +export interface CMCTB_MAT_SPCHAR_VAL { + /** 특성코드 */ + SPCHAR_CD: string; + /** 특성값코드 */ + SPCHAR_VAL_CD: string; + /** 특성값내역 */ + SPCHAR_VAL_DTL: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; +} + +export interface CMCTB_MAT_UOM { + /** 자재번호 */ + MAT_NO: string; + /** 대체단위 */ + SBST_UOM: string; + /** 전환 FOCTOR1 */ + CNVRT_FCTR_1: number | null; + /** 전환 FOCTOR2 */ + CNVRT_FCTR_2: number | null; + /** 길이 */ + LTH: number | null; + /** 폭 */ + WTH: number | null; + /** 높이 */ + HGT: number | null; + /** 치수단위 */ + SZ_UOM: string | null; +} + +export interface CMCTB_PROJ_BIZCLS { + /** 프로젝트번호 */ + PROJ_NO: string; + /** TYPE */ + TYPE: string; + /** 비지니스클래스 */ + BIZCLS: string | null; + /** NULL */ + QM_CLS: string | null; + /** 신규MC여부 */ + NEW_MC_YN: string | null; +} + +export interface CMCTB_PROJ_MAST { + /** 프로젝트번호 */ + PROJ_NO: string; + /** 기준호선 */ + MSHIP_NO: string | null; + /** 시리즈첫프로젝트번호 */ + SERS_NO: string | null; + /** 시리즈번호 */ + REF_NO: string | null; + /** 선종 */ + SKND: string | null; + /** 선형 */ + SHTYPE: string | null; + /** 선형단위 */ + SHTYPE_UOM: string | null; + /** 도크 */ + DOCK_CD: string | null; + /** 선주1 */ + OWN_1: string | null; + /** 선급1 */ + CLS_1: string | null; + /** 계약일자 */ + CNRT_DT: string | null; + /** 계약인도일자 */ + CNRT_DL_DT: string | null; + /** 프로젝트 설명 */ + PROJ_DSC: string | null; + /** 프로젝트구분 */ + PROJ_GB: string | null; + /** 선주명 */ + OWN_NM: string | null; + /** 신선종2 */ + NEW_SKND2: string | null; + /** 선주약어 */ + OWN_AB: string | null; + /** 중국여부 */ + CHINA_YN: string | null; + /** 프로젝트세부타입 */ + PROJ_DTL_TP: string | null; + /** 프로젝트프로파일 */ + PROJ_PROF: string | null; + /** 안건번호 */ + INQY_NO: string | null; + /** 안건순번 */ + INQY_SEQ: string | null; + /** 국적 */ + NTTP: string | null; + /** 연관프로젝트 */ + RLTD_PROJ: string | null; + /** 디지털제품군 */ + DIGT_PDT_GRP: string | null; + /** 풍력프로젝트타입 */ + WP_PROJ_TP: string | null; + /** 전체계약개수 */ + TOT_CNRT_CNT: string | null; + /** 프로젝트기타타입 */ + PROJ_ETC_TP: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 소스시스템ID */ + SRC_SYS_ID: string | null; + /** 진행상태 */ + PRGS_STAT: string | null; + /** 삭제여부 */ + DEL_YN: string | null; + /** 인도고객코드 */ + DL_CSTM_CD: string | null; + /** 제품레벨4 */ + PDT_LVL_4: string | null; + /** AS보증기간 */ + AS_GRNT_PRD: number | null; + /** 실인도일자 */ + RL_DL_DT: string | null; + /** SAILAWAYDATE */ + SA_DT: string | null; + /** 관청 */ + GOV: string | null; + /** 인도전공사명 */ + DL_BF_PROJ_NM: string | null; + /** IMO번호 */ + IMO_NO: string | null; + /** 유통경로 */ + DIST_PATH: string | null; + /** 영업조직코드 */ + SALE_ORG_CD: string | null; + /** 판매그룹 */ + SALE_GRP: string | null; + /** 사업장코드 */ + BIZLOC_CD: string | null; + /** 관리회계영역 */ + MNG_ACOT_DMN: string | null; + /** 회사코드 */ + CO_CD: string | null; + /** 사업영역 */ + BIZ_DMN: string | null; + /** 플랜트코드 */ + PLNT_CD: string | null; + /** 손익센터 */ + PRCTR: string | null; + /** 계약존속여부 */ + CNRT_CNTN_YN: string | null; + /** 계약유보여부 */ + CNRT_RESV_YN: string | null; + /** 프로젝트진행여부 */ + PROJ_PRGS_YN: string | null; + /** 시스템회계마감일자 */ + SYS_ACOT_CLSD_DT: string | null; + /** 프로젝트범위 */ + PROJ_SCP: string | null; + /** 전길이 */ + LOA: number | null; + /** MAINENGINETYPECODE */ + MN_ENGN_TP_CD: string | null; + /** 속도 */ + SPD: number | null; + /** GT */ + GT: number | null; + /** 선표인도일자 */ + BP_DL_DT: string | null; + /** 선형군 */ + SHTYPE_GRP: string | null; + /** 프로젝트생성요청사번 */ + PROJ_CRTE_REQ_EMPNO: string | null; + /** 프로젝트생성요청일자 */ + PROJ_CRTE_REQ_DT: string | null; + /** 사내외구분 */ + IO_GB: string | null; + /** 고객발주번호 */ + CSTM_PO_NO: string | null; + /** 세대개수 */ + GENT_CNT: string | null; + /** 주문주보증기간 */ + ORDR_GRNT_PRD: string | null; + /** 주문주보증종료일 */ + ORDR_GRNT_FN_DT: string | null; + /** 설계담당자 */ + DSN_CHRGR: string | null; + /** 인도후공사명 */ + DL_AF_PROJ_NM: string | null; + /** 인도후실고객사 */ + DL_AF_RL_CLNT: string | null; + /** 인도후운항선사 */ + DL_AF_SHPSRV_SCP: string | null; + /** 인도후국적 */ + DL_AF_NTTP: string | null; + /** 인도후선급 */ + DL_AF_CLS: string | null; + /** 인도후CALLSIGN */ + DL_AF_CALL_SIGN: string | null; + /** 인도후전화번호 */ + DL_AF_TEL_NO: string | null; + /** 인도후팩스번호 */ + DL_AF_FAX_NO: string | null; + /** 인도후이메일주소 */ + DL_AF_EMAIL_ADR: string | null; + /** 프로젝트WBS타입 */ + PROJ_WBS_TP: string | null; + /** INTERFACE상태 */ + XSTAT: string | null; + /** INTERFACE메세지 */ + XMSGS: string | null; + /** INTERFACE일자 */ + XDATS: string | null; + /** INTERFACE시간 */ + XTIMS: string | null; + /** 중국프로젝트타입 */ + CHN_PROJ_TP: string | null; + /** 최종수요자 보증종료일 */ + FIN_GRNT_FN_DT: string | null; + /** 시작일자 */ + STDT: string | null; + /** 시리즈여부 */ + SERS_YN: string | null; + /** HULL TOP 구분 */ + TYPE: string | null; + /** PROPOSAL 프로젝트번호 */ + PRO_PROJ_NO: string | null; + /** 전기전자프로젝트번호 */ + PBSD_PROJ_NO: string | null; + /** 선박명 */ + PBSD_SHIP_NM: string | null; + /** 사업부 */ + BIZCLS: string | null; + /** 선급2 */ + CLS_2: string | null; + /** 선형코드 */ + SHTYPE_CD: string | null; + /** 프로젝트 인도계획일 */ + PROJ_DL_PLN_DT: string | null; + /** 프로젝트 인도실적일 */ + PROJ_DL_RT_DT: string | null; + /** 전체면적 */ + TOT_AREA: number | null; + /** 면세면적 */ + EXMPT_AREA: number | null; + /** 면세율 */ + EXMPT_RAT: number | null; + /** 품질사업부 */ + QM_CLS: string | null; + /** 연계 프로젝트 번호 */ + CNCT_PROJ_NO: string | null; + /** 기자재 세분화 및 생산일정 연계여부 */ + EQP_DTL_YN: string | null; + /** ExP 연계여부 */ + EXP_YN: string | null; + /** 생산실적 연계여부 */ + ACT_MH_YN: string | null; + /** 사양 */ + SPEC: string | null; + /** 디자인수명 */ + DSGN_LIFE: string | null; + /** 신규MC여부 */ + NEW_MC_YN: string | null; + /** 작업환경가중치여부 */ + WK_ENV_WT_VAL_YN: string | null; + /** 보증시작일 */ + GRNT_STDT: string | null; + /** 목표공수 적용 여부 */ + TMH_ADPT_YN: string | null; + /** ZVEZDA 프로젝트 여부 */ + ZV_YN: string | null; + /** 평택지원 프로젝트 여부 */ + SEC_YN: string | null; +} + +export interface CMCTB_PROJ_WBS { + /** 프로젝트번호 */ + PROJ_NO: string; + /** WBS요소 */ + WBS_ELMT: string; + /** WBS요소명 */ + WBS_ELMT_NM: string | null; + /** WBS레벨 */ + WBS_LVL: string | null; + /** FLAG */ + FLAG: string | null; + /** WBS내부요소 */ + WBS_INSD_ELMT: string | null; + /** 상위WBS요소 */ + HGRK_WBS_ELMT: string | null; + /** INTERFACE상태 */ + XSTAT: string | null; + /** INTERFACE메세지 */ + XMSGS: string | null; + /** INTERFACE일자 */ + XDATS: string | null; + /** INTERFACE시간 */ + XTIMS: string | null; + /** 시스템상태 */ + SYS_STAT: string | null; + /** WBS요소_1 */ + WBS_ELMT_1: string | null; + /** WBS요소_2 */ + WBS_ELMT_2: string | null; + /** WBS요소_3 */ + WBS_ELMT_3: string | null; + /** WBS요소_4 */ + WBS_ELMT_4: string | null; + /** WBS요소_5 */ + WBS_ELMT_5: string | null; + /** WBS요소_6 */ + WBS_ELMT_6: string | null; + /** WBS요소_7 */ + WBS_ELMT_7: string | null; + /** WBS요소_8 */ + WBS_ELMT_8: string | null; + /** WBS요소_9 */ + WBS_ELMT_9: string | null; + /** WBS요소_10 */ + WBS_ELMT_10: string | null; +} + +export interface CMCTB_VENDOR_ADDR { + /** VENDOR코드 */ + VNDRCD: string; + /** 주소번호 */ + ADR_NO: string | null; + /** 국제주소버전ID */ + INTL_ADR_VER_ID: string; + /** 도시우편번호 */ + CITY_ZIP_NO: string | null; + /** 사서함우편번호 */ + POBX_ZIP_NO: string | null; + /** 주소1 */ + ADR_1: string | null; + /** 주소2 */ + ADR_2: string | null; + /** 지역코드 */ + REGN_CD: string | null; + /** 타이틀 */ + TTL: string | null; + /** VENDOR명약어1 */ + VNDRNM_ABRV_1: string | null; + /** VENDOR명약어2 */ + VNDRNM_ABRV_2: string | null; + /** VENDOR명 */ + VNDRNM_1: string | null; + /** VENDOR명2 */ + VNDRNM_2: string | null; + /** 언어키 */ + LANG_KEY: string | null; + /** 기타주소1 */ + ETC_ADR_1: string | null; + /** 기타주소2 */ + ETC_ADR_2: string | null; + /** 국가코드 */ + NTN_CD: string | null; + /** 사서함 */ + POBX: string | null; + /** 운송구역 */ + TRANS_ZONE: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; + /** VENDOR명3 */ + VNDRNM_3: string | null; + /** VENDOR명4 */ + VNDRNM_4: string | null; + /** 조세관할구역코드 */ + TAX_JRDT_ZONE_CD: string | null; + /** 주소시간대 */ + ADR_TMZ: string | null; +} + +export interface CMCTB_VENDOR_COMPNY { + /** VENDOR코드 */ + VNDRCD: string; + /** 회사코드 */ + CO_CD: string; + /** 조정계정 */ + CTL_ACNT: string | null; + /** 정렬키 */ + SRT_KEY: string | null; + /** 계획그룹 */ + PLN_GRP: string | null; + /** 이전VENDOR코드 */ + BF_VNDRCD: string | null; + /** 지급조건 */ + SPLY_COND: string | null; + /** 중복송장지시자 */ + OVLAP_INVC_ORDR: string | null; + /** 지급방법 */ + SPLY_MTHD: string | null; + /** 지급보류지시자 */ + SPLY_HOLD_ORDR: string | null; + /** 거래은행단축키 */ + TRD_BANK_SHRT_KEY: string | null; + /** 전기보류지시자 */ + PST_HOLD_ORDR: string | null; + /** 보류사유 */ + HOLD_CAUS: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** 원천세국가코드 */ + SRCE_TX_NTN_CD: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; + /** 소수지시자 */ + MIN_ORDR: string | null; + /** 분리지급지시자 */ + SPRT_SPLY_ORDR: string | null; + /** CUSTOMERVENDOR반제지시자 */ + CSTM_VNDR_CLR_ORDR: string | null; + /** 원천세코드 */ + SRCE_TX_CD: string | null; + /** IATABIC구분 */ + IATA_BIC_GB: string | null; + /** 대표유형 */ + REP_TP: string | null; + /** 물류VENDOR유형 */ + LOGST_VNDR_TP: string | null; + /** VENDOR계정번호 */ + VNDR_ACNT_NO: string | null; + /** VENDOR담당자명 */ + VNDR_CHRGR_NM: string | null; + /** 회계담당자전화번호 */ + ACOT_CHRGR_TELNO: string | null; + /** 권한그룹 */ + AUTH_GRP: string | null; + /** 최종이자계산일자 */ + FIN_IR_CALC_DT: string | null; + /** 최종이자실행일자 */ + FIN_IR_ACT_DT: string | null; + /** 회계담당자FAX번호 */ + ACOT_CHRGR_FAXNO: string | null; + /** MAKER담당자이메일 */ + MK_CHRGR_EMAIL: string | null; + /** 메모 */ + MEMO: string | null; + /** 본사계정번호 */ + MOFFC_ACNT_NO: string | null; +} + +export interface CMCTB_VENDOR_GENERAL { + /** 벤더코드 */ + VNDRCD: string; + /** 계정그룹 */ + ACNT_GRP: string | null; + /** 계정그룹종류 */ + ACNT_GRP_TP: string | null; + /** 고객코드 */ + CSTM_CD: string | null; + /** 전기보류지시자 */ + PST_HOLD_ORDR: string | null; + /** 구매보류지시자 */ + PUR_HOLD_ORDR: string | null; + /** 보류사유 */ + HOLD_CAUS: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** 법인ID */ + CO_ID: string | null; + /** 대표자명 */ + REPR_NM: string | null; + /** 사업유형 */ + BIZTP: string | null; + /** 산업유형 */ + BIZCON: string | null; + /** 등록일자 */ + REG_DT: string | null; + /** 등록시간 */ + REG_DTM: string | null; + /** 등록자 */ + REGR_ID: string | null; + /** 승인일자 */ + AGR_DT: string | null; + /** 승인시간 */ + AGR_TM: string | null; + /** 승인자ID */ + AGR_R_ID: string | null; + /** 변경일자 */ + CHG_DT: string | null; + /** 변경시간 */ + CHG_TM: string | null; + /** 변경자ID */ + CHGR_ID: string | null; + /** 국가코드 */ + NTN_CD: string | null; + /** 대표전화번호 */ + REP_TEL_NO: string | null; + /** 대표FAX번호 */ + REP_FAX_NO: string | null; + /** 사업자번호 */ + BIZR_NO: string | null; + /** 법인등록번호 */ + CO_REG_NO: string | null; + /** 세금번호4 */ + TX_CD_4: string | null; + /** 설립일자 */ + CO_INST_DT: string | null; + /** 구매처유형 */ + VNDR_TP: string | null; + /** GLOBALTOP코드 */ + GBL_TOP_CD: string | null; + /** GLOBALTOP명 */ + GBL_TOP_NM: string | null; + /** 국내TOP코드 */ + DMST_TOP_CD: string | null; + /** 국내TOP명 */ + DMST_TOP_NM: string | null; + /** 사업단위코드 */ + BIZ_UOM_CD: string | null; + /** 사업단위명 */ + BIZ_UOM_NM: string | null; + /** DUNS번호 */ + DNS_NO: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; + /** 타이틀 */ + TTL: string | null; + /** 부가세등록번호 */ + VAT_REG_NO: string | null; + /** 지로VENDOR지시자 */ + GIRO_VNDR_ORDR: string | null; + /** Vendor명1 */ + VNDRNM_1: string | null; + /** VENDOR명2 */ + VNDRNM_2: string | null; + /** VENDOR명3 */ + VNDRNM_3: string | null; + /** VENDOR명4 */ + VNDRNM_4: string | null; + /** VENDOR명약어1 */ + VNDRNM_ABRV_1: string | null; + /** VENDOR명약어2 */ + VNDRNM_ABRV_2: string | null; + /** 잠재VENDOR코드 */ + PTNT_VNDRCD: string | null; + /** 주소1 */ + ADR_1: string | null; + /** 주소2 */ + ADR_2: string | null; + /** 품질담당자명 */ + QLT_CHRGR_NM: string | null; + /** 품질담당자전화번호 */ + QLT_CHRGR_TELNO: string | null; + /** 품질담당자이메일 */ + QLT_CHRGR_EMAIL: string | null; + /** SUB작업장순서 */ + SB_WKA_SEQ: string | null; + /** 중복사유코드 */ + OVLAP_CAUS_CD: string | null; + /** 문서유형 */ + DOC_TP: string | null; + /** 문서번호 */ + DOC_NO: string | null; + /** 부분문서 */ + PTN_DOC: string | null; + /** 문서버전 */ + DOC_VER: string | null; + /** 인바운드플래그 */ + INB_FLAG: string | null; + /** 삭제보류지시자 */ + DEL_HOLD_ORDR: string | null; + /** 구매보류일자 */ + PUR_HOLD_DT: string | null; + /** 사서함 */ + POBX: string | null; + /** 국제LOCATION점검숫자 */ + INTL_LCTN_CHK_NUM: number | null; + /** 원천세의무자성별키 */ + SRCETX_RP_SEX_KEY: string | null; + /** VENDOR계약담당자1 */ + VNDR_CNRT_CHRGR_1: string | null; + /** VENDOR계약담당자2 */ + VNDR_CNRT_CHRGR_2: string | null; + /** 대표생년월일 */ + REPR_RESNO: string | null; + /** 기업규모 */ + CO_VLM: string | null; +} + +export interface CMCTB_VENDOR_GRP { + /** VENDOR코드 */ + VNDRCD: string; + /** 업무그룹코드 */ + BIZ_GRP_CD: string; + /** 생성일자 */ + CRTE_DT: string | null; + /** 생성시간 */ + CRTE_TM: string | null; + /** 생성자ID */ + CRTER_ID: string | null; + /** 변경일자 */ + CHG_DT: string | null; + /** 변경시간 */ + CHG_TM: string | null; + /** 변경자ID */ + CHGR_ID: string | null; +} + +export interface CMCTB_VENDOR_INCO { + /** VENDOR코드 */ + VNDRCD: string; + /** VENDOR코명 */ + VNDRNM: string | null; + /** 대표자명 */ + REPR_NM: string | null; + /** 협력사구분 */ + PRTNR_GB: string | null; + /** 사내협력사코드 */ + INCO_PRTNR_CD: string | null; + /** 사내협력사작업장1 */ + INCO_PRTNR_WKA_1: string | null; + /** 사내협력사작업장2 */ + INCO_PRTNR_WKA_2: string | null; + /** 사내협력사작업장3 */ + INCO_PRTNR_WKA_3: string | null; + /** 직종코드 */ + JBTYPE_CD: string | null; + /** 직종코드2 */ + JBTYPE_CD_2: string | null; + /** 개인법인구분 */ + INDV_CO_GB: string | null; + /** 사내창립유무 */ + INCO_FOND_YN: string | null; + /** 도크번호 */ + DOCK_NO: string | null; + /** 당사투입일자 */ + OCMP_INP_DT: string | null; + /** 사내철수일자 */ + INCO_DUSE_DT: string | null; + /** 산재보험요율 */ + INDST_INS_PMRAT: number | null; + /** 계약이행보증금 */ + CNRT_PFRM_GRAMT: number | null; + /** 임금율 */ + WGE_RAT: number | null; + /** 해당부서코드1 */ + CRSPD_DEPTCD_1: string | null; + /** 해당부서코드2 */ + CRSPD_DEPTCD_2: string | null; + /** 해당팀소속 */ + CRSPD_TEAM_BLNG: string | null; + /** 사내협력사종목1 */ + INCO_PRTNR_ITM_1: string | null; + /** 사내협력사종목2 */ + INCO_PRTNR_ITM_2: string | null; + /** 사무실위치 */ + OFC_LOC: string | null; + /** 대표당사경력 */ + REP_OCMP_CARR: string | null; + /** 사내철수사유 */ + INCO_DUSE_CAUS: string | null; + /** 전화번호 */ + TEL_NO: string | null; + /** 주소 */ + ADR1: string | null; + /** 상세주소 */ + ADR2: string | null; + /** 이전 VENDOR코드 */ + OLD_VNDRCD: string | null; + /** 하위 VENDOR 갯수 */ + TREE_NUM: string | null; + /** 생성일자 */ + CRTE_DT: string | null; + /** 생성시간 */ + CRTE_TM: string | null; + /** 생성사용자ID */ + CRTE_USR_ID: string | null; + /** 수정일자 */ + CHG_DT: string | null; + /** 수정시간 */ + CHG_TM: string | null; + /** 수정사용자ID */ + CHG_USR_ID: string | null; + /** 직종단가 */ + UPR_JBTYPE: string | null; + /** 공급받는자 종사업장 식별코드 */ + ZBYBP: string | null; + /** 비고 */ + RMK: string | null; + /** 철수예정유무 */ + WDL_PLN_YN: string | null; + /** 임금체불발생 */ + WGE_DELY_DVL: string | null; + /** 에스크로가입유무 */ + ESCROW_YN: string | null; +} + +export interface CMCTB_VENDOR_PORG { + /** VENDOR코드 */ + VNDRCD: string; + /** 구매조직 */ + PUR_ORG_CD: string; + /** 구매오더통화 */ + PUR_ORD_CUR: string | null; + /** 지급조건 */ + SPLY_COND: string | null; + /** 인도조건1 */ + DL_COND_1: string | null; + /** 인도조건2 */ + DL_COND_2: string | null; + /** 계산스키마그룹 */ + CALC_SHM_GRP: string | null; + /** GR기준송장검증 */ + GR_BSE_INVC_VR: string | null; + /** 자동구매오더지시자 */ + AT_PUR_ORD_ORDR: string | null; + /** 구매보류지시자 */ + PUR_HOLD_ORDR: string | null; + /** 삭제지시자 */ + DEL_ORDR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; + /** 오더확인요청지시자 */ + ORD_CNFM_REQ_ORDR: string | null; + /** 영업담당자명 */ + SALE_CHRGR_NM: string | null; + /** VENDOR전화번호 */ + VNDR_TELNO: string | null; + /** 확정제어키 */ + CNFM_CTL_KEY: string | null; + /** 구매보류일자 */ + PUR_HOLD_DT: string | null; + /** 구매보류사유 */ + PUR_HOLD_CAUS: string | null; +} + +export interface CMCTB_VENDOR_REPREMAIL { + /** VENDOR코드 */ + VNDRCD: string; + /** 주소번호 */ + ADR_NO: string | null; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** 이메일주소 */ + EMAIL_ADR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_VENDOR_REPRFAX { + /** VENDOR코드 */ + VNDRCD: string; + /** 주소번호 */ + ADR_NO: string | null; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** 국가코드 */ + NTN_CD: string | null; + /** 팩스번호 */ + FAXNO: string | null; + /** 팩스내선번호 */ + FAX_ETS_NO: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_VENDOR_REPRTEL { + /** VENDOR코드 */ + VNDRCD: string; + /** 주소번호 */ + ADR_NO: string | null; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** 국가코드 */ + NTN_CD: string | null; + /** 전화번호 */ + TELNO: string | null; + /** 내선번호 */ + ETX_NO: string | null; + /** 핸드폰지시자 */ + HP_ORDR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_VENDOR_REPRURL { + /** VENDOR코드 */ + VNDRCD: string; + /** 주소번호 */ + ADR_NO: string | null; + /** 대표자순번 */ + REPR_SER: string; + /** 유효시작일자 */ + VLD_ST_DT: string; + /** URL */ + URL: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_VENDOR_TAXNUM { + /** VENDOR코드 */ + VNDRCD: string; + /** 세금번호범주 */ + TX_NO_CTG: string; + /** 사업파트너세금번호 */ + BIZ_PTNR_TX_NO: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_VENDOR_VFPN { + /** VENDOR코드 */ + VNDRCD: string; + /** 구매조직 */ + PUR_ORG_CD: string; + /** VENDOR서브번호 */ + VNDR_SUB_NO: string; + /** 플랜트코드 */ + PLNT_CD: string; + /** 파트너기능 */ + PTNR_SKL: string; + /** 파트너카운터 */ + PTNR_CNT: string; + /** 기타참조VENDOR코드 */ + ETC_REF_VNDRCD: string | null; + /** 기본파트너지시자 */ + BSE_PTNR_ORDR: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface CMCTB_VENDOR_WHTHX { + /** VENDOR코드 */ + VNDRCD: string; + /** 회사코드 */ + CO_CD: string; + /** 원천세유형 */ + SRCE_TX_TP: string; + /** 원천세관련지시자 */ + SRCE_TX_REL_ORDR: string | null; + /** 수취인유형 */ + RECIP_TP: string | null; + /** 원천세식별번호 */ + SRCE_TX_IDENT_NO: string | null; + /** 원천세코드 */ + SRCE_TX_NO: string | null; + /** 면제증명서번호 */ + DCHAG_CERT_NO: string | null; + /** 면제율 */ + DCHAG_RAT: number | null; + /** 면제시작일자 */ + DCHAG_ST_DT: string | null; + /** 면제종료일 */ + DCHAG_ED_DT: string | null; + /** 면제사유 */ + DCHAG_CAUS: string | null; + /** 인터페이스일자 */ + IF_DT: string | null; + /** 인터페이스시간 */ + IF_TM: string | null; + /** 인터페이스상태 */ + IF_STAT: string | null; + /** 인터페이스메시지 */ + IF_MSG: string | null; +} + +export interface PLFTB_ESTM_PROJ_MAST { + /** 견적프로젝트번호 */ + ESTM_PROJ_NO: string; + /** 안건번호 */ + AGND_NO: string | null; + /** 견적프로젝트명 */ + ESTM_PROJ_NM: string | null; + /** 사업부문 */ + BIZ_CLS: string | null; + /** 리비젼번호 */ + REV_NO: number | null; + /** 견적유형 */ + ESTM_TYPE: string | null; + /** 선주사코드 */ + OWNER_CD: string | null; + /** 시리즈순번 */ + SERS_CNT: number | null; + /** 선종코드 */ + SKND_CD: string | null; + /** 선형코드 */ + SHTYPE_CD: string | null; + /** 선형크기 */ + SHTYPE_SIZE: number | null; + /** 선형단위 */ + SHTYPE_UOM: string | null; + /** 관청코드 */ + CHRTR_CD: string | null; + /** 국가코드 */ + NATN_CD: string | null; + /** 선급1 */ + CLS_1: string | null; + /** 선급2 */ + CLS_2: string | null; + /** 선급3 */ + CLS_3: string | null; + /** 데이터생성구분 */ + DATA_CRTE_GB: string | null; + /** 최초등록자ID */ + FS_INPR_ID: string | null; + /** 최초등록일시 */ + FS_INP_DTM: string | null; + /** 최종수정자ID */ + FIN_CHGR_ID: string | null; + /** 최종수정일시 */ + FIN_CHG_DTM: string | null; + /** VESSEL 평균값1 */ + VSL_VAG_1: number | null; + /** VESSEL 평균값2 */ + VSL_VAG_2: number | null; + /** VESSEL 평균값3 */ + VSL_VAG_3: number | null; + /** VESSEL 평균값4 */ + VSL_VAG_4: number | null; + /** 견적물량결재ID */ + ESTM_AOM_APP_ID: string | null; + /** 견적물량상태 */ + ESTM_AOM_STAT: string | null; + /** 견적물량상태변경자ID */ + ESTM_AOM_STAT_CHGR_ID: string | null; + /** 견적물량상태변경일시 */ + ESTM_AOM_STAT_CHG_DTM: string | null; + /** IF대상여부 */ + IF_TRGT_YN: string | null; +} + +// Table 객체 - Table.테이블명.컬럼명 형태로 사용 +export const Table = { + CMCTB_CD: { + /** 코드분류 */ + CD_CLF: 'CD_CLF' as const, + /** 코드 */ + CD: 'CD' as const, + /** 코드2 */ + CD2: 'CD2' as const, + /** 코드3 */ + CD3: 'CD3' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_1: 'USR_DF_CHAR_1' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_2: 'USR_DF_CHAR_2' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_3: 'USR_DF_CHAR_3' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_4: 'USR_DF_CHAR_4' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_5: 'USR_DF_CHAR_5' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_6: 'USR_DF_CHAR_6' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_7: 'USR_DF_CHAR_7' as const, + /** 사용자정의문자열10 */ + USR_DF_CHAR_8: 'USR_DF_CHAR_8' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_9: 'USR_DF_CHAR_9' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_10: 'USR_DF_CHAR_10' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_11: 'USR_DF_CHAR_11' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_12: 'USR_DF_CHAR_12' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_13: 'USR_DF_CHAR_13' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_14: 'USR_DF_CHAR_14' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_15: 'USR_DF_CHAR_15' as const, + /** 사용자정의문자열20 */ + USR_DF_CHAR_16: 'USR_DF_CHAR_16' as const, + /** 사용자정의문자열40 */ + USR_DF_CHAR_17: 'USR_DF_CHAR_17' as const, + /** 사용자정의문자열40 */ + USR_DF_CHAR_18: 'USR_DF_CHAR_18' as const, + /** 사용자정의문자열255 */ + USR_DF_CHAR_19: 'USR_DF_CHAR_19' as const, + /** 사용자정의문자열255 */ + USR_DF_CHAR_20: 'USR_DF_CHAR_20' as const, + /** 사용자정의체크1 */ + USR_DF_CHK_1: 'USR_DF_CHK_1' as const, + /** 사용자정의체크2 */ + USR_DF_CHK_2: 'USR_DF_CHK_2' as const, + /** 사용자정의체크3 */ + USR_DF_CHK_3: 'USR_DF_CHK_3' as const, + /** 사용자정의체크4 */ + USR_DF_CHK_4: 'USR_DF_CHK_4' as const, + /** 사용자정의체크5 */ + USR_DF_CHK_5: 'USR_DF_CHK_5' as const, + /** 사용자정의체크6 */ + USR_DF_CHK_6: 'USR_DF_CHK_6' as const, + /** 사용자정의체크7 */ + USR_DF_CHK_7: 'USR_DF_CHK_7' as const, + /** 사용자정의체크8 */ + USR_DF_CHK_8: 'USR_DF_CHK_8' as const, + /** 사용자정의일자1 */ + USR_DF_DT_1: 'USR_DF_DT_1' as const, + /** 사용자정의일자2 */ + USR_DF_DT_2: 'USR_DF_DT_2' as const, + /** 사용자정의일자3 */ + USR_DF_DT_3: 'USR_DF_DT_3' as const, + /** 사용자정의일자4 */ + USR_DF_DT_4: 'USR_DF_DT_4' as const, + /** 사용자정의시간1 */ + USR_DF_TM_1: 'USR_DF_TM_1' as const, + /** 사용자정의시간2 */ + USR_DF_TM_2: 'USR_DF_TM_2' as const, + /** 사용자정의시간3 */ + USR_DF_TM_3: 'USR_DF_TM_3' as const, + /** 사용자정의시간4 */ + USR_DF_TM_4: 'USR_DF_TM_4' as const, + /** 생성자 */ + CRTER: 'CRTER' as const, + /** 생성일자 */ + CRTE_DT: 'CRTE_DT' as const, + /** 생성시간 */ + CRTE_TM: 'CRTE_TM' as const, + /** 수정자 */ + CHGR: 'CHGR' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 수정시간 */ + CHG_TM: 'CHG_TM' as const, + /** 삭제여부 */ + DEL_YN: 'DEL_YN' as const, + }, + CMCTB_CDNM: { + /** 언어키 */ + LANG_KEY: 'LANG_KEY' as const, + /** 코드분류 */ + CD_CLF: 'CD_CLF' as const, + /** 코드 */ + CD: 'CD' as const, + /** 코드2 */ + CD2: 'CD2' as const, + /** 코드3 */ + CD3: 'CD3' as const, + /** 코드명 */ + CDNM: 'CDNM' as const, + /** 그룹설명 */ + GRP_DSC: 'GRP_DSC' as const, + /** 생성자 */ + CRTER: 'CRTER' as const, + /** 생성일자 */ + CRTE_DT: 'CRTE_DT' as const, + /** 생성시간 */ + CRTE_TM: 'CRTE_TM' as const, + /** 수정자 */ + CHGR: 'CHGR' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 수정시간 */ + CHG_TM: 'CHG_TM' as const, + /** 삭제여부 */ + DEL_YN: 'DEL_YN' as const, + }, + CMCTB_CD_CLF: { + /** 코드분류 */ + CD_CLF: 'CD_CLF' as const, + /** 생성자 */ + CRTER: 'CRTER' as const, + /** 생성일자 */ + CRTE_DT: 'CRTE_DT' as const, + /** 생성시간 */ + CRTE_TM: 'CRTE_TM' as const, + /** 수정자 */ + CHGR: 'CHGR' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 수정시간 */ + CHG_TM: 'CHG_TM' as const, + /** 삭제여부 */ + DEL_YN: 'DEL_YN' as const, + /** I/F 상태 */ + XSTAT: 'XSTAT' as const, + /** I/F Message */ + XMSGS: 'XMSGS' as const, + /** I/F 일자 */ + XDATS: 'XDATS' as const, + /** I/F 시간 */ + XTIMS: 'XTIMS' as const, + }, + CMCTB_CD_CLF_NM: { + /** 언어키 */ + LANG_KEY: 'LANG_KEY' as const, + /** 코드분류 */ + CD_CLF: 'CD_CLF' as const, + /** 코드분류명 */ + CD_CLF_NM: 'CD_CLF_NM' as const, + /** 그룹설명 */ + GRP_DSC: 'GRP_DSC' as const, + /** 생성자 */ + CRTER: 'CRTER' as const, + /** 생성일자 */ + CRTE_DT: 'CRTE_DT' as const, + /** 생성시간 */ + CRTE_TM: 'CRTE_TM' as const, + /** 수정자 */ + CHGR: 'CHGR' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 수정시간 */ + CHG_TM: 'CHG_TM' as const, + /** 삭제여부 */ + DEL_YN: 'DEL_YN' as const, + }, + CMCTB_CUSTOMER_ADDR: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 국제주소버전ID */ + INTL_ADR_VER_ID: 'INTL_ADR_VER_ID' as const, + /** 국가코드 */ + NTN_CD: 'NTN_CD' as const, + /** 도시우편번호 */ + CITY_ZIP_NO: 'CITY_ZIP_NO' as const, + /** 사서함우편번호 */ + POBX_ZIP_NO: 'POBX_ZIP_NO' as const, + /** 주소1 */ + ADR_1: 'ADR_1' as const, + /** 주소2 */ + ADR_2: 'ADR_2' as const, + /** 지역코드 */ + REGN_CD: 'REGN_CD' as const, + /** 기타주소1 */ + ETC_ADR_1: 'ETC_ADR_1' as const, + /** 기타주소2 */ + ETC_ADR_2: 'ETC_ADR_2' as const, + /** House Number */ + HOUSE_NR1: 'HOUSE_NR1' as const, + /** 사서함 */ + POBX: 'POBX' as const, + /** 언어키 */ + LANG_KEY: 'LANG_KEY' as const, + /** 업체명1 */ + VNDRNM_1: 'VNDRNM_1' as const, + /** 업체명2 */ + VNDRNM_2: 'VNDRNM_2' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + /** 운송구역 */ + TRANS_ZONE: 'TRANS_ZONE' as const, + }, + CMCTB_CUSTOMER_CFPN: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 영업조직코드 */ + SALE_ORG_CD: 'SALE_ORG_CD' as const, + /** 유통경로 */ + DIST_PATH: 'DIST_PATH' as const, + /** 제품군 */ + PDT_GRP: 'PDT_GRP' as const, + /** 파트너기능 */ + PTNR_SKL: 'PTNR_SKL' as const, + /** 파트너카운터 */ + PTNR_CNT: 'PTNR_CNT' as const, + /** 기본파트너지시자 */ + BSE_PTNR_ORDR: 'BSE_PTNR_ORDR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_COMPNY: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 법인ID */ + CO_ID: 'CO_ID' as const, + /** AR계정처리구분 */ + AR_ACNT_HDL_GB: 'AR_ACNT_HDL_GB' as const, + /** 정렬Key */ + SRT_KEY: 'SRT_KEY' as const, + /** 자금수지구분 */ + AMT_RNE_GB: 'AMT_RNE_GB' as const, + /** 거래선 지불형태 */ + VNDR_PAY_FRM: 'VNDR_PAY_FRM' as const, + /** 대금지블조건코드 */ + BILL_PAY_COND_CD: 'BILL_PAY_COND_CD' as const, + /** 대금지불Block코드 */ + BILL_PAY_BLOC_CD: 'BILL_PAY_BLOC_CD' as const, + /** 전기보류지시자 */ + PST_HOLD_ORDR: 'PST_HOLD_ORDR' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_GENERAL: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표순번 */ + REPR_SER: 'REPR_SER' as const, + /** 계정그룹 */ + ACNT_GRP: 'ACNT_GRP' as const, + /** 중복사유 */ + OVLAP_CAUS: 'OVLAP_CAUS' as const, + /** 고객타입 */ + CSTM_TP: 'CSTM_TP' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** 삭제블락 */ + DEL_BLOCK: 'DEL_BLOCK' as const, + /** 전기보류지시자 */ + PST_HOLD_ORDR: 'PST_HOLD_ORDR' as const, + /** 법인ID */ + CO_ID: 'CO_ID' as const, + /** 타이틀 */ + TTL: 'TTL' as const, + /** 조건 그룹 1 */ + COND_GRP_1: 'COND_GRP_1' as const, + /** 고객 그룹 명 */ + CSTM_GRP_NM: 'CSTM_GRP_NM' as const, + /** 대표자명 */ + REPR_NM: 'REPR_NM' as const, + /** 사업유형 */ + BIZTP: 'BIZTP' as const, + /** 산업유형 */ + BIZCON: 'BIZCON' as const, + /** Tax Number 2 */ + TX_NO_2: 'TX_NO_2' as const, + /** Tax Number 3 */ + TX_NO_3: 'TX_NO_3' as const, + /** Tax Number 4 */ + TX_NO_4: 'TX_NO_4' as const, + /** 세금 등록 번호 */ + TX_REG_NO: 'TX_REG_NO' as const, + /** BA코드 */ + BA_CD: 'BA_CD' as const, + /** 벤더코드 */ + VNDRCD: 'VNDRCD' as const, + /** 검색조건1 */ + SRCH_COND_1: 'SRCH_COND_1' as const, + /** 검색조건2 */ + SRCH_COND_2: 'SRCH_COND_2' as const, + /** 도시 거리 명 */ + CITY_DISP_NM: 'CITY_DISP_NM' as const, + /** CRM Code */ + CRM_CD: 'CRM_CD' as const, + /** Inbound Flag */ + IN_FLAG: 'IN_FLAG' as const, + /** Industry */ + INDST_CD: 'INDST_CD' as const, + /** 세금 번호 타입 */ + TX_NO_TP: 'TX_NO_TP' as const, + /** 언어 키 */ + LANG_KEY: 'LANG_KEY' as const, + /** 등록일자 */ + REG_DT: 'REG_DT' as const, + /** 등록시간 */ + REG_DTM: 'REG_DTM' as const, + /** 등록자ID */ + REGR_ID: 'REGR_ID' as const, + /** 승인일자 */ + AGR_DT: 'AGR_DT' as const, + /** 승인시간 */ + AGR_TM: 'AGR_TM' as const, + /** 승인자ID */ + AGR_R_ID: 'AGR_R_ID' as const, + /** 변경일자 */ + CHG_DT: 'CHG_DT' as const, + /** 변경시간 */ + CHG_TM: 'CHG_TM' as const, + /** 변경자ID */ + CHGR_ID: 'CHGR_ID' as const, + /** F-Tree GT코드 */ + FTGT_CD: 'FTGT_CD' as const, + /** F-Tree GT Name */ + FTGT_NM: 'FTGT_NM' as const, + /** F-Tree DT 코드 */ + FTDT_CD: 'FTDT_CD' as const, + /** F-Tree DT 이름 */ + FTDT_NM: 'FTDT_NM' as const, + /** F-Tree BU 코드 */ + FTBU_CD: 'FTBU_CD' as const, + /** F-Tree BU 이름 */ + FTBU_NM: 'FTBU_NM' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_REPREMAIL: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** 이메일주소 */ + EMAIL_ADR: 'EMAIL_ADR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_REPRFAX: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** 국가코드 */ + NTN_CD: 'NTN_CD' as const, + /** 팩스번호 */ + FAXNO: 'FAXNO' as const, + /** 팩스내선번호 */ + FAX_ETS_NO: 'FAX_ETS_NO' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_REPRTEL: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** 국가코드 */ + NTN_CD: 'NTN_CD' as const, + /** 전화번호 */ + TELNO: 'TELNO' as const, + /** 내선번호 */ + ETX_NO: 'ETX_NO' as const, + /** 핸드폰지시자 */ + HP_ORDR: 'HP_ORDR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_REPRURL: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** URL */ + URL: 'URL' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_SORG: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 영업조직코드 */ + SALE_ORG_CD: 'SALE_ORG_CD' as const, + /** 유통경로 */ + DIST_PATH: 'DIST_PATH' as const, + /** 제품군 */ + PDT_GRP: 'PDT_GRP' as const, + /** 판매지역 */ + SALE_REGN: 'SALE_REGN' as const, + /** 판매사무실 */ + SALE_OFC: 'SALE_OFC' as const, + /** 판매그룹 */ + SALE_GRP: 'SALE_GRP' as const, + /** 고객그룹 */ + CSTM_GRP: 'CSTM_GRP' as const, + /** 확도 */ + PSBL: 'PSBL' as const, + /** 거래 통화 */ + TRD_CUR: 'TRD_CUR' as const, + /** 환율유형 */ + EXRAT_TP: 'EXRAT_TP' as const, + /** 가격절차결정코드 */ + PRC_PRCS_DSC_CD: 'PRC_PRCS_DSC_CD' as const, + /** 고객통계그룹 */ + CSTM_STAT_GRP: 'CSTM_STAT_GRP' as const, + /** 선적조건 */ + SHIPMT_COND: 'SHIPMT_COND' as const, + /** 최대거래수량 */ + MAX_TRD_QTY: 'MAX_TRD_QTY' as const, + /** 인도조건1 */ + DL_COND_1: 'DL_COND_1' as const, + /** 인도조건2 */ + DL_COND_2: 'DL_COND_2' as const, + /** 지급조건 */ + SPLY_COND: 'SPLY_COND' as const, + /** 계정할당그룹 */ + ACNT_ASGN_GRP: 'ACNT_ASGN_GRP' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_TAXCD: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 출발국가 */ + DPRT_NTN: 'DPRT_NTN' as const, + /** 세금번호범주 */ + TX_CTG: 'TX_CTG' as const, + /** 고객세금분류 */ + CSTM_TX_CLF: 'CSTM_TX_CLF' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_CUSTOMER_TAXNUM: { + /** 내부고객번호 */ + CSTM_CD: 'CSTM_CD' as const, + /** 세금번호범주 */ + TX_NO_CTG: 'TX_NO_CTG' as const, + /** 사업파트너세금번호 */ + BIZ_PTNR_TX_NO: 'BIZ_PTNR_TX_NO' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_MAT_BSE: { + /** 자재번호 */ + MAT_NO: 'MAT_NO' as const, + /** SM코드 */ + SM_CD: 'SM_CD' as const, + /** 자재ID */ + MAT_ID: 'MAT_ID' as const, + /** 클래스코드 */ + CLAS_CD: 'CLAS_CD' as const, + /** 자재유형 */ + MAT_TP: 'MAT_TP' as const, + /** 자재구분 */ + MAT_GB: 'MAT_GB' as const, + /** 자재내역 */ + MAT_DTL: 'MAT_DTL' as const, + /** 자재내역사양 */ + MAT_DTL_SPEC: 'MAT_DTL_SPEC' as const, + /** 재질 */ + MATL: 'MATL' as const, + /** 구자재번호 */ + OLD_MAT_NO: 'OLD_MAT_NO' as const, + /** 대체자재번호 */ + SBST_MAT_NO: 'SBST_MAT_NO' as const, + /** 단위 */ + UOM: 'UOM' as const, + /** 제품군 */ + PDT_GRP: 'PDT_GRP' as const, + /** MRC */ + MRC: 'MRC' as const, + /** 저장자재지시자 */ + STOR_MAT_ORDR: 'STOR_MAT_ORDR' as const, + /** 강종 */ + STYPE: 'STYPE' as const, + /** 선급 */ + CLS: 'CLS' as const, + /** 중량 */ + WGT: 'WGT' as const, + /** 고유중량 */ + NET_WGT: 'NET_WGT' as const, + /** 중량단위 */ + WGT_UOM: 'WGT_UOM' as const, + /** 길이 */ + LTH: 'LTH' as const, + /** 길이2 */ + LTH_2: 'LTH_2' as const, + /** 폭 */ + WTH: 'WTH' as const, + /** 폭2 */ + WTH_2: 'WTH_2' as const, + /** 두께 */ + THK: 'THK' as const, + /** 규격 */ + STD: 'STD' as const, + /** 형강규격 */ + PROF_STD: 'PROF_STD' as const, + /** CABLE바깥지름 */ + CBL_OUT_DIA: 'CBL_OUT_DIA' as const, + /** LTRM_MAT_YN */ + LTRM_MAT_YN: 'LTRM_MAT_YN' as const, + /** 도장면적 */ + PNT_AREA: 'PNT_AREA' as const, + /** 도장내부면적 */ + PNTIN_AREA: 'PNTIN_AREA' as const, + /** 도장내부사양 */ + PNTIN_SPEC: 'PNTIN_SPEC' as const, + /** 도장외부면적 */ + PNTOUT_AREA: 'PNTOUT_AREA' as const, + /** 도장외부사양1 */ + PNTOUT_SPEC_1: 'PNTOUT_SPEC_1' as const, + /** 도장외부사양2 */ + PNTOUT_SPEC_2: 'PNTOUT_SPEC_2' as const, + /** 도장외부사양3 */ + PNTOUT_SPEC_3: 'PNTOUT_SPEC_3' as const, + /** RT검사사양 */ + RT_INSPEC: 'RT_INSPEC' as const, + /** UT검사사양 */ + UT_INSPEC: 'UT_INSPEC' as const, + /** MT검사사양 */ + MT_INSPEC: 'MT_INSPEC' as const, + /** PT검사사양 */ + PT_INSPEC: 'PT_INSPEC' as const, + /** 제작도면번호 */ + MK_DWG_NO: 'MK_DWG_NO' as const, + /** 가공도면번호 */ + CUT_DWG_NO: 'CUT_DWG_NO' as const, + /** 배관SPOOL번호 */ + PIPE_SPL_NO: 'PIPE_SPL_NO' as const, + /** 배관LINE번호 */ + PIPE_LINE_NO: 'PIPE_LINE_NO' as const, + /** 배관클래스 */ + PIPE_CLAS: 'PIPE_CLAS' as const, + /** 유체종류 */ + FLUID_KND: 'FLUID_KND' as const, + /** 대표품명재질 */ + REP_ITM_MATL: 'REP_ITM_MATL' as const, + /** 대표지름 */ + REP_DIA: 'REP_DIA' as const, + /** 대표지름단위 */ + REP_DIA_UOM: 'REP_DIA_UOM' as const, + /** 대표스케쥴 */ + REP_SCH: 'REP_SCH' as const, + /** 대표지름길이 */ + REP_DIA_LTH: 'REP_DIA_LTH' as const, + /** 직곡관구분 */ + DBLN_GB: 'DBLN_GB' as const, + /** 배관등급 */ + PIPE_GRD: 'PIPE_GRD' as const, + /** 열처리유무 */ + HTRET_YN: 'HTRET_YN' as const, + /** 선후도금사양 */ + BA_GALV_SPEC: 'BA_GALV_SPEC' as const, + /** SHIPSIDE여부 */ + SSIDE_YN: 'SSIDE_YN' as const, + /** 관통관여부 */ + PNTR_PIPE_YN: 'PNTR_PIPE_YN' as const, + /** UBOLT유무 */ + UBOLT_YN: 'UBOLT_YN' as const, + /** 조정관선행도장 */ + CTLP_PRCD_PNT: 'CTLP_PRCD_PNT' as const, + /** 선행후행조정관 */ + PRCD_SCV_CTLP: 'PRCD_SCV_CTLP' as const, + /** PMI검사사양 */ + PMI_INSPEC: 'PMI_INSPEC' as const, + /** 수압 */ + WTRPRS: 'WTRPRS' as const, + /** VALVEFITTING번호 */ + VLV_FIT_NO: 'VLV_FIT_NO' as const, + /** TAG번호 */ + TAG_NO: 'TAG_NO' as const, + /** TAGSUB번호 */ + TAG_SB_NO: 'TAG_SB_NO' as const, + /** 네임플레이트유형 */ + NM_PLATE_TP: 'NM_PLATE_TP' as const, + /** 네임플레이트서비스명 */ + NM_PLATE_SVC_NM: 'NM_PLATE_SVC_NM' as const, + /** VRCS자재번호 */ + VRCS_MAT_NO: 'VRCS_MAT_NO' as const, + /** TRANSMITTERFITTING번호 */ + TRSM_FIT_NO: 'TRSM_FIT_NO' as const, + /** VALVE옵션코드리스트 */ + VLV_OPT_CD_LIST: 'VLV_OPT_CD_LIST' as const, + /** 구매요청번호 */ + PUR_REQ_NO: 'PUR_REQ_NO' as const, + /** ITEM번호 */ + ITM_NO: 'ITM_NO' as const, + /** 모델번호 */ + MDL_NO: 'MDL_NO' as const, + /** BL번호 */ + BL_NO: 'BL_NO' as const, + /** 업체장비번호 */ + VNDR_EQP_NO: 'VNDR_EQP_NO' as const, + /** BOX번호 */ + BOX_NO: 'BOX_NO' as const, + /** 자재운송관리번호 */ + MMT_NO: 'MMT_NO' as const, + /** 설치위치 */ + INSTL_LOC: 'INSTL_LOC' as const, + /** 메인장비여부 */ + MN_EQP_YN: 'MN_EQP_YN' as const, + /** 체결재여부 */ + FIXED_MAT_YN: 'FIXED_MAT_YN' as const, + /** SPARE여부 */ + SPRE_YN: 'SPRE_YN' as const, + /** TOOL여부 */ + TOOL_YN: 'TOOL_YN' as const, + /** CABLE여부 */ + CBL_YN: 'CBL_YN' as const, + /** 선주설치자재여부 */ + OWN_INSTL_MAT_YN: 'OWN_INSTL_MAT_YN' as const, + /** 비설치자재여부 */ + NONINSTL_MAT_YN: 'NONINSTL_MAT_YN' as const, + /** 블록번호 */ + BLK_NO: 'BLK_NO' as const, + /** 계열 */ + GYEL: 'GYEL' as const, + /** 연결부재번호 */ + LNK_PTLST_NO: 'LNK_PTLST_NO' as const, + /** 면적 */ + AREA: 'AREA' as const, + /** 저장위치 */ + STOR_LOC: 'STOR_LOC' as const, + /** 사급중량 */ + SGUB_WGT: 'SGUB_WGT' as const, + /** 도급중량 */ + DGUB_WGT: 'DGUB_WGT' as const, + /** 프로젝트번호 */ + PROJ_NO: 'PROJ_NO' as const, + /** 설계기능 */ + DSN_SKL: 'DSN_SKL' as const, + /** 비고 */ + RMK: 'RMK' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** 삭제일자 */ + DEL_DT: 'DEL_DT' as const, + /** 자재상태 */ + MAT_STAT: 'MAT_STAT' as const, + /** 인터페이스시스템번호 */ + IF_SYS_NO: 'IF_SYS_NO' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** GLAND사양1 */ + GLAND_SPEC_1: 'GLAND_SPEC_1' as const, + /** GLAND사양2 */ + GLAND_SPEC_2: 'GLAND_SPEC_2' as const, + /** GLAND사양3 */ + GLAND_SPEC_3: 'GLAND_SPEC_3' as const, + /** MCT모듈규격1 */ + MCT_MDLE_STD_1: 'MCT_MDLE_STD_1' as const, + /** MCT모듈규격2 */ + MCT_MDLE_STD_2: 'MCT_MDLE_STD_2' as const, + /** BEELERISE */ + BEELE_RISE: 'BEELE_RISE' as const, + /** 최대DRUM길이 */ + MAX_DRUM_LTH: 'MAX_DRUM_LTH' as const, + /** 승인일시 */ + AGR_DTM: 'AGR_DTM' as const, + /** 승인자ID */ + AGR_R_ID: 'AGR_R_ID' as const, + /** DISCIPLINE */ + DISPLN: 'DISPLN' as const, + /** 대공종 */ + LRG_KWK: 'LRG_KWK' as const, + /** 세부공종 */ + DTL_KWK: 'DTL_KWK' as const, + /** 특별검사구분 */ + SP_INSP_GB: 'SP_INSP_GB' as const, + /** 도장외부사양4 */ + PNTOUT_SPEC_4: 'PNTOUT_SPEC_4' as const, + /** OFE자재번호 */ + OFE_MAT_NO: 'OFE_MAT_NO' as const, + /** OFE케이블여부 */ + OFE_CAB_YN: 'OFE_CAB_YN' as const, + /** 포설가능개수 */ + INSTL_PSB_CNT: 'INSTL_PSB_CNT' as const, + /** 태선세선구분 */ + CUTL_ML_GB: 'CUTL_ML_GB' as const, + /** FCM검사 */ + FCM_INSP: 'FCM_INSP' as const, + /** 서류번호 */ + DOC_NO: 'DOC_NO' as const, + /** 보류원인 */ + HOLD_CAUS: 'HOLD_CAUS' as const, + /** 보류일자 */ + HOLD_DT: 'HOLD_DT' as const, + /** NULL */ + HOLD_LIFT_DT: 'HOLD_LIFT_DT' as const, + /** 자재종류구분 */ + MAT_KND_GB: 'MAT_KND_GB' as const, + /** BATCH관리지시자 */ + BATCH_MNG_ORDR: 'BATCH_MNG_ORDR' as const, + /** 최초입력자ID */ + FS_INPR_ID: 'FS_INPR_ID' as const, + /** 최초입력일시 */ + FS_INP_DTM: 'FS_INP_DTM' as const, + /** 최종수정자ID */ + FIN_CHGR_ID: 'FIN_CHGR_ID' as const, + /** 최종수정일시 */ + FIN_CHG_DTM: 'FIN_CHG_DTM' as const, + /** NULL */ + DWG_FILE_NM: 'DWG_FILE_NM' as const, + /** NULL */ + TAG_NO_CHG_DT: 'TAG_NO_CHG_DT' as const, + /** SUB장비여부 */ + SUB_EQP_YN: 'SUB_EQP_YN' as const, + /** 부속자재여부 */ + ATT_MAT_YN: 'ATT_MAT_YN' as const, + /** 설계계정번호 */ + DSN_REV_NO: 'DSN_REV_NO' as const, + /** 사용자정의필드1 */ + USR_DF_CHAR1: 'USR_DF_CHAR1' as const, + /** 인도선적품여부(DL_SHIPMT_ITM_YN) */ + USR_DF_CHAR2: 'USR_DF_CHAR2' as const, + /** 사용자정의필드3 */ + USR_DF_CHAR3: 'USR_DF_CHAR3' as const, + /** 사용자정의필드4 */ + USR_DF_CHAR4: 'USR_DF_CHAR4' as const, + /** 변경이력 */ + USR_DF_CHAR5: 'USR_DF_CHAR5' as const, + }, + CMCTB_MAT_CLAS: { + /** 클래스코드 */ + CLAS_CD: 'CLAS_CD' as const, + /** 클래스명 */ + CLAS_NM: 'CLAS_NM' as const, + /** 클래스내역 */ + CLAS_DTL: 'CLAS_DTL' as const, + /** 부모클래스코드 */ + PRNT_CLAS_CD: 'PRNT_CLAS_CD' as const, + /** 클래스레벨 */ + CLAS_LVL: 'CLAS_LVL' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** 단위 */ + UOM: 'UOM' as const, + /** 강종 */ + STYPE: 'STYPE' as const, + /** 등급재질 */ + GRD_MATL: 'GRD_MATL' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 기준단위 */ + BSE_UOM: 'BSE_UOM' as const, + }, + CMCTB_MAT_CLAS_SPCHAR: { + /** 클래스코드 */ + CLAS_CD: 'CLAS_CD' as const, + /** 특성코드 */ + SPCHAR_CD: 'SPCHAR_CD' as const, + /** 특선순서 */ + SPCHAR_SEQ: 'SPCHAR_SEQ' as const, + /** 필수여부 */ + MNDT_YN: 'MNDT_YN' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + }, + CMCTB_MAT_DSC: { + /** 자재번호 */ + MAT_NO: 'MAT_NO' as const, + /** 언어키 */ + LANG_KEY: 'LANG_KEY' as const, + /** 자재내역 */ + MAT_DTL: 'MAT_DTL' as const, + }, + CMCTB_MAT_PLNT: { + /** 자재번호 */ + MAT_NO: 'MAT_NO' as const, + /** 플랜트 */ + PLNT: 'PLNT' as const, + /** 출고단위 */ + DELV_UOM: 'DELV_UOM' as const, + /** 개별일괄소요구분 */ + EA_BTCH_ND_GB: 'EA_BTCH_ND_GB' as const, + /** 조달분류 */ + PRCR_CLF: 'PRCR_CLF' as const, + /** 구매담당자코드 */ + PUR_CHRGR_CD: 'PUR_CHRGR_CD' as const, + /** 조달담당자코드 */ + PRCR_CHRGR_CD: 'PRCR_CHRGR_CD' as const, + /** 현물담당자코드 */ + GOODS_CHRGR_CD: 'GOODS_CHRGR_CD' as const, + /** 구매리드타임 */ + PUR_LT: 'PUR_LT' as const, + /** MRP유형 */ + MRP_TP: 'MRP_TP' as const, + /** 자재상태 */ + MAT_STAT: 'MAT_STAT' as const, + /** 벌크자재지시자 */ + BULK_MAT_ORDR: 'BULK_MAT_ORDR' as const, + /** 조달유형 */ + PRCR_TP: 'PRCR_TP' as const, + /** 안전재고수량 */ + SFTY_STCK_QTY: 'SFTY_STCK_QTY' as const, + /** 일련번호프로파일 */ + SER_PROF: 'SER_PROF' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** BATCH관리지시자 */ + BATCH_MNG_ORDR: 'BATCH_MNG_ORDR' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 특별조달유형 */ + SP_PRCR_TP: 'SP_PRCR_TP' as const, + }, + CMCTB_MAT_SPCHAR: { + /** 자재번호 */ + MAT_NO: 'MAT_NO' as const, + /** 특성코드 */ + SPCHAR_CD: 'SPCHAR_CD' as const, + /** 특성내역 */ + SPCHAR_DTL: 'SPCHAR_DTL' as const, + /** 특성값코드 */ + SPCHAR_VAL_CD: 'SPCHAR_VAL_CD' as const, + /** 특성값내역 */ + SPCHAR_VAL_DTL: 'SPCHAR_VAL_DTL' as const, + /** 특성값넘버 */ + SPCHAR_VAL_NUM: 'SPCHAR_VAL_NUM' as const, + /** 특성값단위 */ + SPCHAR_VAL_UOM: 'SPCHAR_VAL_UOM' as const, + }, + CMCTB_MAT_SPCHAR_MAST: { + /** 특성코드 */ + SPCHAR_CD: 'SPCHAR_CD' as const, + /** 특성내역 */ + SPCHAR_DTL: 'SPCHAR_DTL' as const, + /** 특성타입 */ + SPCHAR_TP: 'SPCHAR_TP' as const, + /** 특성값단위 */ + SPCHAR_VAL_UOM: 'SPCHAR_VAL_UOM' as const, + /** 특성값여부 */ + SPCHAR_VAL_YN: 'SPCHAR_VAL_YN' as const, + /** 특성그룹 */ + SPCHAR_GRP: 'SPCHAR_GRP' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + }, + CMCTB_MAT_SPCHAR_VAL: { + /** 특성코드 */ + SPCHAR_CD: 'SPCHAR_CD' as const, + /** 특성값코드 */ + SPCHAR_VAL_CD: 'SPCHAR_VAL_CD' as const, + /** 특성값내역 */ + SPCHAR_VAL_DTL: 'SPCHAR_VAL_DTL' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + }, + CMCTB_MAT_UOM: { + /** 자재번호 */ + MAT_NO: 'MAT_NO' as const, + /** 대체단위 */ + SBST_UOM: 'SBST_UOM' as const, + /** 전환 FOCTOR1 */ + CNVRT_FCTR_1: 'CNVRT_FCTR_1' as const, + /** 전환 FOCTOR2 */ + CNVRT_FCTR_2: 'CNVRT_FCTR_2' as const, + /** 길이 */ + LTH: 'LTH' as const, + /** 폭 */ + WTH: 'WTH' as const, + /** 높이 */ + HGT: 'HGT' as const, + /** 치수단위 */ + SZ_UOM: 'SZ_UOM' as const, + }, + CMCTB_PROJ_BIZCLS: { + /** 프로젝트번호 */ + PROJ_NO: 'PROJ_NO' as const, + /** TYPE */ + TYPE: 'TYPE' as const, + /** 비지니스클래스 */ + BIZCLS: 'BIZCLS' as const, + /** NULL */ + QM_CLS: 'QM_CLS' as const, + /** 신규MC여부 */ + NEW_MC_YN: 'NEW_MC_YN' as const, + }, + CMCTB_PROJ_MAST: { + /** 프로젝트번호 */ + PROJ_NO: 'PROJ_NO' as const, + /** 기준호선 */ + MSHIP_NO: 'MSHIP_NO' as const, + /** 시리즈첫프로젝트번호 */ + SERS_NO: 'SERS_NO' as const, + /** 시리즈번호 */ + REF_NO: 'REF_NO' as const, + /** 선종 */ + SKND: 'SKND' as const, + /** 선형 */ + SHTYPE: 'SHTYPE' as const, + /** 선형단위 */ + SHTYPE_UOM: 'SHTYPE_UOM' as const, + /** 도크 */ + DOCK_CD: 'DOCK_CD' as const, + /** 선주1 */ + OWN_1: 'OWN_1' as const, + /** 선급1 */ + CLS_1: 'CLS_1' as const, + /** 계약일자 */ + CNRT_DT: 'CNRT_DT' as const, + /** 계약인도일자 */ + CNRT_DL_DT: 'CNRT_DL_DT' as const, + /** 프로젝트 설명 */ + PROJ_DSC: 'PROJ_DSC' as const, + /** 프로젝트구분 */ + PROJ_GB: 'PROJ_GB' as const, + /** 선주명 */ + OWN_NM: 'OWN_NM' as const, + /** 신선종2 */ + NEW_SKND2: 'NEW_SKND2' as const, + /** 선주약어 */ + OWN_AB: 'OWN_AB' as const, + /** 중국여부 */ + CHINA_YN: 'CHINA_YN' as const, + /** 프로젝트세부타입 */ + PROJ_DTL_TP: 'PROJ_DTL_TP' as const, + /** 프로젝트프로파일 */ + PROJ_PROF: 'PROJ_PROF' as const, + /** 안건번호 */ + INQY_NO: 'INQY_NO' as const, + /** 안건순번 */ + INQY_SEQ: 'INQY_SEQ' as const, + /** 국적 */ + NTTP: 'NTTP' as const, + /** 연관프로젝트 */ + RLTD_PROJ: 'RLTD_PROJ' as const, + /** 디지털제품군 */ + DIGT_PDT_GRP: 'DIGT_PDT_GRP' as const, + /** 풍력프로젝트타입 */ + WP_PROJ_TP: 'WP_PROJ_TP' as const, + /** 전체계약개수 */ + TOT_CNRT_CNT: 'TOT_CNRT_CNT' as const, + /** 프로젝트기타타입 */ + PROJ_ETC_TP: 'PROJ_ETC_TP' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 소스시스템ID */ + SRC_SYS_ID: 'SRC_SYS_ID' as const, + /** 진행상태 */ + PRGS_STAT: 'PRGS_STAT' as const, + /** 삭제여부 */ + DEL_YN: 'DEL_YN' as const, + /** 인도고객코드 */ + DL_CSTM_CD: 'DL_CSTM_CD' as const, + /** 제품레벨4 */ + PDT_LVL_4: 'PDT_LVL_4' as const, + /** AS보증기간 */ + AS_GRNT_PRD: 'AS_GRNT_PRD' as const, + /** 실인도일자 */ + RL_DL_DT: 'RL_DL_DT' as const, + /** SAILAWAYDATE */ + SA_DT: 'SA_DT' as const, + /** 관청 */ + GOV: 'GOV' as const, + /** 인도전공사명 */ + DL_BF_PROJ_NM: 'DL_BF_PROJ_NM' as const, + /** IMO번호 */ + IMO_NO: 'IMO_NO' as const, + /** 유통경로 */ + DIST_PATH: 'DIST_PATH' as const, + /** 영업조직코드 */ + SALE_ORG_CD: 'SALE_ORG_CD' as const, + /** 판매그룹 */ + SALE_GRP: 'SALE_GRP' as const, + /** 사업장코드 */ + BIZLOC_CD: 'BIZLOC_CD' as const, + /** 관리회계영역 */ + MNG_ACOT_DMN: 'MNG_ACOT_DMN' as const, + /** 회사코드 */ + CO_CD: 'CO_CD' as const, + /** 사업영역 */ + BIZ_DMN: 'BIZ_DMN' as const, + /** 플랜트코드 */ + PLNT_CD: 'PLNT_CD' as const, + /** 손익센터 */ + PRCTR: 'PRCTR' as const, + /** 계약존속여부 */ + CNRT_CNTN_YN: 'CNRT_CNTN_YN' as const, + /** 계약유보여부 */ + CNRT_RESV_YN: 'CNRT_RESV_YN' as const, + /** 프로젝트진행여부 */ + PROJ_PRGS_YN: 'PROJ_PRGS_YN' as const, + /** 시스템회계마감일자 */ + SYS_ACOT_CLSD_DT: 'SYS_ACOT_CLSD_DT' as const, + /** 프로젝트범위 */ + PROJ_SCP: 'PROJ_SCP' as const, + /** 전길이 */ + LOA: 'LOA' as const, + /** MAINENGINETYPECODE */ + MN_ENGN_TP_CD: 'MN_ENGN_TP_CD' as const, + /** 속도 */ + SPD: 'SPD' as const, + /** GT */ + GT: 'GT' as const, + /** 선표인도일자 */ + BP_DL_DT: 'BP_DL_DT' as const, + /** 선형군 */ + SHTYPE_GRP: 'SHTYPE_GRP' as const, + /** 프로젝트생성요청사번 */ + PROJ_CRTE_REQ_EMPNO: 'PROJ_CRTE_REQ_EMPNO' as const, + /** 프로젝트생성요청일자 */ + PROJ_CRTE_REQ_DT: 'PROJ_CRTE_REQ_DT' as const, + /** 사내외구분 */ + IO_GB: 'IO_GB' as const, + /** 고객발주번호 */ + CSTM_PO_NO: 'CSTM_PO_NO' as const, + /** 세대개수 */ + GENT_CNT: 'GENT_CNT' as const, + /** 주문주보증기간 */ + ORDR_GRNT_PRD: 'ORDR_GRNT_PRD' as const, + /** 주문주보증종료일 */ + ORDR_GRNT_FN_DT: 'ORDR_GRNT_FN_DT' as const, + /** 설계담당자 */ + DSN_CHRGR: 'DSN_CHRGR' as const, + /** 인도후공사명 */ + DL_AF_PROJ_NM: 'DL_AF_PROJ_NM' as const, + /** 인도후실고객사 */ + DL_AF_RL_CLNT: 'DL_AF_RL_CLNT' as const, + /** 인도후운항선사 */ + DL_AF_SHPSRV_SCP: 'DL_AF_SHPSRV_SCP' as const, + /** 인도후국적 */ + DL_AF_NTTP: 'DL_AF_NTTP' as const, + /** 인도후선급 */ + DL_AF_CLS: 'DL_AF_CLS' as const, + /** 인도후CALLSIGN */ + DL_AF_CALL_SIGN: 'DL_AF_CALL_SIGN' as const, + /** 인도후전화번호 */ + DL_AF_TEL_NO: 'DL_AF_TEL_NO' as const, + /** 인도후팩스번호 */ + DL_AF_FAX_NO: 'DL_AF_FAX_NO' as const, + /** 인도후이메일주소 */ + DL_AF_EMAIL_ADR: 'DL_AF_EMAIL_ADR' as const, + /** 프로젝트WBS타입 */ + PROJ_WBS_TP: 'PROJ_WBS_TP' as const, + /** INTERFACE상태 */ + XSTAT: 'XSTAT' as const, + /** INTERFACE메세지 */ + XMSGS: 'XMSGS' as const, + /** INTERFACE일자 */ + XDATS: 'XDATS' as const, + /** INTERFACE시간 */ + XTIMS: 'XTIMS' as const, + /** 중국프로젝트타입 */ + CHN_PROJ_TP: 'CHN_PROJ_TP' as const, + /** 최종수요자 보증종료일 */ + FIN_GRNT_FN_DT: 'FIN_GRNT_FN_DT' as const, + /** 시작일자 */ + STDT: 'STDT' as const, + /** 시리즈여부 */ + SERS_YN: 'SERS_YN' as const, + /** HULL TOP 구분 */ + TYPE: 'TYPE' as const, + /** PROPOSAL 프로젝트번호 */ + PRO_PROJ_NO: 'PRO_PROJ_NO' as const, + /** 전기전자프로젝트번호 */ + PBSD_PROJ_NO: 'PBSD_PROJ_NO' as const, + /** 선박명 */ + PBSD_SHIP_NM: 'PBSD_SHIP_NM' as const, + /** 사업부 */ + BIZCLS: 'BIZCLS' as const, + /** 선급2 */ + CLS_2: 'CLS_2' as const, + /** 선형코드 */ + SHTYPE_CD: 'SHTYPE_CD' as const, + /** 프로젝트 인도계획일 */ + PROJ_DL_PLN_DT: 'PROJ_DL_PLN_DT' as const, + /** 프로젝트 인도실적일 */ + PROJ_DL_RT_DT: 'PROJ_DL_RT_DT' as const, + /** 전체면적 */ + TOT_AREA: 'TOT_AREA' as const, + /** 면세면적 */ + EXMPT_AREA: 'EXMPT_AREA' as const, + /** 면세율 */ + EXMPT_RAT: 'EXMPT_RAT' as const, + /** 품질사업부 */ + QM_CLS: 'QM_CLS' as const, + /** 연계 프로젝트 번호 */ + CNCT_PROJ_NO: 'CNCT_PROJ_NO' as const, + /** 기자재 세분화 및 생산일정 연계여부 */ + EQP_DTL_YN: 'EQP_DTL_YN' as const, + /** ExP 연계여부 */ + EXP_YN: 'EXP_YN' as const, + /** 생산실적 연계여부 */ + ACT_MH_YN: 'ACT_MH_YN' as const, + /** 사양 */ + SPEC: 'SPEC' as const, + /** 디자인수명 */ + DSGN_LIFE: 'DSGN_LIFE' as const, + /** 신규MC여부 */ + NEW_MC_YN: 'NEW_MC_YN' as const, + /** 작업환경가중치여부 */ + WK_ENV_WT_VAL_YN: 'WK_ENV_WT_VAL_YN' as const, + /** 보증시작일 */ + GRNT_STDT: 'GRNT_STDT' as const, + /** 목표공수 적용 여부 */ + TMH_ADPT_YN: 'TMH_ADPT_YN' as const, + /** ZVEZDA 프로젝트 여부 */ + ZV_YN: 'ZV_YN' as const, + /** 평택지원 프로젝트 여부 */ + SEC_YN: 'SEC_YN' as const, + }, + CMCTB_PROJ_WBS: { + /** 프로젝트번호 */ + PROJ_NO: 'PROJ_NO' as const, + /** WBS요소 */ + WBS_ELMT: 'WBS_ELMT' as const, + /** WBS요소명 */ + WBS_ELMT_NM: 'WBS_ELMT_NM' as const, + /** WBS레벨 */ + WBS_LVL: 'WBS_LVL' as const, + /** FLAG */ + FLAG: 'FLAG' as const, + /** WBS내부요소 */ + WBS_INSD_ELMT: 'WBS_INSD_ELMT' as const, + /** 상위WBS요소 */ + HGRK_WBS_ELMT: 'HGRK_WBS_ELMT' as const, + /** INTERFACE상태 */ + XSTAT: 'XSTAT' as const, + /** INTERFACE메세지 */ + XMSGS: 'XMSGS' as const, + /** INTERFACE일자 */ + XDATS: 'XDATS' as const, + /** INTERFACE시간 */ + XTIMS: 'XTIMS' as const, + /** 시스템상태 */ + SYS_STAT: 'SYS_STAT' as const, + /** WBS요소_1 */ + WBS_ELMT_1: 'WBS_ELMT_1' as const, + /** WBS요소_2 */ + WBS_ELMT_2: 'WBS_ELMT_2' as const, + /** WBS요소_3 */ + WBS_ELMT_3: 'WBS_ELMT_3' as const, + /** WBS요소_4 */ + WBS_ELMT_4: 'WBS_ELMT_4' as const, + /** WBS요소_5 */ + WBS_ELMT_5: 'WBS_ELMT_5' as const, + /** WBS요소_6 */ + WBS_ELMT_6: 'WBS_ELMT_6' as const, + /** WBS요소_7 */ + WBS_ELMT_7: 'WBS_ELMT_7' as const, + /** WBS요소_8 */ + WBS_ELMT_8: 'WBS_ELMT_8' as const, + /** WBS요소_9 */ + WBS_ELMT_9: 'WBS_ELMT_9' as const, + /** WBS요소_10 */ + WBS_ELMT_10: 'WBS_ELMT_10' as const, + }, + CMCTB_VENDOR_ADDR: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 국제주소버전ID */ + INTL_ADR_VER_ID: 'INTL_ADR_VER_ID' as const, + /** 도시우편번호 */ + CITY_ZIP_NO: 'CITY_ZIP_NO' as const, + /** 사서함우편번호 */ + POBX_ZIP_NO: 'POBX_ZIP_NO' as const, + /** 주소1 */ + ADR_1: 'ADR_1' as const, + /** 주소2 */ + ADR_2: 'ADR_2' as const, + /** 지역코드 */ + REGN_CD: 'REGN_CD' as const, + /** 타이틀 */ + TTL: 'TTL' as const, + /** VENDOR명약어1 */ + VNDRNM_ABRV_1: 'VNDRNM_ABRV_1' as const, + /** VENDOR명약어2 */ + VNDRNM_ABRV_2: 'VNDRNM_ABRV_2' as const, + /** VENDOR명 */ + VNDRNM_1: 'VNDRNM_1' as const, + /** VENDOR명2 */ + VNDRNM_2: 'VNDRNM_2' as const, + /** 언어키 */ + LANG_KEY: 'LANG_KEY' as const, + /** 기타주소1 */ + ETC_ADR_1: 'ETC_ADR_1' as const, + /** 기타주소2 */ + ETC_ADR_2: 'ETC_ADR_2' as const, + /** 국가코드 */ + NTN_CD: 'NTN_CD' as const, + /** 사서함 */ + POBX: 'POBX' as const, + /** 운송구역 */ + TRANS_ZONE: 'TRANS_ZONE' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + /** VENDOR명3 */ + VNDRNM_3: 'VNDRNM_3' as const, + /** VENDOR명4 */ + VNDRNM_4: 'VNDRNM_4' as const, + /** 조세관할구역코드 */ + TAX_JRDT_ZONE_CD: 'TAX_JRDT_ZONE_CD' as const, + /** 주소시간대 */ + ADR_TMZ: 'ADR_TMZ' as const, + }, + CMCTB_VENDOR_COMPNY: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 회사코드 */ + CO_CD: 'CO_CD' as const, + /** 조정계정 */ + CTL_ACNT: 'CTL_ACNT' as const, + /** 정렬키 */ + SRT_KEY: 'SRT_KEY' as const, + /** 계획그룹 */ + PLN_GRP: 'PLN_GRP' as const, + /** 이전VENDOR코드 */ + BF_VNDRCD: 'BF_VNDRCD' as const, + /** 지급조건 */ + SPLY_COND: 'SPLY_COND' as const, + /** 중복송장지시자 */ + OVLAP_INVC_ORDR: 'OVLAP_INVC_ORDR' as const, + /** 지급방법 */ + SPLY_MTHD: 'SPLY_MTHD' as const, + /** 지급보류지시자 */ + SPLY_HOLD_ORDR: 'SPLY_HOLD_ORDR' as const, + /** 거래은행단축키 */ + TRD_BANK_SHRT_KEY: 'TRD_BANK_SHRT_KEY' as const, + /** 전기보류지시자 */ + PST_HOLD_ORDR: 'PST_HOLD_ORDR' as const, + /** 보류사유 */ + HOLD_CAUS: 'HOLD_CAUS' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** 원천세국가코드 */ + SRCE_TX_NTN_CD: 'SRCE_TX_NTN_CD' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + /** 소수지시자 */ + MIN_ORDR: 'MIN_ORDR' as const, + /** 분리지급지시자 */ + SPRT_SPLY_ORDR: 'SPRT_SPLY_ORDR' as const, + /** CUSTOMERVENDOR반제지시자 */ + CSTM_VNDR_CLR_ORDR: 'CSTM_VNDR_CLR_ORDR' as const, + /** 원천세코드 */ + SRCE_TX_CD: 'SRCE_TX_CD' as const, + /** IATABIC구분 */ + IATA_BIC_GB: 'IATA_BIC_GB' as const, + /** 대표유형 */ + REP_TP: 'REP_TP' as const, + /** 물류VENDOR유형 */ + LOGST_VNDR_TP: 'LOGST_VNDR_TP' as const, + /** VENDOR계정번호 */ + VNDR_ACNT_NO: 'VNDR_ACNT_NO' as const, + /** VENDOR담당자명 */ + VNDR_CHRGR_NM: 'VNDR_CHRGR_NM' as const, + /** 회계담당자전화번호 */ + ACOT_CHRGR_TELNO: 'ACOT_CHRGR_TELNO' as const, + /** 권한그룹 */ + AUTH_GRP: 'AUTH_GRP' as const, + /** 최종이자계산일자 */ + FIN_IR_CALC_DT: 'FIN_IR_CALC_DT' as const, + /** 최종이자실행일자 */ + FIN_IR_ACT_DT: 'FIN_IR_ACT_DT' as const, + /** 회계담당자FAX번호 */ + ACOT_CHRGR_FAXNO: 'ACOT_CHRGR_FAXNO' as const, + /** MAKER담당자이메일 */ + MK_CHRGR_EMAIL: 'MK_CHRGR_EMAIL' as const, + /** 메모 */ + MEMO: 'MEMO' as const, + /** 본사계정번호 */ + MOFFC_ACNT_NO: 'MOFFC_ACNT_NO' as const, + }, + CMCTB_VENDOR_GENERAL: { + /** 벤더코드 */ + VNDRCD: 'VNDRCD' as const, + /** 계정그룹 */ + ACNT_GRP: 'ACNT_GRP' as const, + /** 계정그룹종류 */ + ACNT_GRP_TP: 'ACNT_GRP_TP' as const, + /** 고객코드 */ + CSTM_CD: 'CSTM_CD' as const, + /** 전기보류지시자 */ + PST_HOLD_ORDR: 'PST_HOLD_ORDR' as const, + /** 구매보류지시자 */ + PUR_HOLD_ORDR: 'PUR_HOLD_ORDR' as const, + /** 보류사유 */ + HOLD_CAUS: 'HOLD_CAUS' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** 법인ID */ + CO_ID: 'CO_ID' as const, + /** 대표자명 */ + REPR_NM: 'REPR_NM' as const, + /** 사업유형 */ + BIZTP: 'BIZTP' as const, + /** 산업유형 */ + BIZCON: 'BIZCON' as const, + /** 등록일자 */ + REG_DT: 'REG_DT' as const, + /** 등록시간 */ + REG_DTM: 'REG_DTM' as const, + /** 등록자 */ + REGR_ID: 'REGR_ID' as const, + /** 승인일자 */ + AGR_DT: 'AGR_DT' as const, + /** 승인시간 */ + AGR_TM: 'AGR_TM' as const, + /** 승인자ID */ + AGR_R_ID: 'AGR_R_ID' as const, + /** 변경일자 */ + CHG_DT: 'CHG_DT' as const, + /** 변경시간 */ + CHG_TM: 'CHG_TM' as const, + /** 변경자ID */ + CHGR_ID: 'CHGR_ID' as const, + /** 국가코드 */ + NTN_CD: 'NTN_CD' as const, + /** 대표전화번호 */ + REP_TEL_NO: 'REP_TEL_NO' as const, + /** 대표FAX번호 */ + REP_FAX_NO: 'REP_FAX_NO' as const, + /** 사업자번호 */ + BIZR_NO: 'BIZR_NO' as const, + /** 법인등록번호 */ + CO_REG_NO: 'CO_REG_NO' as const, + /** 세금번호4 */ + TX_CD_4: 'TX_CD_4' as const, + /** 설립일자 */ + CO_INST_DT: 'CO_INST_DT' as const, + /** 구매처유형 */ + VNDR_TP: 'VNDR_TP' as const, + /** GLOBALTOP코드 */ + GBL_TOP_CD: 'GBL_TOP_CD' as const, + /** GLOBALTOP명 */ + GBL_TOP_NM: 'GBL_TOP_NM' as const, + /** 국내TOP코드 */ + DMST_TOP_CD: 'DMST_TOP_CD' as const, + /** 국내TOP명 */ + DMST_TOP_NM: 'DMST_TOP_NM' as const, + /** 사업단위코드 */ + BIZ_UOM_CD: 'BIZ_UOM_CD' as const, + /** 사업단위명 */ + BIZ_UOM_NM: 'BIZ_UOM_NM' as const, + /** DUNS번호 */ + DNS_NO: 'DNS_NO' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + /** 타이틀 */ + TTL: 'TTL' as const, + /** 부가세등록번호 */ + VAT_REG_NO: 'VAT_REG_NO' as const, + /** 지로VENDOR지시자 */ + GIRO_VNDR_ORDR: 'GIRO_VNDR_ORDR' as const, + /** Vendor명1 */ + VNDRNM_1: 'VNDRNM_1' as const, + /** VENDOR명2 */ + VNDRNM_2: 'VNDRNM_2' as const, + /** VENDOR명3 */ + VNDRNM_3: 'VNDRNM_3' as const, + /** VENDOR명4 */ + VNDRNM_4: 'VNDRNM_4' as const, + /** VENDOR명약어1 */ + VNDRNM_ABRV_1: 'VNDRNM_ABRV_1' as const, + /** VENDOR명약어2 */ + VNDRNM_ABRV_2: 'VNDRNM_ABRV_2' as const, + /** 잠재VENDOR코드 */ + PTNT_VNDRCD: 'PTNT_VNDRCD' as const, + /** 주소1 */ + ADR_1: 'ADR_1' as const, + /** 주소2 */ + ADR_2: 'ADR_2' as const, + /** 품질담당자명 */ + QLT_CHRGR_NM: 'QLT_CHRGR_NM' as const, + /** 품질담당자전화번호 */ + QLT_CHRGR_TELNO: 'QLT_CHRGR_TELNO' as const, + /** 품질담당자이메일 */ + QLT_CHRGR_EMAIL: 'QLT_CHRGR_EMAIL' as const, + /** SUB작업장순서 */ + SB_WKA_SEQ: 'SB_WKA_SEQ' as const, + /** 중복사유코드 */ + OVLAP_CAUS_CD: 'OVLAP_CAUS_CD' as const, + /** 문서유형 */ + DOC_TP: 'DOC_TP' as const, + /** 문서번호 */ + DOC_NO: 'DOC_NO' as const, + /** 부분문서 */ + PTN_DOC: 'PTN_DOC' as const, + /** 문서버전 */ + DOC_VER: 'DOC_VER' as const, + /** 인바운드플래그 */ + INB_FLAG: 'INB_FLAG' as const, + /** 삭제보류지시자 */ + DEL_HOLD_ORDR: 'DEL_HOLD_ORDR' as const, + /** 구매보류일자 */ + PUR_HOLD_DT: 'PUR_HOLD_DT' as const, + /** 사서함 */ + POBX: 'POBX' as const, + /** 국제LOCATION점검숫자 */ + INTL_LCTN_CHK_NUM: 'INTL_LCTN_CHK_NUM' as const, + /** 원천세의무자성별키 */ + SRCETX_RP_SEX_KEY: 'SRCETX_RP_SEX_KEY' as const, + /** VENDOR계약담당자1 */ + VNDR_CNRT_CHRGR_1: 'VNDR_CNRT_CHRGR_1' as const, + /** VENDOR계약담당자2 */ + VNDR_CNRT_CHRGR_2: 'VNDR_CNRT_CHRGR_2' as const, + /** 대표생년월일 */ + REPR_RESNO: 'REPR_RESNO' as const, + /** 기업규모 */ + CO_VLM: 'CO_VLM' as const, + }, + CMCTB_VENDOR_GRP: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 업무그룹코드 */ + BIZ_GRP_CD: 'BIZ_GRP_CD' as const, + /** 생성일자 */ + CRTE_DT: 'CRTE_DT' as const, + /** 생성시간 */ + CRTE_TM: 'CRTE_TM' as const, + /** 생성자ID */ + CRTER_ID: 'CRTER_ID' as const, + /** 변경일자 */ + CHG_DT: 'CHG_DT' as const, + /** 변경시간 */ + CHG_TM: 'CHG_TM' as const, + /** 변경자ID */ + CHGR_ID: 'CHGR_ID' as const, + }, + CMCTB_VENDOR_INCO: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** VENDOR코명 */ + VNDRNM: 'VNDRNM' as const, + /** 대표자명 */ + REPR_NM: 'REPR_NM' as const, + /** 협력사구분 */ + PRTNR_GB: 'PRTNR_GB' as const, + /** 사내협력사코드 */ + INCO_PRTNR_CD: 'INCO_PRTNR_CD' as const, + /** 사내협력사작업장1 */ + INCO_PRTNR_WKA_1: 'INCO_PRTNR_WKA_1' as const, + /** 사내협력사작업장2 */ + INCO_PRTNR_WKA_2: 'INCO_PRTNR_WKA_2' as const, + /** 사내협력사작업장3 */ + INCO_PRTNR_WKA_3: 'INCO_PRTNR_WKA_3' as const, + /** 직종코드 */ + JBTYPE_CD: 'JBTYPE_CD' as const, + /** 직종코드2 */ + JBTYPE_CD_2: 'JBTYPE_CD_2' as const, + /** 개인법인구분 */ + INDV_CO_GB: 'INDV_CO_GB' as const, + /** 사내창립유무 */ + INCO_FOND_YN: 'INCO_FOND_YN' as const, + /** 도크번호 */ + DOCK_NO: 'DOCK_NO' as const, + /** 당사투입일자 */ + OCMP_INP_DT: 'OCMP_INP_DT' as const, + /** 사내철수일자 */ + INCO_DUSE_DT: 'INCO_DUSE_DT' as const, + /** 산재보험요율 */ + INDST_INS_PMRAT: 'INDST_INS_PMRAT' as const, + /** 계약이행보증금 */ + CNRT_PFRM_GRAMT: 'CNRT_PFRM_GRAMT' as const, + /** 임금율 */ + WGE_RAT: 'WGE_RAT' as const, + /** 해당부서코드1 */ + CRSPD_DEPTCD_1: 'CRSPD_DEPTCD_1' as const, + /** 해당부서코드2 */ + CRSPD_DEPTCD_2: 'CRSPD_DEPTCD_2' as const, + /** 해당팀소속 */ + CRSPD_TEAM_BLNG: 'CRSPD_TEAM_BLNG' as const, + /** 사내협력사종목1 */ + INCO_PRTNR_ITM_1: 'INCO_PRTNR_ITM_1' as const, + /** 사내협력사종목2 */ + INCO_PRTNR_ITM_2: 'INCO_PRTNR_ITM_2' as const, + /** 사무실위치 */ + OFC_LOC: 'OFC_LOC' as const, + /** 대표당사경력 */ + REP_OCMP_CARR: 'REP_OCMP_CARR' as const, + /** 사내철수사유 */ + INCO_DUSE_CAUS: 'INCO_DUSE_CAUS' as const, + /** 전화번호 */ + TEL_NO: 'TEL_NO' as const, + /** 주소 */ + ADR1: 'ADR1' as const, + /** 상세주소 */ + ADR2: 'ADR2' as const, + /** 이전 VENDOR코드 */ + OLD_VNDRCD: 'OLD_VNDRCD' as const, + /** 하위 VENDOR 갯수 */ + TREE_NUM: 'TREE_NUM' as const, + /** 생성일자 */ + CRTE_DT: 'CRTE_DT' as const, + /** 생성시간 */ + CRTE_TM: 'CRTE_TM' as const, + /** 생성사용자ID */ + CRTE_USR_ID: 'CRTE_USR_ID' as const, + /** 수정일자 */ + CHG_DT: 'CHG_DT' as const, + /** 수정시간 */ + CHG_TM: 'CHG_TM' as const, + /** 수정사용자ID */ + CHG_USR_ID: 'CHG_USR_ID' as const, + /** 직종단가 */ + UPR_JBTYPE: 'UPR_JBTYPE' as const, + /** 공급받는자 종사업장 식별코드 */ + ZBYBP: 'ZBYBP' as const, + /** 비고 */ + RMK: 'RMK' as const, + /** 철수예정유무 */ + WDL_PLN_YN: 'WDL_PLN_YN' as const, + /** 임금체불발생 */ + WGE_DELY_DVL: 'WGE_DELY_DVL' as const, + /** 에스크로가입유무 */ + ESCROW_YN: 'ESCROW_YN' as const, + }, + CMCTB_VENDOR_PORG: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 구매조직 */ + PUR_ORG_CD: 'PUR_ORG_CD' as const, + /** 구매오더통화 */ + PUR_ORD_CUR: 'PUR_ORD_CUR' as const, + /** 지급조건 */ + SPLY_COND: 'SPLY_COND' as const, + /** 인도조건1 */ + DL_COND_1: 'DL_COND_1' as const, + /** 인도조건2 */ + DL_COND_2: 'DL_COND_2' as const, + /** 계산스키마그룹 */ + CALC_SHM_GRP: 'CALC_SHM_GRP' as const, + /** GR기준송장검증 */ + GR_BSE_INVC_VR: 'GR_BSE_INVC_VR' as const, + /** 자동구매오더지시자 */ + AT_PUR_ORD_ORDR: 'AT_PUR_ORD_ORDR' as const, + /** 구매보류지시자 */ + PUR_HOLD_ORDR: 'PUR_HOLD_ORDR' as const, + /** 삭제지시자 */ + DEL_ORDR: 'DEL_ORDR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + /** 오더확인요청지시자 */ + ORD_CNFM_REQ_ORDR: 'ORD_CNFM_REQ_ORDR' as const, + /** 영업담당자명 */ + SALE_CHRGR_NM: 'SALE_CHRGR_NM' as const, + /** VENDOR전화번호 */ + VNDR_TELNO: 'VNDR_TELNO' as const, + /** 확정제어키 */ + CNFM_CTL_KEY: 'CNFM_CTL_KEY' as const, + /** 구매보류일자 */ + PUR_HOLD_DT: 'PUR_HOLD_DT' as const, + /** 구매보류사유 */ + PUR_HOLD_CAUS: 'PUR_HOLD_CAUS' as const, + }, + CMCTB_VENDOR_REPREMAIL: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** 이메일주소 */ + EMAIL_ADR: 'EMAIL_ADR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_VENDOR_REPRFAX: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** 국가코드 */ + NTN_CD: 'NTN_CD' as const, + /** 팩스번호 */ + FAXNO: 'FAXNO' as const, + /** 팩스내선번호 */ + FAX_ETS_NO: 'FAX_ETS_NO' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_VENDOR_REPRTEL: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** 국가코드 */ + NTN_CD: 'NTN_CD' as const, + /** 전화번호 */ + TELNO: 'TELNO' as const, + /** 내선번호 */ + ETX_NO: 'ETX_NO' as const, + /** 핸드폰지시자 */ + HP_ORDR: 'HP_ORDR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_VENDOR_REPRURL: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 주소번호 */ + ADR_NO: 'ADR_NO' as const, + /** 대표자순번 */ + REPR_SER: 'REPR_SER' as const, + /** 유효시작일자 */ + VLD_ST_DT: 'VLD_ST_DT' as const, + /** URL */ + URL: 'URL' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_VENDOR_TAXNUM: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 세금번호범주 */ + TX_NO_CTG: 'TX_NO_CTG' as const, + /** 사업파트너세금번호 */ + BIZ_PTNR_TX_NO: 'BIZ_PTNR_TX_NO' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_VENDOR_VFPN: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 구매조직 */ + PUR_ORG_CD: 'PUR_ORG_CD' as const, + /** VENDOR서브번호 */ + VNDR_SUB_NO: 'VNDR_SUB_NO' as const, + /** 플랜트코드 */ + PLNT_CD: 'PLNT_CD' as const, + /** 파트너기능 */ + PTNR_SKL: 'PTNR_SKL' as const, + /** 파트너카운터 */ + PTNR_CNT: 'PTNR_CNT' as const, + /** 기타참조VENDOR코드 */ + ETC_REF_VNDRCD: 'ETC_REF_VNDRCD' as const, + /** 기본파트너지시자 */ + BSE_PTNR_ORDR: 'BSE_PTNR_ORDR' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + CMCTB_VENDOR_WHTHX: { + /** VENDOR코드 */ + VNDRCD: 'VNDRCD' as const, + /** 회사코드 */ + CO_CD: 'CO_CD' as const, + /** 원천세유형 */ + SRCE_TX_TP: 'SRCE_TX_TP' as const, + /** 원천세관련지시자 */ + SRCE_TX_REL_ORDR: 'SRCE_TX_REL_ORDR' as const, + /** 수취인유형 */ + RECIP_TP: 'RECIP_TP' as const, + /** 원천세식별번호 */ + SRCE_TX_IDENT_NO: 'SRCE_TX_IDENT_NO' as const, + /** 원천세코드 */ + SRCE_TX_NO: 'SRCE_TX_NO' as const, + /** 면제증명서번호 */ + DCHAG_CERT_NO: 'DCHAG_CERT_NO' as const, + /** 면제율 */ + DCHAG_RAT: 'DCHAG_RAT' as const, + /** 면제시작일자 */ + DCHAG_ST_DT: 'DCHAG_ST_DT' as const, + /** 면제종료일 */ + DCHAG_ED_DT: 'DCHAG_ED_DT' as const, + /** 면제사유 */ + DCHAG_CAUS: 'DCHAG_CAUS' as const, + /** 인터페이스일자 */ + IF_DT: 'IF_DT' as const, + /** 인터페이스시간 */ + IF_TM: 'IF_TM' as const, + /** 인터페이스상태 */ + IF_STAT: 'IF_STAT' as const, + /** 인터페이스메시지 */ + IF_MSG: 'IF_MSG' as const, + }, + PLFTB_ESTM_PROJ_MAST: { + /** 견적프로젝트번호 */ + ESTM_PROJ_NO: 'ESTM_PROJ_NO' as const, + /** 안건번호 */ + AGND_NO: 'AGND_NO' as const, + /** 견적프로젝트명 */ + ESTM_PROJ_NM: 'ESTM_PROJ_NM' as const, + /** 사업부문 */ + BIZ_CLS: 'BIZ_CLS' as const, + /** 리비젼번호 */ + REV_NO: 'REV_NO' as const, + /** 견적유형 */ + ESTM_TYPE: 'ESTM_TYPE' as const, + /** 선주사코드 */ + OWNER_CD: 'OWNER_CD' as const, + /** 시리즈순번 */ + SERS_CNT: 'SERS_CNT' as const, + /** 선종코드 */ + SKND_CD: 'SKND_CD' as const, + /** 선형코드 */ + SHTYPE_CD: 'SHTYPE_CD' as const, + /** 선형크기 */ + SHTYPE_SIZE: 'SHTYPE_SIZE' as const, + /** 선형단위 */ + SHTYPE_UOM: 'SHTYPE_UOM' as const, + /** 관청코드 */ + CHRTR_CD: 'CHRTR_CD' as const, + /** 국가코드 */ + NATN_CD: 'NATN_CD' as const, + /** 선급1 */ + CLS_1: 'CLS_1' as const, + /** 선급2 */ + CLS_2: 'CLS_2' as const, + /** 선급3 */ + CLS_3: 'CLS_3' as const, + /** 데이터생성구분 */ + DATA_CRTE_GB: 'DATA_CRTE_GB' as const, + /** 최초등록자ID */ + FS_INPR_ID: 'FS_INPR_ID' as const, + /** 최초등록일시 */ + FS_INP_DTM: 'FS_INP_DTM' as const, + /** 최종수정자ID */ + FIN_CHGR_ID: 'FIN_CHGR_ID' as const, + /** 최종수정일시 */ + FIN_CHG_DTM: 'FIN_CHG_DTM' as const, + /** VESSEL 평균값1 */ + VSL_VAG_1: 'VSL_VAG_1' as const, + /** VESSEL 평균값2 */ + VSL_VAG_2: 'VSL_VAG_2' as const, + /** VESSEL 평균값3 */ + VSL_VAG_3: 'VSL_VAG_3' as const, + /** VESSEL 평균값4 */ + VSL_VAG_4: 'VSL_VAG_4' as const, + /** 견적물량결재ID */ + ESTM_AOM_APP_ID: 'ESTM_AOM_APP_ID' as const, + /** 견적물량상태 */ + ESTM_AOM_STAT: 'ESTM_AOM_STAT' as const, + /** 견적물량상태변경자ID */ + ESTM_AOM_STAT_CHGR_ID: 'ESTM_AOM_STAT_CHGR_ID' as const, + /** 견적물량상태변경일시 */ + ESTM_AOM_STAT_CHG_DTM: 'ESTM_AOM_STAT_CHG_DTM' as const, + /** IF대상여부 */ + IF_TRGT_YN: 'IF_TRGT_YN' as const, + }, +} as const; + +// Database schema type for Knex +export interface DatabaseSchema { + CMCTB_CD: CMCTB_CD; + CMCTB_CDNM: CMCTB_CDNM; + CMCTB_CD_CLF: CMCTB_CD_CLF; + CMCTB_CD_CLF_NM: CMCTB_CD_CLF_NM; + CMCTB_CUSTOMER_ADDR: CMCTB_CUSTOMER_ADDR; + CMCTB_CUSTOMER_CFPN: CMCTB_CUSTOMER_CFPN; + CMCTB_CUSTOMER_COMPNY: CMCTB_CUSTOMER_COMPNY; + CMCTB_CUSTOMER_GENERAL: CMCTB_CUSTOMER_GENERAL; + CMCTB_CUSTOMER_REPREMAIL: CMCTB_CUSTOMER_REPREMAIL; + CMCTB_CUSTOMER_REPRFAX: CMCTB_CUSTOMER_REPRFAX; + CMCTB_CUSTOMER_REPRTEL: CMCTB_CUSTOMER_REPRTEL; + CMCTB_CUSTOMER_REPRURL: CMCTB_CUSTOMER_REPRURL; + CMCTB_CUSTOMER_SORG: CMCTB_CUSTOMER_SORG; + CMCTB_CUSTOMER_TAXCD: CMCTB_CUSTOMER_TAXCD; + CMCTB_CUSTOMER_TAXNUM: CMCTB_CUSTOMER_TAXNUM; + CMCTB_MAT_BSE: CMCTB_MAT_BSE; + CMCTB_MAT_CLAS: CMCTB_MAT_CLAS; + CMCTB_MAT_CLAS_SPCHAR: CMCTB_MAT_CLAS_SPCHAR; + CMCTB_MAT_DSC: CMCTB_MAT_DSC; + CMCTB_MAT_PLNT: CMCTB_MAT_PLNT; + CMCTB_MAT_SPCHAR: CMCTB_MAT_SPCHAR; + CMCTB_MAT_SPCHAR_MAST: CMCTB_MAT_SPCHAR_MAST; + CMCTB_MAT_SPCHAR_VAL: CMCTB_MAT_SPCHAR_VAL; + CMCTB_MAT_UOM: CMCTB_MAT_UOM; + CMCTB_PROJ_BIZCLS: CMCTB_PROJ_BIZCLS; + CMCTB_PROJ_MAST: CMCTB_PROJ_MAST; + CMCTB_PROJ_WBS: CMCTB_PROJ_WBS; + CMCTB_VENDOR_ADDR: CMCTB_VENDOR_ADDR; + CMCTB_VENDOR_COMPNY: CMCTB_VENDOR_COMPNY; + CMCTB_VENDOR_GENERAL: CMCTB_VENDOR_GENERAL; + CMCTB_VENDOR_GRP: CMCTB_VENDOR_GRP; + CMCTB_VENDOR_INCO: CMCTB_VENDOR_INCO; + CMCTB_VENDOR_PORG: CMCTB_VENDOR_PORG; + CMCTB_VENDOR_REPREMAIL: CMCTB_VENDOR_REPREMAIL; + CMCTB_VENDOR_REPRFAX: CMCTB_VENDOR_REPRFAX; + CMCTB_VENDOR_REPRTEL: CMCTB_VENDOR_REPRTEL; + CMCTB_VENDOR_REPRURL: CMCTB_VENDOR_REPRURL; + CMCTB_VENDOR_TAXNUM: CMCTB_VENDOR_TAXNUM; + CMCTB_VENDOR_VFPN: CMCTB_VENDOR_VFPN; + CMCTB_VENDOR_WHTHX: CMCTB_VENDOR_WHTHX; + PLFTB_ESTM_PROJ_MAST: PLFTB_ESTM_PROJ_MAST; +} + +// Table names constants (key-value pairs) +export const TableNames = { + CMCTB_CD: 'CMCTB_CD' as const, + CMCTB_CDNM: 'CMCTB_CDNM' as const, + CMCTB_CD_CLF: 'CMCTB_CD_CLF' as const, + CMCTB_CD_CLF_NM: 'CMCTB_CD_CLF_NM' as const, + CMCTB_CUSTOMER_ADDR: 'CMCTB_CUSTOMER_ADDR' as const, + CMCTB_CUSTOMER_CFPN: 'CMCTB_CUSTOMER_CFPN' as const, + CMCTB_CUSTOMER_COMPNY: 'CMCTB_CUSTOMER_COMPNY' as const, + CMCTB_CUSTOMER_GENERAL: 'CMCTB_CUSTOMER_GENERAL' as const, + CMCTB_CUSTOMER_REPREMAIL: 'CMCTB_CUSTOMER_REPREMAIL' as const, + CMCTB_CUSTOMER_REPRFAX: 'CMCTB_CUSTOMER_REPRFAX' as const, + CMCTB_CUSTOMER_REPRTEL: 'CMCTB_CUSTOMER_REPRTEL' as const, + CMCTB_CUSTOMER_REPRURL: 'CMCTB_CUSTOMER_REPRURL' as const, + CMCTB_CUSTOMER_SORG: 'CMCTB_CUSTOMER_SORG' as const, + CMCTB_CUSTOMER_TAXCD: 'CMCTB_CUSTOMER_TAXCD' as const, + CMCTB_CUSTOMER_TAXNUM: 'CMCTB_CUSTOMER_TAXNUM' as const, + CMCTB_MAT_BSE: 'CMCTB_MAT_BSE' as const, + CMCTB_MAT_CLAS: 'CMCTB_MAT_CLAS' as const, + CMCTB_MAT_CLAS_SPCHAR: 'CMCTB_MAT_CLAS_SPCHAR' as const, + CMCTB_MAT_DSC: 'CMCTB_MAT_DSC' as const, + CMCTB_MAT_PLNT: 'CMCTB_MAT_PLNT' as const, + CMCTB_MAT_SPCHAR: 'CMCTB_MAT_SPCHAR' as const, + CMCTB_MAT_SPCHAR_MAST: 'CMCTB_MAT_SPCHAR_MAST' as const, + CMCTB_MAT_SPCHAR_VAL: 'CMCTB_MAT_SPCHAR_VAL' as const, + CMCTB_MAT_UOM: 'CMCTB_MAT_UOM' as const, + CMCTB_PROJ_BIZCLS: 'CMCTB_PROJ_BIZCLS' as const, + CMCTB_PROJ_MAST: 'CMCTB_PROJ_MAST' as const, + CMCTB_PROJ_WBS: 'CMCTB_PROJ_WBS' as const, + CMCTB_VENDOR_ADDR: 'CMCTB_VENDOR_ADDR' as const, + CMCTB_VENDOR_COMPNY: 'CMCTB_VENDOR_COMPNY' as const, + CMCTB_VENDOR_GENERAL: 'CMCTB_VENDOR_GENERAL' as const, + CMCTB_VENDOR_GRP: 'CMCTB_VENDOR_GRP' as const, + CMCTB_VENDOR_INCO: 'CMCTB_VENDOR_INCO' as const, + CMCTB_VENDOR_PORG: 'CMCTB_VENDOR_PORG' as const, + CMCTB_VENDOR_REPREMAIL: 'CMCTB_VENDOR_REPREMAIL' as const, + CMCTB_VENDOR_REPRFAX: 'CMCTB_VENDOR_REPRFAX' as const, + CMCTB_VENDOR_REPRTEL: 'CMCTB_VENDOR_REPRTEL' as const, + CMCTB_VENDOR_REPRURL: 'CMCTB_VENDOR_REPRURL' as const, + CMCTB_VENDOR_TAXNUM: 'CMCTB_VENDOR_TAXNUM' as const, + CMCTB_VENDOR_VFPN: 'CMCTB_VENDOR_VFPN' as const, + CMCTB_VENDOR_WHTHX: 'CMCTB_VENDOR_WHTHX' as const, + PLFTB_ESTM_PROJ_MAST: 'PLFTB_ESTM_PROJ_MAST' as const, +} as const; + +// Table names array for synchronization +export const ALL_TABLE_NAMES: TableName[] = [ + 'CMCTB_CD', + 'CMCTB_CDNM', + 'CMCTB_CD_CLF', + 'CMCTB_CD_CLF_NM', + 'CMCTB_CUSTOMER_ADDR', + 'CMCTB_CUSTOMER_CFPN', + 'CMCTB_CUSTOMER_COMPNY', + 'CMCTB_CUSTOMER_GENERAL', + 'CMCTB_CUSTOMER_REPREMAIL', + 'CMCTB_CUSTOMER_REPRFAX', + 'CMCTB_CUSTOMER_REPRTEL', + 'CMCTB_CUSTOMER_REPRURL', + 'CMCTB_CUSTOMER_SORG', + 'CMCTB_CUSTOMER_TAXCD', + 'CMCTB_CUSTOMER_TAXNUM', + 'CMCTB_MAT_BSE', + 'CMCTB_MAT_CLAS', + 'CMCTB_MAT_CLAS_SPCHAR', + 'CMCTB_MAT_DSC', + 'CMCTB_MAT_PLNT', + 'CMCTB_MAT_SPCHAR', + 'CMCTB_MAT_SPCHAR_MAST', + 'CMCTB_MAT_SPCHAR_VAL', + 'CMCTB_MAT_UOM', + 'CMCTB_PROJ_BIZCLS', + 'CMCTB_PROJ_MAST', + 'CMCTB_PROJ_WBS', + 'CMCTB_VENDOR_ADDR', + 'CMCTB_VENDOR_COMPNY', + 'CMCTB_VENDOR_GENERAL', + 'CMCTB_VENDOR_GRP', + 'CMCTB_VENDOR_INCO', + 'CMCTB_VENDOR_PORG', + 'CMCTB_VENDOR_REPREMAIL', + 'CMCTB_VENDOR_REPRFAX', + 'CMCTB_VENDOR_REPRTEL', + 'CMCTB_VENDOR_REPRURL', + 'CMCTB_VENDOR_TAXNUM', + 'CMCTB_VENDOR_VFPN', + 'CMCTB_VENDOR_WHTHX', + 'PLFTB_ESTM_PROJ_MAST', +] as const; + +// 타입 헬퍼 +export type TableName = keyof typeof Table; +export type ColumnName<T extends TableName> = keyof typeof Table[T]; +export type TableRow<T extends TableName> = DatabaseSchema[T]; diff --git a/lib/oracle-db/nonsap/run-generate-schema.sh b/lib/oracle-db/nonsap/run-generate-schema.sh new file mode 100755 index 00000000..b2e215ae --- /dev/null +++ b/lib/oracle-db/nonsap/run-generate-schema.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# NonSAP Oracle to PostgreSQL 스키마 생성 스크립트 + +echo "🚀 NonSAP Oracle to PostgreSQL Schema Generation" +echo "================================================" + +# 현재 디렉토리 확인 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +echo "📍 Working directory: $SCRIPT_DIR" + +# CSV 파일 존재 확인 +if [ ! -f "1.table-and-columns-info.csv" ]; then + echo "❌ Error: 1.table-and-columns-info.csv not found" + exit 1 +fi + +echo "✅ Found CSV file: 1.table-and-columns-info.csv" + +# 1. Oracle TypeScript 타입 생성 +echo "" +echo "📝 Step 1: Generating Oracle TypeScript types..." +if command -v python3 &> /dev/null; then + python3 2.generate-oracle-types.py + if [ $? -eq 0 ]; then + echo "✅ Oracle TypeScript types generated successfully" + else + echo "❌ Failed to generate Oracle TypeScript types" + exit 1 + fi +else + echo "❌ Error: Python3 not found. Please install Python3" + exit 1 +fi + +# 2. PostgreSQL Drizzle 스키마 생성 +echo "" +echo "🐘 Step 2: Generating PostgreSQL Drizzle schema..." +if command -v npx &> /dev/null; then + npx tsx 3.generate-postgres-drizzle-schema.ts + if [ $? -eq 0 ]; then + echo "✅ PostgreSQL Drizzle schema generated successfully" + else + echo "❌ Failed to generate PostgreSQL Drizzle schema" + exit 1 + fi +else + echo "❌ Error: npx not found. Please install Node.js and npm" + exit 1 +fi + +echo "" +echo "🎉 Schema generation completed!" +echo "" +echo "📄 Generated files:" +echo " - oracle-schema.ts (TypeScript types)" +echo " - schema.ts (Drizzle schema)" +echo "" +echo "💡 Usage:" +echo " import { Table } from './oracle-schema';" +echo " import { cmctbVendorGeneral } from './schema';"
\ No newline at end of file diff --git a/lib/vendors/mdg-actions.ts b/lib/vendors/mdg-actions.ts new file mode 100644 index 00000000..ac57aec4 --- /dev/null +++ b/lib/vendors/mdg-actions.ts @@ -0,0 +1,93 @@ +"use server" + +/** + * MDG 마이그레이션 진행되지 않은 상태라 PLM DB를 싱크해 사용했으므로, 추후 수정 필요 + * PLM 쪽으로는 업데이트 불가능하므로, 최초 1회 마이그레이션한 데이터만 사용할 것임 + * node-cron 으로 PLM 데이터 동기화할 필요도 없다는 얘기 + */ + +import { revalidateTag } from "next/cache" +import { vendorMdgService, type VendorUpdateData } from "./mdg-service" +import { z } from "zod" + +// 벤더 업데이트 데이터 스키마 +const vendorUpdateSchema = z.object({ + vendorId: z.string().min(1, "Vendor ID is required"), + updateData: z.object({ + VNDRNM_1: z.string().optional(), + VNDRNM_2: z.string().optional(), + VNDRNM_ABRV_1: z.string().optional(), + BIZR_NO: z.string().optional(), + CO_REG_NO: z.string().optional(), + CO_VLM: z.string().optional(), + REPR_NM: z.string().optional(), + REP_TEL_NO: z.string().optional(), + REPR_RESNO: z.string().optional(), + REPRESENTATIVE_EMAIL: z.string().optional(), + BIZTP: z.string().optional(), + BIZCON: z.string().optional(), + NTN_CD: z.string().optional(), + ADR_1: z.string().optional(), + ADR_2: z.string().optional(), + POSTAL_CODE: z.string().optional(), + ADDR_DETAIL_1: z.string().optional(), + }) +}) + +export type VendorUpdateInput = z.infer<typeof vendorUpdateSchema> + +/** + * MDG 벤더 기본 정보 업데이트 서버 액션 + */ +export async function updateMdgVendorBasicInfo(input: VendorUpdateInput) { + try { + // 입력 데이터 검증 + const validatedData = vendorUpdateSchema.parse(input) + + // 벤더 ID로 벤더 코드 조회 + const vendorCode = await vendorMdgService.getVendorCodeByVendorId(validatedData.vendorId) + + if (!vendorCode) { + return { + success: false, + error: "벤더를 찾을 수 없습니다." + } + } + + // MDG 서비스를 통해 벤더 정보 업데이트 + const success = await vendorMdgService.updateVendorBasicInfo( + vendorCode, + validatedData.updateData + ) + + if (success) { + // 캐시 무효화 + revalidateTag(`vendor-details-${validatedData.vendorId}`) + revalidateTag("vendors") + + return { + success: true, + message: "벤더 정보가 성공적으로 업데이트되었습니다." + } + } else { + return { + success: false, + error: "벤더 정보 업데이트에 실패했습니다." + } + } + } catch (error) { + console.error("MDG 벤더 정보 업데이트 중 오류:", error) + + if (error instanceof z.ZodError) { + return { + success: false, + error: `입력 데이터 오류: ${error.errors[0].message}` + } + } + + return { + success: false, + error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다." + } + } +}
\ No newline at end of file diff --git a/lib/vendors/mdg-service.ts b/lib/vendors/mdg-service.ts new file mode 100644 index 00000000..27372a1e --- /dev/null +++ b/lib/vendors/mdg-service.ts @@ -0,0 +1,598 @@ +/** + * MDG 마이그레이션 진행되지 않은 상태라 PLM DB를 싱크해 사용했으므로, 추후 수정 필요 + * PLM 쪽으로는 업데이트 불가능하므로, 최초 1회 마이그레이션한 데이터만 사용할 것임 + * node-cron 으로 PLM 데이터 동기화할 필요도 없다는 얘기 + */ + +import { eq } from 'drizzle-orm' +import { + cmctbVendorGeneral, + cmctbVendorAddr, + cmctbVendorCompny, + cmctbVendorPorg, + cmctbVendorRepremail, + cmctbVendorInco, + type CmctbVendorGeneral, + type CmctbVendorAddr +} from '@/db/schema/NONSAP/nonsap' +import { vendors } from '@/db/schema/vendors' +import db from '@/db/db' +import { debugLog, debugError, debugWarn, debugSuccess } from '@/lib/debug-utils' + +// 구매조직별 정보 타입 정의 +export interface PurchasingOrgInfo { + PUR_ORG_CD: string // 구매조직 코드 + PUR_ORD_CUR: string | null // 오더통화 + SPLY_COND: string | null // 지급조건 + DL_COND_1: string | null // 인도조건1 + DL_COND_2: string | null // 인도조건2 + GR_BSE_INVC_VR: string | null // GR기준송장검증 + ORD_CNFM_REQ_ORDR: string | null // P/O 확인요청 + CNFM_CTL_KEY: string | null // 확정제어키 + PUR_HOLD_ORDR: string | null // 구매보류지시자 + DEL_ORDR: string | null // 삭제지시자 + AT_PUR_ORD_ORDR: string | null // 자동구매오더지시자 + SALE_CHRGR_NM: string | null // 영업담당자명 + VNDR_TELNO: string | null // VENDOR전화번호 + PUR_HOLD_DT: string | null // 구매보류일자 + PUR_HOLD_CAUS: string | null // 구매보류사유 +} + +// 벤더 상세 정보 타입 정의 +export interface VendorDetails { + // 기본 정보 + VNDRCD: string + VNDRNM_1: string | null + VNDRNM_2: string | null + VNDRNM_ABRV_1: string | null + BIZR_NO: string | null + CO_REG_NO: string | null + CO_VLM: string | null + + // 대표자 정보 + REPR_NM: string | null + REP_TEL_NO: string | null + REPR_RESNO: string | null + REPRESENTATIVE_EMAIL: string | null + + // 사업 정보 + BIZTP: string | null + BIZCON: string | null + NTN_CD: string | null + REG_DT: string | null + + // 주소 정보 + ADR_1: string | null + ADR_2: string | null + POSTAL_CODE: string | null + ADDR_DETAIL_1: string | null + + // 이전업체코드 + PREVIOUS_VENDOR_CODE: string | null + + // 내외자구분 (사내협력사 정보) << 정확하지 않음. 추후 확인 필요 + PRTNR_GB: string | null + + // 구매조직별 정보 (배열) + PURCHASING_ORGS: PurchasingOrgInfo[] + + // 상태 정보 + DEL_ORDR: string | null + PUR_HOLD_ORDR: string | null +} + +// 벤더 수정 데이터 타입 +export interface VendorUpdateData { + // 기본 정보 + VNDRNM_1?: string + VNDRNM_2?: string + VNDRNM_ABRV_1?: string + BIZR_NO?: string + CO_REG_NO?: string + CO_VLM?: string + + // 대표자 정보 + REPR_NM?: string + REP_TEL_NO?: string + REPR_RESNO?: string + REPRESENTATIVE_EMAIL?: string + + // 사업 정보 + BIZTP?: string + BIZCON?: string + NTN_CD?: string + + // 주소 정보 + ADR_1?: string + ADR_2?: string + POSTAL_CODE?: string + ADDR_DETAIL_1?: string +} + +// 벤더 목록 아이템 타입 +export interface VendorListItem { + VNDRCD: string + VNDRNM_1: string | null + VNDRNM_2: string | null + BIZR_NO: string | null + REG_DT: string | null + DEL_ORDR: string | null + PUR_HOLD_ORDR: string | null +} + +export class VendorMdgService { + /** + * 벤더 ID로 벤더 코드 조회 + * @param vendorId 벤더 ID + * @returns 벤더 코드 (VNDRCD) + */ + async getVendorCodeByVendorId(vendorId: string): Promise<string | null> { + debugLog(`벤더 코드 조회 시작: ID ${vendorId}`) + + try { + const vendor = await db + .select({ vendorCode: vendors.vendorCode }) + .from(vendors) + .where(eq(vendors.id, parseInt(vendorId))) + .limit(1) + + debugLog(`vendors 테이블 조회 결과:`, { + found: vendor.length > 0, + vendorCode: vendor[0]?.vendorCode || null + }) + + if (vendor.length === 0) { + debugWarn(`벤더 ID ${vendorId}에 해당하는 벤더를 찾을 수 없습니다.`) + return null + } + + const vendorCode = vendor[0].vendorCode + if (!vendorCode) { + debugWarn(`벤더 ID ${vendorId}의 vendor_code가 null입니다.`) + return null + } + + debugSuccess(`벤더 코드 조회 성공: ID ${vendorId} -> 코드 ${vendorCode}`) + return vendorCode + } catch (error) { + debugError('벤더 코드 조회 중 오류 발생:', error) + return null + } + } + + /** + * 벤더 ID로 벤더 상세 정보 조회 + * @param vendorId 벤더 ID + * @returns 벤더 상세 정보 (데이터가 없어도 기본 구조 반환) + */ + async getVendorDetailsByVendorId(vendorId: string): Promise<VendorDetails | null> { + debugLog(`벤더 ID로 상세 정보 조회 시작: ${vendorId}`) + + // 1. 벤더 코드 조회 + const vendorCode = await this.getVendorCodeByVendorId(vendorId) + + if (!vendorCode) { + debugWarn(`벤더 ID ${vendorId}에 대한 벤더 코드를 찾을 수 없습니다.`) + return null + } + + // 2. 벤더 코드로 상세 정보 조회 + debugLog(`벤더 코드 ${vendorCode}로 상세 정보 조회 시작`) + return await this.getVendorDetails(vendorCode) + } + + /** + * 벤더 코드로 벤더 상세 정보 조회 + * @param vendorCode 벤더 코드 + * @returns 벤더 상세 정보 (데이터가 없어도 기본 구조 반환) + */ + async getVendorDetails(vendorCode: string): Promise<VendorDetails> { + debugLog(`벤더 정보 조회 시작: ${vendorCode}`) + + try { + // 메인 쿼리: 벤더 일반 정보 + debugLog(`CMCTB_VENDOR_GENERAL 테이블에서 ${vendorCode} 조회 중...`) + const vendorGeneral = await db + .select() + .from(cmctbVendorGeneral) + .where(eq(cmctbVendorGeneral.VNDRCD, vendorCode)) + .limit(1) + + debugLog(`CMCTB_VENDOR_GENERAL 조회 결과:`, { + found: vendorGeneral.length > 0, + count: vendorGeneral.length, + data: vendorGeneral.length > 0 ? vendorGeneral[0] : null + }) + + const vendor = vendorGeneral[0] || null + + // 주소 정보 조회 + debugLog(`CMCTB_VENDOR_ADDR 테이블에서 ${vendorCode} 조회 중...`) + const vendorAddr = await db + .select() + .from(cmctbVendorAddr) + .where(eq(cmctbVendorAddr.VNDRCD, vendorCode)) + .limit(1) + + debugLog(`CMCTB_VENDOR_ADDR 조회 결과:`, { + found: vendorAddr.length > 0, + count: vendorAddr.length, + data: vendorAddr.length > 0 ? vendorAddr[0] : null + }) + + // 회사 정보 조회 (첫 번째 회사 코드) + debugLog(`CMCTB_VENDOR_COMPNY 테이블에서 ${vendorCode} 조회 중...`) + const vendorCompany = await db + .select() + .from(cmctbVendorCompny) + .where(eq(cmctbVendorCompny.VNDRCD, vendorCode)) + .limit(1) + + debugLog(`CMCTB_VENDOR_COMPNY 조회 결과:`, { + found: vendorCompany.length > 0, + count: vendorCompany.length, + data: vendorCompany.length > 0 ? vendorCompany[0] : null + }) + + // 모든 구매조직 정보 조회 + debugLog(`CMCTB_VENDOR_PORG 테이블에서 ${vendorCode}의 모든 구매조직 조회 중...`) + const vendorPorgs = await db + .select() + .from(cmctbVendorPorg) + .where(eq(cmctbVendorPorg.VNDRCD, vendorCode)) + + debugLog(`CMCTB_VENDOR_PORG 조회 결과:`, { + found: vendorPorgs.length > 0, + count: vendorPorgs.length, + data: vendorPorgs + }) + + // 사내협력사 정보 조회 (내외자구분) + debugLog(`CMCTB_VENDOR_INCO 테이블에서 ${vendorCode} 조회 중...`) + const vendorInco = await db + .select() + .from(cmctbVendorInco) + .where(eq(cmctbVendorInco.VNDRCD, vendorCode)) + .limit(1) + + debugLog(`CMCTB_VENDOR_INCO 조회 결과:`, { + found: vendorInco.length > 0, + count: vendorInco.length, + data: vendorInco.length > 0 ? vendorInco[0] : null + }) + + // 대표자 이메일 조회 + debugLog(`CMCTB_VENDOR_REPREMAIL 테이블에서 ${vendorCode} 조회 중...`) + const vendorEmail = await db + .select() + .from(cmctbVendorRepremail) + .where(eq(cmctbVendorRepremail.VNDRCD, vendorCode)) + .limit(1) + + debugLog(`CMCTB_VENDOR_REPREMAIL 조회 결과:`, { + found: vendorEmail.length > 0, + count: vendorEmail.length, + data: vendorEmail.length > 0 ? vendorEmail[0] : null + }) + + const addr = vendorAddr[0] || null + const company = vendorCompany[0] || null + const inco = vendorInco[0] || null + const email = vendorEmail[0] || null + + // 구매조직 정보 배열 구성 + const purchasingOrgs: PurchasingOrgInfo[] = vendorPorgs.map(porg => ({ + PUR_ORG_CD: porg.PUR_ORG_CD, + PUR_ORD_CUR: porg.PUR_ORD_CUR, + SPLY_COND: porg.SPLY_COND, + DL_COND_1: porg.DL_COND_1, + DL_COND_2: porg.DL_COND_2, + GR_BSE_INVC_VR: porg.GR_BSE_INVC_VR, + ORD_CNFM_REQ_ORDR: porg.ORD_CNFM_REQ_ORDR, + CNFM_CTL_KEY: porg.CNFM_CTL_KEY, + PUR_HOLD_ORDR: porg.PUR_HOLD_ORDR, + DEL_ORDR: porg.DEL_ORDR, + AT_PUR_ORD_ORDR: porg.AT_PUR_ORD_ORDR, + SALE_CHRGR_NM: porg.SALE_CHRGR_NM, + VNDR_TELNO: porg.VNDR_TELNO, + PUR_HOLD_DT: porg.PUR_HOLD_DT, + PUR_HOLD_CAUS: porg.PUR_HOLD_CAUS + })) + + // 데이터 존재 여부 확인 + const hasAnyData = vendor || addr || company || purchasingOrgs.length > 0 || inco || email + if (!hasAnyData) { + debugWarn(`벤더 ${vendorCode}에 대한 데이터가 전혀 없습니다. 기본 구조만 반환합니다.`) + } else { + debugSuccess(`벤더 ${vendorCode} 데이터 조회 완료`, { + general: !!vendor, + addr: !!addr, + company: !!company, + purchasingOrgs: purchasingOrgs.length, + inco: !!inco, + email: !!email + }) + } + + // 벤더 상세 정보 구성 (데이터가 없어도 기본 구조 제공) + const vendorDetails: VendorDetails = { + // 기본 정보 (General 테이블) + VNDRCD: vendorCode, // 항상 요청된 벤더 코드 반환 + VNDRNM_1: vendor?.VNDRNM_1 || null, + VNDRNM_2: vendor?.VNDRNM_2 || null, + VNDRNM_ABRV_1: vendor?.VNDRNM_ABRV_1 || null, + BIZR_NO: vendor?.BIZR_NO || null, + CO_REG_NO: vendor?.CO_REG_NO || null, + CO_VLM: vendor?.CO_VLM || null, + + // 대표자 정보 + REPR_NM: vendor?.REPR_NM || null, + REP_TEL_NO: vendor?.REP_TEL_NO || null, + REPR_RESNO: vendor?.REPR_RESNO || null, + REPRESENTATIVE_EMAIL: email?.EMAIL_ADR || null, + + // 사업 정보 + BIZTP: vendor?.BIZTP || null, + BIZCON: vendor?.BIZCON || null, + NTN_CD: vendor?.NTN_CD || null, + REG_DT: vendor?.REG_DT || null, + + // 주소 정보 (Address 테이블 우선, 없으면 General 테이블) + ADR_1: addr?.ADR_1 || vendor?.ADR_1 || null, + ADR_2: addr?.ADR_2 || vendor?.ADR_2 || null, + POSTAL_CODE: addr?.CITY_ZIP_NO || null, + ADDR_DETAIL_1: addr?.ETC_ADR_1 || null, + + // 이전업체코드 + PREVIOUS_VENDOR_CODE: company?.BF_VNDRCD || null, + + // 내외자구분 (사내협력사 정보) + PRTNR_GB: inco?.PRTNR_GB || null, + + // 구매조직별 정보 배열 + PURCHASING_ORGS: purchasingOrgs, + + // 상태 정보 (기본값 제공) + DEL_ORDR: vendor?.DEL_ORDR || 'N', // 기본값: 활성 + PUR_HOLD_ORDR: vendor?.PUR_HOLD_ORDR || null + } + + debugLog(`최종 벤더 정보 구성 완료:`, vendorDetails) + + return vendorDetails + } catch (error) { + debugError('벤더 정보 조회 중 오류 발생:', error) + + // 오류가 발생해도 기본 구조는 제공 + debugWarn(`오류로 인해 ${vendorCode}의 기본 구조만 반환합니다.`) + return { + VNDRCD: vendorCode, + VNDRNM_1: null, + VNDRNM_2: null, + VNDRNM_ABRV_1: null, + BIZR_NO: null, + CO_REG_NO: null, + CO_VLM: null, + REPR_NM: null, + REP_TEL_NO: null, + REPR_RESNO: null, + REPRESENTATIVE_EMAIL: null, + BIZTP: null, + BIZCON: null, + NTN_CD: null, + REG_DT: null, + ADR_1: null, + ADR_2: null, + POSTAL_CODE: null, + ADDR_DETAIL_1: null, + PREVIOUS_VENDOR_CODE: null, + PRTNR_GB: null, + PURCHASING_ORGS: [], + DEL_ORDR: 'N', // 기본값: 활성 + PUR_HOLD_ORDR: null + } + } + } + + /** + * 벤더 기본 정보 수정 + * @param vendorCode 벤더 코드 + * @param updateData 수정할 데이터 + * @returns 성공 여부 + */ + async updateVendorBasicInfo( + vendorCode: string, + updateData: VendorUpdateData + ): Promise<boolean> { + try { + // 트랜잭션으로 여러 테이블 업데이트 + await db.transaction(async (tx) => { + // 1. General 테이블 업데이트 + const generalUpdateData: Partial<CmctbVendorGeneral> = {} + if (updateData.VNDRNM_1 !== undefined) generalUpdateData.VNDRNM_1 = updateData.VNDRNM_1 + if (updateData.VNDRNM_2 !== undefined) generalUpdateData.VNDRNM_2 = updateData.VNDRNM_2 + if (updateData.VNDRNM_ABRV_1 !== undefined) generalUpdateData.VNDRNM_ABRV_1 = updateData.VNDRNM_ABRV_1 + if (updateData.BIZR_NO !== undefined) generalUpdateData.BIZR_NO = updateData.BIZR_NO + if (updateData.CO_REG_NO !== undefined) generalUpdateData.CO_REG_NO = updateData.CO_REG_NO + if (updateData.CO_VLM !== undefined) generalUpdateData.CO_VLM = updateData.CO_VLM + if (updateData.REPR_NM !== undefined) generalUpdateData.REPR_NM = updateData.REPR_NM + if (updateData.REP_TEL_NO !== undefined) generalUpdateData.REP_TEL_NO = updateData.REP_TEL_NO + if (updateData.REPR_RESNO !== undefined) generalUpdateData.REPR_RESNO = updateData.REPR_RESNO + if (updateData.BIZTP !== undefined) generalUpdateData.BIZTP = updateData.BIZTP + if (updateData.BIZCON !== undefined) generalUpdateData.BIZCON = updateData.BIZCON + if (updateData.NTN_CD !== undefined) generalUpdateData.NTN_CD = updateData.NTN_CD + if (updateData.ADR_1 !== undefined) generalUpdateData.ADR_1 = updateData.ADR_1 + if (updateData.ADR_2 !== undefined) generalUpdateData.ADR_2 = updateData.ADR_2 + + // 현재 시간 설정 + generalUpdateData.CHG_DT = new Date().toISOString().slice(0, 10).replace(/-/g, '') + generalUpdateData.CHG_TM = new Date().toTimeString().slice(0, 8).replace(/:/g, '') + + if (Object.keys(generalUpdateData).length > 2) { // CHG_DT, CHG_TM 외에 다른 필드가 있는 경우만 업데이트 + await tx + .update(cmctbVendorGeneral) + .set(generalUpdateData) + .where(eq(cmctbVendorGeneral.VNDRCD, vendorCode)) + } + + // 2. Address 테이블 업데이트 (있는 경우) + if (updateData.ADR_1 || updateData.ADR_2 || updateData.POSTAL_CODE || updateData.ADDR_DETAIL_1) { + const addrUpdateData: Partial<CmctbVendorAddr> = {} + if (updateData.ADR_1 !== undefined) addrUpdateData.ADR_1 = updateData.ADR_1 + if (updateData.ADR_2 !== undefined) addrUpdateData.ADR_2 = updateData.ADR_2 + if (updateData.POSTAL_CODE !== undefined) addrUpdateData.CITY_ZIP_NO = updateData.POSTAL_CODE + if (updateData.ADDR_DETAIL_1 !== undefined) addrUpdateData.ETC_ADR_1 = updateData.ADDR_DETAIL_1 + + // 주소 레코드가 있는지 확인 + const existingAddr = await tx + .select() + .from(cmctbVendorAddr) + .where(eq(cmctbVendorAddr.VNDRCD, vendorCode)) + .limit(1) + + if (existingAddr.length > 0) { + // 기존 주소 업데이트 + await tx + .update(cmctbVendorAddr) + .set(addrUpdateData) + .where(eq(cmctbVendorAddr.VNDRCD, vendorCode)) + } else { + // 새 주소 레코드 생성 + await tx + .insert(cmctbVendorAddr) + .values({ + VNDRCD: vendorCode, + ADR_NO: '0001', + INTL_ADR_VER_ID: '1', + ...addrUpdateData + }) + } + } + + // 3. 대표자 이메일 업데이트 (있는 경우) + if (updateData.REPRESENTATIVE_EMAIL !== undefined) { + // 기존 이메일 레코드가 있는지 확인 + const existingEmail = await tx + .select() + .from(cmctbVendorRepremail) + .where(eq(cmctbVendorRepremail.VNDRCD, vendorCode)) + .limit(1) + + const currentDate = new Date().toISOString().slice(0, 10).replace(/-/g, '') + + if (existingEmail.length > 0) { + // 기존 이메일 업데이트 + await tx + .update(cmctbVendorRepremail) + .set({ + EMAIL_ADR: updateData.REPRESENTATIVE_EMAIL, + IF_DT: currentDate, + IF_TM: new Date().toTimeString().slice(0, 8).replace(/:/g, ''), + IF_STAT: '1' + }) + .where(eq(cmctbVendorRepremail.VNDRCD, vendorCode)) + } else if (updateData.REPRESENTATIVE_EMAIL) { + // 새 이메일 레코드 생성 (빈 문자열이 아닌 경우만) + await tx + .insert(cmctbVendorRepremail) + .values({ + VNDRCD: vendorCode, + ADR_NO: '0001', + REPR_SER: '001', + VLD_ST_DT: currentDate, + EMAIL_ADR: updateData.REPRESENTATIVE_EMAIL, + IF_DT: currentDate, + IF_TM: new Date().toTimeString().slice(0, 8).replace(/:/g, ''), + IF_STAT: '1' + }) + } + } + }) + + return true + } catch (error) { + console.error('벤더 정보 수정 중 오류 발생:', error) + throw new Error('벤더 정보를 수정할 수 없습니다.') + } + } + + /** + * 벤더 목록 조회 (페이징) + * @param page 페이지 번호 (1부터 시작) + * @param limit 페이지당 개수 + * @param searchTerm 검색어 (업체명 검색) + * @returns 벤더 목록과 총 개수 + */ + async getVendorList( + page: number = 1, + limit: number = 20, + searchTerm?: string + ): Promise<{ vendors: VendorListItem[], total: number }> { + try { + const offset = (page - 1) * limit + + // 기본 조건: 활성 벤더만 조회 + const whereCondition = eq(cmctbVendorGeneral.DEL_ORDR, 'N') + + // 검색어가 있는 경우 업체명으로 필터링 (추후 구현 시 사용) + void searchTerm // 현재는 미사용 + + // 총 개수 조회 + const totalResult = await db + .select({ count: cmctbVendorGeneral.VNDRCD }) + .from(cmctbVendorGeneral) + .where(whereCondition) + + // 벤더 목록 조회 + const vendors = await db + .select({ + VNDRCD: cmctbVendorGeneral.VNDRCD, + VNDRNM_1: cmctbVendorGeneral.VNDRNM_1, + VNDRNM_2: cmctbVendorGeneral.VNDRNM_2, + BIZR_NO: cmctbVendorGeneral.BIZR_NO, + REG_DT: cmctbVendorGeneral.REG_DT, + DEL_ORDR: cmctbVendorGeneral.DEL_ORDR, + PUR_HOLD_ORDR: cmctbVendorGeneral.PUR_HOLD_ORDR + }) + .from(cmctbVendorGeneral) + .where(whereCondition) + .limit(limit) + .offset(offset) + + return { + vendors, + total: totalResult.length + } + } catch (error) { + console.error('벤더 목록 조회 중 오류 발생:', error) + throw new Error('벤더 목록을 조회할 수 없습니다.') + } + } + + /** + * 벤더 상태 변경 (활성/비활성) + * @param vendorCode 벤더 코드 + * @param isActive 활성 상태 여부 + * @returns 성공 여부 + */ + async updateVendorStatus(vendorCode: string, isActive: boolean): Promise<boolean> { + try { + await db + .update(cmctbVendorGeneral) + .set({ + DEL_ORDR: isActive ? 'N' : 'Y', + CHG_DT: new Date().toISOString().slice(0, 10).replace(/-/g, ''), + CHG_TM: new Date().toTimeString().slice(0, 8).replace(/:/g, '') + }) + .where(eq(cmctbVendorGeneral.VNDRCD, vendorCode)) + + return true + } catch (error) { + console.error('벤더 상태 변경 중 오류 발생:', error) + throw new Error('벤더 상태를 변경할 수 없습니다.') + } + } +} + +// 싱글톤 인스턴스 생성 +export const vendorMdgService = new VendorMdgService() diff --git a/next.config.ts b/next.config.ts index 88be10cb..f4561670 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - serverExternalPackages: ['pino', 'pino-pretty'], + serverExternalPackages: ['pino', 'pino-pretty', 'node-cron', 'oracledb'], reactStrictMode: false, eslint: { @@ -11,7 +11,7 @@ const nextConfig: NextConfig = { ignoreBuildErrors: true, }, webpack: (config) => { - // turbo의 resolveAlias와 동일한 설정을 webpack에 적용 + // [김준회] turbo의 resolveAlias와 동일한 설정을 webpack에 적용 config.resolve.alias = { ...config.resolve.alias, '@azure/app-configuration': false, @@ -28,7 +28,7 @@ const nextConfig: NextConfig = { 'tedious': false, }; - // handlebars require.extensions 경고 무시 + // [김준회] handlebars require.extensions 경고 무시 config.ignoreWarnings = [ ...(config.ignoreWarnings || []), { @@ -41,7 +41,7 @@ const nextConfig: NextConfig = { }, experimental: { serverActions: { - // [김준회 프로] DRM 복호화/암호화 백엔드로 보낼 때 사이즈 제한 변경(기본값: 1MB) + // [김준회] DRM 복호화/암호화 백엔드로 보낼 때 사이즈 제한 변경(기본값: 1MB) // DDoS 공격을 방지하기 위해 기본값이 1MB로 설정되어 있음. 암호화된 파일 중 큰 파일(도면 등)도 1GB 이하로 가정하여 설정 (파일별로 서버액션 개별 호출) bodySizeLimit: '1024mb', }, |
