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.
Files changed (85) hide show
  1. package/dist/cjs/core/alert-aggregator.js +24 -15
  2. package/dist/cjs/core/alert-aggregator.js.map +1 -1
  3. package/dist/cjs/index.js +3 -6
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/plugins/events/index.js +3 -1
  6. package/dist/cjs/plugins/events/index.js.map +1 -1
  7. package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js +235 -0
  8. package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
  9. package/dist/cjs/plugins/events/phoenix-events.plugin.js +24 -195
  10. package/dist/cjs/plugins/events/phoenix-events.plugin.js.map +1 -1
  11. package/dist/cjs/plugins/fire-emt/index.js +3 -1
  12. package/dist/cjs/plugins/fire-emt/index.js.map +1 -1
  13. package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js +221 -0
  14. package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
  15. package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
  16. package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
  17. package/dist/cjs/plugins/index.js +2 -7
  18. package/dist/cjs/plugins/index.js.map +1 -1
  19. package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js +70 -77
  20. package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
  21. package/dist/esm/core/alert-aggregator.js +24 -15
  22. package/dist/esm/core/alert-aggregator.js.map +1 -1
  23. package/dist/esm/index.js +1 -3
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/plugins/events/index.js +1 -0
  26. package/dist/esm/plugins/events/index.js.map +1 -1
  27. package/dist/esm/plugins/events/phoenix-convention-center.plugin.js +231 -0
  28. package/dist/esm/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
  29. package/dist/esm/plugins/events/phoenix-events.plugin.js +24 -195
  30. package/dist/esm/plugins/events/phoenix-events.plugin.js.map +1 -1
  31. package/dist/esm/plugins/fire-emt/index.js +1 -0
  32. package/dist/esm/plugins/fire-emt/index.js.map +1 -1
  33. package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js +217 -0
  34. package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
  35. package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
  36. package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
  37. package/dist/esm/plugins/index.js +1 -5
  38. package/dist/esm/plugins/index.js.map +1 -1
  39. package/dist/esm/plugins/traffic/arizona-traffic.plugin.js +70 -77
  40. package/dist/esm/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
  41. package/dist/types/core/alert-aggregator.d.ts +1 -1
  42. package/dist/types/core/alert-aggregator.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +2 -6
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/plugins/events/index.d.ts +2 -0
  46. package/dist/types/plugins/events/index.d.ts.map +1 -1
  47. package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts +55 -0
  48. package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts.map +1 -0
  49. package/dist/types/plugins/events/phoenix-events.plugin.d.ts +5 -37
  50. package/dist/types/plugins/events/phoenix-events.plugin.d.ts.map +1 -1
  51. package/dist/types/plugins/fire-emt/index.d.ts +2 -0
  52. package/dist/types/plugins/fire-emt/index.d.ts.map +1 -1
  53. package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts +43 -0
  54. package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts.map +1 -0
  55. package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts +21 -13
  56. package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts.map +1 -1
  57. package/dist/types/plugins/index.d.ts +2 -6
  58. package/dist/types/plugins/index.d.ts.map +1 -1
  59. package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts +5 -14
  60. package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts.map +1 -1
  61. package/package.json +1 -11
  62. package/dist/cjs/plugins/police-blotter/index.js +0 -6
  63. package/dist/cjs/plugins/police-blotter/index.js.map +0 -1
  64. package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js +0 -198
  65. package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
  66. package/dist/cjs/plugins/pulsepoint/index.js +0 -6
  67. package/dist/cjs/plugins/pulsepoint/index.js.map +0 -1
  68. package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js +0 -275
  69. package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
  70. package/dist/esm/plugins/police-blotter/index.js +0 -2
  71. package/dist/esm/plugins/police-blotter/index.js.map +0 -1
  72. package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js +0 -194
  73. package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
  74. package/dist/esm/plugins/pulsepoint/index.js +0 -2
  75. package/dist/esm/plugins/pulsepoint/index.js.map +0 -1
  76. package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js +0 -271
  77. package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
  78. package/dist/types/plugins/police-blotter/index.d.ts +0 -3
  79. package/dist/types/plugins/police-blotter/index.d.ts.map +0 -1
  80. package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts +0 -49
  81. package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts.map +0 -1
  82. package/dist/types/plugins/pulsepoint/index.d.ts +0 -3
  83. package/dist/types/plugins/pulsepoint/index.d.ts.map +0 -1
  84. package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts +0 -61
  85. 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
- * Call type to category and risk mappings.
14
+ * Category to risk level and alert category mapping.
15
15
  */
