20 KiB
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
- Menyediakan platform terpadu untuk pendataan kemiskinan berbasis GIS
- Meningkatkan akurasi dan efisiensi pengumpulan data sosial
- Memfasilitasi pengambilan keputusan berbasis data spasial
- 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
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:
- System loads map with OSM basemap
- Display administrative areas from GeoJSON
- Load existing data points from database
- 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:
- User selects "Rumah Ibadah" from type dropdown
- Set radius value
- Click on map to place marker
- Enter data form (nama, jenis, alamat, etc.)
- Click Save
- System validates data
- System saves to database
- Update map with new marker
- Display success message
- Alternative: Cancel before save
- Postcondition: New data saved and displayed
UC-003: Edit Data
- Actor: Petugas Pendataan
- Main Flow:
- Click on existing marker
- View/edit form
- Modify values
- Optionally drag marker to new location
- Click Update
- System validates
- System updates database
- Update map display
- Postcondition: Data updated
UC-004: Analisis Proximity
- Actor: Admin/Pengambil Keputusan
- Main Flow:
- View analysis report
- System calculates poor houses within worship radius
- Display statistics
- 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)
- 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.