Initial commit apps directory with .gitignore

This commit is contained in:
2026-02-22 15:15:41 +08:00
commit 0aa8cdd72c
228 changed files with 69672 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
SURAT PERINGATAN TINGKAT 1 (SP 1)
(Skor Pelanggaran Total: 50)
Nomor Surat:
Perihal: Surat Peringatan Tingkat 1 (SP 1)
Yth. Bapak/Ibu Wali Murid dari:
Keterangan
:
Data Siswa
Nama Siswa
:
[Nama Lengkap Siswa]
Nomor Induk Siswa (NIS)
:
[student id]
Kelas
:
[Kelas Siswa]
Dengan hormat,
Berdasarkan hasil evaluasi dan rekapitulasi data pelanggaran tata tertib sekolah, dengan ini kami sampaikan bahwa siswa/i tersebut di atas telah mencapai total Skor Pelanggaran 50.
Pelanggaran tersebut meliputi:
1. [Contoh Pelanggaran 1, Tanggal] (Skor: [Angka])
2. [Contoh Pelanggaran 2, Tanggal] (Skor: [Angka])
3. [dan seterusnya, hingga mencapai total 50 skor]
Konsekuensi:
1. Surat Peringatan Tingkat 1 (SP 1) ini merupakan teguran lisan dan tertulis pertama.
2. Siswa diwajibkan mengikuti program pembinaan dari Guru Bimbingan Konseling (BK) selama [Jumlah] minggu/bulan.
3. Orang tua/wali diminta untuk melakukan pertemuan konsultasi dengan Wali Kelas dan Guru BK untuk membahas solusi dan komitmen perubahan perilaku.
4. Siswa wajib menunjukkan perubahan sikap positif dan tidak melakukan pelanggaran dalam jangka waktu [Jumlah] bulan ke depan.
Apabila siswa kembali melakukan pelanggaran hingga mencapai total Skor Pelanggaran 75, maka sekolah akan menerbitkan Surat Peringatan Tingkat 2 (SP 2).
Demikian surat ini disampaikan agar menjadi perhatian dan ditindaklanjuti sebagaimana mestinya. Atas perhatian dan kerja sama Bapak/Ibu, kami ucapkan terima kasih.
Badung, [Tanggal Hari Ini]
Pihak Sekolah
Wali Murid / Orang Tua
Guru Bimbingan Konseling

View File

