Core calculation dan business logic engine untuk aplikasi KupasTarif. Repository ini berisi semua algoritma perhitungan tarif, validasi, dan data processing.
engine/
├── 01data.js # Data & database management
├── 02valid.js # Validation logic
├── 03fare.js # Fare calculation
├── 04cost.js # Cost calculation & analysis
├── 05extra.js # Extra charges & add-ons
├── 06api.js # API integration & external services
├── 07cache.js # Caching mechanism
├── README.md # Documentation
└── engine.txt # Raw engine documentation
Mengelola data struktur aplikasi:
- Data tarif dari berbagai provider
- Database pricing rules
- Historical data storage
- Data validation schemas
Validasi input dan business logic:
- Validasi lokasi (coordinates)
- Validasi jarak (distance bounds)
- Validasi waktu perjalanan
- Validasi data pengemudi
- Validasi penumpang profile
Kalkulasi tarif utama:
- Base fare calculation
- Distance-based pricing
- Time-based surcharges
- Dynamic pricing algorithms
- Multi-provider fare comparison
Analisis biaya operasional:
- Fuel cost calculation
- Maintenance cost estimation
- Insurance cost breakdown
- Depreciation calculation
- Profit/loss analysis
Biaya tambahan:
- Surge pricing
- Peak hour multipliers
- Tolls & road taxes
- Waiting time charges
- Cancellation fees
- Promotion/discount application
Integrasi dengan service eksternal:
- Google Maps API (routing, distance)
- Weather API (conditions impact)
- Real-time pricing updates
- Provider API integration
- Data synchronization
Optimasi performance:
- Calculation result caching
- API response caching
- Cache invalidation strategy
- Cache size management
- TTL (Time-To-Live) configuration
User Input
↓
02valid.js (Validasi)
↓
01data.js (Load Data)
↓
03fare.js (Hitung Tarif)
↓
04cost.js (Analisis Biaya)
↓
05extra.js (Tambah Extra)
↓
06api.js (External Data)
↓
07cache.js (Cache Result)
↓
Output ke UI
// Cache hierarchy
1. Memory cache (07cache.js) – fastest
2. IndexedDB (browser) – persistent
3. API calls – slowest, cached aggressively
4. Geolocation data – cached with short TTLModule di-import di halaman yang relevan:
// Contoh di pages/result.js
import { calculateFare } from '../../../engine/03fare.js';
import { calculateCost } from '../../../engine/04cost.js';
import { validateInput } from '../../../engine/02valid.js';
// Validation
const validation = await validateInput(data);
// Calculation
const fare = await calculateFare(route, distance, time);
const cost = await calculateCost(fare, vehicle);
// Display result
displayResult({ fare, cost, validation });- Gojek pricing model
- Grab pricing model
- Indriver model
- Custom pricing rules
- Automatic cache busting
- Cache warming for frequent routes
- Smart prefetch untuk predictable patterns
- Live price monitoring
- Dynamic surge pricing
- Weather impact calculation
- Fare history tracking
- Cost trend analysis
- Provider comparison
- Profit maximization hints
- Lazy loading modules
- Async calculation processing
- Worker threads untuk heavy computation
- Memoization untuk repeated calculations
- No external data transmission (unless API call)
- Local calculation preferentially
- Cache isolated per user (browser)
- No personal data logging
- Web browser (modern)
- Android app via Capacitor
- Offline-capable architecture
- IndexedDB support required
Module dapat ditest independen:
import { calculateFare } from './03fare.js';
const testResult = calculateFare(
{ origin: [0, 0], destination: [1, 1] },
5.2, // distance in km
840 // time in seconds
);
console.log(testResult);- apk (root): https://github.com/kupastarif/apk
- spa (UI): https://github.com/kupastarif/spa
engine.txt– Detailed technical documentation- Inline code comments for algorithm explanations
Created: July 2026
Maintained by: Kupas⚡Tarif Team
Note: Semua kalkulasi dilakukan secara transparan untuk memberikan edukasi kepada driver ojek online tentang bagaimana sistem pricing bekerja.