summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/[lng]/admin/nonsap-sync/page.tsx267
-rw-r--r--app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/page.tsx39
-rw-r--r--app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/vendor-basic-info.tsx735
-rw-r--r--app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx4
-rw-r--r--app/api/nonsap-sync/config/route.ts22
-rw-r--r--app/api/nonsap-sync/cron/route.ts41
-rw-r--r--app/api/nonsap-sync/health/route.ts63
-rw-r--r--app/api/nonsap-sync/status/route.ts22
-rw-r--r--app/api/nonsap-sync/trigger/route.ts25
-rw-r--r--db/schema/NONSAP/nonsap.ts2104
-rw-r--r--db/schema/PLM/plmVendorSchema.ts337
-rw-r--r--db/schema/index.ts5
-rw-r--r--instrumentation.ts19
-rw-r--r--lib/nonsap-sync/enhanced-sync-service.ts873
-rw-r--r--lib/nonsap-sync/sync-config.ts46
-rw-r--r--lib/nonsap-sync/sync-service.ts414
-rw-r--r--lib/nonsap-sync/table-config.ts352
-rw-r--r--lib/oracle-db/check.ts39
-rw-r--r--lib/oracle-db/db.ts39
-rw-r--r--lib/oracle-db/nonsap/1.table-and-columns-info.csv922
-rw-r--r--lib/oracle-db/nonsap/1.table-and-columns-info.csv.before922
-rw-r--r--lib/oracle-db/nonsap/2.generate-oracle-types.py200
-rw-r--r--lib/oracle-db/nonsap/3.generate-postgres-drizzle-schema.ts273
-rw-r--r--lib/oracle-db/nonsap/oracle-schema.ts4034
-rwxr-xr-xlib/oracle-db/nonsap/run-generate-schema.sh63
-rw-r--r--lib/vendors/mdg-actions.ts93
-rw-r--r--lib/vendors/mdg-service.ts598
-rw-r--r--next.config.ts8
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',
},