← back to Nationalrealestate
Add Fulton GA/Atlanta commercial (15178) via authoritative Fulton Assessor LUC code->label map (231 codes, data/fulton-luc.json) + classifyCommercialByDesc. Full subtype split verified plausible
0cfcfdb69b2f646316cec3ff5ffa1faf104f4668 · 2026-07-31 01:52:22 -0700 · steve@designerwallcoverings.com
Files touched
A data/fulton-luc.jsonM src/ingest/commercial/engine.ts
Diff
commit 0cfcfdb69b2f646316cec3ff5ffa1faf104f4668
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Fri Jul 31 01:52:22 2026 -0700
Add Fulton GA/Atlanta commercial (15178) via authoritative Fulton Assessor LUC code->label map (231 codes, data/fulton-luc.json) + classifyCommercialByDesc. Full subtype split verified plausible
---
data/fulton-luc.json | 233 ++++++++++++++++++++++++++++++++++++++++
src/ingest/commercial/engine.ts | 11 ++
2 files changed, 244 insertions(+)
diff --git a/data/fulton-luc.json b/data/fulton-luc.json
new file mode 100644
index 0000000..1a07ac1
--- /dev/null
+++ b/data/fulton-luc.json
@@ -0,0 +1,233 @@
+{
+"100": "Residential vacant",
+"101": "Residential 1 family",
+"102": "Residential 2 family",
+"103": "Residential 3 family",
+"104": "Residential 4 family",
+"105": "Commercial/Dwelling Conversion",
+"106": "Single Family Residential Condominium",
+"107": "Single Family Residential Townhouse",
+"108": "Single Family Residential Mobile Home",
+"109": "Auxiliary Improvement",
+"110": "Single Family Residential Loft",
+"111": "Common Area - residential subdivision",
+"112": "Agricultural-Improved",
+"113": "Preferential Agricultural-Vacant",
+"166": "Common Area - condominiums",
+"188": "Homeowner Association Common Area",
+"199": "Residential under construction",
+"200": "Apartment Vacant Land",
+"201": "Apartment/Dwelling Conversion (>4 units)",
+"206": "Apt Lofts with Retail on First Floor",
+"207": "Commercial Converted to Residential",
+"208": "Co Ops Single Family Fee Simple",
+"209": "Apartment Loft Without Retail",
+"210": "Apartment -Vacant/Boarded Up",
+"211": "Apartment - Garden (3 story & under)",
+"212": "Apartment - High Rise",
+"213": "Mobile Home Park",
+"250": "Super Luxury Hotel",
+"251": "Luxury Hotel",
+"252": "First Class Hotel",
+"253": "High Rise Hotel",
+"254": "Luxury Budget Motel",
+"255": "Economy Motel",
+"257": "Motel Bed and Breakfast",
+"281": "Low Income Tax Credit",
+"288": "Partially Exempt Apartment Complex",
+"299": "Apartment Land Tie Back",
+"300": "Vacant Commercial Land",
+"301": "Commercial/Dwelling Conversion",
+"302": "Par 3 Golf Course",
+"303": "Miniature Golf Course",
+"304": "Fishing Pier",
+"305": "Marina",
+"306": "Boat Dock",
+"307": "Private Boat Launch",
+"308": "Water Amusements",
+"309": "Miscellaneous Amusement",
+"310": "Unsound Commercial Structure",
+"312": "Assisted Living Residence Community",
+"316": "Nursing Home",
+"318": "Boarding-Rooming House",
+"319": "Mixed Res/Comm(Built as Comm)",
+"320": "Commercial Auxiliary Improvements",
+"321": "Restaurant",
+"323": "Food Stands",
+"325": "Franchise Food",
+"326": "Convenience/Fast Food Market",
+"327": "Bar/Lounge",
+"328": "Night Club/Dinner Theater",
+"331": "Auto Dealer, Full Service",
+"332": "Auto Service Garage",
+"333": "Service Station with bays",
+"334": "Service Station (without bays)",
+"335": "Truck Stop",
+"336": "Car Wash - Manual",
+"337": "Car Wash - Automatic",
+"338": "Parking Garage/Deck",
+"339": "Parking Lot (Paved)",
+"340": "Super Regional Shopping Mall",
+"341": "Regional Shopping Mall",
+"342": "Community Shopping Center",
+"343": "Neighborhood Shopping Center",
+"344": "Strip Shopping Center",
+"345": "Discount Department Store",
+"346": "Department Store",
+"347": "Supermarket",
+"348": "Convenience Food Market",
+"349": "Medical Office Building",
+"350": "Telecommunications Office Bldg",
+"351": "Bank",
+"352": "Savings Institution",
+"353": "Office Building - Low Rise - 1-4 Story",
+"354": "Office Building - High Rise-5 Story & Up",
+"355": "Office Condominium",
+"356": "Retail Condominium",
+"361": "Funeral Home",
+"362": "Veterinary Clinic",
+"363": "Legitimate Theater",
+"364": "Motion Picture Theater",
+"365": "Cinema/Theater",
+"366": "Radio, TV or Motion Picture Studio",
+"367": "Social/Fraternal Hall",
+"368": "Hanger",
+"369": "Day Care Center",
+"370": "Greenhouse/Florist",
+"371": "Downtown Row Type",
+"373": "Retail - Single Occupancy",
+"374": "Retail - Multiple Occupancy",
+"375": "Retail - Drive Up",
+"381": "Bowing Alley",
+"382": "Skating Rink",
+"383": "Health Spa",
+"384": "Indoor Swimming Pool",
+"385": "Indoor Tennis Club",
+"386": "Indoor Racquet Club",
+"387": "Country Club",
+"388": "Club House",
+"389": "Country Club with Golf Course",
+"390": "Amusement Park",
+"391": "Cold Storage Facility",
+"392": "Lumber Storage",
+"393": "Auxillary improvement",
+"394": "Warehouse (Distribution)",
+"395": "Truck Terminal",
+"396": "Mini Warehouse",
+"397": "Office Warehouse (flex)",
+"398": "Warehouse (bulk)",
+"399": "Prefab Warehouse",
+"400": "Vacant Industrial Land",
+"401": "Manufacturing/Processing",
+"405": "Research and Development",
+"411": "Aircraft Engine Mfg.",
+"412": "Aluminum & Foil Mfg.",
+"413": "Asphalt Plant",
+"414": "Automobile Parts Mfg.",
+"415": "Bakery",
+"416": "Bottling Plant",
+"417": "Broom Mfg",
+"418": "Candy Mfg.",
+"419": "Cement Mfg.",
+"420": "Concrete Mfg.",
+"421": "Chemical Plant",
+"422": "Clay Products",
+"423": "Clothing Mfg.",
+"424": "Coal Processing",
+"425": "Compressor Station (not public utility)",
+"426": "Dairy",
+"428": "Dental & Medical lab",
+"429": "Electronic Components",
+"430": "Electrical Equipment Mfg",
+"431": "Feed & Flower Manufacturing",
+"432": "Foundry Products",
+"433": "Food Processing",
+"434": "Glass Manufacturing",
+"435": "Glass Manufacturing (specialized)",
+"436": "Grain and Milling Products Mfg",
+"437": "Ice Plant",
+"438": "Leather Products Mfg",
+"439": "Liquefied Natural Gas Plant",
+"440": "Logging/Cutting of Timber",
+"441": "Machinery /Equipment Mftg",
+"442": "Meat Packing/Slaughterhouse",
+"443": "Metal Working",
+"444": "Mining/Deep",
+"445": "Mining/Strip",
+"446": "Natural Gas Extracting Facility",
+"447": "Nickel Manufacturing",
+"448": "Newspaper Printing Plant",
+"449": "Oil and Gas Pipelinq.",
+"450": "Optical Manufacturing",
+"451": "Paint Manufacturing",
+"452": "Paper Finishing and Converting",
+"455": "Plastics Products Mfg",
+"456": "Plastics Products- Specialized",
+"457": "Print Shop",
+"458": "Pulp and Paper",
+"459": "Quarries (Rock)",
+"460": "Railroad Car Manufacturing",
+"461": "Rubber Mfg (Tire Recapping)",
+"462": "Shoe Manufacturing",
+"463": "Steel Manufacturing",
+"464": "Steam Generating Plant",
+"465": "Saw Mill (Permanent)",
+"466": "Saw Mill (temporary)",
+"467": "Textile Manufacturing",
+"468": "Tobacco Products Manufacturing",
+"469": "Wood Working Shop",
+"470": "Wire Products Manufacturing",
+"471": "Jewelry, Toys, Sporting Goods, Other Mfg",
+"472": "Furniture Mfg",
+"485": "Land Fill",
+"499": "Industrial Tie Back Land",
+"512": "School Private (Taxable)",
+"513": "College Dormitory (Taxable)",
+"520": "Taxable Church,Synagogu,Mosque",
+"540": "Hospital/For Profit (Taxable)",
+"550": "Charitable Office/Svc Center (Taxable)",
+"580": "Cultural Facilities",
+"591": "USPS (Taxable Private Ownership)",
+"600": "Vacant Exempt Land",
+"601": "Cemetery",
+"610": "Recreation/Health",
+"611": "Library",
+"612": "School",
+"613": "College",
+"614": "Single Family Residential: Institutional",
+"620": "Religious: Churches, Synogogue, Mosque",
+"621": "Church Parking (Paved)",
+"622": "Single Family Residential: Parsonage",
+"625": "Religious Mission( Salvation Army, GW)",
+"630": "Auditorium",
+"640": "Hospital",
+"641": "Urgent Care Facility",
+"650": "Charitable Office(Service Center)",
+"660": "Police or Fire Station",
+"670": "Correctional (Local, State, Federal)",
+"680": "Cultural Faciltities",
+"684": "Housing for the Disabled",
+"685": "Housing for the Homeless",
+"686": "Housing for the Aged",
+"690": "Rail/Bus/Air Terminal",
+"691": "US Postal Services (Private)",
+"692": "US Postal Services (Exempt)",
+"699": "Improved Government Owned Exempt NEC",
+"700": "Utility Vacant Land",
+"701": "Railroad",
+"702": "Electric Utility",
+"703": "Gas Utility",
+"704": "Water Utility",
+"705": "Sewer Utility",
+"706": "Multiple Service Utility",
+"710": "Telephone Equipment Building",
+"711": "Telephone Utility NEC",
+"715": "Telephone Service Garage",
+"720": "Radio/TV Transmitter Building",
+"799": "Other Utility NEC",
+"800": "Unique Restricted Vacant Land",
+"888": "Economic Development/Public Housing",
+"889": "Brownfield",
+"890": "Economic Development/Brownfield",
+"999": "Commercial Land Tie Back"
+}
\ No newline at end of file
diff --git a/src/ingest/commercial/engine.ts b/src/ingest/commercial/engine.ts
index b5c13ba..deb9a17 100644
--- a/src/ingest/commercial/engine.ts
+++ b/src/ingest/commercial/engine.ts
@@ -38,6 +38,17 @@ const ADAPTERS: Record<string, () => Promise<{ run: () => Promise<{ upserted: nu
// FL Miami-Dade + OH Franklin: descriptive use_desc with subtypes (OFFICE/STORE/WAREHOUSE/HOTEL) → from_parcel classifies directly.
miami: async () => ({ run: (await import('./from_parcel.ts')).ingestCommercialFromParcel('12086', 'Miami-Dade County FL') }),
franklin: async () => ({ run: (await import('./from_parcel.ts')).ingestCommercialFromParcel('39049', 'Franklin County OH (Columbus)') }),
+ // Fulton GA (Atlanta): numeric land-use codes → authoritative label map (Fulton Assessor
+ // LUC PDF, data/fulton-luc.json) → classifyCommercialByDesc on the label.
+ fulton: async () => {
+ const m = await import('./from_parcel.ts');
+ const { classifyCommercialByDesc } = await import('../../lib/commercial_types.ts');
+ const { readFileSync } = await import('node:fs');
+ const { join, dirname } = await import('node:path'); const { fileURLToPath } = await import('node:url');
+ const MAP: Record<string, string> = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), '../../../data/fulton-luc.json'), 'utf8'));
+ const classify = (u: string) => { const label = MAP[(u || '').trim()]; return label ? classifyCommercialByDesc(label) : null; };
+ return { run: m.ingestCommercialFromParcelCoded('13121', 'Fulton County GA (Atlanta)', '^(2[5-9][0-9]|[3-9][0-9][0-9])', classify) };
+ },
};
async function main() {
← 8a5be2f Add Miami-Dade FL (60721) + Franklin OH (5665) commercial vi
·
back to Nationalrealestate
·
Add Alameda CA/Oakland (1460, descriptive) + Oregon counties ed1e697 →