← back to Nationalrealestate
Add Texas (Bexar+Tarrant, 49768) via authoritative Comptroller F1=commercial/F2=industrial + re-enable Cook (Chicago, 95892) now that classifier handles 'Commercial — Class NNN' descriptive prefix (plausible split, resolved the old 100%-industrial skew)
2ebcbf4086fa6241a205a471db1fb2e53d50f0f1 · 2026-07-31 00:42:08 -0700 · steve@designerwallcoverings.com
Files touched
M src/ingest/commercial/engine.ts
Diff
commit 2ebcbf4086fa6241a205a471db1fb2e53d50f0f1
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Fri Jul 31 00:42:08 2026 -0700
Add Texas (Bexar+Tarrant, 49768) via authoritative Comptroller F1=commercial/F2=industrial + re-enable Cook (Chicago, 95892) now that classifier handles 'Commercial — Class NNN' descriptive prefix (plausible split, resolved the old 100%-industrial skew)
---
src/ingest/commercial/engine.ts | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/ingest/commercial/engine.ts b/src/ingest/commercial/engine.ts
index f5b069b..8e53cc3 100644
--- a/src/ingest/commercial/engine.ts
+++ b/src/ingest/commercial/engine.ts
@@ -14,6 +14,14 @@ const ADAPTERS: Record<string, () => Promise<{ run: () => Promise<{ upserted: nu
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)') }),
+ // Texas Comptroller state category (authoritative): F1=commercial real, F2=industrial real;
+ // A/B/E=residential, C/D=vacant/ag, L=personal-property (not real estate → excluded).
+ texas: async () => {
+ const m = await import('./from_parcel.ts');
+ const classify = (u: string) => { const c = (u || '').trim().toUpperCase(); if (c.startsWith('F2')) return 'industrial' as const; return c[0] === 'F' ? 'other' as const : null; };
+ const CO: [string, string][] = [['48029', 'Bexar (San Antonio)'], ['48439', 'Tarrant (Fort Worth)']];
+ return { run: async () => { let up = 0; for (const [fips, name] of CO) up += (await m.ingestCommercialFromParcelCoded(fips, `TX ${name}`, '^F[0-9]', classify)()).upserted; return { upserted: up }; } };
+ },
// NYC (Manhattan) building-class letter is authoritative (NYC DOF): O=office, K=store/retail,
// E=warehouse+F=factory=industrial, H=hotel, G/J/L/P=other commercial; A-D/R/S/V=residential/vacant.
nyc: async () => {
@@ -23,9 +31,10 @@ const ADAPTERS: Record<string, () => Promise<{ run: () => Promise<{ upserted: nu
const BOROUGHS: [string, string][] = [['36061', 'Manhattan'], ['36047', 'Brooklyn'], ['36081', 'Queens'], ['36005', 'Bronx'], ['36085', 'Staten Island']];
return { run: async () => { let up = 0; for (const [fips, name] of BOROUGHS) up += (await m.ingestCommercialFromParcelCoded(fips, `NYC ${name}`, 'Class [EFGHJKLOP]', classify)()).upserted; return { upserted: up }; } };
},
- // 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).
+ // Cook IL: use_desc has a DESCRIPTIVE prefix ('Commercial — Class 517', 'Industrial — ...',
+ // 'Residential (<7 units)'), so from_parcel classifies it directly now (commercial keyword
+ // + bare-commercial fallback added post-cycle-13). NY/TX handled by the coded materializer above.
+ cook: async () => ({ run: (await import('./from_parcel.ts')).ingestCommercialFromParcel('17031', 'Cook County IL (Chicago)') }),
};
async function main() {
← 92af9db Extend NYC commercial to all 5 boroughs (41511 total: Manhat
·
back to Nationalrealestate
·
Add Miami-Dade FL (60721) + Franklin OH (5665) commercial vi 8a5be2f →