713 lines
20 KiB
Markdown
713 lines
20 KiB
Markdown
# SKPL/SRS - WebGIS Poverty Mapping Application
|
|
## Software Requirements Specification & Project Implementation Plan
|
|
|
|
**Dokumen Spesifikasi Kebutuhan Perangkat Lunak (SKPL)**
|
|
**Versi:** 1.0
|
|
**Tanggal:** May 2026
|
|
**Status:** Final
|
|
|
|
---
|
|
|
|
## 1. RINGKASAN EKSEKUTIF
|
|
|
|
### 1.1 Deskripsi Proyek
|
|
Aplikasi WebGIS Poverty Mapping adalah sistem informasi berbasis web yang dirancang untuk memetakan dan mengelola data kemiskinan di tingkat kecamatan. Sistem ini memungkinkan pengguna untuk:
|
|
- Memetakan lokasi rumah penduduk miskin
|
|
- Mencatat data rumah ibadah (worship) dengan radius layanan
|
|
- Mengelola data geografis (jalan, parsil)
|
|
- Menganalisis pola kemiskinan berdasarkan lokasi geografis
|
|
- Menghasilkan laporan berbasis data spasial
|
|
|
|
### 1.2 Tujuan Sistem
|
|
1. Menyediakan platform terpadu untuk pendataan kemiskinan berbasis GIS
|
|
2. Meningkatkan akurasi dan efisiensi pengumpulan data sosial
|
|
3. Memfasilitasi pengambilan keputusan berbasis data spasial
|
|
4. Menyediakan visualisasi data yang intuitif dan interaktif
|
|
|
|
### 1.3 Stakeholder
|
|
- Pemerintah Daerah / Kelurahan
|
|
- Petugas Pendataan Sosial
|
|
- Pejabat Pengambil Keputusan
|
|
- Masyarakat (untuk laporan hasil analisis)
|
|
|
|
---
|
|
|
|
## 2. KEBUTUHAN SISTEM
|
|
|
|
### 2.1 Kebutuhan Fungsional (Functional Requirements)
|
|
|
|
#### 2.1.1 Manajemen Data Geografis Dasar
|
|
|
|
**FR-001: Tampilkan Peta Interaktif**
|
|
- Sistem harus menampilkan peta OpenStreetMap dengan Leaflet.js
|
|
- Fitur zoom dan pan untuk eksplorasi
|
|
- Menampilkan layer administrasi (kecamatan) dari GeoJSON
|
|
|
|
**FR-002: Penambahan Titik Data**
|
|
- Pengguna dapat menambahkan tiga tipe titik:
|
|
- **Rumah Ibadah (Worship)**: Lokasi ibadah dengan radius layanan
|
|
- **Rumah Penduduk Miskin (Poor House)**: Lokasi keluarga penerima bantuan sosial
|
|
- **Data Umum (Point)**: Data spasial umum lainnya
|
|
|
|
**FR-003: Input Data Rumah Ibadah**
|
|
- Atribut wajib: nama, jenis, alamat
|
|
- Atribut tambahan: kontak, no_wa, kegiatan, kapasitas
|
|
- Radius layanan dapat disesuaikan (default 200m)
|
|
- Visualisasi radius dengan circle pada peta
|
|
|
|
**FR-004: Input Data Rumah Penduduk Miskin**
|
|
- Atribut wajib: nama_kepala_keluarga, alamat
|
|
- Atribut sosial: jumlah_anggota, kondisi_rumah, sumber_penghasilan
|
|
- Atribut bantuan: kebutuhan_prioritas, status_bantuan
|
|
- Kategori kondisi rumah: sangat buruk, buruk, sedang, baik
|
|
|
|
**FR-005: Manajemen Jalan & Parsil**
|
|
- Input panjang jalan (dalam meter)
|
|
- Input luas parsil/bidang (dalam m²)
|
|
- Pencatatan status jalan/parsil
|
|
- Support untuk geometri LineString dan Polygon
|
|
|
|
#### 2.1.2 Operasi CRUD
|
|
|
|
**FR-006: Create (Buat Data)**
|
|
- Interface form untuk input data baru
|
|
- Validasi input real-time
|
|
- Penyimpanan otomatis ke database
|
|
- Konfirmasi berhasil/gagal
|
|
|
|
**FR-007: Read (Baca Data)**
|
|
- Retrieving all data dari database
|
|
- Filtering berdasarkan tipe data
|
|
- Pagination untuk dataset besar
|
|
- Export ke GeoJSON format
|
|
|
|
**FR-008: Update (Ubah Data)**
|
|
- Edit data existing dari peta atau form
|
|
- Update geometri dengan drag & drop
|
|
- Pencatatan waktu modifikasi
|
|
- Riwayat perubahan (audit trail)
|
|
|
|
**FR-009: Delete (Hapus Data)**
|
|
- Penghapusan data dengan konfirmasi
|
|
- Soft delete atau hard delete sesuai kebijakan
|
|
- Pencatatan penghapus dan waktu penghapusan
|
|
|
|
#### 2.1.3 Analisis & Pelaporan
|
|
|
|
**FR-010: Analisis Proximity**
|
|
- Deteksi rumah miskin dalam radius rumah ibadah
|
|
- Hitung jumlah penduduk miskin per rumah ibadah
|
|
- Identifikasi area dengan konsentrasi kemiskinan tinggi
|
|
|
|
**FR-011: Statistik Spasial**
|
|
- Jumlah total penduduk miskin per wilayah
|
|
- Distribusi kemiskinan berdasarkan kondisi rumah
|
|
- Analisis kebutuhan prioritas
|
|
|
|
**FR-012: Export Laporan**
|
|
- Export data ke format Excel/CSV
|
|
- Generate report PDF dengan visualisasi peta
|
|
- Summary statistics per distrik/admin area
|
|
|
|
---
|
|
|
|
### 2.2 Kebutuhan Non-Fungsional (Non-Functional Requirements)
|
|
|
|
#### 2.2.1 Performa
|
|
|
|
**NFR-001: Response Time**
|
|
- Loading peta: < 3 detik
|
|
- Penyimpanan data: < 2 detik
|
|
- Query data: < 5 detik untuk 10,000+ records
|
|
|
|
**NFR-002: Scalability**
|
|
- Support minimal 50,000 titik data
|
|
- Handle 100+ pengguna concurrent
|
|
- Database optimization untuk query performa
|
|
|
|
**NFR-003: Browser Compatibility**
|
|
- Chrome 90+
|
|
- Firefox 88+
|
|
- Safari 14+
|
|
- Edge 90+
|
|
|
|
#### 2.2.2 Keamanan
|
|
|
|
**NFR-004: Authentication**
|
|
- Implementasi user login (sederhana)
|
|
- Session management
|
|
- Password encryption
|
|
|
|
**NFR-005: Data Validation**
|
|
- Server-side validation wajib
|
|
- Client-side validation untuk UX
|
|
- Sanitasi input untuk mencegah SQL injection
|
|
- CSRF protection
|
|
|
|
**NFR-006: Data Privacy**
|
|
- HTTPS untuk transmisi data
|
|
- Enkripsi data sensitif di database
|
|
- Access control berbasis user role
|
|
|
|
#### 2.2.3 Availability & Maintainability
|
|
|
|
**NFR-007: Availability**
|
|
- System uptime: 99% (outside maintenance windows)
|
|
- Backup otomatis harian
|
|
- Disaster recovery plan
|
|
|
|
**NFR-008: Maintainability**
|
|
- Code modular dan well-documented
|
|
- API documentation lengkap
|
|
- Database backup procedures
|
|
- Version control (Git)
|
|
|
|
#### 2.2.4 Usability
|
|
|
|
**NFR-009: User Interface**
|
|
- Responsive design (mobile-friendly)
|
|
- Intuitive navigation
|
|
- Accessibility compliance (WCAG 2.1 AA)
|
|
- Loading feedback (progress indicators)
|
|
|
|
**NFR-010: Documentation**
|
|
- User manual tersedia
|
|
- API documentation
|
|
- Database schema documentation
|
|
- Installation & deployment guide
|
|
|
|
---
|
|
|
|
## 3. ARSITEKTUR SISTEM
|
|
|
|
### 3.1 Arsitektur Keseluruhan
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ Web Browser (Client-Side) │
|
|
│ ┌──────────────────────────────────────────┐ │
|
|
│ │ Leaflet.js Map Visualization │ │
|
|
│ │ HTML5 Form Inputs │ │
|
|
│ │ JavaScript Event Handlers │ │
|
|
│ │ Turf.js Spatial Analysis │ │
|
|
│ └──────────────────────────────────────────┘ │
|
|
└──────────────────┬──────────────────────────────┘
|
|
│ AJAX/Fetch
|
|
│ JSON
|
|
┌──────────────────▼──────────────────────────────┐
|
|
│ HTTP/REST API (PHP Backend) │
|
|
│ ┌──────────────────────────────────────────┐ │
|
|
│ │ GET /api/get.php - Retrieve Data │ │
|
|
│ │ GET /api/get_point.php │ │
|
|
│ │ POST /api/save.php - Create/Read │ │
|
|
│ │ POST /api/save_point.php │ │
|
|
│ │ POST /api/update.php - Update │ │
|
|
│ │ POST /api/update_point.php │ │
|
|
│ │ POST /api/delete.php - Delete │ │
|
|
│ │ POST /api/delete_point.php │ │
|
|
│ └──────────────────────────────────────────┘ │
|
|
└──────────────────┬──────────────────────────────┘
|
|
│ SQL Queries
|
|
│ MySQLi Extension
|
|
┌──────────────────▼──────────────────────────────┐
|
|
│ MySQL Database (webgis_unified) │
|
|
│ ┌──────────────────────────────────────────┐ │
|
|
│ │ Table: data_unified │ │
|
|
│ │ - Point Features (Worship, Poor House) │ │
|
|
│ │ - Linear Features (Jalan) │ │
|
|
│ │ - Polygon Features (Parsil) │ │
|
|
│ │ - Attributes (Sosial, Administratif) │ │
|
|
│ └──────────────────────────────────────────┘ │
|
|
└─────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 3.2 Tech Stack
|
|
|
|
| Layer | Technology | Version | Purpose |
|
|
|-------|-----------|---------|---------|
|
|
| **Frontend** | HTML5 | - | Markup |
|
|
| | CSS3 | - | Styling |
|
|
| | JavaScript | ES6+ | Interactivity |
|
|
| | Leaflet.js | 1.9.4 | Map Library |
|
|
| | Leaflet.Draw | 1.0.4 | Drawing Tools |
|
|
| | Turf.js | 6.0+ | Spatial Analysis |
|
|
| **Backend** | PHP | 7.4+ | Server Logic |
|
|
| **Database** | MySQL | 5.7+ | Data Storage |
|
|
| **Server** | Apache | 2.4+ | Web Server |
|
|
| **Tools** | Git | - | Version Control |
|
|
|
|
---
|
|
|
|
## 4. MODEL DATA & SCHEMA DATABASE
|
|
|
|
### 4.1 Entity Relationship Diagram
|
|
|
|
**Single Unified Table Model:**
|
|
|
|
```
|
|
data_unified
|
|
├── id (PK)
|
|
├── tipe (ENUM)
|
|
├── nama
|
|
├── jenis
|
|
├── alamat
|
|
├── kontak
|
|
├── no_wa
|
|
├── kegiatan
|
|
├── kapasitas
|
|
├── radius_meter
|
|
├── nama_kepala_keluarga
|
|
├── jumlah_anggota
|
|
├── kondisi_rumah
|
|
├── sumber_penghasilan
|
|
├── kebutuhan_prioritas
|
|
├── status_bantuan
|
|
├── latitude
|
|
├── longitude
|
|
├── status
|
|
├── panjang (untuk jalan)
|
|
├── luas (untuk parsil)
|
|
├── geom (GeoJSON)
|
|
├── created_at
|
|
└── updated_at
|
|
```
|
|
|
|
### 4.2 SQL Schema
|
|
|
|
```sql
|
|
CREATE TABLE data_unified (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
tipe ENUM('point','worship','poor_house','jalan','parsil') NOT NULL DEFAULT 'point',
|
|
|
|
-- Atribut Umum
|
|
nama VARCHAR(200) NULL,
|
|
jenis VARCHAR(100) NULL,
|
|
alamat VARCHAR(255) NULL,
|
|
kontak VARCHAR(100) NULL,
|
|
no_wa VARCHAR(50) NULL,
|
|
status VARCHAR(50) NULL,
|
|
|
|
-- Atribut Rumah Ibadah (Worship)
|
|
kegiatan VARCHAR(255) NULL,
|
|
kapasitas INT NULL,
|
|
radius_meter INT NULL,
|
|
|
|
-- Atribut Rumah Miskin (Poor House)
|
|
nama_kepala_keluarga VARCHAR(200) NULL,
|
|
jumlah_anggota INT NULL,
|
|
kondisi_rumah VARCHAR(100) NULL,
|
|
sumber_penghasilan VARCHAR(255) NULL,
|
|
kebutuhan_prioritas VARCHAR(255) NULL,
|
|
status_bantuan VARCHAR(100) NULL,
|
|
|
|
-- Atribut Geografis
|
|
latitude DOUBLE NULL,
|
|
longitude DOUBLE NULL,
|
|
|
|
-- Atribut Jalan & Parsil
|
|
panjang DECIMAL(10,2) NULL,
|
|
luas DECIMAL(10,2) NULL,
|
|
geom TEXT NULL,
|
|
|
|
-- Audit Trail
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
-- Indexes untuk performa
|
|
KEY idx_tipe (tipe),
|
|
KEY idx_status (status),
|
|
KEY idx_created_at (created_at),
|
|
FULLTEXT KEY ft_nama (nama),
|
|
FULLTEXT KEY ft_alamat (alamat)
|
|
);
|
|
```
|
|
|
|
### 4.3 Data Dictionary
|
|
|
|
| Field | Type | Length | Null | Key | Description |
|
|
|-------|------|--------|------|-----|-------------|
|
|
| id | INT | - | NO | PK | Unique identifier |
|
|
| tipe | ENUM | - | NO | - | Data type (worship/poor_house/point/jalan/parsil) |
|
|
| nama | VARCHAR | 200 | YES | - | Name/label of feature |
|
|
| jenis | VARCHAR | 100 | YES | - | Category/type (e.g., Masjid, Gereja for worship) |
|
|
| alamat | VARCHAR | 255 | YES | - | Address/location description |
|
|
| kontak | VARCHAR | 100 | YES | - | Contact person |
|
|
| no_wa | VARCHAR | 50 | YES | - | WhatsApp number |
|
|
| kegiatan | VARCHAR | 255 | YES | - | Activities (for worship places) |
|
|
| kapasitas | INT | - | YES | - | Capacity (people) |
|
|
| radius_meter | INT | - | YES | - | Service radius in meters |
|
|
| nama_kepala_keluarga | VARCHAR | 200 | YES | - | Head of family name |
|
|
| jumlah_anggota | INT | - | YES | - | Number of family members |
|
|
| kondisi_rumah | VARCHAR | 100 | YES | - | House condition (sangat buruk/buruk/sedang/baik) |
|
|
| sumber_penghasilan | VARCHAR | 255 | YES | - | Income source |
|
|
| kebutuhan_prioritas | VARCHAR | 255 | YES | - | Priority needs for assistance |
|
|
| status_bantuan | VARCHAR | 100 | YES | - | Assistance status |
|
|
| latitude | DOUBLE | - | YES | - | Latitude coordinate |
|
|
| longitude | DOUBLE | - | YES | - | Longitude coordinate |
|
|
| panjang | DECIMAL | 10,2 | YES | - | Length in meters (roads) |
|
|
| luas | DECIMAL | 10,2 | YES | - | Area in m² (parcels) |
|
|
| geom | TEXT | - | YES | - | GeoJSON geometry |
|
|
| status | VARCHAR | 50 | YES | - | Feature status (aktif/nonaktif/draf) |
|
|
| created_at | DATETIME | - | NO | - | Record creation timestamp |
|
|
| updated_at | DATETIME | - | NO | - | Last update timestamp |
|
|
|
|
---
|
|
|
|
## 5. ENDPOINT API DOCUMENTATION
|
|
|
|
### 5.1 Base Configuration
|
|
- **Base URL:** `http://localhost/webgis/`
|
|
- **Content-Type:** `application/json`
|
|
- **Response Format:** JSON
|
|
|
|
### 5.2 API Endpoints
|
|
|
|
#### 5.2.1 GET Endpoints
|
|
|
|
**GET /get.php** - Retrieve All Data
|
|
```
|
|
GET /get.php
|
|
|
|
Response:
|
|
{
|
|
"type": "FeatureCollection",
|
|
"features": [
|
|
{
|
|
"type": "Feature",
|
|
"geometry": {...},
|
|
"properties": {...}
|
|
}
|
|
]
|
|
}
|
|
|
|
Status Codes:
|
|
- 200: Success
|
|
- 500: Server error
|
|
```
|
|
|
|
**GET /get_point.php** - Retrieve Specific Point Types
|
|
```
|
|
GET /get_point.php?tipe=worship
|
|
|
|
Query Parameters:
|
|
- tipe: worship|poor_house|point
|
|
|
|
Response: Same as above
|
|
```
|
|
|
|
#### 5.2.2 POST Endpoints
|
|
|
|
**POST /save.php** - Create New Feature
|
|
```
|
|
POST /save.php
|
|
Content-Type: application/json
|
|
|
|
Request Body:
|
|
{
|
|
"tipe": "worship|poor_house|point|jalan|parsil",
|
|
"nama": "string",
|
|
"jenis": "string",
|
|
"alamat": "string",
|
|
"latitude": number,
|
|
"longitude": number,
|
|
"geom": "GeoJSON string (for line/polygon)",
|
|
... other attributes based on tipe
|
|
}
|
|
|
|
Response:
|
|
{
|
|
"success": true,
|
|
"id": number,
|
|
"message": "Data saved successfully"
|
|
}
|
|
|
|
Status Codes:
|
|
- 200: Success
|
|
- 400: Bad request (validation error)
|
|
- 500: Server error
|
|
```
|
|
|
|
**POST /update.php** - Update Existing Feature
|
|
```
|
|
POST /update.php
|
|
Content-Type: application/json
|
|
|
|
Request Body:
|
|
{
|
|
"id": number,
|
|
"tipe": "string",
|
|
"nama": "string",
|
|
... other fields to update
|
|
}
|
|
|
|
Response:
|
|
{
|
|
"success": true,
|
|
"message": "Data updated successfully"
|
|
}
|
|
```
|
|
|
|
**POST /delete.php** - Delete Feature
|
|
```
|
|
POST /delete.php
|
|
Content-Type: application/json
|
|
|
|
Request Body:
|
|
{
|
|
"id": number
|
|
}
|
|
|
|
Response:
|
|
{
|
|
"success": true,
|
|
"message": "Data deleted successfully"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 6. USE CASES
|
|
|
|
### 6.1 Use Case Diagram
|
|
|
|
```
|
|
┌──────────────────────────────┐
|
|
│ WebGIS System Actor │
|
|
└────────────┬─────────────────┘
|
|
│
|
|
┌────────┼────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────┐
|
|
│ Petugas Pendataan / Admin │
|
|
│ - View Map │
|
|
│ - Add Point/Line/Polygon │
|
|
│ - Edit Features │
|
|
│ - Delete Features │
|
|
│ - Export Data │
|
|
│ - View Analytics │
|
|
└─────────────────────────────────┘
|
|
```
|
|
|
|
### 6.2 Use Case Descriptions
|
|
|
|
**UC-001: Menampilkan Peta**
|
|
- Actor: Petugas Pendataan
|
|
- Precondition: User membuka aplikasi
|
|
- Main Flow:
|
|
1. System loads map with OSM basemap
|
|
2. Display administrative areas from GeoJSON
|
|
3. Load existing data points from database
|
|
4. Display different markers based on tipe
|
|
- Postcondition: Map displayed with all data
|
|
|
|
**UC-002: Menambahkan Data Rumah Ibadah**
|
|
- Actor: Petugas Pendataan
|
|
- Precondition: Map is loaded
|
|
- Main Flow:
|
|
1. User selects "Rumah Ibadah" from type dropdown
|
|
2. Set radius value
|
|
3. Click on map to place marker
|
|
4. Enter data form (nama, jenis, alamat, etc.)
|
|
5. Click Save
|
|
6. System validates data
|
|
7. System saves to database
|
|
8. Update map with new marker
|
|
9. Display success message
|
|
- Alternative: Cancel before save
|
|
- Postcondition: New data saved and displayed
|
|
|
|
**UC-003: Edit Data**
|
|
- Actor: Petugas Pendataan
|
|
- Main Flow:
|
|
1. Click on existing marker
|
|
2. View/edit form
|
|
3. Modify values
|
|
4. Optionally drag marker to new location
|
|
5. Click Update
|
|
6. System validates
|
|
7. System updates database
|
|
8. Update map display
|
|
- Postcondition: Data updated
|
|
|
|
**UC-004: Analisis Proximity**
|
|
- Actor: Admin/Pengambil Keputusan
|
|
- Main Flow:
|
|
1. View analysis report
|
|
2. System calculates poor houses within worship radius
|
|
3. Display statistics
|
|
4. Show on map with visual clustering
|
|
- Postcondition: Analysis results displayed
|
|
|
|
---
|
|
|
|
## 7. KEBUTUHAN DATA & DATABASE
|
|
|
|
### 7.1 Data Population
|
|
|
|
**Initial Data Required:**
|
|
- Administrative boundaries (Kecamatan level) - GeoJSON
|
|
- Reference data for house conditions
|
|
- Reference data for assistance types
|
|
- Reference data for income sources
|
|
|
|
**Sample Data:**
|
|
- 100-1000 test records untuk UAT
|
|
- Mix of all data types
|
|
- Various conditions and statuses
|
|
|
|
### 7.2 Database Backup & Recovery
|
|
|
|
**Backup Strategy:**
|
|
- Daily automatic backup at 2:00 AM
|
|
- Weekly full backup on Sunday
|
|
- Monthly archive backup
|
|
- Store backups locally and on network drive
|
|
|
|
**Recovery Procedure:**
|
|
- Documented restore procedure
|
|
- Test restore monthly
|
|
- RTO: 1 hour
|
|
- RPO: 1 day
|
|
|
|
---
|
|
|
|
## 8. FASE IMPLEMENTASI
|
|
|
|
### Phase 1: Setup & Database (Week 1)
|
|
- [x] Database design finalization
|
|
- [ ] Database creation & migration scripts
|
|
- [ ] User management tables (if needed)
|
|
- [ ] Initial data loading
|
|
|
|
### Phase 2: API Development (Week 1-2)
|
|
- [ ] Implement CRUD endpoints
|
|
- [ ] Data validation layer
|
|
- [ ] Error handling
|
|
- [ ] API testing
|
|
|
|
### Phase 3: Frontend Enhancement (Week 2-3)
|
|
- [ ] UI/UX improvements
|
|
- [ ] Form validation enhancement
|
|
- [ ] Data visualization enhancements
|
|
- [ ] Mobile responsiveness
|
|
|
|
### Phase 4: Analysis & Reporting (Week 3)
|
|
- [ ] Proximity analysis implementation
|
|
- [ ] Statistics calculations
|
|
- [ ] Report generation
|
|
- [ ] Data export features
|
|
|
|
### Phase 5: Testing & QA (Week 4)
|
|
- [ ] Unit testing
|
|
- [ ] Integration testing
|
|
- [ ] UAT with stakeholders
|
|
- [ ] Performance testing
|
|
|
|
### Phase 6: Deployment & Documentation (Week 4-5)
|
|
- [ ] Production deployment
|
|
- [ ] User training
|
|
- [ ] Documentation finalization
|
|
- [ ] Knowledge transfer
|
|
|
|
---
|
|
|
|
## 9. TESTING STRATEGY
|
|
|
|
### 9.1 Unit Testing
|
|
- Test individual PHP functions
|
|
- Test validation rules
|
|
- Test data transformations
|
|
|
|
### 9.2 Integration Testing
|
|
- Test API endpoints
|
|
- Test database operations
|
|
- Test data flow
|
|
|
|
### 9.3 System Testing
|
|
- End-to-end workflows
|
|
- Performance testing (load testing)
|
|
- Security testing
|
|
|
|
### 9.4 User Acceptance Testing (UAT)
|
|
- Test with actual users
|
|
- Verify requirements met
|
|
- Collect feedback
|
|
|
|
### 9.5 Test Coverage
|
|
- Target: Minimum 80% code coverage
|
|
- Critical paths: 100% coverage
|
|
- Tools: PHPUnit for PHP testing
|
|
|
|
---
|
|
|
|
## 10. MAINTENANCE & SUPPORT
|
|
|
|
### 10.1 Maintenance Plan
|
|
|
|
**Preventive Maintenance:**
|
|
- Monthly database optimization
|
|
- Weekly log review
|
|
- Quarterly backup restoration tests
|
|
|
|
**Corrective Maintenance:**
|
|
- Bug fixes within 24 hours (critical)
|
|
- Bug fixes within 1 week (normal)
|
|
- Security patches immediately
|
|
|
|
### 10.2 Support Levels
|
|
|
|
| Priority | Response Time | Resolution Target |
|
|
|----------|---------------|------------------|
|
|
| Critical | 1 hour | 4 hours |
|
|
| High | 4 hours | 1 day |
|
|
| Medium | 1 day | 1 week |
|
|
| Low | 3 days | 2 weeks |
|
|
|
|
---
|
|
|
|
## 11. CHANGE LOG
|
|
|
|
| Version | Date | Author | Changes |
|
|
|---------|------|--------|---------|
|
|
| 1.0 | May 2026 | Development Team | Initial SKPL/SRS document |
|
|
| | | | - Complete system requirements |
|
|
| | | | - Database schema |
|
|
| | | | - API documentation |
|
|
| | | | - Implementation plan |
|
|
|
|
---
|
|
|
|
## 12. APPENDIX
|
|
|
|
### 12.1 Glossary
|
|
|
|
- **GIS**: Geographic Information System
|
|
- **Poverty Mapping**: Pemetaan Kemiskinan
|
|
- **Kecamatan**: District (administrative division)
|
|
- **Rumah Ibadah**: Worship place (mosque, church, etc.)
|
|
- **Geom**: Geometry (spatial data representation)
|
|
- **GeoJSON**: JSON format for geographic data
|
|
|
|
### 12.2 References
|
|
|
|
- Leaflet.js Documentation: https://leafletjs.com/
|
|
- OpenStreetMap: https://www.openstreetmap.org/
|
|
- MySQL Documentation: https://dev.mysql.com/
|
|
- PHP MySQLi: https://www.php.net/manual/en/book.mysqli.php
|
|
- GeoJSON Specification: https://geojson.org/
|
|
|
|
### 12.3 Approval
|
|
|
|
| Role | Name | Signature | Date |
|
|
|------|------|-----------|------|
|
|
| Project Manager | - | - | - |
|
|
| Technical Lead | - | - | - |
|
|
| Client Representative | - | - | - |
|
|
|
|
---
|
|
|
|
**Document End**
|
|
|
|
*Dokumen ini bersifat rahasia dan hanya untuk penggunaan internal. Reproduksi tanpa persetujuan dilarang.*
|