summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx440
-rw-r--r--app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx4
2 files changed, 444 insertions, 0 deletions
diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx
new file mode 100644
index 00000000..e90969b5
--- /dev/null
+++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx
@@ -0,0 +1,440 @@
+'use client';
+
+import { useState, useEffect } from 'react';
+import { useParams } from 'next/navigation';
+import { getCreditInfo } from '@/lib/oracle-db/nonsap/services/creditService';
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from '@/components/ui/table';
+
+// 신용평가사 옵션
+const creditServices = [
+ { code: 'I', name: '이크레더블' },
+ { code: 'K', name: '한국기업데이터' },
+ { code: 'N', name: '나이스디앤비' },
+ { code: 'E', name: 'NICE신용평가사' }
+];
+
+interface CreditData {
+ // 기본 정보
+ RESNO: string;
+ EENTNM: string;
+ OPEDT: string;
+ REPR_NM: string;
+ TYSCALE: string;
+ RELCMP: string;
+ ADR: string;
+ LISTYN: string;
+ GOODSNM: string;
+ TELNO: string;
+ FAXNO: string;
+ FSTRDRT: string;
+
+ // 매출순위
+ MO_1: string;
+ MO_4: string;
+ MO_2: string;
+ MO_5: string;
+ MO_3: string;
+ MO_6: string;
+
+ // 매입순위
+ MI_1: string;
+ MI_4: string;
+ MI_2: string;
+ MI_5: string;
+ MI_3: string;
+ MI_6: string;
+
+ // 지분관계
+ GIBUN_RL_1: string;
+ LSH_STK_RATE1: string;
+ GIBUN_RL_2: string;
+ LSH_STK_RATE2: string;
+ GIBUN_RL_3: string;
+ LSH_STK_RATE3: string;
+
+ // 기타 정보
+ HAPGYE: string;
+ NOTICE: string;
+ NOTICE_DT: string;
+ HPGBNCR_TY: string;
+ FCLOSDT: string;
+ LASTGRD: string;
+ DECISION: string;
+ FRISKRV: string;
+ EXPIRE_GB: string;
+ FWATCHD: string;
+ SUVDT: string;
+ ESETDTT: string;
+
+ // 재무년월
+ bs_dt0: string;
+ bs_dt1: string;
+ bs_dt2: string;
+
+ // 재무현황
+ bs59_0: string; // 총자산
+ bs59_1: string;
+ bs59_2: string;
+ bs91_0: string; // 부채총계
+ bs91_1: string;
+ bs91_2: string;
+ bs113_0: string; // 자본총계
+ bs113_1: string;
+ bs113_2: string;
+ pl01_0: string; // 매출액
+ pl01_1: string;
+ pl01_2: string;
+ pl27_0: string; // 영업이익
+ pl27_1: string;
+ pl27_2: string;
+ pl71_0: string; // 당기순이익
+ pl71_1: string;
+ pl71_2: string;
+
+ // 재무비율
+ TR0053: string; // 부채비율
+ TR0052: string;
+ TR0051: string;
+ TR0513: string; // 차입금의존도
+ TR0512: string;
+ TR0511: string;
+ TR0523: string; // 영업이익율
+ TR0522: string;
+ TR0521: string;
+ TR0103: string; // 매출순이익율
+ TR0102: string;
+ TR0101: string;
+ TR0223: string; // 매출액증가율
+ TR0222: string;
+ TR0221: string;
+ TR0013: string; // 유동비율
+ TR0012: string;
+ TR0011: string;
+}
+
+export default function CreditInfoPage() {
+ const params = useParams();
+ const vendorId = params?.id as string;
+
+ const [selectedCreditService, setSelectedCreditService] = useState<string>('I');
+ const [creditData, setCreditData] = useState<CreditData | null>(null);
+ const [loading, setLoading] = useState(false);
+ const [error, setError] = useState<string | null>(null);
+
+ // 데이터 로딩 함수
+ const loadCreditData = async (reno: string, creditGb: string) => {
+ setLoading(true);
+ setError(null);
+
+ try {
+ const result = await getCreditInfo(reno, creditGb);
+ if (result && result.length > 0) {
+ setCreditData(result[0]);
+ } else {
+ setCreditData(null);
+ }
+ } catch (err) {
+ setError('데이터를 불러오는 중 오류가 발생했습니다.');
+ console.error(err);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ // 신용평가사 선택 변경
+ const handleCreditServiceChange = (code: string) => {
+ setSelectedCreditService(code);
+ if (vendorId) {
+ loadCreditData(vendorId, code);
+ }
+ };
+
+ // 초기 데이터 로딩
+ useEffect(() => {
+ if (vendorId) {
+ loadCreditData(vendorId, selectedCreditService);
+ }
+ }, [vendorId]);
+
+ return (
+ <div className="p-6 bg-background">
+ <div className="mb-6">
+ <h2 className="text-xl font-bold mb-4">협력업체 신용정보</h2>
+
+ {/* 신용평가사 선택 */}
+ <div className="mb-4">
+ <span className="text-sm text-muted-foreground mr-4">평가업체의 기본 정보를 확인 및 관리하는 화면입니다.</span>
+ <div className="flex space-x-4 mt-2">
+ {creditServices.map((service) => (
+ <label key={service.code} className="flex items-center space-x-2 cursor-pointer">
+ <input
+ type="checkbox"
+ checked={selectedCreditService === service.code}
+ onChange={() => handleCreditServiceChange(service.code)}
+ className="h-4 w-4 rounded border-border text-primary focus:ring-primary"
+ />
+ <span className="text-sm text-foreground">{service.name}</span>
+ </label>
+ ))}
+ </div>
+ </div>
+ </div>
+
+ {loading && (
+ <div className="text-center py-8">
+ <div className="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div>
+ <p className="mt-2 text-muted-foreground">데이터를 불러오는 중...</p>
+ </div>
+ )}
+
+ {error && (
+ <div className="bg-destructive/10 border border-destructive/20 rounded-md p-4 mb-4">
+ <p className="text-destructive">{error}</p>
+ </div>
+ )}
+
+ {creditData && (
+ <div className="space-y-6">
+ {/* 매출순위, 매입순위, 지분관계 */}
+ <div className="grid grid-cols-3 gap-4">
+ {/* 매출순위 */}
+ <div className="border">
+ <div className="bg-muted p-3 text-center font-semibold">매출순위</div>
+ <Table>
+ <TableBody>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">1</TableCell>
+ <TableCell className="border-r">{creditData.MO_1}</TableCell>
+ <TableCell className="text-right">{creditData.MO_4} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">2</TableCell>
+ <TableCell className="border-r">{creditData.MO_2}</TableCell>
+ <TableCell className="text-right">{creditData.MO_5} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">3</TableCell>
+ <TableCell className="border-r">{creditData.MO_3}</TableCell>
+ <TableCell className="text-right">{creditData.MO_6} %</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+
+ {/* 매입순위 */}
+ <div className="border">
+ <div className="bg-muted p-3 text-center font-semibold">매입순위</div>
+ <Table>
+ <TableBody>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">1</TableCell>
+ <TableCell className="border-r">{creditData.MI_1}</TableCell>
+ <TableCell className="text-right">{creditData.MI_4} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">2</TableCell>
+ <TableCell className="border-r">{creditData.MI_2}</TableCell>
+ <TableCell className="text-right">{creditData.MI_5} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">3</TableCell>
+ <TableCell className="border-r">{creditData.MI_3}</TableCell>
+ <TableCell className="text-right">{creditData.MI_6} %</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+
+ {/* 지분관계 */}
+ <div className="border">
+ <div className="bg-muted p-3 text-center font-semibold">지분관계</div>
+ <Table>
+ <TableBody>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">1</TableCell>
+ <TableCell className="border-r">{creditData.GIBUN_RL_1}</TableCell>
+ <TableCell className="text-right">{creditData.LSH_STK_RATE1} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">2</TableCell>
+ <TableCell className="border-r">{creditData.GIBUN_RL_2}</TableCell>
+ <TableCell className="text-right">{creditData.LSH_STK_RATE2} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">3</TableCell>
+ <TableCell className="border-r">{creditData.GIBUN_RL_3}</TableCell>
+ <TableCell className="text-right">{creditData.LSH_STK_RATE3} %</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+ </div>
+
+ {/* 기본 정보 */}
+ <div className="grid grid-cols-3 gap-4">
+ {/* 섹션1: 종업원 수, 신용등급, WATCH 등급 */}
+ <div className="border">
+ <Table>
+ <TableBody>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">종업원 수</TableCell>
+ <TableCell>{creditData.HAPGYE}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">신용등급</TableCell>
+ <TableCell className="bg-blue-100 dark:bg-blue-900/30 font-semibold">{creditData.LASTGRD}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">WATCH등급</TableCell>
+ <TableCell>{creditData.FWATCHD}</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+
+ {/* 섹션2: 기업회생/파산정보, 현금흐름등급, 평가기준일 */}
+ <div className="border">
+ <Table>
+ <TableBody>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">기업회생/파산정보</TableCell>
+ <TableCell>{creditData.NOTICE || '없음'}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">현금흐름등급</TableCell>
+ <TableCell className="bg-green-100 dark:bg-green-900/30 font-semibold">{creditData.DECISION}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">평가기준일</TableCell>
+ <TableCell>{creditData.SUVDT}</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+
+ {/* 섹션3: 휴/폐업 여부, RISK등급, 결산기준일 */}
+ <div className="border">
+ <Table>
+ <TableBody>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">휴/폐업 여부</TableCell>
+ <TableCell>{creditData.HPGBNCR_TY || '정상'}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">RISK등급</TableCell>
+ <TableCell>{creditData.FRISKRV}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="bg-muted font-medium border-r">결산기준일</TableCell>
+ <TableCell>{creditData.ESETDTT}</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+ </div>
+
+ {/* 재무현황 */}
+ <div className="border">
+ <div className="bg-muted p-3 text-center font-semibold">재무현황(3개년)</div>
+ <Table>
+ <TableHeader>
+ <TableRow>
+ <TableHead className="text-center border-r">구분</TableHead>
+ <TableHead className="text-center border-r">총자산<br/>(단위:백만원)</TableHead>
+ <TableHead className="text-center border-r">부채총계<br/>(단위:백만원)</TableHead>
+ <TableHead className="text-center border-r">자본총계<br/>(단위:백만원)</TableHead>
+ <TableHead className="text-center border-r">매출액<br/>(단위:백만원)</TableHead>
+ <TableHead className="text-center border-r">영업이익<br/>(단위:백만원)</TableHead>
+ <TableHead className="text-center">당기순이익<br/>(단위:백만원)</TableHead>
+ </TableRow>
+ </TableHeader>
+ <TableBody>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">{creditData.bs_dt0}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs59_0}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs91_0}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs113_0}</TableCell>
+ <TableCell className="text-right border-r">{creditData.pl01_0}</TableCell>
+ <TableCell className="text-right border-r">{creditData.pl27_0}</TableCell>
+ <TableCell className="text-right">{creditData.pl71_0}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">{creditData.bs_dt1}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs59_1}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs91_1}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs113_1}</TableCell>
+ <TableCell className="text-right border-r">{creditData.pl01_1}</TableCell>
+ <TableCell className="text-right border-r">{creditData.pl27_1}</TableCell>
+ <TableCell className="text-right">{creditData.pl71_1}</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">{creditData.bs_dt2}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs59_2}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs91_2}</TableCell>
+ <TableCell className="text-right border-r">{creditData.bs113_2}</TableCell>
+ <TableCell className="text-right border-r">{creditData.pl01_2}</TableCell>
+ <TableCell className="text-right border-r">{creditData.pl27_2}</TableCell>
+ <TableCell className="text-right">{creditData.pl71_2}</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+
+ {/* 재무비율 */}
+ <div className="border">
+ <div className="bg-muted p-3 text-center font-semibold">재무비율(3개년)</div>
+ <Table>
+ <TableHeader>
+ <TableRow>
+ <TableHead className="text-center border-r">구분</TableHead>
+ <TableHead className="text-center border-r">부채비율</TableHead>
+ <TableHead className="text-center border-r">차입금의존도</TableHead>
+ <TableHead className="text-center border-r">영업이익율</TableHead>
+ <TableHead className="text-center border-r">순이익율</TableHead>
+ <TableHead className="text-center border-r">전년대비 매출액 증가율</TableHead>
+ <TableHead className="text-center">유동비율</TableHead>
+ </TableRow>
+ </TableHeader>
+ <TableBody>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">{creditData.bs_dt0}</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0053} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0513} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0523} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0103} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0223} %</TableCell>
+ <TableCell className="text-right">{creditData.TR0013} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">{creditData.bs_dt1}</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0052} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0512} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0522} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0102} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0222} %</TableCell>
+ <TableCell className="text-right">{creditData.TR0012} %</TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell className="text-center font-medium border-r">{creditData.bs_dt2}</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0051} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0511} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0521} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0101} %</TableCell>
+ <TableCell className="text-right border-r">{creditData.TR0221} %</TableCell>
+ <TableCell className="text-right">{creditData.TR0011} %</TableCell>
+ </TableRow>
+ </TableBody>
+ </Table>
+ </div>
+ </div>
+ )}
+ </div>
+ );
+}
diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx
index 7826a7c0..50e2723e 100644
--- a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx
+++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx
@@ -39,6 +39,10 @@ export default async function SettingsLayout({
href: `/${lng}/evcp/vendors/${id}/info/basic`,
},
{
+ title: "신용평가",
+ href: `/${lng}/evcp/vendors/${id}/info/credit`,
+ },
+ {
title: "공급품목(패키지)",
href: `/${lng}/evcp/vendors/${id}/info/items`,
},