@@ -0,0 +1,35 @@
SURAT PERINGATAN TINGKAT 2 (SP 2)
(Skor Pelanggaran Total: 75)
Nomor Surat:
Perihal: Surat Peringatan Tingkat 2 (SP 2
Yth. Bapak/Ibu Wali Murid dari:
Keterangan
:
Data Siswa
Nama Siswa
:
[Nama Lengkap Siswa]
Nomor Induk Siswa (NIS)
:
[student id]
Kelas
:
[Kelas Siswa]
Dengan hormat,
Merujuk pada Surat Peringatan Tingkat 1 (SP 1) tertanggal [Tanggal SP 1 diterbitkan], dan setelah dilakukannya pembinaan, dengan ini kami sampaikan bahwa siswa/i tersebut di atas kembali melakukan pelanggaran tata tertib sekolah hingga mencapai total Skor Pelanggaran 75.
Pelanggaran tersebut menunjukkan kurangnya komitmen siswa dalam mematuhi tata tertib sekolah setelah diterbitkannya SP 1.
Konsekuensi:
1. Surat Peringatan Tingkat 2 (SP 2) ini merupakan peringatan keras kedua.
2. Siswa dikenakan sanksi berupa Skorsing Belajar selama [Jumlah Hari] hari (misalnya, 3-5 hari). Selama skorsing, siswa wajib menyelesaikan tugas akademik dari sekolah di rumah di bawah pengawasan orang tua/wali.
3. Orang tua/wali diwajibkan membuat Surat Pernyataan Komitmen yang ditandatangani di atas materai, yang menyatakan kesediaan untuk aktif mengawasi dan membimbing siswa di rumah dan berjanji bahwa siswa tidak akan mengulangi pelanggaran serupa.
4. Jika siswa kembali melakukan pelanggaran hingga mencapai total Skor Pelanggaran 100, maka sekolah akan menerbitkan Surat Peringatan Tingkat 3 (SP 3) yang berujung pada pengembalian siswa kepada orang tua/wali.
Kami memohon Bapak/Ibu untuk bekerja sama dengan sekolah demi perbaikan perilaku siswa.
Demikian surat ini disampaikan untuk ditindaklanjuti.
Badung, [Tanggal Hari Ini]
Pihak Sekolah
Wali Murid / Orang Tua
Guru Bimbingan Konseling

View File

@@ -0,0 +1,35 @@
SURAT PERINGATAN TINGKAT 3 (SP 3)
(Skor Pelanggaran Total: 100)
Nomor Surat:
Perihal: Surat Peringatan Tingkat 3 (SP 3) dan Keputusan Pengembalian Siswa
Yth. Bapak/Ibu Wali Murid dari:
Keterangan
:
Data Siswa
Nama Siswa
:
[Nama Lengkap Siswa]
Nomor Induk Siswa (NIS)
:
[student id]
Kelas
:
[Kelas Siswa]
Dengan hormat,
Mengacu pada:
1. Surat Peringatan Tingkat 1 (SP 1) tertanggal [Tanggal SP 1].
2. Surat Peringatan Tingkat 2 (SP 2) tertanggal [Tanggal SP 2].
3. Surat Pernyataan Komitmen Orang Tua/Wali tertanggal [Tanggal Surat Pernyataan].
Dengan sangat menyesal kami sampaikan bahwa siswa/i tersebut di atas telah kembali melakukan pelanggaran serius dan/atau akumulasi pelanggaran ringan lainnya hingga mencapai total Skor Pelanggaran 100.
Meskipun telah dilakukan berbagai upaya pembinaan, pendampingan, dan penerapan sanksi skorsing, siswa/i menunjukkan tidak adanya perubahan signifikan dalam kepatuhan terhadap tata tertib sekolah.
Keputusan Akhir Sekolah:
Berdasarkan pertimbangan Dewan Guru, Komite Sekolah, dan sesuai dengan ketentuan Tata Tertib Sekolah Pasal [Nomor Pasal terkait SP 3], maka sekolah memutuskan untuk:
1. Mengembalikan siswa/i [Nama Siswa] kepada orang tua/wali terhitung sejak tanggal [Tanggal Efektif Pengembalian].
2. Dengan keputusan ini, siswa/i tersebut tidak lagi terdaftar sebagai peserta didik di [Nama Sekolah].
3. Orang tua/wali dipersilakan mengurus kepindahan siswa ke sekolah lain. Sekolah akan membantu dalam proses administrasi perpindahan.
Keputusan ini diambil sebagai langkah terakhir dan demi menjaga iklim belajar yang kondusif di lingkungan sekolah. Kami berharap Bapak/Ibu dapat memberikan perhatian dan pembinaan yang lebih intensif di luar lingkungan sekolah.
Demikian Surat Peringatan Tingkat 3 ini disampaikan untuk diperhatikan dan dilaksanakan.

View File

@@ -0,0 +1,21 @@
# Folder Gambar Publik
Folder ini berisi aset gambar untuk aplikasi SIPASI.
## File yang diperlukan:
### 1. `logo.png`
- **Kegunaan**: Logo aplikasi dan Favicon
- **Ukuran yang disarankan**: 512x512 px (minimal 192x192 px)
- **Format**: PNG dengan background transparan
### 2. `kop-sekolah.png`
- **Kegunaan**: Header cetak laporan
- **Ukuran yang disarankan**: Lebar 800px (tinggi menyesuaikan)
- **Format**: PNG atau JPG
## Cara Mengakses
Gambar dapat diakses melalui URL:
- Logo: `http://localhost:3007/images/logo.png`
- KOP: `http://localhost:3007/images/kop-sekolah.png`

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

View File

@@ -0,0 +1,67 @@
import XLSX from 'xlsx';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Template Kriteria Pelanggaran
const violationRulesData = [
{ Kode: 'A1', Deskripsi: 'Membawa/menggunakan senjata tajam/api', Kategori: 'Perilaku', Skor: 100, Sanksi: '' },
{ Kode: 'A2', Deskripsi: 'Membawa/menggunakan narkoba/miras', Kategori: 'Perilaku', Skor: 100, Sanksi: '' },
{ Kode: 'A3', Deskripsi: 'Berkelahi/tawuran', Kategori: 'Perilaku', Skor: 100, Sanksi: '' },
{ Kode: 'A4', Deskripsi: 'Merusak sarana sekolah', Kategori: 'Perilaku', Skor: 50, Sanksi: 'Mengganti sarana' },
{ Kode: 'A5', Deskripsi: 'Membuat gaduh di kelas', Kategori: 'Perilaku', Skor: 25, Sanksi: '' },
{ Kode: 'B1', Deskripsi: 'Absen tanpa keterangan (Alpha)', Kategori: 'Kerajinan', Skor: 5, Sanksi: '' },
{ Kode: 'B2', Deskripsi: 'Terlambat hadir ke sekolah', Kategori: 'Kerajinan', Skor: 5, Sanksi: '' },
{ Kode: 'B3', Deskripsi: 'Absen ulangan tanpa izin', Kategori: 'Kerajinan', Skor: 10, Sanksi: '' },
{ Kode: 'C1', Deskripsi: 'Seragam tidak sesuai ketentuan', Kategori: 'Kerapian', Skor: 20, Sanksi: '' },
{ Kode: 'C2', Deskripsi: 'Rambut gondrong/tidak rapi', Kategori: 'Kerapian', Skor: 10, Sanksi: '' },
];
const wsViolation = XLSX.utils.json_to_sheet(violationRulesData);
wsViolation['!cols'] = [
{ wch: 8 }, // Kode
{ wch: 50 }, // Deskripsi
{ wch: 15 }, // Kategori
{ wch: 8 }, // Skor
{ wch: 25 }, // Sanksi
];
const wbViolation = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wbViolation, wsViolation, 'Kriteria Pelanggaran');
XLSX.writeFile(wbViolation, path.join(__dirname, 'Template-Import-Kriteria-Pelanggaran.xlsx'));
console.log('✅ Template Kriteria Pelanggaran created!');
// Template Kriteria Prestasi
const achievementCriteriaData = [
{ Tingkat: 'Internasional', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 50 },
{ Tingkat: 'Internasional', Prestasi: 'Juara II', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 45 },
{ Tingkat: 'Internasional', Prestasi: 'Juara III', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 40 },
{ Tingkat: 'Nasional', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 40 },
{ Tingkat: 'Nasional', Prestasi: 'Juara II', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 35 },
{ Tingkat: 'Nasional', Prestasi: 'Juara III', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 30 },
{ Tingkat: 'Provinsi', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 30 },
{ Tingkat: 'Provinsi', Prestasi: 'Juara II', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 25 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 20 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': '1-3 orang', Skor: 18 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': '4-6 orang', Skor: 16 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': '7-12 orang', Skor: 14 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': 'Lebih dari 12 orang', Skor: 12 },
];
const wsAchievement = XLSX.utils.json_to_sheet(achievementCriteriaData);
wsAchievement['!cols'] = [
{ wch: 18 }, // Tingkat
{ wch: 15 }, // Prestasi
{ wch: 12 }, // Jenis
{ wch: 22 }, // Ukuran Kelompok
{ wch: 8 }, // Skor
];
const wbAchievement = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wbAchievement, wsAchievement, 'Kriteria Prestasi');
XLSX.writeFile(wbAchievement, path.join(__dirname, 'Template-Import-Kriteria-Prestasi.xlsx'));
console.log('✅ Template Kriteria Prestasi created!');
console.log('\n📁 Templates saved to public/templates/ folder');