Coverage for src/crimepy/nibrs/codes.py: 100%
47 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-30 18:01 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-30 18:01 +0000
1"""The labels of the codes in the NIBRS master files.
3Each codebook maps the codes of a field (as they are written in the master
4files) to their labels. The labels follow the reference tables that the FBI's
5Crime Data Explorer publishes with its NIBRS downloads (such as
6"NIBRS_OFFENSE_TYPE.csv"), and, for the fields that are only in the master
7files (such as the batch header's population group), the FBI's "NIBRS
8Flatfile Yearly Master Record Descriptions".
10Codes changed over the years, and each codebook has every code that any year
11uses. A few codes meant something else in earlier years:
13* Race "A" was "Asian or Pacific Islander" before 2013, when "P" (Native
14 Hawaiian or Other Pacific Islander) was added.
15* Exceptional clearance "C" was "Extradition Denied" in the 1995 document
16 and is "In Custody of Other Jurisdiction" now.
18Contents:
19 CODEBOOKS: every codebook, by the name that `crimepy.nibrs.layouts.Field`
20 uses.
21 ACTIVITIES: the labels of criminal activities and gang information
22 ("activities").
23 AGENCY_TYPES: the labels of agency types ("agency_types").
24 AGES: the labels of age codes of victims, offenders, and arrestees
25 ("ages").
26 ARREST_TYPES: the labels of types of arrest ("arrest_types").
27 BIASES: the labels of bias motivations ("biases").
28 CIRCUMSTANCES: the labels of aggravated assault and homicide
29 circumstances ("circumstances").
30 COMPLETIONS: whether an offense was attempted or completed
31 ("completions").
32 DISPOSITIONS: the labels of dispositions of arrestees under 18
33 ("dispositions").
34 DRUGS: the labels of types of suspected drugs ("drugs").
35 ENTRIES: whether force was used to enter ("entries").
36 ETHNICITIES: the labels of ethnicities ("ethnicities").
37 EXCEPTIONAL_CLEARANCES: the labels of exceptional clearances
38 ("clearances").
39 INJURIES: the labels of types of injury ("injuries").
40 JUSTIFICATIONS: the labels of justifiable homicide circumstances
41 ("justifications").
42 LOCATIONS: the labels of types of location ("locations").
43 LOSSES: the labels of types of property loss ("losses").
44 MEASURES: the labels of units of drug quantities ("measures").
45 MULTIPLE_ARRESTEES: the labels of multiple arrestee indicators
46 ("multiple_arrestees").
47 OFFICER_ACTIVITIES: the labels of what officers who were killed or
48 assaulted were doing ("officer_activities").
49 OFFICER_ASSIGNMENTS: the labels of assignments of officers who were
50 killed or assaulted ("officer_assignments").
51 POPULATION_GROUPS: the labels of agencies' population groups
52 ("population_groups").
53 PROPERTIES: the labels of property descriptions ("properties").
54 RACES: the labels of races ("races").
55 REGIONS: the labels of the Census regions of agencies ("regions").
56 RELATIONSHIPS: the labels of victims' relationships to offenders
57 ("relationships").
58 RESIDENTS: whether a victim or arrestee is a resident ("residents").
59 SEXES: the labels of sexes ("sexes").
60 SUBREGIONS: the labels of the Census divisions of agencies
61 ("divisions").
62 USING: what offenders were suspected of using ("using").
63 VICTIM_TYPES: the labels of types of victim ("victim_types").
64 WEAPONS: the labels of types of weapon or force ("weapons").
65 OFFENSES: the name, category, whom or what it is against, and group of
66 each offense code. The names are the "offenses" codebook.
67 OFFENSE_CATEGORIES: the category of each offense code (such as "Assault
68 Offenses").
69 CRIMES_AGAINST: whom or what each offense is against ("Person",
70 "Property", "Society", or "Not a Crime").
71 OFFENSE_GROUPS: whether each offense is in Group "A" or Group "B".
72 OFFENSE_TYPES: the offense codes of each type: whom or what they are
73 against (as in `CRIMES_AGAINST`), and "National Security Offenses",
74 "Rape Offenses", "Sex Offenses", and "Immigration Offenses".
75 STATE_ABBREVIATIONS: the postal abbreviation of each numeric state code.
76 STATES: the name of each numeric state code (the "states" codebook).
77 AGE_YEARS: the age in years of each special age code.
79"""
81from __future__ import annotations
83from collections.abc import Mapping
85""" Offenses """
88# Offense codes, with their name, category, whom or what they are against, and
89# group.
90OFFENSES: dict[str, tuple[str, str, str, str]] = {
91 '09A': (
92 'Murder and Nonnegligent Manslaughter', 'Homicide Offenses', 'Person',
93 'A'),
94 '09B': ('Negligent Manslaughter', 'Homicide Offenses', 'Person', 'A'),
95 '09C': ('Justifiable Homicide', 'Homicide Offenses', 'Person', 'A'),
96 '100': ('Kidnapping/Abduction', 'Kidnapping/Abduction', 'Person', 'A'),
97 '101': ('Treason', 'Other Offenses', 'Society', 'A'),
98 '103': ('Espionage', 'Other Offenses', 'Society', 'A'),
99 '11A': ('Rape', 'Sex Offenses', 'Person', 'A'),
100 '11B': ('Sodomy', 'Sex Offenses', 'Person', 'A'),
101 '11C': ('Sexual Assault With An Object', 'Sex Offenses', 'Person', 'A'),
102 '11D': ('Criminal Sexual Contact', 'Sex Offenses', 'Person', 'A'),
103 '120': ('Robbery', 'Robbery', 'Property', 'A'),
104 '13A': ('Aggravated Assault', 'Assault Offenses', 'Person', 'A'),
105 '13B': ('Simple Assault', 'Assault Offenses', 'Person', 'A'),
106 '13C': ('Intimidation', 'Assault Offenses', 'Person', 'A'),
107 '200': ('Arson', 'Arson', 'Property', 'A'),
108 '210': ('Extortion/Blackmail', 'Extortion/Blackmail', 'Property', 'A'),
109 '220': (
110 'Burglary/Breaking & Entering', 'Burglary/Breaking & Entering',
111 'Property', 'A'),
112 '23A': ('Pocket-picking', 'Larceny/Theft Offenses', 'Property', 'A'),
113 '23B': ('Purse-snatching', 'Larceny/Theft Offenses', 'Property', 'A'),
114 '23C': ('Shoplifting', 'Larceny/Theft Offenses', 'Property', 'A'),
115 '23D': ('Theft From Building', 'Larceny/Theft Offenses', 'Property', 'A'),
116 '23E': (
117 'Theft From Coin-Operated Machine or Device', 'Larceny/Theft Offenses',
118 'Property', 'A'),
119 '23F': (
120 'Theft From Motor Vehicle', 'Larceny/Theft Offenses', 'Property', 'A'),
121 '23G': (
122 'Theft of Motor Vehicle Parts or Accessories', 'Larceny/Theft Offenses',
123 'Property', 'A'),
124 '23H': ('All Other Larceny', 'Larceny/Theft Offenses', 'Property', 'A'),
125 '240': ('Motor Vehicle Theft', 'Motor Vehicle Theft', 'Property', 'A'),
126 '250': (
127 'Counterfeiting/Forgery', 'Counterfeiting/Forgery', 'Property', 'A'),
128 '26A': (
129 'False Pretenses/Swindle/Confidence Game', 'Fraud Offenses', 'Property',
130 'A'),
131 '26B': (
132 'Credit Card/Automated Teller Machine Fraud', 'Fraud Offenses',
133 'Property', 'A'),
134 '26C': ('Impersonation', 'Fraud Offenses', 'Property', 'A'),
135 '26D': ('Welfare Fraud', 'Fraud Offenses', 'Property', 'A'),
136 '26E': ('Wire Fraud', 'Fraud Offenses', 'Property', 'A'),
137 '26F': ('Identity Theft', 'Fraud Offenses', 'Property', 'A'),
138 '26G': ('Hacking/Computer Invasion', 'Fraud Offenses', 'Property', 'A'),
139 '26H': ('Money Laundering', 'Other Offenses', 'Society', 'A'),
140 '270': ('Embezzlement', 'Embezzlement', 'Property', 'A'),
141 '280': (
142 'Stolen Property Offenses', 'Stolen Property Offenses', 'Property',
143 'A'),
144 '290': (
145 'Destruction/Damage/Vandalism of Property',
146 'Destruction/Damage/Vandalism of Property', 'Property', 'A'),
147 '30A': (
148 'Illegal Entry into the United States', 'Other Offenses', 'Society',
149 'A'),
150 '30B': ('False Citizenship', 'Other Offenses', 'Society', 'A'),
151 '30C': ('Smuggling Aliens', 'Other Offenses', 'Society', 'A'),
152 '30D': ('Re-entry after Deportation', 'Other Offenses', 'Society', 'A'),
153 '35A': (
154 'Drug/Narcotic Violations', 'Drug/Narcotic Offenses', 'Society', 'A'),
155 '35B': (
156 'Drug Equipment Violations', 'Drug/Narcotic Offenses', 'Society', 'A'),
157 '360': (
158 'Failure to Register as a Sex Offender', 'Other Offenses', 'Society',
159 'A'),
160 '36A': ('Incest', 'Sex Offenses, Non-forcible', 'Person', 'A'),
161 '36B': ('Statutory Rape', 'Sex Offenses, Non-forcible', 'Person', 'A'),
162 '370': (
163 'Pornography/Obscene Material', 'Pornography/Obscene Material',
164 'Society', 'A'),
165 '39A': ('Betting/Wagering', 'Gambling Offenses', 'Society', 'A'),
166 '39B': (
167 'Operating/Promoting/Assisting Gambling', 'Gambling Offenses',
168 'Society', 'A'),
169 '39C': (
170 'Gambling Equipment Violation', 'Gambling Offenses', 'Society', 'A'),
171 '39D': ('Sports Tampering', 'Gambling Offenses', 'Society', 'A'),
172 '40A': ('Prostitution', 'Prostitution Offenses', 'Society', 'A'),
173 '40B': (
174 'Assisting or Promoting Prostitution', 'Prostitution Offenses',
175 'Society', 'A'),
176 '40C': ('Purchasing Prostitution', 'Prostitution Offenses', 'Society', 'A'),
177 '49A': (
178 'Harboring Escapee/Concealing from Arrest', 'Other Offenses', 'Society',
179 'A'),
180 '49B': ('Flight to Avoid Prosecution', 'Other Offenses', 'Society', 'A'),
181 '49C': ('Flight to Avoid Deportation', 'Other Offenses', 'Society', 'A'),
182 '510': ('Bribery', 'Bribery', 'Property', 'A'),
183 '520': ('Weapon Law Violations', 'Weapon Law Violations', 'Society', 'A'),
184 '521': (
185 'Violation of National Firearm Act of 1934', 'Other Offenses',
186 'Society', 'A'),
187 '522': ('Weapons of Mass Destruction', 'Other Offenses', 'Society', 'A'),
188 '526': ('Explosives Violation', 'Other Offenses', 'Society', 'A'),
189 '58A': ('Import Violations', 'Other Offenses', 'Society', 'A'),
190 '58B': ('Export Violations', 'Other Offenses', 'Society', 'A'),
191 '61A': ('Federal Liquor Offenses', 'Other Offenses', 'Society', 'A'),
192 '61B': ('Federal Tobacco Offenses', 'Other Offenses', 'Society', 'A'),
193 '620': ('Wildlife Trafficking', 'Other Offenses', 'Society', 'A'),
194 '64A': (
195 'Human Trafficking, Commercial Sex Acts', 'Human Trafficking', 'Person',
196 'A'),
197 '64B': (
198 'Human Trafficking, Involuntary Servitude', 'Human Trafficking',
199 'Person', 'A'),
200 '720': ('Animal Cruelty', 'Animal Cruelty', 'Society', 'A'),
201 '90A': ('Bad Checks', 'Bad Checks', 'Property', 'B'),
202 '90B': (
203 'Curfew/Loitering/Vagrancy Violations',
204 'Curfew/Loitering/Vagrancy Violations', 'Society', 'B'),
205 '90C': ('Disorderly Conduct', 'Disorderly Conduct', 'Society', 'B'),
206 '90D': (
207 'Driving Under the Influence', 'Driving Under the Influence', 'Society',
208 'B'),
209 '90E': ('Drunkenness', 'Drunkenness', 'Society', 'B'),
210 '90F': (
211 'Family Offenses, Nonviolent', 'Family Offenses, Nonviolent', 'Person',
212 'B'),
213 '90G': ('Liquor Law Violations', 'Liquor Law Violations', 'Society', 'B'),
214 '90H': ('Peeping Tom', 'Peeping Tom', 'Person', 'B'),
215 '90I': ('Runaway', 'Other Offenses', 'Not a Crime', 'B'),
216 '90J': (
217 'Trespass of Real Property', 'Trespass of Real Property', 'Society',
218 'B'),
219 '90K': ('Failure to Appear', 'Other Offenses', 'Society', 'B'),
220 '90L': ('Federal Resource Violations', 'Other Offenses', 'Society', 'B'),
221 '90M': ('Perjury', 'Other Offenses', 'Society', 'B'),
222 '90Z': ('All Other Offenses', 'All Other Offenses', 'Society', 'B')}
224OFFENSE_CATEGORIES: dict[str, str] = {
225 k: v[1] for k, v in OFFENSES.items()}
226CRIMES_AGAINST: dict[str, str] = {k: v[2] for k, v in OFFENSES.items()}
227OFFENSE_GROUPS: dict[str, str] = {k: v[3] for k, v in OFFENSES.items()}
229# Offense codes by whom or what they are against, and by a few other types
230# that cut across the categories.
231OFFENSE_TYPES: dict[str, list[str]] = {
232 **{t: [k for k, v in CRIMES_AGAINST.items() if v == t]
233 for t in dict.fromkeys(CRIMES_AGAINST.values())},
234 'National Security Offenses': ['101', '103', '522'],
235 'Rape Offenses': ['11A', '11B', '11C'],
236 'Sex Offenses': [
237 '11A', '11B', '11C', '11D', '36A', '36B', '370', '40A', '40B', '40C',
238 '64A'],
239 'Immigration Offenses': ['30A', '30B', '30C', '30D']}
242""" States """
245# Numeric state codes, with their postal abbreviation and name. The ORIs of
246# Nebraska begin with "NB" and those of Guam with "GM", but their postal
247# abbreviations are used here.
248_STATES: dict[str, tuple[str, str]] = {
249 '01': ('AL', 'Alabama'),
250 '02': ('AZ', 'Arizona'),
251 '03': ('AR', 'Arkansas'),
252 '04': ('CA', 'California'),
253 '05': ('CO', 'Colorado'),
254 '06': ('CT', 'Connecticut'),
255 '07': ('DE', 'Delaware'),
256 '08': ('DC', 'District of Columbia'),
257 '09': ('FL', 'Florida'),
258 '10': ('GA', 'Georgia'),
259 '11': ('ID', 'Idaho'),
260 '12': ('IL', 'Illinois'),
261 '13': ('IN', 'Indiana'),
262 '14': ('IA', 'Iowa'),
263 '15': ('KS', 'Kansas'),
264 '16': ('KY', 'Kentucky'),
265 '17': ('LA', 'Louisiana'),
266 '18': ('ME', 'Maine'),
267 '19': ('MD', 'Maryland'),
268 '20': ('MA', 'Massachusetts'),
269 '21': ('MI', 'Michigan'),
270 '22': ('MN', 'Minnesota'),
271 '23': ('MS', 'Mississippi'),
272 '24': ('MO', 'Missouri'),
273 '25': ('MT', 'Montana'),
274 '26': ('NE', 'Nebraska'),
275 '27': ('NV', 'Nevada'),
276 '28': ('NH', 'New Hampshire'),
277 '29': ('NJ', 'New Jersey'),
278 '30': ('NM', 'New Mexico'),
279 '31': ('NY', 'New York'),
280 '32': ('NC', 'North Carolina'),
281 '33': ('ND', 'North Dakota'),
282 '34': ('OH', 'Ohio'),
283 '35': ('OK', 'Oklahoma'),
284 '36': ('OR', 'Oregon'),
285 '37': ('PA', 'Pennsylvania'),
286 '38': ('RI', 'Rhode Island'),
287 '39': ('SC', 'South Carolina'),
288 '40': ('SD', 'South Dakota'),
289 '41': ('TN', 'Tennessee'),
290 '42': ('TX', 'Texas'),
291 '43': ('UT', 'Utah'),
292 '44': ('VT', 'Vermont'),
293 '45': ('VA', 'Virginia'),
294 '46': ('WA', 'Washington'),
295 '47': ('WV', 'West Virginia'),
296 '48': ('WI', 'Wisconsin'),
297 '49': ('WY', 'Wyoming'),
298 '50': ('AK', 'Alaska'),
299 '51': ('HI', 'Hawaii'),
300 '52': ('CZ', 'Canal Zone'),
301 '53': ('PR', 'Puerto Rico'),
302 '54': ('AS', 'American Samoa'),
303 '55': ('GU', 'Guam'),
304 '62': ('VI', 'U.S. Virgin Islands'),
305 '69': ('MP', 'Mariana Islands'),
306 '98': ('FS', 'Federal'),
307 '99': ('OT', 'Other')}
309STATE_ABBREVIATIONS: dict[str, str] = {k: v[0] for k, v in _STATES.items()}
310STATES: dict[str, str] = {k: v[1] for k, v in _STATES.items()}
313""" Ages """
316# Ages in years of the age codes that are not a number of years. "00" is an
317# unknown age, and "99" is 99 years old or older.
318AGE_YEARS: dict[str, float | None] = {
319 'NN': 0.0, 'NB': 0.0, 'BB': 0.0, '00': None}
321AGES: dict[str, str] = {
322 'NN': 'Under 24 Hours',
323 'NB': '1-6 Days Old',
324 'BB': '7-364 Days Old',
325 '00': 'Unknown',
326 **{f'{n:02d}': f'{n} Years Old' for n in range(1, 99)},
327 '99': 'Over 98 Years Old'}
330""" Codebooks """
333ACTIVITIES: dict[str, str] = {
334 'A': 'Simple/Gross Neglect',
335 'B': 'Buying/Receiving',
336 'C': 'Cultivating/Manufacturing/Publishing',
337 'D': 'Distributing/Selling',
338 'E': 'Exploiting Children',
339 'F': 'Organized Abuse',
340 'G': 'Other Gang',
341 'I': 'Intentional Abuse and Torture',
342 'J': 'Juvenile Gang',
343 'N': 'None/Unknown',
344 'O': 'Operating/Promoting/Assisting/Abetting',
345 'P': 'Possessing/Concealing',
346 'S': 'Animal Sexual Abuse',
347 'T': 'Transporting/Transmitting/Importing',
348 'U': 'Using/Consuming',
349 'W': 'Conspiracy'}
351AGENCY_TYPES: dict[str, str] = {
352 '0': 'Covered by Another Agency',
353 '1': 'City',
354 '2': 'County',
355 '3': 'University or College',
356 '4': 'State Police',
357 '6': 'Other State Agency',
358 '7': 'Tribal',
359 '8': 'Federal'}
361ARREST_TYPES: dict[str, str] = {
362 'O': 'On View',
363 'S': 'Summoned/Cited',
364 'T': 'Taken into Custody'}
366BIASES: dict[str, str] = {
367 '11': 'Anti-White',
368 '12': 'Anti-Black or African American',
369 '13': 'Anti-American Indian or Alaska Native',
370 '14': 'Anti-Asian',
371 '15': 'Anti-Multiple Races, Group',
372 '16': 'Anti-Native Hawaiian or Other Pacific Islander',
373 '21': 'Anti-Jewish',
374 '22': 'Anti-Catholic',
375 '23': 'Anti-Protestant',
376 '24': 'Anti-Islamic (Muslim)',
377 '25': 'Anti-Other Religion',
378 '26': 'Anti-Multiple Religions, Group',
379 '27': 'Anti-Atheism/Agnosticism',
380 '28': 'Anti-Church of Jesus Christ',
381 '29': "Anti-Jehovah's Witness",
382 '31': 'Anti-Arab',
383 '32': 'Anti-Hispanic or Latino',
384 '33': 'Anti-Other Race/Ethnicity/Ancestry',
385 '41': 'Anti-Gay (Male)',
386 '42': 'Anti-Lesbian (Female)',
387 '43': 'Anti-Lesbian, Gay, Bisexual, or Transgender (Mixed Group)',
388 '44': 'Anti-Heterosexual',
389 '45': 'Anti-Bisexual',
390 '51': 'Anti-Physical Disability',
391 '52': 'Anti-Mental Disability',
392 '61': 'Anti-Male',
393 '62': 'Anti-Female',
394 '71': 'Anti-Transgender',
395 '72': 'Anti-Gender Non-Conforming',
396 '81': 'Anti-Eastern Orthodox (Russian, Greek, Other)',
397 '82': 'Anti-Other Christian',
398 '83': 'Anti-Buddhist',
399 '84': 'Anti-Hindu',
400 '85': 'Anti-Sikh',
401 '88': 'None (No Bias)',
402 '99': 'Unknown'}
404CIRCUMSTANCES: dict[str, str] = {
405 '01': 'Argument',
406 '02': 'Assault on Law Enforcement Officer',
407 '03': 'Drug Dealing',
408 '04': 'Gangland',
409 '05': 'Juvenile Gang',
410 '06': 'Domestic Violence',
411 '07': 'Mercy Killing',
412 '08': 'Other Felony Involved',
413 '09': 'Other Circumstances',
414 '10': 'Unknown Circumstances',
415 '20': 'Criminal Killed by Private Citizen',
416 '21': 'Criminal Killed by Police Officer',
417 '30': 'Child Playing With Weapon',
418 '31': 'Gun-Cleaning Accident',
419 '32': 'Hunting Accident',
420 '33': 'Other Negligent Weapon Handling',
421 '34': 'Other Negligent Killings'}
423EXCEPTIONAL_CLEARANCES: dict[str, str] = {
424 'A': 'Death of Offender',
425 'B': 'Prosecution Declined',
426 'C': 'In Custody of Other Jurisdiction',
427 'D': 'Victim Refused to Cooperate',
428 'E': 'Juvenile/No Custody',
429 'N': 'Not Applicable'}
431COMPLETIONS: dict[str, str] = {'A': 'Attempted', 'C': 'Completed'}
433DISPOSITIONS: dict[str, str] = {
434 'H': 'Handled Within Department',
435 'R': 'Referred to Other Authorities'}
437DRUGS: dict[str, str] = {
438 'A': 'Crack Cocaine',
439 'B': 'Cocaine',
440 'C': 'Hashish',
441 'D': 'Heroin',
442 'E': 'Marijuana',
443 'F': 'Morphine',
444 'G': 'Opium',
445 'H': 'Other Narcotics',
446 'I': 'LSD',
447 'J': 'PCP',
448 'K': 'Other Hallucinogens',
449 'L': 'Amphetamines/Methamphetamines',
450 'M': 'Other Stimulants',
451 'N': 'Barbiturates',
452 'O': 'Other Depressants',
453 'P': 'Other Drugs',
454 'U': 'Unknown',
455 'X': 'More Than 3 Types'}
457ENTRIES: dict[str, str] = {'F': 'Force', 'N': 'No Force'}
459ETHNICITIES: dict[str, str] = {
460 'H': 'Hispanic or Latino',
461 'N': 'Not Hispanic or Latino',
462 'M': 'Multiple',
463 'U': 'Unknown'}
465INJURIES: dict[str, str] = {
466 'B': 'Apparent Broken Bones',
467 'I': 'Possible Internal Injury',
468 'L': 'Severe Laceration',
469 'M': 'Apparent Minor Injury',
470 'N': 'None',
471 'O': 'Other Major Injury',
472 'T': 'Loss of Teeth',
473 'U': 'Unconsciousness'}
475JUSTIFICATIONS: dict[str, str] = {
476 'A': 'Criminal Attacked Police Officer and That Officer Killed Criminal',
477 'B': (
478 'Criminal Attacked Police Officer and Criminal Killed by Another '
479 'Police Officer'),
480 'C': 'Criminal Attacked a Civilian',
481 'D': 'Criminal Attempted Flight From a Crime',
482 'E': 'Criminal Killed in Commission of a Crime',
483 'F': 'Criminal Resisted Arrest',
484 'G': 'Unable to Determine/Not Enough Information'}
486LOCATIONS: dict[str, str] = {
487 '01': 'Air/Bus/Train Terminal',
488 '02': 'Bank/Savings and Loan',
489 '03': 'Bar/Nightclub',
490 '04': 'Church/Synagogue/Temple/Mosque',
491 '05': 'Commercial/Office Building',
492 '06': 'Construction Site',
493 '07': 'Convenience Store',
494 '08': 'Department/Discount Store',
495 '09': "Drug Store/Doctor's Office/Hospital",
496 '10': 'Field/Woods',
497 '11': 'Government/Public Building',
498 '12': 'Grocery/Supermarket',
499 '13': 'Highway/Road/Alley/Street/Sidewalk',
500 '14': 'Hotel/Motel/Etc.',
501 '15': 'Jail/Prison/Penitentiary/Corrections Facility',
502 '16': 'Lake/Waterway/Beach',
503 '17': 'Liquor Store',
504 '18': 'Parking/Drop Lot/Garage',
505 '19': 'Rental Storage Facility',
506 '20': 'Residence/Home',
507 '21': 'Restaurant',
508 '22': 'School/College',
509 '23': 'Service/Gas Station',
510 '24': 'Specialty Store',
511 '25': 'Other/Unknown',
512 '37': 'Abandoned/Condemned Structure',
513 '38': 'Amusement Park',
514 '39': 'Arena/Stadium/Fairgrounds/Coliseum',
515 '40': 'ATM Separate from Bank',
516 '41': 'Auto Dealership New/Used',
517 '42': 'Camp/Campground',
518 '44': 'Daycare Facility',
519 '45': 'Dock/Wharf/Freight/Modal Terminal',
520 '46': 'Farm Facility',
521 '47': 'Gambling Facility/Casino/Race Track',
522 '48': 'Industrial Site',
523 '49': 'Military Installation',
524 '50': 'Park/Playground',
525 '51': 'Rest Area',
526 '52': 'School-College/University',
527 '53': 'School-Elementary/Secondary',
528 '54': 'Shelter-Mission/Homeless',
529 '55': 'Shopping Mall',
530 '56': 'Tribal Lands',
531 '57': 'Community Center',
532 '58': 'Cyberspace'}
534LOSSES: dict[str, str] = {
535 '1': 'None',
536 '2': 'Burned',
537 '3': 'Counterfeited/Forged',
538 '4': 'Destroyed/Damaged/Vandalized',
539 '5': 'Recovered',
540 '6': 'Seized',
541 '7': 'Stolen/Etc.',
542 '8': 'Unknown'}
544MEASURES: dict[str, str] = {
545 'GM': 'Gram',
546 'KG': 'Kilogram',
547 'OZ': 'Ounce',
548 'LB': 'Pound',
549 'ML': 'Milliliter',
550 'LT': 'Liter',
551 'FO': 'Fluid Ounce',
552 'GL': 'Gallon',
553 'DU': 'Dosage Unit',
554 'NP': 'Number of Plants',
555 'XX': 'Not Reported'}
557MULTIPLE_ARRESTEES: dict[str, str] = {
558 'C': 'Count Arrestee',
559 'M': 'Multiple',
560 'N': 'Not Applicable'}
562OFFICER_ACTIVITIES: dict[str, str] = {
563 '01': 'Responding to Disturbance Call',
564 '02': 'Burglaries in Progress or Pursuing Burglary Suspects',
565 '03': 'Robberies in Progress or Pursuing Robbery Suspects',
566 '04': 'Attempting Other Arrests',
567 '05': 'Civil Disorder',
568 '06': 'Handling, Transporting, Custody of Prisoners',
569 '07': 'Investigating Suspicious Persons or Circumstances',
570 '08': 'Ambush - No Warning',
571 '09': 'Handling Persons with Mental Illness',
572 '10': 'Traffic Pursuits and Stops',
573 '11': 'All Other'}
575OFFICER_ASSIGNMENTS: dict[str, str] = {
576 'F': 'Two-Officer Vehicle',
577 'G': 'One-Officer Vehicle (Alone)',
578 'H': 'One-Officer Vehicle (Assisted)',
579 'I': 'Detective or Special Assignment (Alone)',
580 'J': 'Detective or Special Assignment (Assisted)',
581 'K': 'Other (Alone)',
582 'L': 'Other (Assisted)'}
584POPULATION_GROUPS: dict[str, str] = {
585 '0': 'Possessions',
586 '1': 'Cities 250,000 or Over',
587 '1A': 'Cities 1,000,000 or Over',
588 '1B': 'Cities 500,000 to 999,999',
589 '1C': 'Cities 250,000 to 499,999',
590 '2': 'Cities 100,000 to 249,999',
591 '3': 'Cities 50,000 to 99,999',
592 '4': 'Cities 25,000 to 49,999',
593 '5': 'Cities 10,000 to 24,999',
594 '6': 'Cities 2,500 to 9,999',
595 '7': 'Cities Under 2,500',
596 '8': 'Non-MSA Counties',
597 '8A': 'Non-MSA Counties 100,000 or Over',
598 '8B': 'Non-MSA Counties 25,000 to 99,999',
599 '8C': 'Non-MSA Counties 10,000 to 24,999',
600 '8D': 'Non-MSA Counties Under 10,000',
601 '8E': 'Non-MSA State Police',
602 '9': 'MSA Counties',
603 '9A': 'MSA Counties 100,000 or Over',
604 '9B': 'MSA Counties 25,000 to 99,999',
605 '9C': 'MSA Counties 10,000 to 24,999',
606 '9D': 'MSA Counties Under 10,000',
607 '9E': 'MSA State Police'}
609PROPERTIES: dict[str, str] = {
610 '01': 'Aircraft',
611 '02': 'Alcohol',
612 '03': 'Automobiles',
613 '04': 'Bicycles',
614 '05': 'Buses',
615 '06': 'Clothes/Furs',
616 '07': 'Computer Hardware/Software',
617 '08': 'Consumable Goods',
618 '09': 'Credit/Debit Cards',
619 '10': 'Drugs/Narcotics',
620 '11': 'Drug/Narcotic Equipment',
621 '12': 'Farm Equipment',
622 '13': 'Firearms',
623 '14': 'Gambling Equipment',
624 '15': 'Heavy Construction/Industrial Equipment',
625 '16': 'Household Goods',
626 '17': 'Jewelry/Precious Metals/Gems',
627 '18': 'Livestock',
628 '19': 'Merchandise',
629 '20': 'Money',
630 '21': 'Negotiable Instruments',
631 '22': 'Nonnegotiable Instruments',
632 '23': 'Office-type Equipment',
633 '24': 'Other Motor Vehicles',
634 '25': 'Purses/Handbags/Wallets',
635 '26': 'Radios/TVs/VCRs/DVD Players',
636 '27': 'Recordings-Audio/Visual',
637 '28': 'Recreational Vehicles',
638 '29': 'Structures-Single Occupancy Dwellings',
639 '30': 'Structures-Other Dwellings',
640 '31': 'Structures-Other Commercial/Business',
641 '32': 'Structures-Industrial/Manufacturing',
642 '33': 'Structures-Public/Community',
643 '34': 'Structures-Storage',
644 '35': 'Structures-Other',
645 '36': 'Tools',
646 '37': 'Trucks',
647 '38': 'Vehicle Parts/Accessories',
648 '39': 'Watercraft',
649 '41': 'Aircraft Parts/Accessories',
650 '42': 'Artistic Supplies/Accessories',
651 '43': 'Building Materials',
652 '44': 'Camping/Hunting/Fishing Equipment/Supplies',
653 '45': 'Chemicals',
654 '46': 'Collections/Collectibles',
655 '47': 'Crops',
656 '48': 'Documents/Personal or Business',
657 '49': 'Explosives',
658 '59': 'Firearm Accessories',
659 '64': 'Fuel',
660 '65': 'Identity Documents',
661 '66': 'Identity-Intangible',
662 '67': 'Law Enforcement Equipment',
663 '68': 'Lawn/Yard/Garden Equipment',
664 '69': 'Logging Equipment',
665 '70': 'Medical/Medical Lab Equipment',
666 '71': 'Metals, Non-Precious',
667 '72': 'Musical Instruments',
668 '73': 'Pets',
669 '74': 'Photographic/Optical Equipment',
670 '75': 'Portable Electronic Communications',
671 '76': 'Recreational/Sports Equipment',
672 '77': 'Other',
673 '78': 'Trailers',
674 '79': 'Watercraft Equipment/Parts/Accessories',
675 '80': 'Weapons-Other',
676 '88': 'Pending Inventory',
677 '99': 'Special Category'}
679RACES: dict[str, str] = {
680 'W': 'White',
681 'B': 'Black or African American',
682 'I': 'American Indian or Alaska Native',
683 'A': 'Asian',
684 'P': 'Native Hawaiian or Other Pacific Islander',
685 'M': 'Multiple',
686 'U': 'Unknown'}
688REGIONS: dict[str, str] = {
689 '0': 'Possessions',
690 '1': 'Northeast',
691 '2': 'North Central',
692 '3': 'South',
693 '4': 'West'}
695RELATIONSHIPS: dict[str, str] = {
696 'AQ': 'Acquaintance',
697 'BE': 'Babysittee',
698 'BG': 'Boyfriend/Girlfriend',
699 'CF': 'Child of Boyfriend/Girlfriend',
700 'CH': 'Child',
701 'CO': 'Cohabitant (Non-intimate)',
702 'CS': 'Common-Law Spouse',
703 'EE': 'Employee',
704 'ER': 'Employer',
705 'FC': 'Foster Child',
706 'FP': 'Foster Parent',
707 'FR': 'Friend',
708 'GC': 'Grandchild',
709 'GP': 'Grandparent',
710 'HR': 'Homosexual Relationship',
711 'IL': 'In-law',
712 'NE': 'Neighbor',
713 'OF': 'Other Family Member',
714 'OK': 'Otherwise Known',
715 'PA': 'Parent',
716 'RU': 'Relationship Unknown',
717 'SB': 'Sibling',
718 'SC': 'Stepchild',
719 'SE': 'Spouse',
720 'SP': 'Stepparent',
721 'SS': 'Stepsibling',
722 'ST': 'Stranger',
723 'VO': 'Victim Was Offender',
724 'XR': 'Ex-Relationship (Ex-Boyfriend/Girlfriend)',
725 'XS': 'Ex-Spouse'}
727RESIDENTS: dict[str, str] = {
728 'R': 'Resident',
729 'N': 'Nonresident',
730 'U': 'Unknown'}
732SEXES: dict[str, str] = {'F': 'Female', 'M': 'Male', 'U': 'Unknown'}
734SUBREGIONS: dict[str, str] = {
735 '0': 'Possessions',
736 '1': 'New England',
737 '2': 'Middle Atlantic',
738 '3': 'East North Central',
739 '4': 'West North Central',
740 '5': 'South Atlantic',
741 '6': 'East South Central',
742 '7': 'West South Central',
743 '8': 'Mountain',
744 '9': 'Pacific'}
746USING: dict[str, str] = {
747 'A': 'Alcohol',
748 'C': 'Computer Equipment',
749 'D': 'Drugs/Narcotics',
750 'N': 'Not Applicable',
751 'R': 'Drone/Unmanned Aircraft System'}
753VICTIM_TYPES: dict[str, str] = {
754 'B': 'Business',
755 'F': 'Financial Institution',
756 'G': 'Government',
757 'I': 'Individual',
758 'L': 'Law Enforcement Officer',
759 'O': 'Other',
760 'R': 'Religious Organization',
761 'S': 'Society/Public',
762 'U': 'Unknown'}
764WEAPONS: dict[str, str] = {
765 '01': 'Unarmed',
766 '11': 'Firearm',
767 '12': 'Handgun',
768 '13': 'Rifle',
769 '14': 'Shotgun',
770 '15': 'Other Firearm',
771 '16': 'Lethal Cutting Instrument',
772 '17': 'Club/Blackjack/Brass Knuckles',
773 '20': 'Knife/Cutting Instrument',
774 '30': 'Blunt Object',
775 '35': 'Motor Vehicle/Vessel',
776 '40': 'Personal Weapons',
777 '50': 'Poison',
778 '60': 'Explosives',
779 '65': 'Fire/Incendiary Device',
780 '70': 'Drugs/Narcotics/Sleeping Pills',
781 '85': 'Asphyxiation',
782 '90': 'Other',
783 '95': 'Unknown',
784 '99': 'None'}
786CODEBOOKS: dict[str, Mapping[str, str]] = {
787 'activities': ACTIVITIES,
788 'agency_types': AGENCY_TYPES,
789 'ages': AGES,
790 'arrest_types': ARREST_TYPES,
791 'biases': BIASES,
792 'circumstances': CIRCUMSTANCES,
793 'clearances': EXCEPTIONAL_CLEARANCES,
794 'completions': COMPLETIONS,
795 'dispositions': DISPOSITIONS,
796 'divisions': SUBREGIONS,
797 'drugs': DRUGS,
798 'entries': ENTRIES,
799 'ethnicities': ETHNICITIES,
800 'injuries': INJURIES,
801 'justifications': JUSTIFICATIONS,
802 'locations': LOCATIONS,
803 'losses': LOSSES,
804 'measures': MEASURES,
805 'multiple_arrestees': MULTIPLE_ARRESTEES,
806 'offenses': {k: v[0] for k, v in OFFENSES.items()},
807 'officer_activities': OFFICER_ACTIVITIES,
808 'officer_assignments': OFFICER_ASSIGNMENTS,
809 'population_groups': POPULATION_GROUPS,
810 'properties': PROPERTIES,
811 'races': RACES,
812 'regions': REGIONS,
813 'relationships': RELATIONSHIPS,
814 'residents': RESIDENTS,
815 'sexes': SEXES,
816 'states': STATES,
817 'using': USING,
818 'victim_types': VICTIM_TYPES,
819 'weapons': WEAPONS}