@yottagraph-app/data-model-skill 0.0.22 → 0.0.24

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yottagraph-app/data-model-skill",
3
- "version": "0.0.22",
3
+ "version": "0.0.24",
4
4
  "description": "Data model skill documentation for AI agents - entity types, properties, and schemas from Lovelace fetch sources",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,381 @@
1
+ # Data Dictionary: FAA Aircraft Registry
2
+
3
+ ## Source Overview
4
+
5
+ The FAA Releasable Aircraft Database is published by the Federal Aviation Administration, Civil Aviation Registry, Aircraft Registration Branch (AFS-750). It contains registration records for all U.S. civil aircraft, plus reference tables, deregistered aircraft, dealer certificates, document indices, and reserved N-numbers.
6
+
7
+ The database is distributed as a single ZIP archive (~60MB) refreshed daily at 11:30 PM Central Time. It contains 7 comma-delimited `.txt` files. Field definitions are documented in [ardata.pdf](https://registry.faa.gov/database/ardata.pdf).
8
+
9
+ Download URL: `https://registry.faa.gov/database/ReleasableAircraft.zip`
10
+
11
+ The implementation joins ACFTREF.txt and ENGINE.txt as in-memory lookup tables into MASTER.txt rows, producing denormalized aircraft registration records. DEREG.txt uses a similar structure and is processed alongside MASTER.txt. DEALER.txt, DOCINDEX.txt, and RESERVED.txt are processed as separate entity types.
12
+
13
+ | File | Record Count (approx) | Entity Type |
14
+ |------|----------------------|-------------|
15
+ | MASTER.txt | ~300,000+ | `aircraft` |
16
+ | ACFTREF.txt | ~few thousand | Lookup table (joined into `aircraft`) |
17
+ | ENGINE.txt | ~few thousand | Lookup table (joined into `aircraft`) |
18
+ | DEREG.txt | ~300,000+ | `aircraft` (deregistered) |
19
+ | DEALER.txt | ~few thousand | `organization` (aircraft dealers) |
20
+ | DOCINDEX.txt | ~millions | `document` (aircraft document index) |
21
+ | RESERVED.txt | ~tens of thousands | `aircraft` (reserved N-numbers) |
22
+
23
+ | Pipeline | `Record.Source` |
24
+ |----------|----------------|
25
+ | All files | `faaregistry` |
26
+
27
+ ---
28
+
29
+ ## Entity Types
30
+
31
+ ### `aircraft`
32
+
33
+ A U.S. civil aircraft identified by its FAA registration N-number. Includes active registrations (MASTER.txt), deregistered aircraft (DEREG.txt), and reserved N-numbers (RESERVED.txt).
34
+
35
+ - Primary key: N-Number (e.g., `"12345"` for N12345)
36
+ - Entity resolver: named entity. Strong ID = `n_number`. Mode S hex code as secondary identifier. Disambiguation via manufacturer, model, serial number, registrant name.
37
+
38
+ ### `organization`
39
+
40
+ An aircraft dealer or manufacturer holding an FAA Dealer's Aircraft Registration Certificate.
41
+
42
+ - Primary key: Certificate number (e.g., `"24-0001"`)
43
+ - Entity resolver: named entity. Strong ID = `dealer_certificate_number`. Disambiguation via name, address.
44
+
45
+ ### `document`
46
+
47
+ A document recorded with the FAA Aircraft Registry, indexed by collateral identification (usually the N-number).
48
+
49
+ - Primary key: Document ID (12-character unique identifier)
50
+ - Entity resolver: named entity. Strong ID = `faa_document_id`. Not mergeable.
51
+
52
+ ### `location`
53
+
54
+ A geographic location derived from the registrant's address (city + state).
55
+
56
+ - Primary key: city + state combination
57
+ - Entity resolver: named entity. Disambiguation via city name, state code.
58
+
59
+ ---
60
+
61
+ ## Properties
62
+
63
+ ### Aircraft Properties (from MASTER.txt + ACFTREF.txt + ENGINE.txt joins)
64
+
65
+ #### Identity and Registration
66
+
67
+ * `n_number`
68
+ * Definition: FAA registration number assigned to the aircraft (without the "N" prefix).
69
+ * Examples: `"12345"`, `"789AB"`, `"5NJ"`
70
+ * Derivation: `N-NUMBER` field from MASTER.txt, positions 1-5.
71
+
72
+ * `serial_number`
73
+ * Definition: Complete aircraft serial number assigned by the manufacturer.
74
+ * Examples: `"28-7990244"`, `"172S10245"`
75
+ * Derivation: `SERIAL NUMBER` field from MASTER.txt, positions 7-36.
76
+
77
+ * `mode_s_code_hex`
78
+ * Definition: Aircraft Mode S transponder code in hexadecimal format (ICAO 24-bit address).
79
+ * Examples: `"A12345"`, `"ABCDEF"`
80
+ * Derivation: `MODE S CODE HEX` field from MASTER.txt, positions 602-611.
81
+ * Note: This corresponds to the `icaoAddress` property in the KG aircraft flavor schema.
82
+
83
+ * `mode_s_code`
84
+ * Definition: Aircraft Mode S transponder code in octal format.
85
+ * Examples: `"50712345"`
86
+ * Derivation: `MODE S CODE` field from MASTER.txt, positions 257-264.
87
+
88
+ * `unique_id`
89
+ * Definition: FAA-assigned unique identification number for the registration record.
90
+ * Examples: `"01234567"`
91
+ * Derivation: `UNIQUE ID` field from MASTER.txt, positions 541-548.
92
+
93
+ #### Aircraft Details (joined from ACFTREF.txt)
94
+
95
+ * `manufacturer_name`
96
+ * Definition: Name of the aircraft manufacturer.
97
+ * Examples: `"CESSNA"`, `"BOEING"`, `"PIPER"`, `"BEECH"`
98
+ * Derivation: Joined from ACFTREF.txt `AIRCRAFT MANUFACTURER NAME` (positions 9-38) via `AIRCRAFT MFR MODEL CODE` foreign key.
99
+
100
+ * `model_name`
101
+ * Definition: Aircraft model and series name.
102
+ * Examples: `"172S"`, `"737-800"`, `"PA-28-181"`
103
+ * Derivation: Joined from ACFTREF.txt `MODEL NAME` (positions 40-59) via `AIRCRAFT MFR MODEL CODE` foreign key.
104
+
105
+ * `aircraft_type`
106
+ * Definition: Type of aircraft.
107
+ * Examples: `"Fixed wing single engine"`, `"Rotorcraft"`, `"Balloon"`
108
+ * Derivation: `TYPE AIRCRAFT` field from MASTER.txt (position 249), decoded: 1=Glider, 2=Balloon, 3=Blimp/Dirigible, 4=Fixed wing single engine, 5=Fixed wing multi engine, 6=Rotorcraft, 7=Weight-shift-control, 8=Powered Parachute, 9=Gyroplane, H=Hybrid Lift, O=Other.
109
+
110
+ * `engine_type`
111
+ * Definition: Type of engine installed.
112
+ * Examples: `"Reciprocating"`, `"Turbo-fan"`, `"Electric"`
113
+ * Derivation: `TYPE ENGINE` field from MASTER.txt (positions 251-252), decoded: 0=None, 1=Reciprocating, 2=Turbo-prop, 3=Turbo-shaft, 4=Turbo-jet, 5=Turbo-fan, 6=Ramjet, 7=2 Cycle, 8=4 Cycle, 9=Unknown, 10=Electric, 11=Rotary.
114
+
115
+ * `year_manufactured`
116
+ * Definition: Year the aircraft was manufactured.
117
+ * Examples: `"1978"`, `"2023"`
118
+ * Derivation: `YEAR MFR` field from MASTER.txt, positions 52-55.
119
+
120
+ * `number_of_engines`
121
+ * Definition: Number of engines on the aircraft.
122
+ * Examples: `"1"`, `"2"`, `"4"`
123
+ * Derivation: Joined from ACFTREF.txt `NUMBER OF ENGINES` (positions 70-71).
124
+
125
+ * `number_of_seats`
126
+ * Definition: Maximum number of seats in the aircraft.
127
+ * Examples: `"4"`, `"189"`, `"12"`
128
+ * Derivation: Joined from ACFTREF.txt `NUMBER OF SEATS` (positions 73-75).
129
+
130
+ * `aircraft_weight_class`
131
+ * Definition: Maximum gross takeoff weight class.
132
+ * Examples: `"Up to 12,499 lbs"`, `"12,500 - 19,999 lbs"`, `"20,000 and over"`, `"UAV up to 55 lbs"`
133
+ * Derivation: Joined from ACFTREF.txt `AIRCRAFT WEIGHT` (positions 77-83), decoded: 1=Up to 12,499, 2=12,500-19,999, 3=20,000 and over, 4=UAV up to 55.
134
+
135
+ * `cruising_speed`
136
+ * Definition: Average cruising speed in miles per hour.
137
+ * Examples: `"124"`, `"530"`
138
+ * Derivation: Joined from ACFTREF.txt `AIRCRAFT CRUISING SPEED` (positions 85-88).
139
+ * Note: Not present on all records.
140
+
141
+ * `aircraft_category`
142
+ * Definition: Land/sea/amphibian classification.
143
+ * Examples: `"Land"`, `"Sea"`, `"Amphibian"`
144
+ * Derivation: Joined from ACFTREF.txt `AIRCRAFT CATEGORY CODE` (position 66), decoded: 1=Land, 2=Sea, 3=Amphibian.
145
+
146
+ * `builder_certification`
147
+ * Definition: Builder certification classification.
148
+ * Examples: `"Type Certificated"`, `"Not Type Certificated"`, `"Light Sport"`
149
+ * Derivation: Joined from ACFTREF.txt `BUILDER CERTIFICATION CODE` (position 68), decoded: 0=Type Certificated, 1=Not Type Certificated, 2=Light Sport.
150
+
151
+ * `type_certificate_data_sheet`
152
+ * Definition: FAA Type Certificate Data Sheet reference.
153
+ * Derivation: Joined from ACFTREF.txt `TC DATA SHEET` (positions 90-105).
154
+
155
+ * `type_certificate_holder`
156
+ * Definition: Name of the Type Certificate holder.
157
+ * Derivation: Joined from ACFTREF.txt `TC DATA HOLDER` (positions 107-157).
158
+
159
+ #### Engine Details (joined from ENGINE.txt)
160
+
161
+ * `engine_manufacturer`
162
+ * Definition: Name of the engine manufacturer.
163
+ * Examples: `"LYCOMING"`, `"CONT MOTOR"`, `"P&W"`
164
+ * Derivation: Joined from ENGINE.txt `ENGINE MANUFACTURER NAME` (positions 7-16) via `ENGINE MFR MODEL CODE` foreign key.
165
+
166
+ * `engine_model`
167
+ * Definition: Engine model name.
168
+ * Examples: `"O-320-D2J"`, `"IO-540"`
169
+ * Derivation: Joined from ENGINE.txt `ENGINE MODEL NAME` (positions 18-30).
170
+
171
+ * `engine_horsepower`
172
+ * Definition: Engine horsepower (for reciprocating, turbo-prop, turbo-shaft, 2-cycle, 4-cycle engines). Unit: HP.
173
+ * Examples: `"180"`, `"310"`
174
+ * Derivation: Joined from ENGINE.txt `ENGINE HORSEPOWER` (positions 35-39).
175
+ * Note: Only populated for engine types 1, 2, 3, 7, 8.
176
+
177
+ * `engine_thrust`
178
+ * Definition: Engine thrust (for turbo-jet, turbo-fan, ramjet engines). Unit: pounds of thrust.
179
+ * Examples: `"27300"`, `"56000"`
180
+ * Derivation: Joined from ENGINE.txt `POUNDS OF THRUST` (positions 41-46).
181
+ * Note: Only populated for engine types 4, 5, 6.
182
+
183
+ #### Registration Status
184
+
185
+ * `registration_status`
186
+ * Definition: Current status of the aircraft registration.
187
+ * Examples: `"Valid Registration"`, `"Registration Expired"`, `"Sale Reported"`, `"Administratively Canceled"`
188
+ * Derivation: `STATUS CODE` field from MASTER.txt (positions 254-255), decoded to human-readable text. Codes include V=Valid, R=Pending, E=Revoked by enforcement, M=Manufacturer, etc.
189
+
190
+ * `registrant_type`
191
+ * Definition: Type of entity that owns the aircraft.
192
+ * Examples: `"Individual"`, `"Corporation"`, `"LLC"`, `"Government"`
193
+ * Derivation: `TYPE REGISTRANT` field from MASTER.txt (position 57), decoded: 1=Individual, 2=Partnership, 3=Corporation, 4=Co-Owned, 5=Government, 7=LLC, 8=Non Citizen Corporation, 9=Non Citizen Co-Owned.
194
+
195
+ * `fractional_ownership`
196
+ * Definition: Whether the registration has fractional ownership.
197
+ * Examples: `"true"`, `"false"`
198
+ * Derivation: `FRACTIONAL OWNERSHIP` field from MASTER.txt (position 266), `Y` = true, blank = false.
199
+
200
+ #### Certification
201
+
202
+ * `airworthiness_class`
203
+ * Definition: Airworthiness certificate classification.
204
+ * Examples: `"Standard"`, `"Experimental"`, `"Restricted"`, `"Light Sport"`
205
+ * Derivation: `CERTIFICATION A - AIRWORTHINESS CLASSIFICATION CODE` from MASTER.txt (position 238), decoded: 1=Standard, 2=Limited, 3=Restricted, 4=Experimental, 5=Provisional, 6=Multiple, 7=Primary, 8=Special Flight Permit, 9=Light Sport.
206
+
207
+ * `approved_operations`
208
+ * Definition: Approved operations for the airworthiness certificate.
209
+ * Examples: `"Normal"`, `"Utility"`, `"Agriculture and Pest Control"`, `"Amateur Built"`
210
+ * Derivation: `CERTIFICATION B - APPROVED OPERATION CODES` from MASTER.txt (positions 239-247), decoded based on airworthiness class.
211
+
212
+ #### Registrant Information
213
+
214
+ * `registrant_name`
215
+ * Definition: Name of the registered owner as it appears on the Application for Registration.
216
+ * Examples: `"SMITH JOHN"`, `"DELTA AIR LINES INC"`, `"UNITED STATES GOVERNMENT"`
217
+ * Derivation: `REGISTRANT'S NAME` field from MASTER.txt, positions 59-108.
218
+
219
+ * `registrant_address`
220
+ * Definition: Formatted street address of the registrant.
221
+ * Derivation: Concatenation of `STREET1` (positions 110-142) and `STREET2` (positions 144-176) from MASTER.txt.
222
+
223
+ * `registrant_city`
224
+ * Definition: City of the registrant.
225
+ * Examples: `"ATLANTA"`, `"WICHITA"`, `"SEATTLE"`
226
+ * Derivation: `REGISTRANT'S CITY` field from MASTER.txt, positions 178-195.
227
+
228
+ * `registrant_state`
229
+ * Definition: Two-letter state code of the registrant.
230
+ * Examples: `"GA"`, `"KS"`, `"WA"`
231
+ * Derivation: `REGISTRANT'S STATE` field from MASTER.txt, positions 197-198.
232
+
233
+ * `registrant_zip_code`
234
+ * Definition: Postal ZIP code of the registrant.
235
+ * Examples: `"30320"`, `"67201-1234"`
236
+ * Derivation: `REGISTRANT'S ZIP CODE` field from MASTER.txt, positions 200-209.
237
+
238
+ * `registrant_region`
239
+ * Definition: FAA region of the registrant.
240
+ * Examples: `"Eastern"`, `"Western-Pacific"`, `"Great Lakes"`
241
+ * Derivation: `REGISTRANT'S REGION` field from MASTER.txt (position 211), decoded: 1=Eastern, 2=Southwestern, 3=Central, 4=Western-Pacific, 5=Alaskan, 7=Southern, 8=European, C=Great Lakes, E=New England, S=Northwest Mountain.
242
+
243
+ #### Dates
244
+
245
+ * `last_activity_date`
246
+ * Definition: Date of last registration activity.
247
+ * Examples: `"2024/03/15"`
248
+ * Derivation: `LAST ACTIVITY DATE` from MASTER.txt (positions 220-227), format YYYY/MM/DD.
249
+
250
+ * `certificate_issue_date`
251
+ * Definition: Date the registration certificate was issued.
252
+ * Examples: `"2023/06/01"`
253
+ * Derivation: `CERTIFICATE ISSUE DATE` from MASTER.txt (positions 229-236), format YYYY/MM/DD.
254
+
255
+ * `airworthiness_date`
256
+ * Definition: Date of airworthiness certification.
257
+ * Examples: `"2001/09/14"`
258
+ * Derivation: `AIRWORTHINESS DATE` from MASTER.txt (positions 268-275).
259
+
260
+ * `expiration_date`
261
+ * Definition: Certificate of Registration expiration date.
262
+ * Examples: `"2027/03/31"`
263
+ * Derivation: `EXPIRATION DATE` from MASTER.txt (positions 532-539), format YYYY/MM/DD.
264
+
265
+ #### Co-Owners
266
+
267
+ * `other_owner_name`
268
+ * Definition: Co-owner or partnership name (up to 5 additional names).
269
+ * Derivation: `OTHER NAME 1` through `OTHER NAME 5` from MASTER.txt (positions 277-530).
270
+ * Note: Stored as multiple atoms when multiple co-owners exist.
271
+
272
+ #### Kit Aircraft
273
+
274
+ * `kit_manufacturer`
275
+ * Definition: Kit manufacturer name (for kit-built aircraft).
276
+ * Derivation: `KIT MFR` from MASTER.txt (positions 550-579).
277
+
278
+ * `kit_model`
279
+ * Definition: Kit model name.
280
+ * Derivation: `KIT MODEL` from MASTER.txt (positions 581-600).
281
+
282
+ ### Aircraft Properties (from DEREG.txt -- additional fields)
283
+
284
+ Deregistered aircraft share all properties above where available, plus:
285
+
286
+ * `cancel_date`
287
+ * Definition: Date the registration was canceled.
288
+ * Examples: `"2023/01/15"`
289
+ * Derivation: `CANCEL DATE` from DEREG.txt (positions 240-247).
290
+
291
+ * `export_country`
292
+ * Definition: Country the aircraft was exported to upon deregistration.
293
+ * Examples: `"CANADA"`, `"BRAZIL"`
294
+ * Derivation: `EXPORT COUNTRY` from DEREG.txt (positions 260-277).
295
+
296
+ ### Organization Properties (from DEALER.txt)
297
+
298
+ #### Identity
299
+
300
+ * `dealer_certificate_number`
301
+ * Definition: FAA dealer certificate number.
302
+ * Examples: `"24-0001"`, `"23-1234"`
303
+ * Derivation: `CERTIFICATE NUMBER` from DEALER.txt (positions 1-7), format YY-NNNN.
304
+
305
+ * `dealer_ownership_type`
306
+ * Definition: Ownership type of the dealer.
307
+ * Examples: `"Individual"`, `"Corporation"`, `"LLC"`
308
+ * Derivation: `OWNERSHIP` from DEALER.txt (position 9), decoded: 1=Individual, 2=Partnership, 3=Corporation, 4=Co-Ownership, 7=LLC, 8=Non Citizen Corporation.
309
+
310
+ * `dealer_certificate_issue_date`
311
+ * Definition: Date the dealer certificate was issued.
312
+ * Derivation: `CERTIFICATE ISSUE DATE` from DEALER.txt (positions 11-18), format YYYYMMDD.
313
+
314
+ * `dealer_expiration_date`
315
+ * Definition: Dealer certificate expiration date.
316
+ * Derivation: `EXPIRATION DATE` from DEALER.txt (positions 20-27), format YYYYMMDD.
317
+
318
+ * `dealer_expired`
319
+ * Definition: Whether the dealer certificate has expired.
320
+ * Examples: `"true"`, `"false"`
321
+ * Derivation: `EXPIRATION FLAG` from DEALER.txt (position 29), `*` = true.
322
+
323
+ #### Address
324
+
325
+ * `dealer_address`
326
+ * Definition: Mailing address of the dealer.
327
+ * Derivation: Concatenation of DEALER.txt address fields (STREET1, STREET2, CITY, STATE, ZIP CODE).
328
+
329
+ ### Document Properties (from DOCINDEX.txt)
330
+
331
+ * `faa_document_id`
332
+ * Definition: Unique document identifier assigned by the FAA.
333
+ * Examples: `"000123456789"`
334
+ * Derivation: `DOCUMENT ID` from DOCINDEX.txt (positions 92-103).
335
+
336
+ * `collateral_type`
337
+ * Definition: Type of collateral the document pertains to.
338
+ * Examples: `"Aircraft"`, `"Engine"`, `"Propeller"`, `"Spare Parts"`
339
+ * Derivation: `TYPE COLLATERAL` from DOCINDEX.txt (position 1), decoded: 1=Aircraft, 2=Engine, 3=Propeller, 4=Spare Parts, 5=Document, 9=Unidentified.
340
+
341
+ * `collateral_identifier`
342
+ * Definition: Collateral identification -- typically an N-number for aircraft, or make/model/serial for engines and propellers.
343
+ * Derivation: `COLLATERAL` from DOCINDEX.txt (positions 3-39).
344
+
345
+ * `document_receipt_date`
346
+ * Definition: Date the document was filed for recordation with the Aircraft Registry.
347
+ * Derivation: `DOCUMENT RECEIPT DATE` from DOCINDEX.txt (positions 105-112), format YYYYMMDD.
348
+
349
+ * `document_type`
350
+ * Definition: Type of document being indexed.
351
+ * Examples: `"BOS"` (Evidence of Ownership), `"S/A"` (Security Conveyance/Lien), `"REL"` (Lien Release)
352
+ * Derivation: `DOC TYPE` from DOCINDEX.txt (positions 165-167).
353
+
354
+ ### Aircraft Properties (from RESERVED.txt)
355
+
356
+ Reserved N-numbers produce minimal `aircraft` records:
357
+
358
+ * `reservation_type`
359
+ * Definition: Type of N-number reservation.
360
+ * Examples: `"Fee paid"`, `"Reserved to manufacturer"`, `"N-Number change in process"`
361
+ * Derivation: `TYPE RESERVATION` from RESERVED.txt (positions 168-169), decoded.
362
+
363
+ * `reservation_date`
364
+ * Definition: Date the N-number was reserved.
365
+ * Derivation: `RESERVE DATE` from RESERVED.txt (positions 159-166), format YYYYMMDD.
366
+
367
+ * `reservation_expiration_date`
368
+ * Definition: Date the reservation expiration notice was sent.
369
+ * Derivation: `EXPIRATION NOTICE DATE` from RESERVED.txt (positions 171-178), format YYYYMMDD.
370
+
371
+ ---
372
+
373
+ ## Entity Relationships
374
+
375
+ ```
376
+ aircraft ──[is_located_at]──────→ location (registrant city/state)
377
+ aircraft ──[has_document]───────→ document (via N-number in DOCINDEX collateral)
378
+ organization ──[is_located_at]──────→ location (dealer address)
379
+ ```
380
+
381
+ ---
@@ -0,0 +1,386 @@
1
+ # Dataset schema for FAA Releasable Aircraft Database.
2
+ #
3
+ # Source: https://www.faa.gov/licenses_certificates/aircraft_certification/aircraft_registry/releasable_aircraft_download
4
+ # Updated daily at 11:30 PM CT.
5
+ #
6
+ # This schema describes U.S. civil aircraft registrations from the FAA
7
+ # Aircraft Registry, including MASTER.txt records joined with ENGINE.txt
8
+ # reference data for engine manufacturer, model, and performance details.
9
+ name: "faaregistry"
10
+ description: "FAA aircraft registration data including N-number identity, aircraft and engine details, registration status, certification, and registrant information"
11
+
12
+ extraction:
13
+ flavors: closed
14
+ properties: closed
15
+ relationships: closed
16
+ attributes: closed
17
+ events: closed
18
+
19
+ flavors:
20
+ - name: "aircraft"
21
+ description: "An aircraft such as a plane, helicopter, glider, or unmanned aerial vehicle"
22
+ display_name: "Aircraft"
23
+ mergeability: not_mergeable
24
+ strong_id_properties: ["aircraft_id"]
25
+ passive: true
26
+
27
+ - name: "organization"
28
+ description: "A particular business, institution, or organization such as a corporation, university, government agency, or non-profit"
29
+ display_name: "Organization"
30
+ mergeability: not_mergeable
31
+ passive: true
32
+
33
+ - name: "person"
34
+ description: "A named individual such as a business owner, executive, or public figure"
35
+ display_name: "Person"
36
+ mergeability: not_mergeable
37
+ passive: true
38
+
39
+ - name: "location"
40
+ description: "A specific named geographic location such as a city, country, region, or landmark"
41
+ display_name: "Location"
42
+ mergeability: not_mergeable
43
+ examples: ["WICHITA, KS", "SEATTLE, WA", "ATLANTA, GA"]
44
+ passive: true
45
+
46
+ properties:
47
+ # Identity and Registration
48
+ - name: "aircraft_id"
49
+ type: string
50
+ description: "Composite aircraft identifier combining manufacturer name and serial number (format: MANUFACTURER:SERIAL)"
51
+ display_name: "Aircraft ID"
52
+ mergeability: not_mergeable
53
+ domain_flavors: ["aircraft"]
54
+ examples: ["CESSNA:172S10245", "BOEING:28-7990244"]
55
+ passive: true
56
+
57
+ - name: "n_number"
58
+ type: string
59
+ description: "FAA registration N-number uniquely identifying a U.S. civil aircraft"
60
+ display_name: "N-Number"
61
+ mergeability: not_mergeable
62
+ domain_flavors: ["aircraft"]
63
+ examples: ["12345", "789AB"]
64
+ passive: true
65
+
66
+ - name: "serial_number"
67
+ type: string
68
+ description: "Complete aircraft serial number assigned by the manufacturer"
69
+ display_name: "Serial Number"
70
+ mergeability: not_mergeable
71
+ domain_flavors: ["aircraft"]
72
+ examples: ["28-7990244", "172S10245"]
73
+ passive: true
74
+
75
+ - name: "mode_s_code_hex"
76
+ type: string
77
+ description: "Aircraft Mode S transponder code in hexadecimal format (ICAO 24-bit address)"
78
+ display_name: "Mode S Code (Hex)"
79
+ mergeability: not_mergeable
80
+ domain_flavors: ["aircraft"]
81
+ examples: ["A12345", "ABCDEF"]
82
+ passive: true
83
+
84
+ - name: "mode_s_code"
85
+ type: string
86
+ description: "Aircraft Mode S transponder code in octal format"
87
+ display_name: "Mode S Code"
88
+ mergeability: not_mergeable
89
+ domain_flavors: ["aircraft"]
90
+ passive: true
91
+
92
+ - name: "unique_id"
93
+ type: string
94
+ description: "FAA-assigned unique identification number for the registration record"
95
+ display_name: "Unique ID"
96
+ mergeability: not_mergeable
97
+ domain_flavors: ["aircraft"]
98
+ passive: true
99
+
100
+ # Aircraft Details (joined from ACFTREF.txt)
101
+ - name: "manufacturer_name"
102
+ type: string
103
+ description: "Name of the aircraft manufacturer, joined from the FAA aircraft reference table"
104
+ display_name: "Manufacturer Name"
105
+ mergeability: not_mergeable
106
+ domain_flavors: ["aircraft"]
107
+ examples: ["CESSNA", "BOEING", "PIPER", "BEECH"]
108
+ passive: true
109
+
110
+ - name: "model_name"
111
+ type: string
112
+ description: "Aircraft model and series name, joined from the FAA aircraft reference table"
113
+ display_name: "Model Name"
114
+ mergeability: not_mergeable
115
+ domain_flavors: ["aircraft"]
116
+ examples: ["172S", "737-800", "PA-28-181"]
117
+ passive: true
118
+
119
+ - name: "number_of_engines"
120
+ type: string
121
+ description: "Number of engines on the aircraft, from the FAA aircraft reference table"
122
+ display_name: "Number of Engines"
123
+ mergeability: not_mergeable
124
+ domain_flavors: ["aircraft"]
125
+ examples: ["1", "2", "4"]
126
+ passive: true
127
+
128
+ - name: "number_of_seats"
129
+ type: string
130
+ description: "Maximum number of seats in the aircraft, from the FAA aircraft reference table"
131
+ display_name: "Number of Seats"
132
+ mergeability: not_mergeable
133
+ domain_flavors: ["aircraft"]
134
+ examples: ["4", "189", "12"]
135
+ passive: true
136
+
137
+ - name: "aircraft_weight_class"
138
+ type: string
139
+ description: "Maximum gross takeoff weight classification of the aircraft"
140
+ display_name: "Aircraft Weight Class"
141
+ mergeability: not_mergeable
142
+ domain_flavors: ["aircraft"]
143
+ examples: ["Up to 12,499 lbs", "12,500 - 19,999 lbs", "20,000 and over"]
144
+ passive: true
145
+
146
+ - name: "cruising_speed"
147
+ type: string
148
+ description: "Average cruising speed of the aircraft in miles per hour, from the FAA aircraft reference table"
149
+ display_name: "Cruising Speed"
150
+ mergeability: not_mergeable
151
+ domain_flavors: ["aircraft"]
152
+ examples: ["124", "530"]
153
+ passive: true
154
+
155
+ - name: "aircraft_category"
156
+ type: string
157
+ description: "Land, sea, or amphibian classification of the aircraft"
158
+ display_name: "Aircraft Category"
159
+ mergeability: not_mergeable
160
+ domain_flavors: ["aircraft"]
161
+ examples: ["Land", "Sea", "Amphibian"]
162
+ passive: true
163
+
164
+ - name: "builder_certification"
165
+ type: string
166
+ description: "Builder certification classification indicating whether the aircraft is type certificated"
167
+ display_name: "Builder Certification"
168
+ mergeability: not_mergeable
169
+ domain_flavors: ["aircraft"]
170
+ examples: ["Type Certificated", "Not Type Certificated", "Light Sport"]
171
+ passive: true
172
+
173
+ - name: "type_certificate_data_sheet"
174
+ type: string
175
+ description: "FAA Type Certificate Data Sheet reference number"
176
+ display_name: "TC Data Sheet"
177
+ mergeability: not_mergeable
178
+ domain_flavors: ["aircraft"]
179
+ passive: true
180
+
181
+ - name: "type_certificate_holder"
182
+ type: string
183
+ description: "Name of the Type Certificate holder for this aircraft model"
184
+ display_name: "TC Data Holder"
185
+ mergeability: not_mergeable
186
+ domain_flavors: ["aircraft"]
187
+ passive: true
188
+
189
+ - name: "aircraft_type"
190
+ type: string
191
+ description: "Type of aircraft such as fixed wing, rotorcraft, glider, or balloon"
192
+ display_name: "Aircraft Type"
193
+ mergeability: not_mergeable
194
+ domain_flavors: ["aircraft"]
195
+ examples: ["Fixed wing single engine", "Rotorcraft", "Balloon"]
196
+ passive: true
197
+
198
+ - name: "engine_type"
199
+ type: string
200
+ description: "Type of engine installed on the aircraft"
201
+ display_name: "Engine Type"
202
+ mergeability: not_mergeable
203
+ domain_flavors: ["aircraft"]
204
+ examples: ["Reciprocating", "Turbo-fan", "Electric"]
205
+ passive: true
206
+
207
+ - name: "year_manufactured"
208
+ type: string
209
+ description: "Year the aircraft was manufactured"
210
+ display_name: "Year Manufactured"
211
+ mergeability: not_mergeable
212
+ domain_flavors: ["aircraft"]
213
+ examples: ["1978", "2023"]
214
+ passive: true
215
+
216
+ # Joined Engine Details (from ENGINE.txt)
217
+ - name: "engine_manufacturer"
218
+ type: string
219
+ description: "Name of the engine manufacturer, joined from the FAA engine reference table"
220
+ display_name: "Engine Manufacturer"
221
+ mergeability: not_mergeable
222
+ domain_flavors: ["aircraft"]
223
+ examples: ["LYCOMING", "CONT MOTOR", "P&W"]
224
+ passive: true
225
+
226
+ - name: "engine_model"
227
+ type: string
228
+ description: "Engine model name, joined from the FAA engine reference table"
229
+ display_name: "Engine Model"
230
+ mergeability: not_mergeable
231
+ domain_flavors: ["aircraft"]
232
+ examples: ["O-320-D2J", "IO-540"]
233
+ passive: true
234
+
235
+ - name: "engine_horsepower"
236
+ type: string
237
+ description: "Engine horsepower for reciprocating and turboprop engines, from the FAA engine reference table"
238
+ display_name: "Engine Horsepower"
239
+ mergeability: not_mergeable
240
+ domain_flavors: ["aircraft"]
241
+ examples: ["180", "310"]
242
+ passive: true
243
+
244
+ - name: "engine_thrust"
245
+ type: string
246
+ description: "Engine thrust in pounds for turbojet and turbofan engines, from the FAA engine reference table"
247
+ display_name: "Engine Thrust"
248
+ mergeability: not_mergeable
249
+ domain_flavors: ["aircraft"]
250
+ examples: ["27300", "56000"]
251
+ passive: true
252
+
253
+ # Registration Status
254
+ - name: "aircraft_registration_status"
255
+ type: string
256
+ description: "Current FAA registration status of the aircraft"
257
+ display_name: "Registration Status"
258
+ mergeability: not_mergeable
259
+ domain_flavors: ["aircraft"]
260
+ examples: ["Valid Registration", "Registration Expired", "Sale reported"]
261
+ passive: true
262
+
263
+ - name: "registrant_type"
264
+ type: string
265
+ description: "Type of entity that owns the aircraft"
266
+ display_name: "Registrant Type"
267
+ mergeability: not_mergeable
268
+ domain_flavors: ["person", "organization"]
269
+ examples: ["Individual", "Corporation", "LLC", "Government"]
270
+ passive: true
271
+
272
+ - name: "fractional_ownership"
273
+ type: string
274
+ description: "Whether the aircraft registration has fractional ownership"
275
+ display_name: "Fractional Ownership"
276
+ mergeability: not_mergeable
277
+ domain_flavors: ["aircraft"]
278
+ examples: ["true", "false"]
279
+ passive: true
280
+
281
+ # Certification
282
+ - name: "airworthiness_class"
283
+ type: string
284
+ description: "FAA airworthiness certificate classification"
285
+ display_name: "Airworthiness Class"
286
+ mergeability: not_mergeable
287
+ domain_flavors: ["aircraft"]
288
+ examples: ["Standard", "Experimental", "Restricted", "Light Sport"]
289
+ passive: true
290
+
291
+ # Registrant address (on person/organization entities)
292
+ - name: "address"
293
+ type: string
294
+ description: "Physical street address of the entity"
295
+ display_name: "Address"
296
+ mergeability: not_mergeable
297
+ domain_flavors: ["person", "organization"]
298
+ examples: ["1030 DELTA BLVD, ATLANTA, GA 30354"]
299
+ passive: true
300
+
301
+ # Dates
302
+ - name: "last_activity_date"
303
+ type: string
304
+ description: "Date of last registration activity"
305
+ display_name: "Last Activity Date"
306
+ mergeability: not_mergeable
307
+ domain_flavors: ["aircraft"]
308
+ passive: true
309
+
310
+ - name: "certificate_issue_date"
311
+ type: string
312
+ description: "Date the registration certificate was issued"
313
+ display_name: "Certificate Issue Date"
314
+ mergeability: not_mergeable
315
+ domain_flavors: ["aircraft"]
316
+ passive: true
317
+
318
+ - name: "airworthiness_date"
319
+ type: string
320
+ description: "Date of airworthiness certification"
321
+ display_name: "Airworthiness Date"
322
+ mergeability: not_mergeable
323
+ domain_flavors: ["aircraft"]
324
+ passive: true
325
+
326
+ - name: "expiration_date"
327
+ type: string
328
+ description: "Certificate of Registration expiration date"
329
+ display_name: "Expiration Date"
330
+ mergeability: not_mergeable
331
+ domain_flavors: ["aircraft"]
332
+ passive: true
333
+
334
+ # DEREG.txt-specific
335
+ - name: "cancel_date"
336
+ type: string
337
+ description: "Date the aircraft registration was canceled"
338
+ display_name: "Cancel Date"
339
+ mergeability: not_mergeable
340
+ domain_flavors: ["aircraft"]
341
+ passive: true
342
+
343
+ - name: "export_country"
344
+ type: string
345
+ description: "Country the aircraft was exported to upon deregistration"
346
+ display_name: "Export Country"
347
+ mergeability: not_mergeable
348
+ domain_flavors: ["aircraft"]
349
+ examples: ["AUSTRALIA", "CANADA", "BRAZIL"]
350
+ passive: true
351
+
352
+ # Kit Aircraft
353
+ - name: "kit_manufacturer"
354
+ type: string
355
+ description: "Kit manufacturer name for kit-built aircraft"
356
+ display_name: "Kit Manufacturer"
357
+ mergeability: not_mergeable
358
+ domain_flavors: ["aircraft"]
359
+ passive: true
360
+
361
+ - name: "kit_model"
362
+ type: string
363
+ description: "Kit model name for kit-built aircraft"
364
+ display_name: "Kit Model"
365
+ mergeability: not_mergeable
366
+ domain_flavors: ["aircraft"]
367
+ passive: true
368
+
369
+ relationships:
370
+ - name: "owns_aircraft"
371
+ description: "A person or organization owns (is the registered owner of) an aircraft"
372
+ display_name: "Owns Aircraft"
373
+ mergeability: not_mergeable
374
+ domain_flavors: ["person", "organization"]
375
+ target_flavors: ["aircraft"]
376
+ examples: ["DELTA AIR LINES INC owns aircraft N12345"]
377
+ passive: true
378
+
379
+ - name: "is_located_at"
380
+ description: "An entity is located at, operates in, resides in, is headquartered in, was born in, visits, or died in a location"
381
+ display_name: "Located At"
382
+ mergeability: not_mergeable
383
+ domain_flavors: ["person", "organization"]
384
+ target_flavors: ["location"]
385
+ examples: ["DELTA AIR LINES INC is located at ATLANTA, GA"]
386
+ passive: true
@@ -0,0 +1,101 @@
1
+ # Data Dictionary: LDA (Lobbying Disclosure Act)
2
+
3
+ Last updated: 2026-05-04
4
+
5
+ ## Source Overview
6
+
7
+ Lobbying Disclosure Act filings (registrations, quarterly activity, etc.) from the **unified LDA.gov REST API**. The streamer polls `GET /api/v1/filings/`, stores raw JSON pages, and emits v2 `FetchMessage` records.
8
+
9
+ | Item | Value |
10
+ |------|--------|
11
+ | Pipeline / stream | Configured in `streams.yaml` (see deployment) |
12
+ | `Record.Source` | `lda` |
13
+
14
+ Anonymous access is rate-limited; optional API token improves throughput.
15
+
16
+ ---
17
+
18
+ ## Entity Types
19
+
20
+ ### `lda_filing`
21
+
22
+ One disclosure identified by API `filing_uuid`.
23
+
24
+ - **Subject name:** `filing_uuid` (stable, unique per disclosure).
25
+ - **Strong id:** `lda_filing_uuid` on the filing subject.
26
+ - **Resolver:** `NOT_MERGEABLE` passive filing entity.
27
+ - **Timestamp:** Parsed from `dt_posted` only (no wall-clock fallback). If `dt_posted` is missing or invalid, the filing is not atomized.
28
+
29
+ ### `organization`
30
+
31
+ Either the **registrant** (lobbying firm) or **client** on a filing.
32
+
33
+ - **Subject name:** API `name` (legal / display name).
34
+ - **Strong ids:** `lda_registrant_id` (registrant rows) or `lda_client_internal_id` (client rows).
35
+ - **Role:** Property `lda_party_role` = `registrant` or `client` on the organization **record** (not on the filing).
36
+ - **Resolver:** Named-entity info is `MERGEABLE` (resolver / recordeval ER search) while retaining LDA **strong ids**; flavor-level resolver info remains `NOT_MERGEABLE` per passive schema.
37
+ - **Snippets:** Formatted **address** only when present (no LDA filing UUID prefix).
38
+
39
+ ### `location`
40
+
41
+ Geographic label derived from registrant or client address fields for `is_located_at` edges.
42
+
43
+ - **Name:** Typically `City, State` or `City, State, Country`; when city is absent, `State, Country` or state-only per atomizer rules.
44
+ - **Resolver:** `MERGEABLE` named entity (no strong id), for soft clustering with other sources.
45
+
46
+ ---
47
+
48
+ ## Properties
49
+
50
+ ### Filing
51
+
52
+ | Property | Description |
53
+ |----------|-------------|
54
+ | `lda_filing_uuid` | API `filing_uuid`. |
55
+ | `lda_filing_type` | Machine code (`filing_type`), e.g. `RR`, `Q1`. |
56
+ | `lda_filing_type_display` | Human label (`filing_type_display`). |
57
+ | `lda_filing_year` | Reporting year (float in schema). |
58
+ | `lda_filing_period_display` | Period label, e.g. quarter. |
59
+ | `lda_income` | Income string when present. |
60
+ | `lda_expenses` | Expenses string when present. |
61
+ | `lda_dt_posted` | Raw ISO `dt_posted` from API. |
62
+ | `lda_filing_document_url` | Public document URL. |
63
+ | `lda_posted_by_name` | Poster name when present. |
64
+ | `lda_lobbying_causes` | Repeated **once per** `lobbying_activities[]` row (`CODE (Display)`). Same pattern as patent **`cpc_code`**: narrative text is quad attribute **`lda_lobbying_cause_description`** on that atom (API `description` field). **Only on filing**; omitted if activities array is empty. |
65
+
66
+ ### Organization
67
+
68
+ | Property | Description |
69
+ |----------|-------------|
70
+ | `lda_party_role` | `registrant` or `client`. |
71
+ | `lda_registrant_id` | Registrant API id as string. |
72
+ | `lda_client_internal_id` | Client row id (`client.id`) as string. |
73
+ | `address` | Single-line formatted address (street/city/state/zip + country). |
74
+
75
+ ---
76
+
77
+ ## Entity Relationships
78
+
79
+ ```
80
+ lda_filing ──[lda_registrant]──→ organization (registrant)
81
+ lda_filing ──[lda_client]──────→ organization (client)
82
+
83
+ organization ──[is_located_at]──→ location
84
+ ```
85
+
86
+ - **`lda_registrant` / `lda_client`:** Target atoms on the **`lda_filing`** record point at the same organization identities emitted as separate **organization** records for that page (strong ids + properties).
87
+ - **`is_located_at`:** On each **organization** record when the atomizer can derive a location name from city/state/country rules.
88
+
89
+ ---
90
+
91
+ ## Records Per Filing
92
+
93
+ For a typical filing with registrant and client, atomization yields **up to three** records: one filing, one registrant organization, one client organization. Either org may be omitted if required API fields are missing.
94
+
95
+ ---
96
+
97
+ ## Citations
98
+
99
+ Primary citation text is the filing `url` when present; otherwise a synthetic label referencing `filing_uuid`.
100
+
101
+ ---
@@ -0,0 +1,209 @@
1
+ # Dataset schema for U.S. Lobbying Disclosure Act (LDA) filings from the
2
+ # Congress/Senate unified REST API (https://lda.gov/api/).
3
+ #
4
+ # Atomizer output uses Record.Source "lda". Filings are passive filing entities
5
+ # keyed by lda_filing_uuid; registrant and client are organization entities linked
6
+ # from the filing via lda_registrant / lda_client relationships.
7
+ name: "lda"
8
+ description: "Lobbying Disclosure Act LD-1/LD-2 filings (registrations and quarterly activity) from the LDA.gov REST API"
9
+
10
+ extraction:
11
+ flavors: closed
12
+ properties: closed
13
+ relationships: closed
14
+ attributes: closed
15
+ events: closed
16
+
17
+ flavors:
18
+ - name: "lda_filing"
19
+ description: "A lobbying disclosure (registration or quarterly activity) identified by filing_uuid"
20
+ display_name: "LDA filing"
21
+ mergeability: not_mergeable
22
+ strong_id_properties: ["lda_filing_uuid"]
23
+ passive: true
24
+
25
+ - name: "organization"
26
+ description: "A particular business, institution, or organization such as a corporation, university, government agency, or non-profit"
27
+ display_name: "Organization"
28
+ mergeability: not_mergeable
29
+ strong_id_properties: ["lda_registrant_id", "lda_client_internal_id"]
30
+ passive: true
31
+
32
+ - name: "location"
33
+ description: "A specific named geographic location such as a city, country, region, or landmark"
34
+ display_name: "Location"
35
+ mergeability: not_mergeable
36
+ examples: ["Washington, DC, US", "Arlington, VA, US"]
37
+ passive: true
38
+
39
+ properties:
40
+ - name: "lda_filing_uuid"
41
+ type: string
42
+ description: "Stable UUID of the filing in the LDA REST API"
43
+ display_name: "LDA Filing UUID"
44
+ mergeability: not_mergeable
45
+ domain_flavors: ["lda_filing"]
46
+ passive: true
47
+
48
+ - name: "lda_filing_type"
49
+ type: string
50
+ description: "Machine filing type code (e.g. RR, Q1) from the API filing_type field; human label is attribute lda_filing_type_display when present"
51
+ display_name: "LDA Filing Type Code"
52
+ mergeability: not_mergeable
53
+ domain_flavors: ["lda_filing"]
54
+ passive: true
55
+
56
+ - name: "lda_filing_year"
57
+ type: float
58
+ description: "Reporting year associated with the filing"
59
+ display_name: "LDA Filing Year"
60
+ mergeability: not_mergeable
61
+ domain_flavors: ["lda_filing"]
62
+ passive: true
63
+
64
+ - name: "lda_filing_period"
65
+ type: string
66
+ description: "Reporting period code from filing_period (string or number in JSON); human label is attribute lda_filing_period_display when present"
67
+ display_name: "LDA Filing Period Code"
68
+ mergeability: not_mergeable
69
+ domain_flavors: ["lda_filing"]
70
+ passive: true
71
+
72
+ - name: "lda_income"
73
+ type: string
74
+ description: "Income amount reported on the filing when present (API decimal as string)"
75
+ display_name: "LDA Reported Income"
76
+ mergeability: not_mergeable
77
+ domain_flavors: ["lda_filing"]
78
+ passive: true
79
+
80
+ - name: "lda_expenses"
81
+ type: string
82
+ description: "Expenses amount reported on the filing when present (API decimal as string)"
83
+ display_name: "LDA Reported Expenses"
84
+ mergeability: not_mergeable
85
+ domain_flavors: ["lda_filing"]
86
+ passive: true
87
+
88
+ - name: "lda_dt_posted"
89
+ type: string
90
+ description: "Date and time the filing was posted (dt_posted), ISO-8601 string from the API"
91
+ display_name: "LDA Date Posted"
92
+ mergeability: not_mergeable
93
+ domain_flavors: ["lda_filing"]
94
+ passive: true
95
+
96
+ - name: "lda_filing_document_url"
97
+ type: string
98
+ description: "Public URL of the filing document (HTML/PDF) from filing_document_url"
99
+ display_name: "LDA Filing Document URL"
100
+ mergeability: not_mergeable
101
+ domain_flavors: ["lda_filing"]
102
+ passive: true
103
+
104
+ - name: "lda_posted_by_name"
105
+ type: string
106
+ description: "Name of the individual who posted the filing (posted_by_name)"
107
+ display_name: "LDA Posted By"
108
+ mergeability: not_mergeable
109
+ domain_flavors: ["lda_filing"]
110
+ passive: true
111
+
112
+ - name: "lda_lobbying_causes"
113
+ type: string
114
+ description: >-
115
+ One atom per lobbying_activities row: "CODE (Display)" from general_issue_code and
116
+ general_issue_code_display. Narrative text is attribute lda_lobbying_cause_description on the
117
+ same atom when present (same pattern as patent cpc_code + cpc_description).
118
+ display_name: "LDA Lobbying Causes"
119
+ mergeability: not_mergeable
120
+ domain_flavors: ["lda_filing"]
121
+ examples:
122
+ - "BUD (Budget/Appropriations)"
123
+ - "HCR (Health Issues)"
124
+ passive: true
125
+
126
+ - name: "lda_party_role"
127
+ type: string
128
+ description: "Whether this organization row is the lobbying registrant or the client on the linked LDA filing"
129
+ display_name: "LDA Party Role"
130
+ mergeability: not_mergeable
131
+ domain_flavors: ["organization"]
132
+ examples: ["registrant", "client"]
133
+ passive: true
134
+
135
+ - name: "lda_registrant_id"
136
+ type: string
137
+ description: "Stable LDA API registrant id (registrant.id) as a string, for entity resolution"
138
+ display_name: "LDA Registrant ID"
139
+ mergeability: not_mergeable
140
+ domain_flavors: ["organization"]
141
+ passive: true
142
+
143
+ - name: "lda_client_internal_id"
144
+ type: string
145
+ description: "Stable LDA API internal client row id (client.id) as a string, for entity resolution"
146
+ display_name: "LDA Client Internal ID"
147
+ mergeability: not_mergeable
148
+ domain_flavors: ["organization"]
149
+ passive: true
150
+
151
+ - name: "address"
152
+ type: string
153
+ description: "Physical street address of the entity"
154
+ display_name: "Address"
155
+ mergeability: not_mergeable
156
+ domain_flavors: ["organization"]
157
+ passive: true
158
+
159
+ relationships:
160
+ - name: "lda_registrant"
161
+ description: "The lobbying registrant firm that filed this LDA disclosure"
162
+ display_name: "LDA Registrant"
163
+ mergeability: not_mergeable
164
+ domain_flavors: ["lda_filing"]
165
+ target_flavors: ["organization"]
166
+ passive: true
167
+
168
+ - name: "lda_client"
169
+ description: "The client organization on whose behalf lobbying is reported for this LDA filing"
170
+ display_name: "LDA Client"
171
+ mergeability: not_mergeable
172
+ domain_flavors: ["lda_filing"]
173
+ target_flavors: ["organization"]
174
+ passive: true
175
+
176
+ - name: "is_located_at"
177
+ description: "An entity is located at, operates in, resides in, is headquartered in, was born in, visits, or died in a location"
178
+ display_name: "Located At"
179
+ mergeability: not_mergeable
180
+ domain_flavors: ["organization"]
181
+ target_flavors: ["location"]
182
+ passive: true
183
+
184
+ attributes:
185
+ - property: "lda_filing_period"
186
+ name: "lda_filing_period_display"
187
+ type: string
188
+ description: "Human-readable reporting period label from filing_period_display on the same atom as the period code"
189
+ display_name: "LDA Filing Period"
190
+ mergeability: not_mergeable
191
+
192
+ - property: "lda_filing_type"
193
+ name: "lda_filing_type_display"
194
+ type: string
195
+ description: "Human-readable filing type label from filing_type_display on the same atom as the type code"
196
+ display_name: "LDA Filing Type"
197
+ mergeability: not_mergeable
198
+
199
+ # Narrative for one lobbying issue row. Stored as a quad attribute on each lda_lobbying_causes atom.
200
+ - property: "lda_lobbying_causes"
201
+ name: "lda_lobbying_cause_description"
202
+ type: string
203
+ description: >-
204
+ lobbying_activities[].description for that row (optional trailing posted timestamp stripped).
205
+ Omitted as an attribute when the description is empty.
206
+ display_name: "LDA Lobbying Cause Description"
207
+ mergeability: not_mergeable
208
+
209
+ events: []
@@ -51,7 +51,7 @@ flavors:
51
51
  passive: true
52
52
 
53
53
  - name: "aircraft"
54
- description: "An airplane identified in sanctions designations"
54
+ description: "An aircraft such as a plane, helicopter, glider, or unmanned aerial vehicle"
55
55
  display_name: "Aircraft"
56
56
  mergeability: not_mergeable
57
57
  strong_id_properties: ["sanctions_id"]