- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
1072 lines
40 KiB
PHP
1072 lines
40 KiB
PHP
<?php
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="ko">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>장기적 전자세금계산서 발행 전략 (중장기 계획)</title>
|
|
<style>
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
background: linear-gradient(135deg, #43cea2 0%, #185a9d 100%);
|
|
min-height: 100vh;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.presentation-container {
|
|
width: 100%;
|
|
height: 100vh;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.slide {
|
|
width: 100%;
|
|
height: 100vh;
|
|
display: none;
|
|
align-items: flex-start;
|
|
justify-content: center;
|
|
padding: 40px;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.slide.active {
|
|
display: flex;
|
|
animation: slideInRight 0.5s ease-out;
|
|
}
|
|
|
|
.slide-content {
|
|
background: rgba(255, 255, 255, 0.95);
|
|
border-radius: 20px;
|
|
padding: 60px;
|
|
max-width: 1200px;
|
|
width: 100%;
|
|
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
|
|
animation: fadeIn 0.8s ease-out;
|
|
margin: auto 0;
|
|
}
|
|
|
|
h1 {
|
|
color: #185a9d;
|
|
font-size: 3em;
|
|
margin-bottom: 20px;
|
|
text-align: center;
|
|
}
|
|
|
|
h2 {
|
|
color: #43cea2;
|
|
font-size: 2.5em;
|
|
margin-bottom: 30px;
|
|
text-align: center;
|
|
border-bottom: 3px solid #185a9d;
|
|
padding-bottom: 15px;
|
|
}
|
|
|
|
h3 {
|
|
color: #185a9d;
|
|
font-size: 1.8em;
|
|
margin: 25px 0 15px 0;
|
|
}
|
|
|
|
h4 {
|
|
color: #43cea2;
|
|
font-size: 1.3em;
|
|
margin: 15px 0 10px 0;
|
|
}
|
|
|
|
p, li {
|
|
font-size: 1.2em;
|
|
line-height: 1.8;
|
|
color: #333;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
ul, ol {
|
|
margin-left: 30px;
|
|
}
|
|
|
|
.company-info {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
gap: 20px;
|
|
margin: 30px 0;
|
|
}
|
|
|
|
.info-card {
|
|
background: linear-gradient(135deg, #43cea2 0%, #185a9d 100%);
|
|
color: white;
|
|
padding: 25px;
|
|
border-radius: 15px;
|
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
|
|
animation: scaleIn 0.5s ease-out;
|
|
}
|
|
|
|
.info-card h4 {
|
|
color: white;
|
|
font-size: 1.3em;
|
|
margin-bottom: 10px;
|
|
border-bottom: 2px solid rgba(255, 255, 255, 0.3);
|
|
padding-bottom: 8px;
|
|
}
|
|
|
|
.info-card p {
|
|
color: white;
|
|
font-size: 1em;
|
|
}
|
|
|
|
.comparison-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 25px 0;
|
|
font-size: 1em;
|
|
}
|
|
|
|
.comparison-table th,
|
|
.comparison-table td {
|
|
padding: 12px;
|
|
border: 1px solid #ddd;
|
|
text-align: left;
|
|
}
|
|
|
|
.comparison-table thead tr {
|
|
background: linear-gradient(135deg, #43cea2 0%, #185a9d 100%);
|
|
color: white;
|
|
}
|
|
|
|
.comparison-table tbody tr:nth-of-type(even) {
|
|
background: #f3f3f3;
|
|
}
|
|
|
|
.feature-list {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
gap: 15px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.feature-item {
|
|
background: #e8f5e9;
|
|
padding: 15px;
|
|
border-radius: 10px;
|
|
border-left: 4px solid #43cea2;
|
|
}
|
|
|
|
.feature-item h4 {
|
|
color: #185a9d;
|
|
margin-top: 0;
|
|
}
|
|
|
|
.conclusion-box {
|
|
background: linear-gradient(135deg, #43cea2 0%, #185a9d 100%);
|
|
color: white;
|
|
padding: 30px;
|
|
border-radius: 15px;
|
|
margin: 20px 0;
|
|
text-align: center;
|
|
}
|
|
|
|
.conclusion-box p, .conclusion-box h3 {
|
|
color: white;
|
|
}
|
|
|
|
.warning-box {
|
|
background: #fff3cd;
|
|
border-left: 5px solid #ffc107;
|
|
padding: 25px;
|
|
border-radius: 15px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.warning-box h3, .warning-box li {
|
|
color: #856404;
|
|
}
|
|
|
|
.flow-diagram {
|
|
background: #f5f5f5;
|
|
padding: 25px;
|
|
border-radius: 15px;
|
|
margin: 20px 0;
|
|
border: 2px solid #43cea2;
|
|
}
|
|
|
|
.flow-diagram pre {
|
|
font-size: 1em;
|
|
line-height: 1.6;
|
|
color: #333;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.navigation {
|
|
position: fixed;
|
|
bottom: 30px;
|
|
right: 30px;
|
|
display: flex;
|
|
gap: 15px;
|
|
z-index: 1000;
|
|
}
|
|
|
|
.nav-btn {
|
|
background: linear-gradient(135deg, #43cea2 0%, #185a9d 100%);
|
|
color: white;
|
|
border: none;
|
|
padding: 15px 30px;
|
|
border-radius: 50px;
|
|
cursor: pointer;
|
|
font-size: 1.1em;
|
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.nav-btn:hover {
|
|
transform: translateY(-3px);
|
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.home-btn {
|
|
position: fixed;
|
|
top: 30px;
|
|
left: 30px;
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
color: white;
|
|
border: none;
|
|
padding: 12px 25px;
|
|
border-radius: 50px;
|
|
cursor: pointer;
|
|
font-size: 1em;
|
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
|
transition: all 0.3s ease;
|
|
z-index: 1000;
|
|
text-decoration: none;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.home-btn:hover {
|
|
transform: translateY(-3px);
|
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
|
|
background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
|
|
}
|
|
|
|
.slide-number {
|
|
position: fixed;
|
|
bottom: 30px;
|
|
left: 30px;
|
|
background: rgba(255, 255, 255, 0.9);
|
|
padding: 10px 20px;
|
|
border-radius: 25px;
|
|
font-size: 1.1em;
|
|
color: #185a9d;
|
|
font-weight: bold;
|
|
z-index: 1000;
|
|
}
|
|
|
|
@keyframes slideInRight {
|
|
from {
|
|
transform: translateX(100%);
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
transform: translateX(0);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes scaleIn {
|
|
from {
|
|
transform: scale(0.9);
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
transform: scale(1);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.slide-content {
|
|
padding: 30px;
|
|
}
|
|
|
|
h1 {
|
|
font-size: 2em;
|
|
}
|
|
|
|
h2 {
|
|
font-size: 1.8em;
|
|
}
|
|
|
|
h3 {
|
|
font-size: 1.4em;
|
|
}
|
|
|
|
p, li {
|
|
font-size: 1em;
|
|
}
|
|
|
|
.navigation {
|
|
bottom: 15px;
|
|
right: 15px;
|
|
}
|
|
|
|
.nav-btn {
|
|
padding: 10px 20px;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.slide-number {
|
|
bottom: 15px;
|
|
left: 15px;
|
|
padding: 8px 15px;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.home-btn {
|
|
top: 15px;
|
|
left: 15px;
|
|
padding: 10px 20px;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.comparison-table {
|
|
font-size: 0.8em;
|
|
}
|
|
|
|
.comparison-table th,
|
|
.comparison-table td {
|
|
padding: 8px;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<!-- Home Button -->
|
|
<a href="electronicTaxInvoice_index.php" class="home-btn">
|
|
<span>🏠</span>
|
|
<span>전략선택</span>
|
|
</a>
|
|
|
|
<div class="presentation-container">
|
|
<!-- Slide 1: Cover -->
|
|
<div class="slide active">
|
|
<div class="slide-content">
|
|
<h1>장기적 전자세금계산서 발행 전략</h1>
|
|
<h2 style="border: none; color: #43cea2;">E-Tax Invoice Solution - 중장기 발전 계획</h2>
|
|
<div style="text-align: center; margin-top: 50px;">
|
|
<p style="font-size: 1.5em; color: #185a9d;">바로빌 API 기반 완전 자동화 시스템</p>
|
|
<p style="margin-top: 30px; color: #666;">발급 · 전송 · 보관 · 국세청 전송까지 원스톱 처리</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 2: Project Overview -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>프로젝트 개요</h2>
|
|
|
|
<div class="conclusion-box">
|
|
<h3 style="color: white; margin-top: 0;">배경 및 목표</h3>
|
|
<p style="font-size: 1.2em;">세무사 제출용 금전출납부/일일일보와 부가세 신고 정확도를 높이기 위해<br>전자세금계산서 발급·전송·보관을 자동화</p>
|
|
</div>
|
|
|
|
<div style="margin-top: 30px;">
|
|
<h3>핵심 목표</h3>
|
|
<ul>
|
|
<li><strong>자동화:</strong> 거래(매출/매입)에서 세금계산서 생성→전자서명→발급→NTS 전송→수취 통지를 자동화</li>
|
|
<li><strong>표준화:</strong> 수정·취소·역발행 흐름까지 표준화하여 가산세 리스크 최소화</li>
|
|
<li><strong>멀티테넌시:</strong> 여러 고객사(테넌트)의 문서/인증서를 안전하게 격리 관리</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div style="margin-top: 30px;">
|
|
<h3>프로젝트 범위</h3>
|
|
<div class="company-info">
|
|
<div class="info-card">
|
|
<h4>✅ 포함 범위</h4>
|
|
<p>세금계산서/계산서(면세) 발급, 임시저장, 대량발급, 역발행, 위수탁, 수정발급, 취소, 국세청 전송/전송결과 조회, 인쇄본/거래명세서 동시 출력, 수취/회신 상태 추적</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>❌ 제외 범위</h4>
|
|
<p>실제 부가세 신고 파일 전송(향후 로드맵), 영수증 OCR, 오프라인 종이계산서 처리</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 3: Compliance -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>핵심 컴플라이언스 (가산세 포인트)</h2>
|
|
|
|
<div class="warning-box">
|
|
<h3>⚠️ 발급기한 및 가산세 규정</h3>
|
|
<ul>
|
|
<li><strong>발급기한:</strong> 공급월 다음달 10일까지 발급 (휴일이면 다음 영업일)</li>
|
|
<li><strong>지연발급 가산세:</strong> 공급가액의 1% (수취자 0.5% 불이익 존재)</li>
|
|
<li><strong>미발급 가산세:</strong> 2% + 매입세액 불공제(수취자)</li>
|
|
<li><strong>전송지연/미전송:</strong> 발급일 다음날까지 국세청 전송 권고 (지연 0.3%, 미전송 0.5%)</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div style="margin-top: 30px;">
|
|
<h3>제품 가산세 예방 전략</h3>
|
|
<div class="feature-list">
|
|
<div class="feature-item">
|
|
<h4>📅 사전 알림</h4>
|
|
<p>마감 T-2, T-1에 지연 위험 대시보드/알림 발송</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>⚡ 자동 전송</h4>
|
|
<p>발급과 동시에 "자동 전송"을 기본값으로 권장</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>🔍 실시간 모니터링</h4>
|
|
<p>미발급/지연 건 실시간 추적 및 알림</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>📊 리스크 대시보드</h4>
|
|
<p>가산세 위험도별 색상 코드 표시</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 4: Architecture Overview -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>시스템 아키텍처 개요</h2>
|
|
|
|
<div class="flow-diagram">
|
|
<pre>
|
|
[ERP/MES/주문] → [세금계산서 빌더] → (임시/검증) → [전자서명]
|
|
↓
|
|
[발급]
|
|
↓
|
|
[수취자 통지(Email/SMS)] [국세청 전송]
|
|
↓
|
|
[전송결과 수신/상태동기화] → [리포트/알람]
|
|
</pre>
|
|
</div>
|
|
|
|
<div style="margin-top: 30px;">
|
|
<h3>아키텍처 핵심 전략</h3>
|
|
<ul>
|
|
<li><strong>멀티테넌시:</strong> 테넌트별 바로빌 API Key/인증서 보관 → 발급/조회 요청 시 동적 라우팅</li>
|
|
<li><strong>스케줄러:</strong> 실시간(소량) + 야간 배치(대량) 혼용</li>
|
|
<li><strong>멱등설계:</strong> (tenant_id, supplier_bizno, issue_key) 고유키로 중복 발급 방지</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div style="margin-top: 30px;">
|
|
<h3>상태 머신 (State Machine)</h3>
|
|
<div class="flow-diagram">
|
|
<pre>
|
|
DRAFT (임시저장)
|
|
↓
|
|
READY_TO_ISSUE (검증완료)
|
|
↓
|
|
SIGNED (전자서명완료)
|
|
↓
|
|
ISSUED (발급완료)
|
|
↓
|
|
SENT_NTS (국세청전송)
|
|
↓
|
|
NTS_ACCEPTED (접수완료) / NTS_REJECTED (반려)
|
|
|
|
부가 상태: CANCELLED (발급취소), MODIFIED (수정발급), RECALLED (회수)
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 5: Functional Requirements -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>기능 요구사항 (Functional Requirements)</h2>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th>기능명</th>
|
|
<th>설명</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>F1</strong></td>
|
|
<td>사업자/인증서 등록</td>
|
|
<td>테넌트별 공동/금융인증서 등록 및 갱신 알림</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>F2</strong></td>
|
|
<td>문서 작성/임시저장/검증</td>
|
|
<td>필수필드 검증 (공급가/부가세, 공급자/공급받는자, 작성일, 영수/청구)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>F3</strong></td>
|
|
<td>발급/전송</td>
|
|
<td>전자서명→발급→수취자 통지→국세청 전송 (자동/지연)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>F4</strong></td>
|
|
<td>수정/취소</td>
|
|
<td>발급오류 시 수정사유코드 기반 재발행, 발급완료건 취소</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>F5</strong></td>
|
|
<td>역발행/위수탁</td>
|
|
<td>매입자발행, 위수탁 발행 (수탁사업자 정보 포함)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>F6</strong></td>
|
|
<td>상태 추적/감사로그</td>
|
|
<td>전 상태 머신 관리, 전송결과/회신 수신</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>F7</strong></td>
|
|
<td>대량처리/스케줄러</td>
|
|
<td>엑셀/CSV 업로드, 밤샘 배치/재시도 큐</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>F8</strong></td>
|
|
<td>리포트/내보내기</td>
|
|
<td>월별 발급현황, 미전송/지연 위험 알람, CSV/XLSX 추출</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 6: Non-Functional Requirements -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>비기능 요구사항 (Non-Functional Requirements)</h2>
|
|
|
|
<div class="company-info">
|
|
<div class="info-card">
|
|
<h4>N1. 멀티테넌시 격리</h4>
|
|
<p>모든 테이블 tenant_id 파티션</p>
|
|
<p>인증서/키 KMS 보관</p>
|
|
<p>테넌트별 데이터 완전 격리</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>N2. 보안/컴플라이언스</h4>
|
|
<p>전송·저장 암호화</p>
|
|
<p>최소권한 원칙 적용</p>
|
|
<p>전자서명 키 관리</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>N3. 가용성/복구</h4>
|
|
<p>재시도/멱등키 설계</p>
|
|
<p>장애 시 수동 재전송 기능</p>
|
|
<p>백업 및 복구 전략</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 7: Database Schema -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>데이터베이스 스키마 설계</h2>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>테이블명</th>
|
|
<th>주요 필드</th>
|
|
<th>용도</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>tenants</strong></td>
|
|
<td>id, name, bizno, tax_policy</td>
|
|
<td>고객사(테넌트) 기본정보</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>certificates</strong></td>
|
|
<td>id, tenant_id, type, subject, valid_from, valid_to, kms_key_ref, status</td>
|
|
<td>공동/금융인증서 관리</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>tax_invoices</strong></td>
|
|
<td>id, tenant_id, issue_key, type, purpose, supply_amt, vat, total, write_date, supply_date, state, nts_receipt_no</td>
|
|
<td>세금계산서 메인 정보</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>parties</strong></td>
|
|
<td>id, tenant_id, role, bizno, corp_name, ceo, addr, email, tel, bank</td>
|
|
<td>공급자/수취자/수탁자 정보</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>line_items</strong></td>
|
|
<td>id, invoice_id, item_name, spec, qty, unit_price, supply_amt, vat, vat_type</td>
|
|
<td>세금계산서 품목 상세</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>events</strong></td>
|
|
<td>id, invoice_id, event_type, payload, created_at, actor</td>
|
|
<td>발급/전송/취소 등 이벤트 로그</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 8: Barobill Integration -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>바로빌 연동 절차 (핵심 플로우)</h2>
|
|
|
|
<ol style="font-size: 1.1em; line-height: 2;">
|
|
<li><strong>테넌트 생성/인증서 등록:</strong> 테넌트가 보유한 인증서(공동/금융)를 시스템에 등록 (바로빌 API 지원)</li>
|
|
<li><strong>문서 생성/검증:</strong> 공급자·수취자·품목·합계·작성일·영수/청구·과세유형 검증, 필수값 누락/금액합 불일치 차단</li>
|
|
<li><strong>전자서명 & 발급:</strong> API 호출로 전자서명→발급</li>
|
|
<li><strong>국세청 전송:</strong> 발급과 동시에 즉시 전송(기본), 결과 폴링/웹훅 수신</li>
|
|
<li><strong>수취자 통지:</strong> 이메일/SMS 발송 (인쇄본/거래명세서 링크 포함)</li>
|
|
<li><strong>상태 동기화:</strong> 접수/반려/재전송/회수·취소/수정 발급까지 단일 타임라인으로 관리</li>
|
|
<li><strong>리포트:</strong> 지연 위험 건, 미전송 건, 반려 사유 집계. 월별 발급·수정·취소 현황</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 9: Issue Types -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>발급유형별 처리 규칙</h2>
|
|
|
|
<div class="feature-list">
|
|
<div class="feature-item">
|
|
<h4>📄 정발행 (공급자발행)</h4>
|
|
<p>일반 케이스. 작성일은 공급시기 기준(또는 월말 합산), 다음달 10일 기한</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>🔄 역발행 (매입자발행)</h4>
|
|
<p>공급자가 지연 시 매입자가 작성→공급자 승인·서명 후 발급. 권한·승인 라우팅 필요</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>🤝 위수탁 발급</h4>
|
|
<p>수탁자 정보(수탁사업자 등록번호/상호 등) 포함. 원사업자와 링크 보존</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>✏️ 수정발급</h4>
|
|
<p>과오 기재 시 수정사유코드에 따른 금액/작성일/참조 규칙 적용 (원문서 참조키 필수)</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>❌ 발급취소/회수</h4>
|
|
<p>발급당일/월내 등 조건별 허용범위 확인 후 처리</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 10: Exception Handling -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>예외/재처리 설계</h2>
|
|
|
|
<div class="company-info">
|
|
<div class="info-card">
|
|
<h4>🔴 NTS_REJECTED (국세청 반려)</h4>
|
|
<p>반려사유 매핑 테이블로 사용자 가이드</p>
|
|
<p>수정 발급/재전송 자동화</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>⏱️ 전송 타임아웃</h4>
|
|
<p>지수적 백오프 재시도</p>
|
|
<p>일정횟수 초과 시 운영자 알림</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>📜 인증서 만료</h4>
|
|
<p>만료 30/7/1일 전 사전 알림</p>
|
|
<p>발급 차단 및 교체 안내</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 11: UI/UX Flow -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>UI/업무흐름</h2>
|
|
|
|
<div class="feature-list">
|
|
<div class="feature-item">
|
|
<h4>📝 발급작성 화면</h4>
|
|
<p>공급자/수취자/품목/합계/작성일/영수·청구 입력</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>⚠️ 오류검증 패널</h4>
|
|
<p>필드 오류/가산세 위험 경고 실시간 표시</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>📊 전송상태 타임라인</h4>
|
|
<p>발급→전송→접수/반려 상태 추적</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>🛠️ 수정/취소 마법사</h4>
|
|
<p>사유코드 안내 및 처리 가이드</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>📈 리포트 대시보드</h4>
|
|
<p>미전송/지연/반려 TOP 리스트, 월별 통계</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 12: Test Scenarios -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>테스트 시나리오</h2>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th>시나리오명</th>
|
|
<th>검증 내용</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>T1</strong></td>
|
|
<td>월말합산 발급</td>
|
|
<td>작성일=말일 + 다음달 10일 전 자동 알람</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>T2</strong></td>
|
|
<td>역발행 승인 워크플로우</td>
|
|
<td>매입자 작성→공급자 승인→서명</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>T3</strong></td>
|
|
<td>수정사유코드별 검증</td>
|
|
<td>증감/취소/환입별 금액/참조 검증</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>T4</strong></td>
|
|
<td>반려사유별 재전송</td>
|
|
<td>반려사유 매핑→수정→재전송 루프</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>T5</strong></td>
|
|
<td>인증서 만료/교체</td>
|
|
<td>인증서 만료 시나리오 및 재발급</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 13: Development Roadmap -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>개발 로드맵 (장기)</h2>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>단계</th>
|
|
<th>기간</th>
|
|
<th>주요 마일스톤</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>Phase 1</strong></td>
|
|
<td>W1-2</td>
|
|
<td>바로빌 샌드박스 키/인증서 연동, 스키마/상태 머신 구축</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 2</strong></td>
|
|
<td>W3-4</td>
|
|
<td>발급/전송/조회/취소/수정 API 연결, 리포트 MVP</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 3</strong></td>
|
|
<td>W5</td>
|
|
<td>2개 테넌트 베타, 지연 알림/재전송 안정화</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 4</strong></td>
|
|
<td>W6</td>
|
|
<td>운영전환 + 운영가이드/감사로그 정비</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 5</strong></td>
|
|
<td>W7-8</td>
|
|
<td>대량처리/스케줄러 고도화, 엑셀/CSV 업로드</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 6</strong></td>
|
|
<td>W9-10</td>
|
|
<td>역발행/위수탁 워크플로우 구현</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 7</strong></td>
|
|
<td>W11-12</td>
|
|
<td>모바일 앱 개발 (현장 발급/조회)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 8</strong></td>
|
|
<td>W13-14</td>
|
|
<td>ERP 연동 커넥터 개발 (더존/영림원)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 9</strong></td>
|
|
<td>W15-16</td>
|
|
<td>AI 기반 오류 예측 및 자동 정정 기능</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Phase 10</strong></td>
|
|
<td>W17-18</td>
|
|
<td>홈택스 신고보조 파일 생성 기능</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 14: KPI -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>성공 지표 (KPI)</h2>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>지표</th>
|
|
<th>현재</th>
|
|
<th>목표</th>
|
|
<th>측정 방법</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>발급·전송 자동화율</strong></td>
|
|
<td>85%</td>
|
|
<td>95%</td>
|
|
<td>자동발급 건수 / 전체 발급 건수</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>지연/미전송 건수</strong></td>
|
|
<td>월 평균 15건</td>
|
|
<td>월 0건</td>
|
|
<td>기한 내 미전송 건수</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>반려→정정 소요시간</strong></td>
|
|
<td>평균 3시간</td>
|
|
<td>평균 30분</td>
|
|
<td>반려 시점부터 재전송까지 시간</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>인증서 만료 사고</strong></td>
|
|
<td>연 2건</td>
|
|
<td>연 0건</td>
|
|
<td>만료로 인한 발급 차단 건수</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>시스템 가용성</strong></td>
|
|
<td>99.5%</td>
|
|
<td>99.9%</td>
|
|
<td>Uptime 모니터링</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 15: Future Roadmap -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>향후 로드맵</h2>
|
|
|
|
<div class="company-info">
|
|
<div class="info-card">
|
|
<h4>📊 홈택스 신고보조</h4>
|
|
<p>내부양식→세무사 협업</p>
|
|
<p>부가세 신고서 자동 작성</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>💰 위·수탁 정산 리포트</h4>
|
|
<p>위수탁 거래 정산 자동화</p>
|
|
<p>대손세액 조정 보조</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>🔗 ERP 커넥터</h4>
|
|
<p>더존/영림원 등 연동</p>
|
|
<p>실시간 데이터 동기화</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>🤖 AI 오류 예측</h4>
|
|
<p>발급 전 오류 사전 감지</p>
|
|
<p>자동 정정 제안</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>📱 모바일 앱</h4>
|
|
<p>현장 발급/조회</p>
|
|
<p>푸시 알림 지원</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h4>🔐 블록체인 보관</h4>
|
|
<p>위변조 방지</p>
|
|
<p>장기 보관 신뢰성 향상</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 16: Conclusion -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h2>결론</h2>
|
|
|
|
<div class="conclusion-box">
|
|
<h3 style="color: white; margin-top: 0;">전자세금계산서 발행의 완전 자동화</h3>
|
|
<p style="font-size: 1.3em;">발급부터 국세청 전송까지 원스톱 처리로<br>가산세 리스크를 제로화하고 업무 효율성을 극대화</p>
|
|
</div>
|
|
|
|
<div style="margin-top: 40px;">
|
|
<h3>핵심 성과 목표</h3>
|
|
<div class="feature-list">
|
|
<div class="feature-item">
|
|
<h4>⚡ 자동화율 95%</h4>
|
|
<p>수동 작업 최소화</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>📉 가산세 ZERO</h4>
|
|
<p>지연/미전송 건수 0건</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>⏱️ 처리시간 단축</h4>
|
|
<p>반려→정정 30분 이내</p>
|
|
</div>
|
|
<div class="feature-item">
|
|
<h4>🔐 완벽한 보안</h4>
|
|
<p>멀티테넌시 격리 관리</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slide 17: Thank You -->
|
|
<div class="slide">
|
|
<div class="slide-content">
|
|
<h1 style="font-size: 4em; margin-bottom: 40px;">감사합니다</h1>
|
|
<div style="text-align: center;">
|
|
<p style="font-size: 1.5em; color: #185a9d; margin-bottom: 30px;">장기적 전자세금계산서 발행 전략</p>
|
|
<div style="margin-top: 50px; padding: 30px; background: #e8f5e9; border-radius: 15px;">
|
|
<h3>문의 및 피드백</h3>
|
|
<p style="margin-top: 20px;">본 계획안에 대한 의견이나 추가 논의가 필요하신 경우</p>
|
|
<p>프로젝트 팀으로 연락 주시기 바랍니다.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="slide-number">
|
|
<span id="currentSlide">1</span> / <span id="totalSlides">17</span>
|
|
</div>
|
|
|
|
<div class="navigation">
|
|
<button class="nav-btn" id="prevBtn" onclick="changeSlide(-1)">← 이전</button>
|
|
<button class="nav-btn" id="nextBtn" onclick="changeSlide(1)">다음 →</button>
|
|
</div>
|
|
|
|
<script>
|
|
let currentSlide = 1;
|
|
const totalSlides = 17;
|
|
let touchStartX = 0;
|
|
let touchEndX = 0;
|
|
|
|
document.getElementById('totalSlides').textContent = totalSlides;
|
|
|
|
function showSlide(n) {
|
|
const slides = document.querySelectorAll('.slide');
|
|
|
|
if (n > totalSlides) {
|
|
currentSlide = 1;
|
|
}
|
|
if (n < 1) {
|
|
currentSlide = totalSlides;
|
|
}
|
|
|
|
slides.forEach(slide => {
|
|
slide.classList.remove('active');
|
|
});
|
|
|
|
slides[currentSlide - 1].classList.add('active');
|
|
document.getElementById('currentSlide').textContent = currentSlide;
|
|
|
|
document.getElementById('prevBtn').disabled = (currentSlide === 1);
|
|
document.getElementById('nextBtn').disabled = (currentSlide === totalSlides);
|
|
}
|
|
|
|
function changeSlide(direction) {
|
|
currentSlide += direction;
|
|
showSlide(currentSlide);
|
|
}
|
|
|
|
document.addEventListener('keydown', function(event) {
|
|
if (event.key === 'ArrowLeft') {
|
|
changeSlide(-1);
|
|
} else if (event.key === 'ArrowRight' || event.key === ' ') {
|
|
event.preventDefault();
|
|
changeSlide(1);
|
|
}
|
|
});
|
|
|
|
document.addEventListener('touchstart', function(event) {
|
|
touchStartX = event.changedTouches[0].screenX;
|
|
});
|
|
|
|
document.addEventListener('touchend', function(event) {
|
|
touchEndX = event.changedTouches[0].screenX;
|
|
handleSwipe();
|
|
});
|
|
|
|
function handleSwipe() {
|
|
if (touchEndX < touchStartX - 50) {
|
|
changeSlide(1);
|
|
}
|
|
if (touchEndX > touchStartX + 50) {
|
|
changeSlide(-1);
|
|
}
|
|
}
|
|
|
|
showSlide(currentSlide);
|
|
</script>
|
|
</body>
|
|
</html>
|