Files
smanab/spj-komite/database/schema.sql

176 lines
5.7 KiB
SQL

-- SPJ Komite MySQL Database Schema
-- Database: db_spjkomite
-- Tabel untuk kode kegiatan
CREATE TABLE IF NOT EXISTS kode_kegiatan (
id INT AUTO_INCREMENT PRIMARY KEY,
kode VARCHAR(100) NOT NULL UNIQUE,
uraian TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel untuk pengaturan/manajemen
CREATE TABLE IF NOT EXISTS pengaturan (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_ketua_komite VARCHAR(255),
bendahara VARCHAR(255),
nama_tim_teknis_a VARCHAR(255),
jabatan_tim_teknis_a VARCHAR(255),
nama_tim_teknis_b VARCHAR(255),
jabatan_tim_teknis_b VARCHAR(255),
nama_tim_teknis_c VARCHAR(255),
jabatan_tim_teknis_c VARCHAR(255),
tahun_anggaran VARCHAR(10),
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tabel untuk RKS (Rencana Kerja dan Syarat)
CREATE TABLE IF NOT EXISTS rks (
id INT AUTO_INCREMENT PRIMARY KEY,
pekerjaan TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Counter untuk nomor dokumen
CREATE TABLE IF NOT EXISTS nomor_counter (
id INT AUTO_INCREMENT PRIMARY KEY,
tahun_anggaran VARCHAR(10) NOT NULL,
counter INT DEFAULT 0,
UNIQUE KEY unique_year (tahun_anggaran)
);
-- Tabel untuk pesanan (surat pesanan)
CREATE TABLE IF NOT EXISTS pesanan (
id INT AUTO_INCREMENT PRIMARY KEY,
tanggal_pesanan DATE NOT NULL,
nomor_pesanan VARCHAR(255) NOT NULL,
penyedia VARCHAR(255) NOT NULL,
nama_jenis_barang VARCHAR(255) NOT NULL,
spesifikasi_teknis VARCHAR(500),
volume DECIMAL(10,2) NOT NULL,
satuan VARCHAR(50) NOT NULL,
keterangan TEXT,
waktu_pengerjaan INT NOT NULL,
batas_tanggal_pengerjaan DATE NOT NULL,
penerima_pesanan VARCHAR(255),
yang_memesan VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_nomor_pesanan (nomor_pesanan)
);
-- Tabel untuk BAP (Berita Acara Pemeriksaan)
CREATE TABLE IF NOT EXISTS bap (
id INT AUTO_INCREMENT PRIMARY KEY,
nomor_bap VARCHAR(255) NOT NULL UNIQUE,
pekerjaan TEXT NOT NULL,
tanggal_pemeriksaan DATE NOT NULL,
nama_tim_teknis_a VARCHAR(255),
nama_tim_teknis_b VARCHAR(255),
nama_tim_teknis_c VARCHAR(255),
jabatan_tim_teknis_a VARCHAR(255),
jabatan_tim_teknis_b VARCHAR(255),
jabatan_tim_teknis_c VARCHAR(255),
tujuan TEXT,
alamat_penyedia TEXT,
ketua_komite VARCHAR(255),
nomor_pesanan VARCHAR(255),
kode_kegiatan VARCHAR(100),
kode_sub_kegiatan VARCHAR(100),
kode_rekening VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_nomor_bap (nomor_bap),
INDEX idx_nomor_pesanan (nomor_pesanan)
);
-- Tabel untuk BAST (Berita Acara Serah Terima)
CREATE TABLE IF NOT EXISTS bast (
id INT AUTO_INCREMENT PRIMARY KEY,
nomor_bast VARCHAR(255) NOT NULL UNIQUE,
tanggal_bast DATE NOT NULL,
nomor_bap VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_nomor_bast (nomor_bast),
INDEX idx_nomor_bap (nomor_bap)
);
-- Tabel untuk Nota
CREATE TABLE IF NOT EXISTS nota (
id INT AUTO_INCREMENT PRIMARY KEY,
nomor INT NOT NULL,
volume DECIMAL(10,2) NOT NULL,
satuan VARCHAR(50) NOT NULL,
nama_barang VARCHAR(255) NOT NULL,
harga_satuan DECIMAL(15,2) NOT NULL,
jumlah DECIMAL(15,2) NOT NULL,
nomor_bap VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_nomor_bap (nomor_bap)
);
-- Tabel untuk Foto Dokumentasi
CREATE TABLE IF NOT EXISTS foto (
id INT AUTO_INCREMENT PRIMARY KEY,
nomor_bap VARCHAR(255) NOT NULL,
related_id VARCHAR(255),
filename VARCHAR(255),
url LONGTEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_nomor_bap (nomor_bap)
);
-- Tabel untuk Aset Aplikasi (Logo dan KOP)
CREATE TABLE IF NOT EXISTS aset_aplikasi (
id INT AUTO_INCREMENT PRIMARY KEY,
tipe VARCHAR(50) NOT NULL UNIQUE,
data_url LONGTEXT,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Insert default aset_aplikasi rows
INSERT INTO aset_aplikasi (tipe, data_url)
VALUES ('logo', NULL), ('kop', NULL)
ON DUPLICATE KEY UPDATE tipe=tipe;
-- Tabel untuk Penyedia (Supplier) dengan KOP
CREATE TABLE IF NOT EXISTS penyedia (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(255) NOT NULL UNIQUE,
alamat TEXT,
kop_url LONGTEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tabel untuk SPJ Lomba (Kegiatan Lomba - Pembayaran Non-Tunai)
CREATE TABLE IF NOT EXISTS spj_lomba (
id INT AUTO_INCREMENT PRIMARY KEY,
nomor_spj VARCHAR(255) NOT NULL UNIQUE,
tanggal DATE NOT NULL,
nama_kegiatan VARCHAR(500) NOT NULL,
jenis_pembayaran VARCHAR(100) NOT NULL,
penerima VARCHAR(255) NOT NULL,
nama_bank VARCHAR(100) NOT NULL,
nomor_rekening VARCHAR(50) NOT NULL,
atas_nama VARCHAR(255) NOT NULL,
nominal DECIMAL(15,2) NOT NULL,
keterangan TEXT,
bukti_transfer LONGTEXT,
kode_kegiatan VARCHAR(100),
kode_sub_kegiatan VARCHAR(100),
kode_rekening VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_nomor_spj (nomor_spj),
INDEX idx_tanggal (tanggal)
);
-- Insert default pengaturan row
INSERT INTO pengaturan (id, nama_ketua_komite, bendahara, tahun_anggaran)
VALUES (1, '', '', '2026')
ON DUPLICATE KEY UPDATE id=id;
-- Insert default counter for current year
INSERT INTO nomor_counter (tahun_anggaran, counter)
VALUES ('2026', 0)
ON DUPLICATE KEY UPDATE tahun_anggaran=tahun_anggaran;