16
- const CALL_TYPE_MAP = {
17
- // Fire-related
18
- STRUCTURE_FIRE: { category: 'fire', risk: 'extreme' },
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
- 'HAZARDOUS MATERIALS': { category: 'fire', risk: 'severe' },
61
- 'GAS LEAK': { category: 'fire', risk: 'high' },
62
- 'CARBON MONOXIDE': { category: 'fire', risk: 'high' },
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 Open Data Portal.
31
+ * Plugin that fetches fire and EMS incident data from Phoenix Fire Department ArcGIS service.
66
32
  *
67
- * @see https://www.phoenixopendata.com/dataset/fire-incidents
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: '1.0.0',
74
- description: 'Fire and EMS incidents from Phoenix Fire Department',
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: 15 * 60 * 1000, // 15 minutes
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
- limit: 1000,
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, limit, categories } = options;
64
+ const { location, timeRange, radiusMeters, categories } = options;
95
65
  const cacheKey = this.generateCacheKey(options);
96
- // Build Socrata API URL
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(url), this.config.cacheTtlMs);
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
- * Build the Socrata API URL for Phoenix fire data.
82
+ * Fetch incidents from Phoenix Fire ArcGIS service.
118
83
  */
119
- buildApiUrl(location, timeRange, radiusMeters, limit) {
120
- // Phoenix Fire incidents dataset
121
- const baseUrl = 'https://www.phoenixopendata.com/resource/m3af-pnrm.json';
122
- const params = new URLSearchParams();
123
- // Limit results
124
- params.set('$limit', String(limit ?? this.fireConfig.limit));
125
- // Order by most recent
126
- params.set('$order', 'incident_date DESC');
127
- // Build WHERE clause
128
- const whereClauses = [];
129
- // Time filter
130
- const startDate = timeRange.start.split('T')[0];
131
- const endDate = timeRange.end.split('T')[0];
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
- return `${baseUrl}?${params.toString()}`;
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
- * Fetch incidents from the API.
132
+ * Map incident type to alert category.
145
133
  */
146
- async fetchIncidents(url) {
147
- return this.fetchJson(url);
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 callType = (incident.call_type_final ?? incident.call_type ?? 'UNKNOWN').toUpperCase();
154
- const { category, risk } = this.mapCallType(callType);
155
- // Parse coordinates
156
- const latitude = incident.latitude ? parseFloat(incident.latitude) : PHOENIX_CENTER.latitude;
157
- const longitude = incident.longitude
158
- ? parseFloat(incident.longitude)
159
- : PHOENIX_CENTER.longitude;
160
- // Build timestamp from incident_date and dispatch_time
161
- const incidentDate = incident.incident_date ?? new Date().toISOString().split('T')[0];
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.incident_number}`,
170
- externalId: incident.incident_number,
171
- title: this.formatCallType(callType),
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
- address: incident.address,
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.incident_number,
191
- callType,
192
- priority: incident.priority,
193
- station: incident.station,
194
- battalion: incident.battalion,
195
- arrivalTime: incident.arrival_time,
196
- clearTime: incident.clear_time,
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 a call type to category and risk level.
185
+ * Map category to risk level.
202
186
  */
203
- mapCallType(callType) {
204
- // Try exact match first
205
- if (CALL_TYPE_MAP[callType]) {
206
- return CALL_TYPE_MAP[callType];
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
- // Try partial match
209
- for (const [key, value] of Object.entries(CALL_TYPE_MAP)) {
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 (callType.includes('MEDICAL') ||
219
- callType.includes('EMS') ||
220
- callType.includes('AMBULANCE')) {
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
- // Default
224
- return { category: 'fire', risk: 'moderate' };
204
+ return { category: 'fire', risk: 'low' };
225
205
  }
226
206
  /**
227
- * Format call type for display.
207
+ * Build incident title.
228
208
  */
229
- formatCallType(callType) {
230
- return callType
231
- .toLowerCase()
232
- .replace(/_/g, ' ')
233
- .split(' ')
234
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
235
- .join(' ');
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
- const callType = incident.call_type_final ?? incident.call_type;
243
- if (callType) {
244
- parts.push(`Type: ${this.formatCallType(callType)}`);
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.address) {
247
- parts.push(`Location: ${incident.address}`);
233
+ if (incident.VILLAGE) {
234
+ parts.push(`Area: ${incident.VILLAGE}`);
248
235
  }
249
- if (incident.priority) {
250
- parts.push(`Priority: ${incident.priority}`);
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":"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"}
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,uBAAuB;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,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"}
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"}