첫 커밋

This commit is contained in:
KIM SU BO committed 2026-10-06 13:37:13 +09:00
commit c2fe648904
30 files changed
+3154

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
[
{
"event_id": "CRDT-EVT-001",
"peer_id": "TERM-A101",
"nsn_code": "1005-01-584-1234",
"operation": "DECREMENT",
"delta": 2400,
"resulting_stock": 22600,
"lamport_clock": 2,
"origin_timestamp": "2026-10-01T10:30:00Z",
"signature": "sig_term_a101_valid_hash"
},
{
"event_id": "CRDT-EVT-002",
"peer_id": "TERM-B202",
"nsn_code": "1005-01-584-1234",
"operation": "DECREMENT",
"delta": 1000,
"resulting_stock": 24000,
"lamport_clock": 2,
"origin_timestamp": "2026-10-01T10:35:00Z",
"signature": "sig_term_b202_valid_hash"
},
{
"event_id": "CRDT-EVT-003",
"peer_id": "TERM-C303",
"nsn_code": "2530-01-450-8899",
"operation": "DECREMENT",
"delta": 5,
"resulting_stock": 3,
"lamport_clock": 5,
"origin_timestamp": "2026-10-02T12:00:00Z",
"signature": "sig_term_c303_valid_hash"
}
]
@@ -0,0 +1,7 @@
nsn_code,item_name,supplier_tier1,supplier_tier2,lead_time_days,baseline_lead_time,single_source_flag,geopolitical_risk_score,raw_material_criticality,failure_rate_monthly,disruption_label
1005-01-584-1234,5.56mm K2 보통탄,Poongsan Corp,Dong-Ah Raw Metals,18,15,0,0.15,0.20,0.01,NORMAL
2530-01-450-8899,K9 유압 서보밸브,Hanwha Aerospace,Moog Precision,145,45,1,0.85,0.92,0.18,CRITICAL_BOTTLENECK
8970-01-345-6789,전투식량 1형(소고기볶음밥),CJ CheilJedang,Local Farms,25,20,0,0.10,0.15,0.00,NORMAL
9130-01-222-3333,JP-8 항공유 (드럼),GS Caltex,MiddleEast Crude,40,30,0,0.65,0.80,0.05,WARNING_VOLATILITY
5998-01-777-8888,전술 통신용 FPGA 반도체 모듈,LIG Nex1,Xilinx/TSMC,320,60,1,0.95,0.98,0.25,DISASTER_OBSOLESCENCE
2920-01-111-2222,K2 전차 점화플러그,Hyundai Rotem,Denso Tech,75,30,1,0.70,0.60,0.12,WARNING_SUPPLY_DELAY
1 nsn_code item_name supplier_tier1 supplier_tier2 lead_time_days baseline_lead_time single_source_flag geopolitical_risk_score raw_material_criticality failure_rate_monthly disruption_label
2 1005-01-584-1234 5.56mm K2 보통탄 Poongsan Corp Dong-Ah Raw Metals 18 15 0 0.15 0.20 0.01 NORMAL
3 2530-01-450-8899 K9 유압 서보밸브 Hanwha Aerospace Moog Precision 145 45 1 0.85 0.92 0.18 CRITICAL_BOTTLENECK
4 8970-01-345-6789 전투식량 1형(소고기볶음밥) CJ CheilJedang Local Farms 25 20 0 0.10 0.15 0.00 NORMAL
5 9130-01-222-3333 JP-8 항공유 (드럼) GS Caltex MiddleEast Crude 40 30 0 0.65 0.80 0.05 WARNING_VOLATILITY
6 5998-01-777-8888 전술 통신용 FPGA 반도체 모듈 LIG Nex1 Xilinx/TSMC 320 60 1 0.95 0.98 0.25 DISASTER_OBSOLESCENCE
7 2920-01-111-2222 K2 전차 점화플러그 Hyundai Rotem Denso Tech 75 30 1 0.70 0.60 0.12 WARNING_SUPPLY_DELAY
+6
View File
@@ -0,0 +1,6 @@
transaction_id,terminal_id,unit_id,nsn_code,item_name,supply_class,tx_type,quantity,current_stock,unit_cost,comms_status,grid_coords,weather_condition,lamport_timestamp,timestamp_utc,prev_hash,record_hash
TX-20261001-001,TERM-A101,BN-01,1005-01-584-1234,5.56mm K2 보통탄,Class_V,RECEIPT,10000,25000,0.45,OFFLINE_LOCAL,52SDJ12345678,CLEAR,1,2026-10-01T08:00:00Z,0000000000000000000000000000000000000000000000000000000000000000,52531766d0f0539725e3d8fd44c54cf792d0f531214c478a6e2af5323466aac1
TX-20261001-002,TERM-A101,BN-01,1005-01-584-1234,5.56mm K2 보통탄,Class_V,ISSUE,2400,22600,0.45,OFFLINE_LOCAL,52SDJ12345678,CLEAR,2,2026-10-01T10:30:00Z,52531766d0f0539725e3d8fd44c54cf792d0f531214c478a6e2af5323466aac1,4a1336df6225a56130d713bffaeaa145045b6da6e9ea44784c78abda36ea8d00
TX-20261002-003,TERM-A102,BN-02,2530-01-450-8899,K9 유압 서보밸브,Class_IX,ISSUE,2,8,3400.0,DEGRADED_EW,52SDJ87654321,HEAVY_RAIN,1,2026-10-02T14:15:00Z,4a1336df6225a56130d713bffaeaa145045b6da6e9ea44784c78abda36ea8d00,911e7e88a87598fd271b04f9b8d42d350f73975f76b0f4c667802c7a04aa53a5
TX-20261003-004,TERM-A101,BN-01,8970-01-345-6789,전투식량 1형(소고기볶음밥),Class_I,ISSUE,350,1650,8.5,OFFLINE_LOCAL,52SDJ12345678,FOG,3,2026-10-03T09:00:00Z,911e7e88a87598fd271b04f9b8d42d350f73975f76b0f4c667802c7a04aa53a5,be6367eacc821c322ad7e33a2c46b53bbb10113c8cb8b8bb697388755392fc62
TX-20261004-005,TERM-A103,BDE-03,9130-01-222-3333,JP-8 항공유 (드럼),Class_III,TRANSFER,50,450,180.0,OFFLINE_P2P,52SDJ55556666,CLEAR,1,2026-10-04T16:40:00Z,be6367eacc821c322ad7e33a2c46b53bbb10113c8cb8b8bb697388755392fc62,3b8125af645689c41da1c5a791e393dbcca9badeecd2530e58c43ee819fb3e6a
1 transaction_id terminal_id unit_id nsn_code item_name supply_class tx_type quantity current_stock unit_cost comms_status grid_coords weather_condition lamport_timestamp timestamp_utc prev_hash record_hash
2 TX-20261001-001 TERM-A101 BN-01 1005-01-584-1234 5.56mm K2 보통탄 Class_V RECEIPT 10000 25000 0.45 OFFLINE_LOCAL 52SDJ12345678 CLEAR 1 2026-10-01T08:00:00Z 0000000000000000000000000000000000000000000000000000000000000000 52531766d0f0539725e3d8fd44c54cf792d0f531214c478a6e2af5323466aac1
3 TX-20261001-002 TERM-A101 BN-01 1005-01-584-1234 5.56mm K2 보통탄 Class_V ISSUE 2400 22600 0.45 OFFLINE_LOCAL 52SDJ12345678 CLEAR 2 2026-10-01T10:30:00Z 52531766d0f0539725e3d8fd44c54cf792d0f531214c478a6e2af5323466aac1 4a1336df6225a56130d713bffaeaa145045b6da6e9ea44784c78abda36ea8d00
4 TX-20261002-003 TERM-A102 BN-02 2530-01-450-8899 K9 유압 서보밸브 Class_IX ISSUE 2 8 3400.0 DEGRADED_EW 52SDJ87654321 HEAVY_RAIN 1 2026-10-02T14:15:00Z 4a1336df6225a56130d713bffaeaa145045b6da6e9ea44784c78abda36ea8d00 911e7e88a87598fd271b04f9b8d42d350f73975f76b0f4c667802c7a04aa53a5
5 TX-20261003-004 TERM-A101 BN-01 8970-01-345-6789 전투식량 1형(소고기볶음밥) Class_I ISSUE 350 1650 8.5 OFFLINE_LOCAL 52SDJ12345678 FOG 3 2026-10-03T09:00:00Z 911e7e88a87598fd271b04f9b8d42d350f73975f76b0f4c667802c7a04aa53a5 be6367eacc821c322ad7e33a2c46b53bbb10113c8cb8b8bb697388755392fc62
6 TX-20261004-005 TERM-A103 BDE-03 9130-01-222-3333 JP-8 항공유 (드럼) Class_III TRANSFER 50 450 180.0 OFFLINE_P2P 52SDJ55556666 CLEAR 1 2026-10-04T16:40:00Z be6367eacc821c322ad7e33a2c46b53bbb10113c8cb8b8bb697388755392fc62 3b8125af645689c41da1c5a791e393dbcca9badeecd2530e58c43ee819fb3e6a
+137
View File
@@ -0,0 +1,137 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "DAT10_Tactical_SupplyChain_Inventory_Schema",
"description": "전술 통신 두절 환경 야전 군수 재고 및 방산 공급망 트랜잭션 표준 입력 스키마",
"type": "object",
"properties": {
"transaction_id": {
"type": "string",
"pattern": "^TX-[A-Z0-9]{8,16}$",
"description": "고유 트랜잭션 식별자 (UUID 또는 해시 기반)"
},
"terminal_id": {
"type": "string",
"pattern": "^TERM-[A-Z0-9]{4,8}$",
"description": "작전 단말기 ID"
},
"unit_id": {
"type": "string",
"pattern": "^(DIV|BDE|BN|CO)-[0-9]{2,4}$",
"description": "부대 제대 식별자"
},
"nsn_code": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{3}-[0-9]{4}$",
"description": "국가재고번호 (NATO Stock Number)"
},
"item_name": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "품목명"
},
"supply_class": {
"type": "string",
"enum": [
"Class_I",
"Class_II",
"Class_III",
"Class_IV",
"Class_V",
"Class_IX"
],
"description": "군수 보급 분류 (I:식량, II:피복장구, III:유류, IV:건설자재, V:탄약, IX:수리부속)"
},
"tx_type": {
"type": "string",
"enum": [
"RECEIPT",
"ISSUE",
"TRANSFER",
"DISPOSAL",
"ADJUSTMENT",
"FIELD_CONSUME"
],
"description": "트랜잭션 유형 (입고, 불출, 이관, 폐기, 재고조정, 야전소모)"
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "변동 수량"
},
"current_stock": {
"type": "integer",
"minimum": 0,
"description": "트랜잭션 발생 직후 로컬 잔여 재고"
},
"unit_cost": {
"type": "number",
"minimum": 0.0,
"description": "단위당 조달 단가 (USD / KRW)"
},
"comms_status": {
"type": "string",
"enum": [
"ONLINE",
"OFFLINE_LOCAL",
"OFFLINE_P2P",
"DEGRADED_EW"
],
"description": "트랜잭션 기록 당시 통신 상태"
},
"grid_coords": {
"type": "string",
"pattern": "^[0-9]{2}[A-Z]{3}[0-9]{8}$",
"description": "MGRS 군사격자 좌표 (예: 52SDJ12345678)"
},
"weather_condition": {
"type": "string",
"enum": [
"CLEAR",
"HEAVY_RAIN",
"SNOW_STORM",
"DESERT_HEAT",
"FOG"
],
"description": "야전 기상 환경"
},
"lamport_timestamp": {
"type": "integer",
"minimum": 0,
"description": "분산 인과율 추적을 위한 램포트 논리 시계 (Lamport Logical Clock)"
},
"timestamp_utc": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 UTC 생성 일시"
},
"prev_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "이전 로컬 트랜잭션 레코드의 SHA-256 해시"
},
"record_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "무결성 보증을 위한 본 트랜잭션의 SHA-256 해시"
}
},
"required": [
"transaction_id",
"terminal_id",
"unit_id",
"nsn_code",
"item_name",
"supply_class",
"tx_type",
"quantity",
"current_stock",
"comms_status",
"lamport_timestamp",
"timestamp_utc",
"prev_hash",
"record_hash"
],
"additionalProperties": false
}
+80
View File
@@ -0,0 +1,80 @@
-- DAT10 전술 오프라인 단말 로컬 SQLite DB 스키마
PRAGMA foreign_keys = ON;
-- 1. 마스터 재고 품목 테이블
CREATE TABLE IF NOT EXISTS inventory_items (
nsn_code TEXT PRIMARY KEY,
item_name TEXT NOT NULL,
supply_class TEXT NOT NULL CHECK(supply_class IN ('Class_I', 'Class_II', 'Class_III', 'Class_IV', 'Class_V', 'Class_IX')),
criticality_level TEXT DEFAULT 'NORMAL' CHECK(criticality_level IN ('CRITICAL', 'HIGH', 'NORMAL', 'LOW')),
unit_cost REAL NOT NULL DEFAULT 0.0,
safety_stock_threshold INTEGER NOT NULL DEFAULT 10,
total_local_stock INTEGER NOT NULL DEFAULT 0,
crdt_clock INTEGER NOT NULL DEFAULT 0,
updated_at_utc TEXT NOT NULL
);
-- 2. 오프라인 트랜잭션 및 해시체인 로그 테이블
CREATE TABLE IF NOT EXISTS offline_transactions (
transaction_id TEXT PRIMARY KEY,
terminal_id TEXT NOT NULL,
unit_id TEXT NOT NULL,
nsn_code TEXT NOT NULL,
tx_type TEXT NOT NULL CHECK(tx_type IN ('RECEIPT', 'ISSUE', 'TRANSFER', 'DISPOSAL', 'ADJUSTMENT', 'FIELD_CONSUME')),
quantity INTEGER NOT NULL CHECK(quantity > 0),
stock_after INTEGER NOT NULL CHECK(stock_after >= 0),
comms_status TEXT NOT NULL,
grid_coords TEXT,
weather_condition TEXT,
lamport_timestamp INTEGER NOT NULL,
timestamp_utc TEXT NOT NULL,
prev_hash TEXT NOT NULL,
record_hash TEXT NOT NULL,
sync_status TEXT DEFAULT 'PENDING' CHECK(sync_status IN ('PENDING', 'SYNCED_P2P', 'SYNCED_CLOUD', 'CONFLICT_LOCKED')),
FOREIGN KEY(nsn_code) REFERENCES inventory_items(nsn_code)
);
-- 3. CRDT 양방향 동기화 및 충돌 큐 테이블
CREATE TABLE IF NOT EXISTS sync_conflict_queue (
conflict_id TEXT PRIMARY KEY,
transaction_id TEXT NOT NULL,
nsn_code TEXT NOT NULL,
local_stock INTEGER NOT NULL,
incoming_stock INTEGER NOT NULL,
local_clock INTEGER NOT NULL,
incoming_clock INTEGER NOT NULL,
conflict_reason TEXT NOT NULL,
hitl_status TEXT DEFAULT 'PENDING_REVIEW' CHECK(hitl_status IN ('PENDING_REVIEW', 'APPROVED_LOCAL', 'APPROVED_REMOTE', 'MANUAL_MERGED', 'REJECTED')),
resolved_by TEXT,
resolved_stock INTEGER,
resolution_memo TEXT,
resolved_at_utc TEXT,
FOREIGN KEY(transaction_id) REFERENCES offline_transactions(transaction_id)
);
-- 4. P2P 피어 단말 정보 테이블
CREATE TABLE IF NOT EXISTS p2p_peers (
peer_terminal_id TEXT PRIMARY KEY,
unit_id TEXT NOT NULL,
last_known_ip TEXT,
last_sync_timestamp TEXT,
last_sync_lamport INTEGER DEFAULT 0,
trust_score REAL DEFAULT 1.0
);
-- 5. 공급망 재난 및 이상 징후 알림 테이블
CREATE TABLE IF NOT EXISTS supply_disaster_alerts (
alert_id TEXT PRIMARY KEY,
nsn_code TEXT NOT NULL,
alert_type TEXT NOT NULL,
severity TEXT NOT NULL CHECK(severity IN ('CRITICAL', 'WARNING', 'INFO')),
confidence_score REAL NOT NULL,
description TEXT NOT NULL,
detected_at_utc TEXT NOT NULL,
is_acknowledged INTEGER DEFAULT 0
);
-- 인덱스 생성
CREATE INDEX IF NOT EXISTS idx_tx_timestamp ON offline_transactions(timestamp_utc);
CREATE INDEX IF NOT EXISTS idx_tx_nsn ON offline_transactions(nsn_code);
CREATE INDEX IF NOT EXISTS idx_tx_sync_status ON offline_transactions(sync_status);