Files
goodgo-platform/scripts/seed-industrial-parks.ts
Ho Ngoc Hai f222611fcf
Some checks failed
Security Scanning / Trivy Scan — API Image (push) Failing after 53s
Security Scanning / Trivy Scan — AI Services Image (push) Has been cancelled
Security Scanning / Trivy Filesystem Scan (push) Has been cancelled
Security Scanning / Security Gate (push) Has been cancelled
Security Scanning / Trivy Scan — Web Image (push) Has started running
CI / Lint → Typecheck → Test → Build (22) (push) Failing after 10s
CI / AI Services (Python) — Smoke (push) Failing after 5s
CodeQL Analysis / CodeQL (javascript-typescript) (push) Failing after 58s
Deploy / Build API Image (push) Failing after 18s
Deploy / Build Web Image (push) Failing after 7s
CI / E2E Tests (push) Has been skipped
Deploy / Build AI Services Image (push) Failing after 7s
E2E Tests / Playwright E2E (push) Failing after 16s
Security Scanning / Dependency Audit (pnpm) (push) Failing after 4s
Deploy / Smoke Test Staging (push) Has been cancelled
Deploy / Deploy to Staging (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Deploy / Rollback Staging (push) Has been cancelled
Deploy / Smoke Test Production (push) Has been cancelled
Deploy / Rollback Production (push) Has been cancelled
fix(api,web): runtime fixes found during E2E + DB seed repair
API bootstrap fixes (DI wiring):
- analytics.module: add forwardRef(() => AdminModule) to import
  AI_CONFIG_PROVIDER for GetListingAiAdviceHandler + GetProjectAiAdviceHandler
- listings.module: add PaymentsModule to imports so PAYMENT_INITIATOR is
  resolvable by FeatureListingHandler
- metrics.module: register 3 missing Prometheus providers that MetricsService
  injects (READ_MODEL_PROJECTOR_LAG_SECONDS / REFRESH_DURATION /
  RECONCILIATION_DRIFT_TOTAL) — caused boot failure previously
- get-listing-ai-advice.handler: switch LISTING_REPOSITORY import from barrel
  @modules/listings to direct internal path to break circular reference that
  made the symbol evaluate as undefined at decorator time
- shared.module: comment out broken EVENT_BUS / OutboxService / OutboxRelay
  providers (depend on @goodgo/contracts-events workspace pkg not yet wired)

CSRF middleware:
- Rewrite exclude logic as inline path-check inside the middleware itself.
  Nest 11 + path-to-regexp v8 changed how MiddlewareConsumer.exclude() matches
  against forRoutes('*') — the previous string patterns silently stopped
  matching, causing every POST to /auth/login to return 403 CSRF Forbidden.
  Inlined exempt list strips the /api/v1 prefix and checks against a Set.

Admin revenue stats:
- admin-stats.queries: use Prisma.sql template fragments for DATE_TRUNC unit
  ('day'|'month'). Passing the unit as a bind parameter caused Postgres error
  42803 (column must appear in GROUP BY) because the planner treats $1 as an
  opaque scalar and cannot prove SELECT and GROUP BY expressions are equal.

Admin audit-log page:
- SeverityPill: add ?? 'info' fallback — backend AuditLogEntry does not
  include a `severity` field, so SEVERITY_CONFIG[undefined] was undefined
  and .dir threw TypeError, crashing the whole audit-log page.

DB seed fixes:
- seed.ts: replace Vietnamese enum literals ('Sổ hồng', 'Sổ đỏ') with
  correct enum keys ('SO_HONG', 'SO_DO') for the LegalStatus column
- seed-industrial-parks.ts: gate the standalone main() behind
  require.main === module so importing the file from seed.ts doesn't
  immediately close the pg.Pool used by the orchestrator
- scripts/seed-industrial-listings.ts: restore from tmp/ stash; was missing
  from scripts/ causing seed.ts import to fail at startup
- migration 20260429010000_add_property_certificate_verified: Property table
  was missing the certificateVerified column required by seed + Prisma schema

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 16:46:50 +07:00

860 lines
42 KiB
TypeScript

/**
* Seed industrial parks (KCN) — 20 real Vietnamese parks.
*
* Usage: npx tsx scripts/seed-industrial-parks.ts
* Idempotent: uses upsert on slug unique constraint.
*/
import { PrismaPg } from '@prisma/adapter-pg';
import {
PrismaClient,
IndustrialParkStatus,
VietnamRegion,
} from '@prisma/client';
import pg from 'pg';
const pool = new pg.Pool({ connectionString: process.env['DATABASE_URL'] });
const adapter = new PrismaPg(pool);
const prisma = new PrismaClient({ adapter });
interface IndustrialParkSeed {
id: string;
name: string;
nameEn: string;
slug: string;
developer: string;
operator: string | null;
status: IndustrialParkStatus;
lat: number;
lng: number;
address: string;
district: string;
province: string;
region: VietnamRegion;
totalAreaHa: number;
leasableAreaHa: number;
occupancyRate: number;
remainingAreaHa: number;
tenantCount: number;
establishedYear: number;
landRentUsdM2Year: number | null;
rbfRentUsdM2Month: number | null;
rbwRentUsdM2Month: number | null;
managementFeeUsd: number | null;
infrastructure: Record<string, unknown>;
connectivity: Record<string, unknown>;
incentives: Record<string, unknown>;
targetIndustries: string[];
existingTenants: { name: string; country: string; industry: string }[];
certifications: string[];
description: string;
descriptionEn: string;
}
const PARKS: IndustrialParkSeed[] = [
{
id: 'seed-kcn-001',
name: 'KCN VSIP Bắc Ninh',
nameEn: 'VSIP Bac Ninh Industrial Park',
slug: 'vsip-bac-ninh',
developer: 'Vietnam Singapore Industrial Park',
operator: 'VSIP Group',
status: IndustrialParkStatus.OPERATIONAL,
lat: 21.1215,
lng: 106.0763,
address: 'Phường Phù Chẩn, TP Từ Sơn',
district: 'Từ Sơn',
province: 'Bắc Ninh',
region: VietnamRegion.NORTH,
totalAreaHa: 700,
leasableAreaHa: 500,
occupancyRate: 92,
remainingAreaHa: 40,
tenantCount: 250,
establishedYear: 2007,
landRentUsdM2Year: 90,
rbfRentUsdM2Month: 5.5,
rbwRentUsdM2Month: 4.8,
managementFeeUsd: 0.7,
infrastructure: { electricity: '110kV/22kV', water: '15,000 m³/day', wastewater: '10,000 m³/day', telecom: 'Fiber optic', roads: '4-6 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Hải Phòng', distanceKm: 110 }, airport: { name: 'Nội Bài', distanceKm: 35 }, highway: { name: 'QL 1A', distanceKm: 5 }, railway: { name: 'Ga Bắc Ninh', distanceKm: 8 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 50% 3 năm đầu', specialZone: false },
targetIndustries: ['electronics', 'automotive', 'precision engineering', 'food processing'],
existingTenants: [
{ name: 'Samsung Electronics', country: 'Korea', industry: 'electronics' },
{ name: 'Canon Vietnam', country: 'Japan', industry: 'electronics' },
{ name: 'Foxconn', country: 'Taiwan', industry: 'electronics' },
],
certifications: ['ISO 14001', 'Green Industrial Park'],
description: 'KCN VSIP Bắc Ninh là khu công nghiệp liên doanh Việt Nam - Singapore, tọa lạc tại vị trí chiến lược gần Hà Nội. Với hạ tầng đồng bộ và dịch vụ chuyên nghiệp, đây là điểm đến hàng đầu cho các nhà đầu tư FDI.',
descriptionEn: 'VSIP Bac Ninh is a Vietnam-Singapore joint venture industrial park, strategically located near Hanoi. With synchronized infrastructure and professional services, it is a top destination for FDI investors.',
},
{
id: 'seed-kcn-002',
name: 'KCN VSIP Bình Dương I',
nameEn: 'VSIP Binh Duong I Industrial Park',
slug: 'vsip-binh-duong-1',
developer: 'Vietnam Singapore Industrial Park',
operator: 'VSIP Group',
status: IndustrialParkStatus.FULL,
lat: 11.0174,
lng: 106.6094,
address: 'Phường An Phú, TP Thuận An',
district: 'Thuận An',
province: 'Bình Dương',
region: VietnamRegion.SOUTH,
totalAreaHa: 500,
leasableAreaHa: 355,
occupancyRate: 100,
remainingAreaHa: 0,
tenantCount: 380,
establishedYear: 1996,
landRentUsdM2Year: 110,
rbfRentUsdM2Month: 6.0,
rbwRentUsdM2Month: 5.2,
managementFeeUsd: 0.8,
infrastructure: { electricity: '110kV/22kV', water: '20,000 m³/day', wastewater: '15,000 m³/day', telecom: 'Fiber optic', roads: '6 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 25 }, airport: { name: 'Tân Sơn Nhất', distanceKm: 20 }, highway: { name: 'ĐL Mỹ Phước - Tân Vạn', distanceKm: 2 }, railway: { name: 'Ga Sóng Thần', distanceKm: 5 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'N/A (đã lấp đầy)', specialZone: false },
targetIndustries: ['electronics', 'garment', 'food processing', 'logistics'],
existingTenants: [
{ name: 'Lego Manufacturing', country: 'Denmark', industry: 'consumer goods' },
{ name: 'Pepsi Vietnam', country: 'USA', industry: 'food processing' },
],
certifications: ['ISO 14001'],
description: 'KCN VSIP Bình Dương I là khu công nghiệp lâu đời nhất của VSIP, đã lấp đầy 100%. Nằm trên trục đường chính kết nối TP.HCM và các tỉnh lân cận.',
descriptionEn: 'VSIP Binh Duong I is the oldest VSIP industrial park, fully occupied at 100%. Located on the main road connecting HCMC and neighboring provinces.',
},
{
id: 'seed-kcn-003',
name: 'KCN Amata Đồng Nai',
nameEn: 'Amata City Bien Hoa Industrial Park',
slug: 'amata-dong-nai',
developer: 'Amata Corporation',
operator: 'Amata Vietnam',
status: IndustrialParkStatus.OPERATIONAL,
lat: 10.9457,
lng: 106.8296,
address: 'Phường Long Bình, TP Biên Hòa',
district: 'Biên Hòa',
province: 'Đồng Nai',
region: VietnamRegion.SOUTH,
totalAreaHa: 700,
leasableAreaHa: 490,
occupancyRate: 88,
remainingAreaHa: 59,
tenantCount: 180,
establishedYear: 1994,
landRentUsdM2Year: 95,
rbfRentUsdM2Month: 5.0,
rbwRentUsdM2Month: 4.5,
managementFeeUsd: 0.65,
infrastructure: { electricity: '220kV/110kV', water: '25,000 m³/day', wastewater: '12,000 m³/day', telecom: 'Fiber optic', roads: '4-6 lanes', fire: 'Full system + emergency center' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 30 }, airport: { name: 'Long Thành (đang xây)', distanceKm: 25 }, highway: { name: 'QL 1A', distanceKm: 2 }, railway: { name: 'Ga Biên Hòa', distanceKm: 8 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Thương lượng', specialZone: false },
targetIndustries: ['automotive', 'electronics', 'chemicals', 'machinery'],
existingTenants: [
{ name: 'Schaeffler', country: 'Germany', industry: 'automotive' },
{ name: 'Bosch Vietnam', country: 'Germany', industry: 'automotive' },
{ name: 'Kimberly-Clark', country: 'USA', industry: 'consumer goods' },
],
certifications: ['ISO 14001', 'OHSAS 18001'],
description: 'KCN Amata Đồng Nai là một trong những KCN lớn nhất miền Nam với quy hoạch kiểu thành phố công nghiệp. Gần sân bay Long Thành đang xây dựng.',
descriptionEn: 'Amata Dong Nai is one of the largest industrial parks in Southern Vietnam with an industrial city-style layout. Near the under-construction Long Thanh airport.',
},
{
id: 'seed-kcn-004',
name: 'KCN Amata Long An',
nameEn: 'Amata City Long An Industrial Park',
slug: 'amata-long-an',
developer: 'Amata Corporation',
operator: 'Amata Vietnam',
status: IndustrialParkStatus.UNDER_CONSTRUCTION,
lat: 10.6589,
lng: 106.4752,
address: 'Xã Hựu Thạnh, Huyện Đức Hòa',
district: 'Đức Hòa',
province: 'Long An',
region: VietnamRegion.SOUTH,
totalAreaHa: 410,
leasableAreaHa: 290,
occupancyRate: 35,
remainingAreaHa: 188,
tenantCount: 25,
establishedYear: 2020,
landRentUsdM2Year: 75,
rbfRentUsdM2Month: 4.5,
rbwRentUsdM2Month: 3.8,
managementFeeUsd: 0.55,
infrastructure: { electricity: '110kV/22kV', water: '10,000 m³/day', wastewater: '8,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 45 }, airport: { name: 'Tân Sơn Nhất', distanceKm: 35 }, highway: { name: 'Vành đai 3 TP.HCM', distanceKm: 8 }, seaport: { name: 'Cảng Hiệp Phước', distanceKm: 30 } },
incentives: { taxHoliday: '4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 70% 5 năm đầu', specialZone: true },
targetIndustries: ['logistics', 'food processing', 'consumer goods', 'light manufacturing'],
existingTenants: [
{ name: 'Nippon Express', country: 'Japan', industry: 'logistics' },
],
certifications: ['ISO 14001'],
description: 'KCN Amata Long An là dự án mở rộng mới của Amata, hưởng lợi từ vành đai 3 TP.HCM. Giá thuê cạnh tranh và nhiều ưu đãi cho nhà đầu tư.',
descriptionEn: 'Amata Long An is a new expansion project by Amata, benefiting from HCMC Ring Road 3. Competitive rental prices and many incentives for investors.',
},
{
id: 'seed-kcn-005',
name: 'KCN Nam Đình Vũ',
nameEn: 'Nam Dinh Vu Industrial Park',
slug: 'nam-dinh-vu',
developer: 'Sao Đỏ Group',
operator: 'Sao Đỏ Group',
status: IndustrialParkStatus.OPERATIONAL,
lat: 20.8165,
lng: 106.7833,
address: 'Đường Đình Vũ, Quận Hải An',
district: 'Hải An',
province: 'Hải Phòng',
region: VietnamRegion.NORTH,
totalAreaHa: 1329,
leasableAreaHa: 900,
occupancyRate: 75,
remainingAreaHa: 225,
tenantCount: 120,
establishedYear: 2014,
landRentUsdM2Year: 80,
rbfRentUsdM2Month: 4.8,
rbwRentUsdM2Month: 4.0,
managementFeeUsd: 0.6,
infrastructure: { electricity: '110kV/22kV', water: '20,000 m³/day', wastewater: '15,000 m³/day', telecom: 'Fiber optic', roads: '6 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Đình Vũ', distanceKm: 2 }, airport: { name: 'Cát Bi', distanceKm: 15 }, highway: { name: 'Cao tốc Hà Nội - Hải Phòng', distanceKm: 10 }, seaport: { name: 'Cảng nước sâu Lạch Huyện', distanceKm: 20 } },
incentives: { taxHoliday: '4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 50% 7 năm', specialZone: true },
targetIndustries: ['petrochemicals', 'logistics', 'heavy industry', 'steel'],
existingTenants: [
{ name: 'VinFast', country: 'Vietnam', industry: 'automotive' },
{ name: 'Bridgestone', country: 'Japan', industry: 'automotive' },
],
certifications: ['ISO 14001'],
description: 'KCN Nam Đình Vũ có vị trí đắc địa ngay cạnh cảng nước sâu Hải Phòng, là lựa chọn hàng đầu cho ngành logistics và công nghiệp nặng.',
descriptionEn: 'Nam Dinh Vu IP has a prime location next to Hai Phong deep-water port, a top choice for logistics and heavy industry.',
},
{
id: 'seed-kcn-006',
name: 'KCN Long Hậu',
nameEn: 'Long Hau Industrial Park',
slug: 'long-hau',
developer: 'Long Hau Corporation',
operator: 'Long Hau Corporation',
status: IndustrialParkStatus.OPERATIONAL,
lat: 10.6108,
lng: 106.7173,
address: 'Xã Long Hậu, Huyện Cần Giuộc',
district: 'Cần Giuộc',
province: 'Long An',
region: VietnamRegion.SOUTH,
totalAreaHa: 311,
leasableAreaHa: 220,
occupancyRate: 85,
remainingAreaHa: 33,
tenantCount: 140,
establishedYear: 2006,
landRentUsdM2Year: 85,
rbfRentUsdM2Month: 4.5,
rbwRentUsdM2Month: 3.8,
managementFeeUsd: 0.5,
infrastructure: { electricity: '110kV/22kV', water: '8,000 m³/day', wastewater: '6,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Hiệp Phước', distanceKm: 5 }, airport: { name: 'Tân Sơn Nhất', distanceKm: 25 }, highway: { name: 'Nguyễn Hữu Thọ', distanceKm: 3 }, seaport: { name: 'Cảng Hiệp Phước', distanceKm: 5 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Thương lượng', specialZone: false },
targetIndustries: ['logistics', 'food processing', 'garment', 'packaging'],
existingTenants: [
{ name: 'DHL Supply Chain', country: 'Germany', industry: 'logistics' },
{ name: 'Yakult Vietnam', country: 'Japan', industry: 'food processing' },
],
certifications: ['ISO 14001'],
description: 'KCN Long Hậu nằm gần cảng Hiệp Phước và khu đô thị Phú Mỹ Hưng, thuận lợi cho logistics và sản xuất nhẹ.',
descriptionEn: 'Long Hau IP is near Hiep Phuoc port and Phu My Hung urban area, convenient for logistics and light manufacturing.',
},
{
id: 'seed-kcn-007',
name: 'KCN Tân Thuận (EPZ)',
nameEn: 'Tan Thuan Export Processing Zone',
slug: 'tan-thuan-epz',
developer: 'Tân Thuận Corporation',
operator: 'Tân Thuận IPC',
status: IndustrialParkStatus.FULL,
lat: 10.7357,
lng: 106.7203,
address: 'Đường Tân Thuận, Quận 7',
district: 'Quận 7',
province: 'TP. Hồ Chí Minh',
region: VietnamRegion.SOUTH,
totalAreaHa: 300,
leasableAreaHa: 210,
occupancyRate: 100,
remainingAreaHa: 0,
tenantCount: 200,
establishedYear: 1991,
landRentUsdM2Year: 130,
rbfRentUsdM2Month: 7.0,
rbwRentUsdM2Month: 6.0,
managementFeeUsd: 0.9,
infrastructure: { electricity: '110kV/22kV', water: '15,000 m³/day', wastewater: '10,000 m³/day', telecom: 'Fiber optic', roads: '6 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 15 }, airport: { name: 'Tân Sơn Nhất', distanceKm: 12 }, highway: { name: 'Nguyễn Văn Linh', distanceKm: 1 }, seaport: { name: 'Cảng SPCT', distanceKm: 8 } },
incentives: { taxHoliday: 'EPZ ưu đãi đặc biệt: 4 năm miễn', importDuty: 'Miễn thuế NK toàn bộ (EPZ)', landRentReduction: 'N/A (đã lấp đầy)', specialZone: true },
targetIndustries: ['electronics', 'precision engineering', 'software', 'export manufacturing'],
existingTenants: [
{ name: 'Nidec Vietnam', country: 'Japan', industry: 'electronics' },
{ name: 'Texas Instruments', country: 'USA', industry: 'semiconductors' },
],
certifications: ['ISO 14001', 'EPZ certification'],
description: 'KCN Tân Thuận là khu chế xuất đầu tiên của Việt Nam, nằm ngay trung tâm Quận 7 TP.HCM. Đã lấp đầy 100% với hơn 200 doanh nghiệp.',
descriptionEn: 'Tan Thuan is Vietnam\'s first export processing zone, located in District 7, HCMC. Fully occupied with over 200 enterprises.',
},
{
id: 'seed-kcn-008',
name: 'KCN Thăng Long',
nameEn: 'Thang Long Industrial Park',
slug: 'thang-long',
developer: 'Sumitomo Corporation',
operator: 'Thang Long IP Co.',
status: IndustrialParkStatus.FULL,
lat: 21.0468,
lng: 105.7619,
address: 'Xã Võng La, Huyện Đông Anh',
district: 'Đông Anh',
province: 'Hà Nội',
region: VietnamRegion.NORTH,
totalAreaHa: 274,
leasableAreaHa: 198,
occupancyRate: 100,
remainingAreaHa: 0,
tenantCount: 110,
establishedYear: 1997,
landRentUsdM2Year: 105,
rbfRentUsdM2Month: 6.0,
rbwRentUsdM2Month: 5.0,
managementFeeUsd: 0.75,
infrastructure: { electricity: '110kV/22kV', water: '12,000 m³/day', wastewater: '8,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Hải Phòng', distanceKm: 120 }, airport: { name: 'Nội Bài', distanceKm: 16 }, highway: { name: 'Nội Bài - Lào Cai', distanceKm: 5 }, railway: { name: 'Ga Đông Anh', distanceKm: 10 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'N/A (đã lấp đầy)', specialZone: false },
targetIndustries: ['electronics', 'automotive', 'precision mechanics', 'IT'],
existingTenants: [
{ name: 'Canon Vietnam', country: 'Japan', industry: 'electronics' },
{ name: 'Panasonic', country: 'Japan', industry: 'electronics' },
{ name: 'Toyota Boshoku', country: 'Japan', industry: 'automotive' },
],
certifications: ['ISO 14001', 'Japan quality standards'],
description: 'KCN Thăng Long do Sumitomo phát triển, là KCN tiêu chuẩn Nhật Bản đầu tiên tại Hà Nội. Tập trung các doanh nghiệp Nhật Bản hàng đầu.',
descriptionEn: 'Thang Long IP, developed by Sumitomo, is the first Japanese-standard industrial park in Hanoi. Home to leading Japanese enterprises.',
},
{
id: 'seed-kcn-009',
name: 'KCN KTG Industrial Nhơn Trạch',
nameEn: 'KTG Industrial Nhon Trach',
slug: 'ktg-nhon-trach',
developer: 'KTG Industrial',
operator: 'KTG Industrial',
status: IndustrialParkStatus.OPERATIONAL,
lat: 10.7412,
lng: 106.8978,
address: 'Xã Phước Thiền, Huyện Nhơn Trạch',
district: 'Nhơn Trạch',
province: 'Đồng Nai',
region: VietnamRegion.SOUTH,
totalAreaHa: 250,
leasableAreaHa: 180,
occupancyRate: 78,
remainingAreaHa: 40,
tenantCount: 65,
establishedYear: 2018,
landRentUsdM2Year: 80,
rbfRentUsdM2Month: 4.8,
rbwRentUsdM2Month: 4.0,
managementFeeUsd: 0.55,
infrastructure: { electricity: '110kV/22kV', water: '10,000 m³/day', wastewater: '8,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 20 }, airport: { name: 'Long Thành (đang xây)', distanceKm: 15 }, highway: { name: 'Cao tốc Long Thành - Dầu Giây', distanceKm: 5 }, seaport: { name: 'Cảng Phước An', distanceKm: 10 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 30% 3 năm đầu', specialZone: false },
targetIndustries: ['logistics', 'e-commerce fulfillment', 'light manufacturing', 'food processing'],
existingTenants: [
{ name: 'Lazada Logistics', country: 'Singapore', industry: 'e-commerce' },
],
certifications: ['ISO 14001'],
description: 'KCN KTG Nhơn Trạch chuyên về nhà xưởng xây sẵn và logistics, gần sân bay Long Thành đang xây dựng.',
descriptionEn: 'KTG Nhon Trach specializes in ready-built factories and logistics, near the under-construction Long Thanh airport.',
},
{
id: 'seed-kcn-010',
name: 'KCN Prodezi Nhơn Trạch',
nameEn: 'Prodezi Nhon Trach Industrial Park',
slug: 'prodezi-nhon-trach',
developer: 'Prodezi Vietnam',
operator: 'Prodezi Vietnam',
status: IndustrialParkStatus.OPERATIONAL,
lat: 10.7518,
lng: 106.8845,
address: 'Xã Hiệp Phước, Huyện Nhơn Trạch',
district: 'Nhơn Trạch',
province: 'Đồng Nai',
region: VietnamRegion.SOUTH,
totalAreaHa: 340,
leasableAreaHa: 245,
occupancyRate: 70,
remainingAreaHa: 73,
tenantCount: 55,
establishedYear: 2015,
landRentUsdM2Year: 72,
rbfRentUsdM2Month: 4.2,
rbwRentUsdM2Month: 3.5,
managementFeeUsd: 0.5,
infrastructure: { electricity: '110kV/22kV', water: '8,000 m³/day', wastewater: '6,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 25 }, airport: { name: 'Long Thành (đang xây)', distanceKm: 12 }, highway: { name: 'QL 51', distanceKm: 8 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 50% 3 năm đầu', specialZone: false },
targetIndustries: ['machinery', 'plastics', 'packaging', 'consumer goods'],
existingTenants: [
{ name: 'Tetra Pak', country: 'Sweden', industry: 'packaging' },
],
certifications: ['ISO 14001'],
description: 'KCN Prodezi Nhơn Trạch với giá thuê cạnh tranh và vị trí gần sân bay Long Thành, phù hợp cho sản xuất và logistics.',
descriptionEn: 'Prodezi Nhon Trach offers competitive rental prices near Long Thanh airport, suitable for manufacturing and logistics.',
},
{
id: 'seed-kcn-011',
name: 'KCN Thăng Long II Hưng Yên',
nameEn: 'Thang Long II Hung Yen Industrial Park',
slug: 'thang-long-2-hung-yen',
developer: 'Sumitomo Corporation',
operator: 'Thang Long IP Co.',
status: IndustrialParkStatus.OPERATIONAL,
lat: 20.8742,
lng: 106.0165,
address: 'Xã Dị Sử, Huyện Mỹ Hào',
district: 'Mỹ Hào',
province: 'Hưng Yên',
region: VietnamRegion.NORTH,
totalAreaHa: 345,
leasableAreaHa: 250,
occupancyRate: 82,
remainingAreaHa: 45,
tenantCount: 85,
establishedYear: 2004,
landRentUsdM2Year: 78,
rbfRentUsdM2Month: 4.5,
rbwRentUsdM2Month: 3.8,
managementFeeUsd: 0.6,
infrastructure: { electricity: '110kV/22kV', water: '15,000 m³/day', wastewater: '10,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Hải Phòng', distanceKm: 85 }, airport: { name: 'Nội Bài', distanceKm: 50 }, highway: { name: 'QL 5', distanceKm: 3 }, railway: { name: 'Ga Lạc Đạo', distanceKm: 5 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 30% 3 năm đầu', specialZone: false },
targetIndustries: ['electronics', 'automotive parts', 'precision engineering'],
existingTenants: [
{ name: 'Sumitomo Electric', country: 'Japan', industry: 'electronics' },
{ name: 'TOTO Vietnam', country: 'Japan', industry: 'ceramics' },
],
certifications: ['ISO 14001', 'Japan quality standards'],
description: 'KCN Thăng Long II là phần mở rộng của KCN Thăng Long tại Hưng Yên, tiếp tục thu hút các nhà đầu tư Nhật Bản.',
descriptionEn: 'Thang Long II is the expansion of Thang Long IP in Hung Yen, continuing to attract Japanese investors.',
},
{
id: 'seed-kcn-012',
name: 'KCN Yên Phong Bắc Ninh',
nameEn: 'Yen Phong Bac Ninh Industrial Park',
slug: 'yen-phong-bac-ninh',
developer: 'Viglacera Corporation',
operator: 'Viglacera',
status: IndustrialParkStatus.OPERATIONAL,
lat: 21.1652,
lng: 106.1184,
address: 'Xã Yên Trung, Huyện Yên Phong',
district: 'Yên Phong',
province: 'Bắc Ninh',
region: VietnamRegion.NORTH,
totalAreaHa: 658,
leasableAreaHa: 460,
occupancyRate: 95,
remainingAreaHa: 23,
tenantCount: 190,
establishedYear: 2008,
landRentUsdM2Year: 85,
rbfRentUsdM2Month: 5.0,
rbwRentUsdM2Month: 4.2,
managementFeeUsd: 0.6,
infrastructure: { electricity: '110kV/22kV', water: '18,000 m³/day', wastewater: '12,000 m³/day', telecom: 'Fiber optic', roads: '4-6 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Hải Phòng', distanceKm: 100 }, airport: { name: 'Nội Bài', distanceKm: 30 }, highway: { name: 'QL 18', distanceKm: 5 }, railway: { name: 'Ga Bắc Ninh', distanceKm: 12 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Thương lượng', specialZone: false },
targetIndustries: ['electronics', 'display manufacturing', 'semiconductors', 'automotive'],
existingTenants: [
{ name: 'Samsung Display', country: 'Korea', industry: 'display' },
{ name: 'Samsung SDI', country: 'Korea', industry: 'batteries' },
{ name: 'Hanwha', country: 'Korea', industry: 'defense/electronics' },
],
certifications: ['ISO 14001'],
description: 'KCN Yên Phong là hub sản xuất Samsung tại Việt Nam, gần lấp đầy với hàng loạt nhà cung cấp Hàn Quốc.',
descriptionEn: 'Yen Phong is Samsung\'s manufacturing hub in Vietnam, nearly full with numerous Korean suppliers.',
},
{
id: 'seed-kcn-013',
name: 'KCN Bà Rịa - Vũng Tàu (BRVT)',
nameEn: 'Ba Ria Vung Tau Industrial Park',
slug: 'ba-ria-vung-tau',
developer: 'Sonadezi',
operator: 'Sonadezi',
status: IndustrialParkStatus.OPERATIONAL,
lat: 10.4957,
lng: 107.1672,
address: 'Phường Long Hương, TP Bà Rịa',
district: 'TP Bà Rịa',
province: 'Bà Rịa - Vũng Tàu',
region: VietnamRegion.SOUTH,
totalAreaHa: 450,
leasableAreaHa: 320,
occupancyRate: 72,
remainingAreaHa: 90,
tenantCount: 80,
establishedYear: 2002,
landRentUsdM2Year: 65,
rbfRentUsdM2Month: 3.8,
rbwRentUsdM2Month: 3.2,
managementFeeUsd: 0.45,
infrastructure: { electricity: '220kV/110kV', water: '15,000 m³/day', wastewater: '10,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cái Mép - Thị Vải', distanceKm: 20 }, airport: { name: 'Long Thành (đang xây)', distanceKm: 50 }, highway: { name: 'Cao tốc Biên Hòa - Vũng Tàu', distanceKm: 5 }, seaport: { name: 'Cảng Cái Mép', distanceKm: 20 } },
incentives: { taxHoliday: '4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 50% 5 năm đầu', specialZone: true },
targetIndustries: ['oil & gas', 'petrochemicals', 'heavy industry', 'steel', 'logistics'],
existingTenants: [
{ name: 'Posco Vietnam', country: 'Korea', industry: 'steel' },
{ name: 'Hyosung', country: 'Korea', industry: 'chemicals' },
],
certifications: ['ISO 14001'],
description: 'KCN Bà Rịa - Vũng Tàu gần cảng nước sâu Cái Mép - Thị Vải, phù hợp cho công nghiệp nặng và logistics biển.',
descriptionEn: 'BRVT IP is near Cai Mep deep-water port, suitable for heavy industry and maritime logistics.',
},
{
id: 'seed-kcn-014',
name: 'KCN Becamex Bình Phước',
nameEn: 'Becamex Binh Phuoc Industrial Park',
slug: 'becamex-binh-phuoc',
developer: 'Becamex IDC',
operator: 'Becamex IDC',
status: IndustrialParkStatus.UNDER_CONSTRUCTION,
lat: 11.4521,
lng: 106.6438,
address: 'Xã Minh Thành, Huyện Chơn Thành',
district: 'Chơn Thành',
province: 'Bình Phước',
region: VietnamRegion.SOUTH,
totalAreaHa: 4686,
leasableAreaHa: 3200,
occupancyRate: 25,
remainingAreaHa: 2400,
tenantCount: 30,
establishedYear: 2021,
landRentUsdM2Year: 50,
rbfRentUsdM2Month: 3.5,
rbwRentUsdM2Month: 3.0,
managementFeeUsd: 0.4,
infrastructure: { electricity: '110kV/22kV (đang nâng cấp 220kV)', water: '20,000 m³/day', wastewater: '15,000 m³/day', telecom: 'Fiber optic', roads: '6 lanes (đang xây)', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 85 }, airport: { name: 'Tân Sơn Nhất', distanceKm: 80 }, highway: { name: 'QL 13 + cao tốc TP.HCM - Chơn Thành', distanceKm: 3 } },
incentives: { taxHoliday: '4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 70% 7 năm đầu', specialZone: true },
targetIndustries: ['agriculture processing', 'rubber', 'wood processing', 'light manufacturing'],
existingTenants: [],
certifications: [],
description: 'KCN Becamex Bình Phước là KCN lớn nhất Việt Nam (4.686 ha), giá thuê thấp nhất khu vực, thích hợp cho ngành chế biến nông sản.',
descriptionEn: 'Becamex Binh Phuoc is Vietnam\'s largest industrial park (4,686 ha), with the lowest rental prices, suitable for agro-processing.',
},
{
id: 'seed-kcn-015',
name: 'KCN Đại An Hải Dương',
nameEn: 'Dai An Hai Duong Industrial Park',
slug: 'dai-an-hai-duong',
developer: 'Đại An JSC',
operator: 'Đại An JSC',
status: IndustrialParkStatus.OPERATIONAL,
lat: 20.9178,
lng: 106.3215,
address: 'Xã Đại An, TP Hải Dương',
district: 'TP Hải Dương',
province: 'Hải Dương',
region: VietnamRegion.NORTH,
totalAreaHa: 174,
leasableAreaHa: 130,
occupancyRate: 90,
remainingAreaHa: 13,
tenantCount: 70,
establishedYear: 2003,
landRentUsdM2Year: 70,
rbfRentUsdM2Month: 4.2,
rbwRentUsdM2Month: 3.5,
managementFeeUsd: 0.5,
infrastructure: { electricity: '110kV/22kV', water: '8,000 m³/day', wastewater: '5,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Hải Phòng', distanceKm: 50 }, airport: { name: 'Nội Bài', distanceKm: 60 }, highway: { name: 'QL 5', distanceKm: 2 }, railway: { name: 'Ga Hải Dương', distanceKm: 5 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Thương lượng', specialZone: false },
targetIndustries: ['garment', 'food processing', 'mechanics', 'electronics assembly'],
existingTenants: [
{ name: 'Ford Vietnam (parts)', country: 'USA', industry: 'automotive' },
],
certifications: ['ISO 14001'],
description: 'KCN Đại An nằm trên trục QL 5 Hà Nội - Hải Phòng, gần lấp đầy, phù hợp cho sản xuất và gia công.',
descriptionEn: 'Dai An IP is on the Hanoi-Hai Phong highway corridor, nearly full, suitable for manufacturing and processing.',
},
{
id: 'seed-kcn-016',
name: 'KCN DEEP C Hải Phòng',
nameEn: 'DEEP C Hai Phong Industrial Zones',
slug: 'deep-c-hai-phong',
developer: 'DEEP C (Belgium)',
operator: 'DEEP C Industrial Zones',
status: IndustrialParkStatus.OPERATIONAL,
lat: 20.8312,
lng: 106.7198,
address: 'Phường Đông Hải, Quận Hải An',
district: 'Hải An',
province: 'Hải Phòng',
region: VietnamRegion.NORTH,
totalAreaHa: 3000,
leasableAreaHa: 2100,
occupancyRate: 68,
remainingAreaHa: 672,
tenantCount: 150,
establishedYear: 1997,
landRentUsdM2Year: 75,
rbfRentUsdM2Month: 4.5,
rbwRentUsdM2Month: 3.8,
managementFeeUsd: 0.6,
infrastructure: { electricity: '220kV/110kV', water: '30,000 m³/day', wastewater: '20,000 m³/day', telecom: 'Fiber optic', roads: '6 lanes', fire: 'Full system + emergency center' },
connectivity: { nearestPort: { name: 'Cảng Đình Vũ', distanceKm: 5 }, airport: { name: 'Cát Bi', distanceKm: 12 }, highway: { name: 'Cao tốc Hà Nội - Hải Phòng', distanceKm: 8 }, seaport: { name: 'Cảng Lạch Huyện', distanceKm: 15 } },
incentives: { taxHoliday: '4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 50% 5 năm', specialZone: true },
targetIndustries: ['petrochemicals', 'LNG', 'electronics', 'logistics', 'renewable energy'],
existingTenants: [
{ name: 'LG Display', country: 'Korea', industry: 'display' },
{ name: 'Pegatron', country: 'Taiwan', industry: 'electronics' },
],
certifications: ['ISO 14001', 'EDGE Green Building', 'Belgian quality standards'],
description: 'DEEP C là cụm KCN lớn nhất Hải Phòng do Bỉ phát triển, với cam kết phát triển bền vững và năng lượng tái tạo.',
descriptionEn: 'DEEP C is Hai Phong\'s largest industrial zone cluster, developed by Belgium, with commitment to sustainability and renewable energy.',
},
{
id: 'seed-kcn-017',
name: 'KCN Mỹ Phước 3 Bình Dương',
nameEn: 'My Phuoc 3 Binh Duong Industrial Park',
slug: 'my-phuoc-3-binh-duong',
developer: 'Becamex IDC',
operator: 'Becamex IDC',
status: IndustrialParkStatus.OPERATIONAL,
lat: 11.1245,
lng: 106.5867,
address: 'Phường Mỹ Phước, TP Bến Cát',
district: 'Bến Cát',
province: 'Bình Dương',
region: VietnamRegion.SOUTH,
totalAreaHa: 992,
leasableAreaHa: 700,
occupancyRate: 87,
remainingAreaHa: 91,
tenantCount: 210,
establishedYear: 2006,
landRentUsdM2Year: 82,
rbfRentUsdM2Month: 4.8,
rbwRentUsdM2Month: 4.0,
managementFeeUsd: 0.55,
infrastructure: { electricity: '110kV/22kV', water: '25,000 m³/day', wastewater: '18,000 m³/day', telecom: 'Fiber optic', roads: '6 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cát Lái', distanceKm: 40 }, airport: { name: 'Tân Sơn Nhất', distanceKm: 35 }, highway: { name: 'Mỹ Phước - Tân Vạn', distanceKm: 1 } },
incentives: { taxHoliday: '2 năm miễn, 4 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 30% 3 năm', specialZone: false },
targetIndustries: ['furniture', 'garment', 'food processing', 'electronics assembly', 'plastics'],
existingTenants: [
{ name: 'Colgate-Palmolive', country: 'USA', industry: 'consumer goods' },
{ name: 'Kumho Tire', country: 'Korea', industry: 'automotive' },
],
certifications: ['ISO 14001'],
description: 'KCN Mỹ Phước 3 thuộc chuỗi KCN Becamex tại Bến Cát, là trung tâm sản xuất đa ngành lớn nhất Bình Dương.',
descriptionEn: 'My Phuoc 3 is part of Becamex\'s industrial park chain in Ben Cat, the largest multi-industry manufacturing hub in Binh Duong.',
},
{
id: 'seed-kcn-018',
name: 'KCN Phú Mỹ 2 BRVT',
nameEn: 'Phu My 2 Industrial Park',
slug: 'phu-my-2-brvt',
developer: 'Idico-Conac',
operator: 'Idico-Conac',
status: IndustrialParkStatus.OPERATIONAL,
lat: 10.5378,
lng: 107.0412,
address: 'Xã Mỹ Xuân, TX Phú Mỹ',
district: 'TX Phú Mỹ',
province: 'Bà Rịa - Vũng Tàu',
region: VietnamRegion.SOUTH,
totalAreaHa: 380,
leasableAreaHa: 270,
occupancyRate: 65,
remainingAreaHa: 94,
tenantCount: 45,
establishedYear: 2007,
landRentUsdM2Year: 55,
rbfRentUsdM2Month: 3.5,
rbwRentUsdM2Month: 3.0,
managementFeeUsd: 0.4,
infrastructure: { electricity: '220kV/110kV', water: '12,000 m³/day', wastewater: '8,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Cái Mép - Thị Vải', distanceKm: 10 }, airport: { name: 'Long Thành (đang xây)', distanceKm: 40 }, highway: { name: 'QL 51', distanceKm: 3 }, seaport: { name: 'Cảng Cái Mép', distanceKm: 10 } },
incentives: { taxHoliday: '4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 50% 5 năm đầu', specialZone: true },
targetIndustries: ['petrochemicals', 'steel', 'power generation', 'port logistics'],
existingTenants: [
{ name: 'SCG Vietnam', country: 'Thailand', industry: 'chemicals' },
],
certifications: ['ISO 14001'],
description: 'KCN Phú Mỹ 2 gần cảng nước sâu Cái Mép, giá thuê thấp, phù hợp cho công nghiệp nặng và hóa chất.',
descriptionEn: 'Phu My 2 IP is near Cai Mep deep-water port, low rental prices, suitable for heavy industry and chemicals.',
},
{
id: 'seed-kcn-019',
name: 'KCN WHA Nghệ An',
nameEn: 'WHA Industrial Zone Nghe An',
slug: 'wha-nghe-an',
developer: 'WHA Group (Thailand)',
operator: 'WHA Industrial Development',
status: IndustrialParkStatus.UNDER_CONSTRUCTION,
lat: 18.7485,
lng: 105.7345,
address: 'Xã Nghi Long, Huyện Nghi Lộc',
district: 'Nghi Lộc',
province: 'Nghệ An',
region: VietnamRegion.CENTRAL,
totalAreaHa: 498,
leasableAreaHa: 350,
occupancyRate: 15,
remainingAreaHa: 297,
tenantCount: 8,
establishedYear: 2022,
landRentUsdM2Year: 45,
rbfRentUsdM2Month: 3.0,
rbwRentUsdM2Month: 2.5,
managementFeeUsd: 0.35,
infrastructure: { electricity: '110kV/22kV (đang xây)', water: '8,000 m³/day (phase 1)', wastewater: '5,000 m³/day', telecom: 'Fiber optic', roads: '4 lanes', fire: 'Full system (đang xây)' },
connectivity: { nearestPort: { name: 'Cảng Cửa Lò', distanceKm: 15 }, airport: { name: 'Vinh', distanceKm: 20 }, highway: { name: 'QL 1A', distanceKm: 5 } },
incentives: { taxHoliday: '4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK thiết bị', landRentReduction: 'Giảm 70% 10 năm đầu', specialZone: true },
targetIndustries: ['electronics assembly', 'garment', 'food processing', 'rubber'],
existingTenants: [],
certifications: [],
description: 'KCN WHA Nghệ An do Thái Lan phát triển, giá thuê thấp nhất miền Trung với nhiều ưu đãi đặc biệt cho nhà đầu tư.',
descriptionEn: 'WHA Nghe An, developed by Thailand\'s WHA Group, offers the lowest rental prices in Central Vietnam with special investor incentives.',
},
{
id: 'seed-kcn-020',
name: 'KCN Chu Lai Quảng Nam',
nameEn: 'Chu Lai Open Economic Zone',
slug: 'chu-lai-quang-nam',
developer: 'Trường Hải Auto (THACO)',
operator: 'THACO Chu Lai',
status: IndustrialParkStatus.OPERATIONAL,
lat: 15.4132,
lng: 108.6421,
address: 'Xã Tam Hiệp, Huyện Núi Thành',
district: 'Núi Thành',
province: 'Quảng Nam',
region: VietnamRegion.CENTRAL,
totalAreaHa: 1550,
leasableAreaHa: 1100,
occupancyRate: 55,
remainingAreaHa: 495,
tenantCount: 60,
establishedYear: 2003,
landRentUsdM2Year: 40,
rbfRentUsdM2Month: 2.8,
rbwRentUsdM2Month: 2.2,
managementFeeUsd: 0.35,
infrastructure: { electricity: '110kV/22kV', water: '15,000 m³/day', wastewater: '10,000 m³/day', telecom: 'Fiber optic', roads: '4-6 lanes', fire: 'Full system' },
connectivity: { nearestPort: { name: 'Cảng Kỳ Hà', distanceKm: 5 }, airport: { name: 'Chu Lai', distanceKm: 8 }, highway: { name: 'QL 1A', distanceKm: 3 }, seaport: { name: 'Cảng Kỳ Hà', distanceKm: 5 } },
incentives: { taxHoliday: 'KKTM đặc biệt: 4 năm miễn, 9 năm giảm 50%', importDuty: 'Miễn thuế NK toàn bộ (KKTM)', landRentReduction: 'Miễn tiền thuê đất 15 năm', specialZone: true },
targetIndustries: ['automotive', 'agriculture machinery', 'wood processing', 'seafood processing'],
existingTenants: [
{ name: 'THACO (Kia, Mazda, Peugeot)', country: 'Vietnam', industry: 'automotive' },
{ name: 'THACO Industries', country: 'Vietnam', industry: 'machinery' },
],
certifications: ['ISO 14001', 'Special Economic Zone'],
description: 'KCN Chu Lai thuộc Khu kinh tế mở Chu Lai, do THACO phát triển chủ đạo. Là hub ô tô lớn nhất Việt Nam.',
descriptionEn: 'Chu Lai IP is in Chu Lai Open Economic Zone, primarily developed by THACO. Vietnam\'s largest automotive hub.',
},
];
export async function seedIndustrialParks() {
console.log('🏭 Seeding industrial parks...');
for (const p of PARKS) {
await prisma.$executeRawUnsafe(
`INSERT INTO "IndustrialPark" (
id, name, "nameEn", slug, developer, operator, status, location,
address, district, province, region, "totalAreaHa", "leasableAreaHa",
"occupancyRate", "remainingAreaHa", "tenantCount", "establishedYear",
"landRentUsdM2Year", "rbfRentUsdM2Month", "rbwRentUsdM2Month",
"managementFeeUsd", infrastructure, connectivity, incentives,
"targetIndustries", "existingTenants", certifications, media, documents,
description, "descriptionEn", "isVerified", "createdAt", "updatedAt"
) VALUES (
$1, $2, $3, $4, $5, $6, $7::"IndustrialParkStatus",
ST_SetSRID(ST_MakePoint($8, $9), 4326),
$10, $11, $12, $13::"VietnamRegion", $14, $15, $16, $17, $18, $19,
$20, $21, $22, $23, $24::jsonb, $25::jsonb, $26::jsonb,
$27::text[], $28::jsonb, $29::jsonb, NULL, NULL,
$30, $31, true, NOW(), NOW()
)
ON CONFLICT (slug) DO UPDATE SET
name = EXCLUDED.name,
"nameEn" = EXCLUDED."nameEn",
developer = EXCLUDED.developer,
operator = EXCLUDED.operator,
status = EXCLUDED.status,
"occupancyRate" = EXCLUDED."occupancyRate",
"remainingAreaHa" = EXCLUDED."remainingAreaHa",
"tenantCount" = EXCLUDED."tenantCount",
"landRentUsdM2Year" = EXCLUDED."landRentUsdM2Year",
"rbfRentUsdM2Month" = EXCLUDED."rbfRentUsdM2Month",
"rbwRentUsdM2Month" = EXCLUDED."rbwRentUsdM2Month",
"updatedAt" = NOW()`,
p.id,
p.name,
p.nameEn,
p.slug,
p.developer,
p.operator,
p.status,
p.lng, // ST_MakePoint(lng, lat)
p.lat,
p.address,
p.district,
p.province,
p.region,
p.totalAreaHa,
p.leasableAreaHa,
p.occupancyRate,
p.remainingAreaHa,
p.tenantCount,
p.establishedYear,
p.landRentUsdM2Year,
p.rbfRentUsdM2Month,
p.rbwRentUsdM2Month,
p.managementFeeUsd,
JSON.stringify(p.infrastructure),
JSON.stringify(p.connectivity),
JSON.stringify(p.incentives),
p.targetIndustries,
JSON.stringify(p.existingTenants),
JSON.stringify(p.certifications),
p.description,
p.descriptionEn,
);
console.log(`${p.name}`);
}
console.log(`🏭 Seeded ${PARKS.length} industrial parks.`);
}
// Run standalone — but ONLY when invoked directly (`tsx scripts/...`).
// When imported by `prisma/seed.ts`, the orchestrator owns the lifecycle
// and we must not end this module's pool prematurely.
async function main() {
try {
await seedIndustrialParks();
} catch (err) {
console.error('Seed error:', err);
process.exit(1);
} finally {
await prisma.$disconnect();
await pool.end();
}
}
if (require.main === module) {
void main();
}