Statistike služe za:
- Praćenje efikasnosti sistema - Da li responderi reaguju brzo?
- Identifikaciju "vrućih tačaka" - Gde se incidenti dešavaju?
- Dokumentovanje za institucije - Pritisak na policiju sa podacima
- Motivaciju volontera - Vidljiv doprinos
┌─────────────────────────────────────────────────────────────────────────────┐
│ 📊 IZVEŠTAJ: Januar 2026 [PDF] [CSV] [PRINT] │
│ 📍 OŠ Ivan Goran Kovačić, Beograd │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ SUMARNO │
│ ═══════════════════════════════════════════════════════════════════════ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 12 │ │ 9 │ │ 2 │ │ 1 │ │
│ │ ALARMA │ │ REŠENO │ │ LAŽNIH │ │ ESKALIRAN │ │
│ │ ukupno │ │ uspešno │ │ alarma │ │ do nivoa 2 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 52 sek │ │ 4 min │ │ 8 │ │
│ │ PROSEČNO │ │ PROSEČNO │ │ AKTIVNIH │ │
│ │ do reakcije│ │ do rešenja │ │ respondera │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ DISTRIBUCIJA PO VREMENU (kada se incidenti dešavaju) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Alarmi po satu: │
│ │
│ 5│ ▓▓ │
│ 4│ ▓▓ │
│ 3│ ▓▓ ▓▓ ▓▓ │
│ 2│ ▓▓ ▓▓ ▓▓ ▓▓ │
│ 1│ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ │
│ 0└────────────────────────────────────────────────── │
│ 07 08 09 10 11 12 13 14 15 16 17 18 │
│ │
│ 🔴 KRITIČNO VREME: 14:00 - 15:00 (5 alarma - 42%) │
│ Preporuka: Pojačati patrole u ovom periodu │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ DISTRIBUCIJA PO LOKACIJI │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 🏫 │ │
│ │ ŠKOLA │ │
│ │ ╲ │ │
│ │ ╲ 🔴🔴🔴 (5 alarma) │ │
│ │ ╲ "Kod fontane" │ │
│ │ ╲ │ │
│ │ ●─────────────── │ │
│ │ │ │ │
│ │ 🔴🔴 │ │ │
│ │ "Iza škole"│ │ │
│ │ (3 alarma)│ │ │
│ │ │ 🔴🔴🔴🔴 │ │
│ │ │ "Park/prodavnica" │ │
│ │ (4 alarma) │ │
│ │ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ TOP 3 "VRUĆE TAČKE": │
│ 1. Kod fontane (Vukov spomenik) - 5 alarma (42%) │
│ 2. Park kod prodavnice - 4 alarma (33%) │
│ 3. Iza škole (parking) - 3 alarma (25%) │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ TIPOVI INCIDENATA (na osnovu opisa) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Praćenje / zastrašivanje ████████████████████ 7 (58%) │
│ Pokušaj krađe ████████ 3 (25%) │
│ Fizički kontakt / guranje ████ 1 (8%) │
│ Verbalne pretnje ████ 1 (8%) │
│ │
│ NAPOMENA: Kategorizacija na osnovu opisa u alarmima │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ TREND (poslednja 3 meseca) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ │
│ 15│ │
│ │ ● 12 │
│ 10│ ● 8 / │
│ │ ● 5 / / │
│ 5│ / / / │
│ │ / / / │
│ 0└────────────●─────────────●───────────●───────── │
│ Nov Dec Jan │
│ │
│ ⚠️ TREND: +50% rast incidenata u poslednja 2 meseca │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ EFIKASNOST SISTEMA │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Prosečno vreme do reakcije respondera: │
│ │
│ < 1 min ████████████████████████████████ 9 (75%) ✅ │
│ 1-2 min ████████ 2 (17%) ⚠️ │
│ > 2 min ████ 1 (8%) 🔴 (eskaliran) │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Pokrivenost smenama: │
│ • Jutarnji slot (07-09): 95% pokrivenost │
│ • Podnevni slot (12-14): 87% pokrivenost │
│ • Popodnevni slot (14-17): 92% pokrivenost ← Najviše incidenata │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
══════════════════════════════════════════════════════════════════════════════
IZVEŠTAJ O BEZBEDNOSNOJ SITUACIJI U OKOLINI
OŠ "IVAN GORAN KOVAČIĆ", BEOGRAD
Period: Januar 2026
══════════════════════════════════════════════════════════════════════════════
1. UVOD
──────
Ovaj izveštaj je generisan od strane aplikacije "Patrola" koju koristi
grupa roditelja OŠ "Ivan Goran Kovačić" za koordinaciju volonterskog
nadzora bezbednosti dece u okolini škole.
2. KLJUČNI PODACI
─────────────────
• Broj prijavljenih incidenata: 12
• Broj uspešno rešenih situacija: 9 (75%)
• Broj eskaliranih situacija: 1 (8%)
• Prosečno vreme reakcije volontera: 52 sekunde
3. LOKACIJE SA NAJVIŠE INCIDENATA
──────────────────────────────────
1) Okolina Vukovog spomenika / fontana
Koordinate: 44.8125, 20.4612
Broj incidenata: 5 (42%)
2) Park kod prodavnice "XYZ", ul. Njegoševa
Koordinate: 44.8118, 20.4598
Broj incidenata: 4 (33%)
4. VREMENSKI OKVIR INCIDENATA
─────────────────────────────
Kritičan period: 14:00 - 16:00 (završetak nastave)
72% svih incidenata dešava se u ovom vremenskom okviru.
5. OPIS TIPIČNOG INCIDENTA
──────────────────────────
Grupa od 4-6 maloletnika (procenjena starost 14-18) presreće učenike
na putu od škole do kuće. Incidenti uključuju praćenje, verbalne pretnje
i pokušaje krađe (telefoni, novac).
6. PREPORUKE
────────────
Na osnovu prikupljenih podataka, predlažemo:
• Pojačano prisustvo policije u periodu 14:00-16:00
• Fokus na lokaciju kod Vukovog spomenika
• Identifikacija i rad sa grupom maloletnih počinilaca
7. KONTAKT
─────────
Za dodatne informacije:
• Admin grupe: [ime], [telefon]
• Email: [email]
══════════════════════════════════════════════════════════════════════════════
Generisano: 19.01.2025. putem aplikacije Patrola (patrola.rs)
Ovaj izveštaj NE sadrži lične podatke dece.
══════════════════════════════════════════════════════════════════════════════
| Format | Sadržaj | Namena |
|---|---|---|
| Formatirani izveštaj | Za policiju, školu, medije | |
| CSV | Sirovi podaci | Za analizu u Excel-u |
| JSON | Strukturirani podaci | Za integraciju |
// convex/stats.ts
export const getMonthlyStats = query({
args: {
group_id: v.id("groups"),
year: v.number(),
month: v.number(),
},
handler: async (ctx, { group_id, year, month }) => {
const startOfMonth = new Date(year, month - 1, 1).getTime();
const endOfMonth = new Date(year, month, 0, 23, 59, 59).getTime();
// Svi alarmi u mesecu
const alarms = await ctx.db
.query("alarms")
.withIndex("by_group", (q) => q.eq("group_id", group_id))
.filter((q) =>
q.and(
q.gte(q.field("created_at"), startOfMonth),
q.lte(q.field("created_at"), endOfMonth)
)
)
.collect();
// Agregacije
const total = alarms.length;
const resolved = alarms.filter(a => a.status === "RESOLVED").length;
const falseAlarms = alarms.filter(a => a.status === "FALSE_ALARM").length;
const escalated = alarms.filter(a => a.escalated_2_at !== undefined).length;
// Prosečno vreme reakcije
const responseTimes = alarms
.filter(a => a.responded_at && a.created_at)
.map(a => a.responded_at - a.created_at);
const avgResponseTime = responseTimes.length > 0
? responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length
: 0;
// Distribucija po satu
const byHour: Record<number, number> = {};
alarms.forEach(a => {
const hour = new Date(a.created_at).getHours();
byHour[hour] = (byHour[hour] || 0) + 1;
});
// Hotspots
const hotspots = calculateHotspots(alarms);
return {
summary: { total, resolved, falseAlarms, escalated, avgResponseTime },
byHour,
hotspots,
trend: await getThreeMonthTrend(ctx, group_id, year, month),
};
},
});- Izveštaji NE sadrže lične podatke dece
- Lokacije su agregirane (ne individualne)
- Export zahteva ADMIN pristup
Dokument kreiran: Januar 2026