local-risk-alert-feed 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/alert-aggregator.js +24 -15
- package/dist/cjs/core/alert-aggregator.js.map +1 -1
- package/dist/cjs/index.js +3 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/plugins/events/index.js +3 -1
- package/dist/cjs/plugins/events/index.js.map +1 -1
- package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js +235 -0
- package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
- package/dist/cjs/plugins/events/phoenix-events.plugin.js +24 -195
- package/dist/cjs/plugins/events/phoenix-events.plugin.js.map +1 -1
- package/dist/cjs/plugins/fire-emt/index.js +3 -1
- package/dist/cjs/plugins/fire-emt/index.js.map +1 -1
- package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js +221 -0
- package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
- package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
- package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
- package/dist/cjs/plugins/index.js +2 -7
- package/dist/cjs/plugins/index.js.map +1 -1
- package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js +70 -77
- package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
- package/dist/esm/core/alert-aggregator.js +24 -15
- package/dist/esm/core/alert-aggregator.js.map +1 -1
- package/dist/esm/index.js +1 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/plugins/events/index.js +1 -0
- package/dist/esm/plugins/events/index.js.map +1 -1
- package/dist/esm/plugins/events/phoenix-convention-center.plugin.js +231 -0
- package/dist/esm/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
- package/dist/esm/plugins/events/phoenix-events.plugin.js +24 -195
- package/dist/esm/plugins/events/phoenix-events.plugin.js.map +1 -1
- package/dist/esm/plugins/fire-emt/index.js +1 -0
- package/dist/esm/plugins/fire-emt/index.js.map +1 -1
- package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js +217 -0
- package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
- package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
- package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
- package/dist/esm/plugins/index.js +1 -5
- package/dist/esm/plugins/index.js.map +1 -1
- package/dist/esm/plugins/traffic/arizona-traffic.plugin.js +70 -77
- package/dist/esm/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
- package/dist/types/core/alert-aggregator.d.ts +1 -1
- package/dist/types/core/alert-aggregator.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/plugins/events/index.d.ts +2 -0
- package/dist/types/plugins/events/index.d.ts.map +1 -1
- package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts +55 -0
- package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts.map +1 -0
- package/dist/types/plugins/events/phoenix-events.plugin.d.ts +5 -37
- package/dist/types/plugins/events/phoenix-events.plugin.d.ts.map +1 -1
- package/dist/types/plugins/fire-emt/index.d.ts +2 -0
- package/dist/types/plugins/fire-emt/index.d.ts.map +1 -1
- package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts +43 -0
- package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts.map +1 -0
- package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts +21 -13
- package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts.map +1 -1
- package/dist/types/plugins/index.d.ts +2 -6
- package/dist/types/plugins/index.d.ts.map +1 -1
- package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts +5 -14
- package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts.map +1 -1
- package/package.json +1 -11
- package/dist/cjs/plugins/police-blotter/index.js +0 -6
- package/dist/cjs/plugins/police-blotter/index.js.map +0 -1
- package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js +0 -198
- package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
- package/dist/cjs/plugins/pulsepoint/index.js +0 -6
- package/dist/cjs/plugins/pulsepoint/index.js.map +0 -1
- package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js +0 -275
- package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
- package/dist/esm/plugins/police-blotter/index.js +0 -2
- package/dist/esm/plugins/police-blotter/index.js.map +0 -1
- package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js +0 -194
- package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
- package/dist/esm/plugins/pulsepoint/index.js +0 -2
- package/dist/esm/plugins/pulsepoint/index.js.map +0 -1
- package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js +0 -271
- package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
- package/dist/types/plugins/police-blotter/index.d.ts +0 -3
- package/dist/types/plugins/police-blotter/index.d.ts.map +0 -1
- package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts +0 -49
- package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts.map +0 -1
- package/dist/types/plugins/pulsepoint/index.d.ts +0 -3
- package/dist/types/plugins/pulsepoint/index.d.ts.map +0 -1
- package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts +0 -61
- package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts.map +0 -1
|
@@ -11,101 +11,66 @@ const PHOENIX_CENTER = {
|
|
|
11
11
|
*/
|
|
12
12
|
const COVERAGE_RADIUS_METERS = 50_000;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Category to risk level and alert category mapping.
|
|
15
15
|
*/
|
|
16
|
-
const
|
|
17
|
-
// Fire
|
|
18
|
-
|
|
16
|
+
const CATEGORY_MAP = {
|
|
17
|
+
// Fire categories
|
|
18
|
+
FIRE: { category: 'fire', risk: 'high' },
|
|
19
19
|
'STRUCTURE FIRE': { category: 'fire', risk: 'extreme' },
|
|
20
|
-
FIRE: { category: 'fire', risk: 'severe' },
|
|
21
|
-
BRUSH_FIRE: { category: 'fire', risk: 'severe' },
|
|
22
20
|
'BRUSH FIRE': { category: 'fire', risk: 'severe' },
|
|
23
|
-
VEHICLE_FIRE: { category: 'fire', risk: 'high' },
|
|
24
|
-
'VEHICLE FIRE': { category: 'fire', risk: 'high' },
|
|
25
|
-
DUMPSTER_FIRE: { category: 'fire', risk: 'moderate' },
|
|
26
|
-
'DUMPSTER FIRE': { category: 'fire', risk: 'moderate' },
|
|
27
|
-
SMOKE_INVESTIGATION: { category: 'fire', risk: 'moderate' },
|
|
28
|
-
'SMOKE INVESTIGATION': { category: 'fire', risk: 'moderate' },
|
|
29
|
-
ALARM: { category: 'fire', risk: 'low' },
|
|
30
|
-
'FIRE ALARM': { category: 'fire', risk: 'low' },
|
|
31
|
-
// Medical-related
|
|
32
|
-
CARDIAC: { category: 'medical', risk: 'severe' },
|
|
33
|
-
'CARDIAC ARREST': { category: 'medical', risk: 'severe' },
|
|
34
|
-
STROKE: { category: 'medical', risk: 'severe' },
|
|
35
|
-
TRAUMA: { category: 'medical', risk: 'severe' },
|
|
36
|
-
'MAJOR TRAUMA': { category: 'medical', risk: 'severe' },
|
|
37
|
-
MEDICAL: { category: 'medical', risk: 'high' },
|
|
38
|
-
'MEDICAL AID': { category: 'medical', risk: 'high' },
|
|
39
|
-
'MEDICAL EMERGENCY': { category: 'medical', risk: 'high' },
|
|
40
|
-
OVERDOSE: { category: 'medical', risk: 'high' },
|
|
41
|
-
'DRUG OVERDOSE': { category: 'medical', risk: 'high' },
|
|
42
|
-
BREATHING: { category: 'medical', risk: 'high' },
|
|
43
|
-
'BREATHING PROBLEMS': { category: 'medical', risk: 'high' },
|
|
44
|
-
UNCONSCIOUS: { category: 'medical', risk: 'high' },
|
|
45
|
-
'UNCONSCIOUS PERSON': { category: 'medical', risk: 'high' },
|
|
46
|
-
FALL: { category: 'medical', risk: 'moderate' },
|
|
47
|
-
SICK: { category: 'medical', risk: 'moderate' },
|
|
48
|
-
'SICK PERSON': { category: 'medical', risk: 'moderate' },
|
|
49
|
-
TRANSFER: { category: 'medical', risk: 'low' },
|
|
50
|
-
'PATIENT TRANSFER': { category: 'medical', risk: 'low' },
|
|
51
|
-
// Traffic/accident-related (categorize as medical for injuries)
|
|
52
|
-
ACCIDENT: { category: 'medical', risk: 'high' },
|
|
53
|
-
'TRAFFIC ACCIDENT': { category: 'medical', risk: 'high' },
|
|
54
|
-
'MOTOR VEHICLE ACCIDENT': { category: 'medical', risk: 'high' },
|
|
55
|
-
MVA: { category: 'medical', risk: 'high' },
|
|
56
|
-
EXTRICATION: { category: 'medical', risk: 'severe' },
|
|
57
|
-
'VEHICLE EXTRICATION': { category: 'medical', risk: 'severe' },
|
|
58
|
-
// Hazmat
|
|
59
21
|
HAZMAT: { category: 'fire', risk: 'severe' },
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
22
|
+
// EMS categories
|
|
23
|
+
ALS: { category: 'medical', risk: 'high' }, // Advanced Life Support
|
|
24
|
+
BLS: { category: 'medical', risk: 'moderate' }, // Basic Life Support
|
|
25
|
+
CEMS: { category: 'medical', risk: 'moderate' }, // Community EMS
|
|
26
|
+
// Service categories
|
|
27
|
+
'MISC SERVICE': { category: 'fire', risk: 'low' },
|
|
28
|
+
SERVICE: { category: 'fire', risk: 'low' },
|
|
63
29
|
};
|
|
64
30
|
/**
|
|
65
|
-
* Plugin that fetches fire and EMS incident data from Phoenix
|
|
31
|
+
* Plugin that fetches fire and EMS incident data from Phoenix Fire Department ArcGIS service.
|
|
66
32
|
*
|
|
67
|
-
*
|
|
33
|
+
* Uses the Phoenix Fire 30-day incident history which is updated frequently (data is ~1-2 days old).
|
|
34
|
+
*
|
|
35
|
+
* @see https://maps.phoenix.gov/phxfire/rest/services/IncidentHistory30DayPoints/MapServer
|
|
68
36
|
*/
|
|
69
37
|
export class PhoenixFirePlugin extends BasePlugin {
|
|
70
38
|
metadata = {
|
|
71
39
|
id: 'phoenix-fire',
|
|
72
40
|
name: 'Phoenix Fire Department',
|
|
73
|
-
version: '
|
|
74
|
-
description: 'Fire and EMS incidents from Phoenix
|
|
41
|
+
version: '2.0.0',
|
|
42
|
+
description: 'Fire and EMS incidents from Phoenix Regional Dispatch Center',
|
|
75
43
|
coverage: {
|
|
76
44
|
type: 'regional',
|
|
77
45
|
center: PHOENIX_CENTER,
|
|
78
46
|
radiusMeters: COVERAGE_RADIUS_METERS,
|
|
79
|
-
description: 'Phoenix, AZ metropolitan area',
|
|
47
|
+
description: 'Phoenix, AZ metropolitan area (Phoenix, Paradise Valley, Laveen)',
|
|
80
48
|
},
|
|
81
49
|
supportedTemporalTypes: ['historical', 'real-time'],
|
|
82
50
|
supportedCategories: ['fire', 'medical'],
|
|
83
|
-
refreshIntervalMs:
|
|
51
|
+
refreshIntervalMs: 5 * 60 * 1000, // 5 minutes
|
|
84
52
|
};
|
|
85
53
|
fireConfig;
|
|
86
54
|
constructor(config) {
|
|
87
55
|
super(config);
|
|
88
56
|
this.fireConfig = {
|
|
89
|
-
|
|
57
|
+
includeEMS: true,
|
|
58
|
+
includeService: false,
|
|
59
|
+
limit: 500,
|
|
90
60
|
...config,
|
|
91
61
|
};
|
|
92
62
|
}
|
|
93
63
|
async fetchAlerts(options) {
|
|
94
|
-
const { location, timeRange, radiusMeters,
|
|
64
|
+
const { location, timeRange, radiusMeters, categories } = options;
|
|
95
65
|
const cacheKey = this.generateCacheKey(options);
|
|
96
|
-
|
|
97
|
-
const url = this.buildApiUrl(location, timeRange, radiusMeters, limit);
|
|
66
|
+
const warnings = [];
|
|
98
67
|
try {
|
|
99
|
-
const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchIncidents(
|
|
100
|
-
let alerts = data.map((incident) => this.transformIncident(incident));
|
|
101
|
-
// Filter by categories if specified
|
|
102
|
-
if (categories && categories.length > 0) {
|
|
103
|
-
alerts = alerts.filter((alert) => categories.includes(alert.category));
|
|
104
|
-
}
|
|
68
|
+
const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchIncidents(location, timeRange, radiusMeters, categories), this.config.cacheTtlMs);
|
|
105
69
|
return {
|
|
106
|
-
alerts,
|
|
70
|
+
alerts: data,
|
|
107
71
|
fromCache,
|
|
108
72
|
cacheKey,
|
|
73
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
109
74
|
};
|
|
110
75
|
}
|
|
111
76
|
catch (error) {
|
|
@@ -114,61 +79,82 @@ export class PhoenixFirePlugin extends BasePlugin {
|
|
|
114
79
|
}
|
|
115
80
|
}
|
|
116
81
|
/**
|
|
117
|
-
*
|
|
82
|
+
* Fetch incidents from Phoenix Fire ArcGIS service.
|
|
118
83
|
*/
|
|
119
|
-
|
|
120
|
-
// Phoenix Fire
|
|
121
|
-
const baseUrl = 'https://
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
//
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
whereClauses.push(`incident_date >= '${startDate}'`);
|
|
133
|
-
whereClauses.push(`incident_date <= '${endDate}'`);
|
|
134
|
-
// Location filter using within_circle
|
|
135
|
-
whereClauses.push(`within_circle(geocoded_column, ${location.latitude}, ${location.longitude}, ${radiusMeters})`);
|
|
136
|
-
params.set('$where', whereClauses.join(' AND '));
|
|
137
|
-
// Add app token if provided
|
|
138
|
-
if (this.fireConfig.appToken) {
|
|
139
|
-
params.set('$$app_token', this.fireConfig.appToken);
|
|
84
|
+
async fetchIncidents(location, timeRange, radiusMeters, categories) {
|
|
85
|
+
// Phoenix Fire 30-day incident history
|
|
86
|
+
const baseUrl = 'https://maps.phoenix.gov/phxfire/rest/services/IncidentHistory30DayPoints/MapServer/0/query';
|
|
87
|
+
// Build where clause for time range using DATE format (required by this ArcGIS server)
|
|
88
|
+
const startDate = new Date(timeRange.start).toISOString().split('T')[0];
|
|
89
|
+
const endDate = new Date(timeRange.end).toISOString().split('T')[0];
|
|
90
|
+
// Build type filter
|
|
91
|
+
const typeFilters = ["TYPE='FIRE'"];
|
|
92
|
+
if (this.fireConfig.includeEMS) {
|
|
93
|
+
typeFilters.push("TYPE='EMS'");
|
|
94
|
+
}
|
|
95
|
+
if (this.fireConfig.includeService) {
|
|
96
|
+
typeFilters.push("TYPE='SERVICE'");
|
|
140
97
|
}
|
|
141
|
-
|
|
98
|
+
const params = new URLSearchParams({
|
|
99
|
+
where: `REPORTED >= DATE '${startDate}' AND REPORTED <= DATE '${endDate}' AND (${typeFilters.join(' OR ')})`,
|
|
100
|
+
outFields: '*',
|
|
101
|
+
f: 'geojson',
|
|
102
|
+
outSR: '4326',
|
|
103
|
+
resultRecordCount: String(this.fireConfig.limit),
|
|
104
|
+
orderByFields: 'REPORTED DESC',
|
|
105
|
+
});
|
|
106
|
+
const url = `${baseUrl}?${params}`;
|
|
107
|
+
const response = await this.fetchJson(url);
|
|
108
|
+
if (!response.features) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
// Transform and filter by location
|
|
112
|
+
const alerts = response.features
|
|
113
|
+
.filter(f => {
|
|
114
|
+
if (!f.geometry?.coordinates)
|
|
115
|
+
return false;
|
|
116
|
+
const [lng, lat] = f.geometry.coordinates;
|
|
117
|
+
const distance = this.calculateDistance(location.latitude, location.longitude, lat, lng);
|
|
118
|
+
if (distance > radiusMeters)
|
|
119
|
+
return false;
|
|
120
|
+
// Filter by categories if specified
|
|
121
|
+
if (categories && categories.length > 0) {
|
|
122
|
+
const alertCategory = this.mapTypeToCategory(f.properties.TYPE);
|
|
123
|
+
if (!categories.includes(alertCategory))
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
})
|
|
128
|
+
.map(f => this.transformIncident(f.properties, f.geometry.coordinates));
|
|
129
|
+
return alerts;
|
|
142
130
|
}
|
|
143
131
|
/**
|
|
144
|
-
*
|
|
132
|
+
* Map incident type to alert category.
|
|
145
133
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
134
|
+
mapTypeToCategory(type) {
|
|
135
|
+
if (type === 'FIRE')
|
|
136
|
+
return 'fire';
|
|
137
|
+
if (type === 'EMS')
|
|
138
|
+
return 'medical';
|
|
139
|
+
return 'fire';
|
|
148
140
|
}
|
|
149
141
|
/**
|
|
150
142
|
* Transform a Phoenix Fire incident to our Alert format.
|
|
151
143
|
*/
|
|
152
|
-
transformIncident(incident) {
|
|
153
|
-
const
|
|
154
|
-
const { category, risk } = this.
|
|
155
|
-
// Parse
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
// Build
|
|
161
|
-
const
|
|
162
|
-
const dispatchTime = incident.dispatch_time ?? '00:00:00';
|
|
163
|
-
const issued = `${incidentDate}T${dispatchTime}`;
|
|
164
|
-
// Determine if this is real-time (within last hour) or historical
|
|
165
|
-
const issuedTime = new Date(issued).getTime();
|
|
166
|
-
const oneHourAgo = Date.now() - 60 * 60 * 1000;
|
|
167
|
-
const temporalType = issuedTime > oneHourAgo ? 'real-time' : 'historical';
|
|
144
|
+
transformIncident(incident, coordinates) {
|
|
145
|
+
const [longitude, latitude] = coordinates;
|
|
146
|
+
const { category, risk } = this.mapCategoryToRisk(incident.TYPE, incident.CATEGORY);
|
|
147
|
+
// Parse timestamp
|
|
148
|
+
const issued = new Date(incident.REPORTED).toISOString();
|
|
149
|
+
// Determine if real-time (within last 24 hours)
|
|
150
|
+
const isRecent = Date.now() - incident.REPORTED < 24 * 60 * 60 * 1000;
|
|
151
|
+
const temporalType = isRecent ? 'real-time' : 'historical';
|
|
152
|
+
// Build title
|
|
153
|
+
const title = this.buildTitle(incident.TYPE, incident.CATEGORY);
|
|
168
154
|
return this.createAlert({
|
|
169
|
-
id: `phoenix-fire-${incident.
|
|
170
|
-
externalId: incident.
|
|
171
|
-
title
|
|
155
|
+
id: `phoenix-fire-${incident.INCIDENT}`,
|
|
156
|
+
externalId: incident.INCIDENT,
|
|
157
|
+
title,
|
|
172
158
|
description: this.buildDescription(incident),
|
|
173
159
|
riskLevel: risk,
|
|
174
160
|
priority: this.riskLevelToPriority(risk),
|
|
@@ -176,83 +162,96 @@ export class PhoenixFirePlugin extends BasePlugin {
|
|
|
176
162
|
temporalType,
|
|
177
163
|
location: {
|
|
178
164
|
point: { latitude, longitude },
|
|
179
|
-
|
|
180
|
-
city: incident.city ?? 'Phoenix',
|
|
165
|
+
city: incident.CITY === 'PHX' ? 'Phoenix' : incident.CITY,
|
|
181
166
|
state: 'AZ',
|
|
182
|
-
zipCode: incident.zip,
|
|
183
167
|
},
|
|
184
168
|
timestamps: {
|
|
185
169
|
issued,
|
|
186
170
|
eventStart: issued,
|
|
187
|
-
eventEnd: incident.clear_time ? `${incidentDate}T${incident.clear_time}` : undefined,
|
|
188
171
|
},
|
|
189
172
|
metadata: {
|
|
190
|
-
incidentNumber: incident.
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
173
|
+
incidentNumber: incident.INCIDENT,
|
|
174
|
+
type: incident.TYPE,
|
|
175
|
+
category: incident.CATEGORY,
|
|
176
|
+
classification: incident.CLASSIFICATION,
|
|
177
|
+
station: incident.STATION?.trim(),
|
|
178
|
+
fireDistrict: incident.FIRE_DISTRICT,
|
|
179
|
+
councilDistrict: incident.COUNCIL_DISTRICT,
|
|
180
|
+
village: incident.VILLAGE,
|
|
197
181
|
},
|
|
198
182
|
});
|
|
199
183
|
}
|
|
200
184
|
/**
|
|
201
|
-
* Map
|
|
185
|
+
* Map category to risk level.
|
|
202
186
|
*/
|
|
203
|
-
|
|
204
|
-
//
|
|
205
|
-
|
|
206
|
-
|
|
187
|
+
mapCategoryToRisk(type, category) {
|
|
188
|
+
// Check specific category mapping
|
|
189
|
+
const upperCategory = category?.toUpperCase() ?? '';
|
|
190
|
+
if (CATEGORY_MAP[upperCategory]) {
|
|
191
|
+
return CATEGORY_MAP[upperCategory];
|
|
207
192
|
}
|
|
208
|
-
//
|
|
209
|
-
|
|
210
|
-
if (callType.includes(key) || key.includes(callType)) {
|
|
211
|
-
return value;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
// Default based on common keywords
|
|
215
|
-
if (callType.includes('FIRE') || callType.includes('SMOKE') || callType.includes('BURN')) {
|
|
193
|
+
// Default by type
|
|
194
|
+
if (type === 'FIRE') {
|
|
216
195
|
return { category: 'fire', risk: 'high' };
|
|
217
196
|
}
|
|
218
|
-
if (
|
|
219
|
-
|
|
220
|
-
|
|
197
|
+
if (type === 'EMS') {
|
|
198
|
+
// ALS is higher priority than BLS
|
|
199
|
+
if (category === 'ALS') {
|
|
200
|
+
return { category: 'medical', risk: 'high' };
|
|
201
|
+
}
|
|
221
202
|
return { category: 'medical', risk: 'moderate' };
|
|
222
203
|
}
|
|
223
|
-
|
|
224
|
-
return { category: 'fire', risk: 'moderate' };
|
|
204
|
+
return { category: 'fire', risk: 'low' };
|
|
225
205
|
}
|
|
226
206
|
/**
|
|
227
|
-
*
|
|
207
|
+
* Build incident title.
|
|
228
208
|
*/
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
209
|
+
buildTitle(type, category) {
|
|
210
|
+
const categoryLabels = {
|
|
211
|
+
ALS: 'Medical Emergency (ALS)',
|
|
212
|
+
BLS: 'Medical Call (BLS)',
|
|
213
|
+
CEMS: 'Community EMS',
|
|
214
|
+
FIRE: 'Fire Incident',
|
|
215
|
+
'MISC SERVICE': 'Service Call',
|
|
216
|
+
SERVICE: 'Service Call',
|
|
217
|
+
};
|
|
218
|
+
if (type === 'FIRE') {
|
|
219
|
+
return category === 'FIRE' ? 'Fire Incident' : `Fire: ${category}`;
|
|
220
|
+
}
|
|
221
|
+
return categoryLabels[category] ?? `${type}: ${category}`;
|
|
236
222
|
}
|
|
237
223
|
/**
|
|
238
224
|
* Build description from incident data.
|
|
239
225
|
*/
|
|
240
226
|
buildDescription(incident) {
|
|
241
227
|
const parts = [];
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
228
|
+
parts.push(`Type: ${incident.TYPE}`);
|
|
229
|
+
parts.push(`Category: ${incident.CATEGORY}`);
|
|
230
|
+
if (incident.CLASSIFICATION) {
|
|
231
|
+
parts.push(`Classification: ${incident.CLASSIFICATION}`);
|
|
245
232
|
}
|
|
246
|
-
if (incident.
|
|
247
|
-
parts.push(`
|
|
233
|
+
if (incident.VILLAGE) {
|
|
234
|
+
parts.push(`Area: ${incident.VILLAGE}`);
|
|
248
235
|
}
|
|
249
|
-
if (incident.
|
|
250
|
-
parts.push(`
|
|
251
|
-
}
|
|
252
|
-
if (incident.station) {
|
|
253
|
-
parts.push(`Station: ${incident.station}`);
|
|
236
|
+
if (incident.STATION?.trim()) {
|
|
237
|
+
parts.push(`Station: ${incident.STATION.trim()}`);
|
|
254
238
|
}
|
|
255
239
|
return parts.join('\n');
|
|
256
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Calculate distance between two points in meters.
|
|
243
|
+
*/
|
|
244
|
+
calculateDistance(lat1, lon1, lat2, lon2) {
|
|
245
|
+
const R = 6371e3;
|
|
246
|
+
const φ1 = (lat1 * Math.PI) / 180;
|
|
247
|
+
const φ2 = (lat2 * Math.PI) / 180;
|
|
248
|
+
const Δφ = ((lat2 - lat1) * Math.PI) / 180;
|
|
249
|
+
const Δλ = ((lon2 - lon1) * Math.PI) / 180;
|
|
250
|
+
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
|
|
251
|
+
Math.cos(φ1) * Math.cos(φ2) *
|
|
252
|
+
Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
|
|
253
|
+
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
254
|
+
return R * c;
|
|
255
|
+
}
|
|
257
256
|
}
|
|
258
257
|
//# sourceMappingURL=phoenix-fire.plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phoenix-fire.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/fire-emt/phoenix-fire.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAoB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"phoenix-fire.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/fire-emt/phoenix-fire.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,8 @@
|
|
|
2
2
|
export { BasePlugin } from './base-plugin';
|
|
3
3
|
// Weather plugins
|
|
4
4
|
export { NWSWeatherPlugin } from './weather';
|
|
5
|
-
// Police/crime plugins
|
|
6
|
-
export { PhoenixPolicePlugin } from './police-blotter';
|
|
7
5
|
// Fire/EMS plugins
|
|
8
|
-
export { PhoenixFirePlugin } from './fire-emt';
|
|
9
|
-
// Real-time fire/EMS plugins
|
|
10
|
-
export { PulsepointPlugin } from './pulsepoint';
|
|
6
|
+
export { PhoenixFirePlugin, NIFCWildfirePlugin } from './fire-emt';
|
|
11
7
|
// Events plugins
|
|
12
8
|
export { PhoenixEventsPlugin } from './events';
|
|
13
9
|
// Traffic plugins
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGnE,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,kBAAkB;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGjD,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|