[object Object]

← back to Nationalrealestate

Add Wake County NC commercial (3764, Raleigh) via safe word-boundary abbreviation patterns (OFC->office, WHSE/WAREHSE->industrial) + from_parcel keyword extension. Verified plausible office-heavy split. 5th commercial county

275ff1e4889e3bc2eca47542117475ce9ec4186e · 2026-07-30 23:29:23 -0700 · steve@designerwallcoverings.com

Files touched

Diff

commit 275ff1e4889e3bc2eca47542117475ce9ec4186e
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date:   Thu Jul 30 23:29:23 2026 -0700

    Add Wake County NC commercial (3764, Raleigh) via safe word-boundary abbreviation patterns (OFC->office, WHSE/WAREHSE->industrial) + from_parcel keyword extension. Verified plausible office-heavy split. 5th commercial county
---
 src/ingest/commercial/engine.ts      | 1 +
 src/ingest/commercial/from_parcel.ts | 2 +-
 src/lib/commercial_types.ts          | 4 ++--
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/ingest/commercial/engine.ts b/src/ingest/commercial/engine.ts
index 3822771..1c9aa02 100644
--- a/src/ingest/commercial/engine.ts
+++ b/src/ingest/commercial/engine.ts
@@ -13,6 +13,7 @@ const ADAPTERS: Record<string, () => Promise<{ run: () => Promise<{ upserted: nu
   king: async () => ({ run: (await import('./from_parcel.ts')).ingestCommercialFromParcel('53033', 'King County WA (Seattle)') }),
   saltlake: async () => ({ run: (await import('./from_parcel.ts')).ingestCommercialFromParcel('49035', 'Salt Lake County UT') }),
   sandiego: async () => ({ run: (await import('./from_parcel.ts')).ingestCommercialFromParcel('06073', 'San Diego County CA') }),
+  wake: async () => ({ run: (await import('./from_parcel.ts')).ingestCommercialFromParcel('37183', 'Wake County NC (Raleigh)') }),
   // NOTE: Cook(17031)/NY(36061)/Bexar-TX(48029) use CLASS CODES ('Class 5-93','C7','F1')
   // not descriptive text, so from_parcel can't classify them (verified: Cook came back
   // 100% industrial — implausible). They need a per-county class-code map (future task).
diff --git a/src/ingest/commercial/from_parcel.ts b/src/ingest/commercial/from_parcel.ts
index 8d05543..654282c 100644
--- a/src/ingest/commercial/from_parcel.ts
+++ b/src/ingest/commercial/from_parcel.ts
@@ -15,7 +15,7 @@ import { classifyCommercialByDesc } from '../../lib/commercial_types.ts';
 const digits = (v: unknown): string | null => { const t = (v == null ? '' : String(v)).replace(/\D/g, ''); return t || null; };
 
 // Broad SQL pre-filter covering the classifier's keywords — precise typing happens in JS.
-const KEYWORDS = 'commercial|office|professional|bank|savings|warehous|distribution|storage|manufactur|industrial|store|shop|supermarket|department|restaurant|cocktail|hotel|motel|hospitality|lodging|parking|studio|motion picture|television|radio|retail|wholesale|outlet|nursery|greenhouse|kennel|laundry|repair|service station|auto|recreation';
+const KEYWORDS = 'commercial|office|ofc|professional|bank|savings|warehous|warehse|whse|distribution|storage|manufactur|industrial|store|shop|supermarket|department|restaurant|cocktail|hotel|motel|hospitality|lodging|parking|studio|motion picture|television|radio|retail|wholesale|outlet|nursery|greenhouse|kennel|laundry|repair|service station|auto|recreation';
 
 const COLS = ['county_fips', 'ain', 'address', 'city', 'zip', 'ctype', 'use_desc', 'use_class',
   'assessed_total', 'assessed_land', 'assessed_imp', 'roll_year', 'recording_date', 'sqft', 'year_built', 'units'];
diff --git a/src/lib/commercial_types.ts b/src/lib/commercial_types.ts
index 009aeef..7a59c8f 100644
--- a/src/lib/commercial_types.ts
+++ b/src/lib/commercial_types.ts
@@ -32,8 +32,8 @@ const RULES: [RegExp, CommercialType][] = [
   [/motion picture|radio|television|studio/i, 'studio'],
   [/hotel|motel|hospitality|lodging/i, 'hospitality'],
   [/parking/i, 'parking'],
-  [/office|professional building|bank|savings/i, 'office'],
-  [/warehous|distribution|storage|manufactur|industrial|food processing|mineral|lumber|open storage/i, 'industrial'],
+  [/office|professional building|bank|savings|\bofc\b/i, 'office'],  // \bofc\b: Wake NC 'OFC GROSS','MED OFC'
+  [/warehous|warehse|\bwhse\b|distribution|storage|manufactur|industrial|food processing|mineral|lumber|open storage/i, 'industrial'],  // warehse/whse: Wake abbrevs
   [/store|shopping|supermarket|department|restaurant|cocktail|service station|repair shop|paint shop|laundry|auto|recreation equipment|wholesale|outlet|nursery|greenhouse|kennel|retail/i, 'retail'],
 ];
 

← 36c7c42 Add Maricopa (Phoenix) bulk loader — free assessor st42060 f  ·  back to Nationalrealestate  ·  Add NYC Manhattan commercial (6131) via authoritative NYC DO b53f231 →