What the interchange updater does
This application rebuilds URG’s interchange list — the table that powers part-request
resolution — by combining Hollander’s interchange data with URG member-yard data and mapping it onto the
ACES/AAIA vehicle catalog. Hollander periodically ships an interchange update (a full SQL Server
.bak); the pipeline below ingests it, parses it, enriches it, and rebuilds the
hollander_ic_urgpro schema. Once validated, that schema is promoted to production
(hollander_ic).
The heavy lifting lives in two PostgreSQL functions — split_hollander_app() (parses the
free-text application) and get_aaia_position() (derives the part position) — orchestrated by
the Laravel commands shown for each stage.
Current build output — hollander_ic_urgpro (live row estimates)
urg_interchangelistcarline_w_makeids2holinterchangelist_distThe pipeline
-
1
Sync base data MSSQL ENTERPRISE → Postgres
Pulls the 10 Hollander base tables from the MSSQL ENTERPRISE database (the interchange version Hollander ships as a .bak) into Postgres: interchangelist, indexlist, indexlistapp, interchangenote, carline, manufacturer, ptype, ids2hol, remarks, version.
php artisan hollander:sync-from-mssql -
2
Carline & make carline → carline_w_make
Builds carline_w_make and assigns each vehicle its brand through 435 manufacturer rules (ported from set_makes.sh) — GM/Chrysler year-splits, the Dodge→Ram rebrand, idxmodel disambiguation — then carries forward each carline’s hol_id.
php artisan hollander:build --phase=2 -
3
Build the interchange list interchangelist → urg_interchangelist (~9M rows)
The core step. Parses every free-text application string via the split_hollander_app() database function → model, year range, engine, VIN-digit filters and left/right; joins carline for make and indexlistapp for the L/R interchange number; sets the AAIA position via get_aaia_position(); appends synthetic “NON-INTERCHANGE” one-to-one rows (every part type × carline) so parts with no interchange still resolve to a vehicle; and explodes VIN-digit ranges into discrete rows.
php artisan interchange:update -
4
OEM cross-reference Interchange.Int_Pline → ids2hol
Rebuilds ids2hol (OEM part number → interchange) from the Interchange database’s Int_Pline table — classifying left/right from the part description and resolving each OEM number to the real L/R interchange via the freshly-built list.
php artisan interchange:build-ids2hol -
5
Derived lookups urg_interchangelist → interchangelist_dist
Builds the distinct interchange / left-right / part-type lookup table and the other derived tables used for fast resolution.
php artisan hollander:build --phase=4 -
6
Validate hollander_ic_urgpro vs hollander_ic
Read-only comparison of the freshly-built schema against the golden production schema — row counts, distinct interchange numbers and part types, and parsed-field coverage — so a build can be checked before going live.
php artisan interchange:validate -
7
Publish (gated) hollander_ic_urgpro → hollander_ic
Reversible production cutover: renames the current production schema to a timestamped backup and promotes the freshly-built schema in its place. Dry-run by default; requires an explicit confirmation and passes a row-count sanity check first.
php artisan interchange:publish --confirm=PROMOTE
Data sources & table inventory
MSSQL Hollander Connected
| Schema | Table | Rows (approx) |
|---|---|---|
| dbo | h-Carline | 22,454 |
| dbo | h-Hollander_Interchange_Version | 1 |
| dbo | h-IDS2HOL | 527,174 |
| dbo | h-IndexList | 1,700,027 |
| dbo | h-IndexListApp | 8,016,472 |
| dbo | h-InterchangeList | 2,024,812 |
| dbo | h-InterchangeNote | 2,989,140 |
| dbo | h-Manufacturer | 104 |
| dbo | h-PType | 423 |
| dbo | h-REMARKS | 1,795 |
PostgreSQL hollander_ic
OK
| Name | Source | Rows (est.) |
|---|---|---|
| urg-app_w_airbag | urg-table | 20,640 |
| h-carline | h-table | 21,726 |
| urg-carline_dist | urg-table | 21,726 |
| urg-carline_w_make | urg-table | 32 |
| urg-carline_w_make_dist | urg-table | 1,344 |
| urg-carline_w_make_ic | urg-table | 22,018 |
| urg-carline_w_make_powerlink | urg-table | 0 |
| urg-carline_w_make_urg | urg-table | 0 |
| urg-carlineidxdist | urg-table | 0 |
| h-hollander_interchange_version | h-table | 1 |
| urg-ic_numbers | urg-table | 731,530 |
| h-ids2hol | h-table | 1,613,278 |
| urg-ids2hol_array | urg-table | 747,938 |
| urg-ids2hol_array_org | urg-table | 264,791 |
| urg-ids2hol_org | urg-table | 513,492 |
| urg-ids2hol_pt | urg-table | 10,707 |
| h-indexlist | h-table | 1,657,508 |
| h-indexlistapp | h-table | 7,804,428 |
| h-interchangelist | h-table | 1,981,170 |
| urg-interchangelist_dist | urg-table | 7,971,116 |
| h-interchangenote | h-table | 2,902,500 |
| h-manufacturer | h-table | 103 |
| urg-oem_mapping_requests | urg-table | 12 |
| urg-oem_match_queue | urg-table | 191,718 |
| urg-oem_uploads | urg-table | 9 |
| urg-pin_pro_ic | urg-table | 2,110,255 |
| urg-pline_pl | urg-table | 1,609,731 |
| h-ptype | h-table | 429 |
| urg-ptype_salessupport | urg-table | 423 |
| h-remarks | h-table | 2,762 |
| urg-retired_part_numbers | urg-table | 0 |
| urg-urg_interchangelist | urg-table | 9,398,390 |
| urg-ptype_view | urg-view | — |
PostgreSQL hollander_ic_urgpro
OK
| Name | Source | Rows (est.) |
|---|---|---|
| urg-app_w_airbag | urg-table | 20,952 |
| h-carline | h-table | 22,462 |
| urg-carline_dist | urg-table | 22,462 |
| urg-carline_w_make | urg-table | 22,462 |
| urg-carline_w_make_dist | urg-table | 1,358 |
| urg-carline_w_make_ic | urg-table | 22,462 |
| urg-carline_w_make_powerlink | urg-table | 22,462 |
| urg-carline_w_make_urg | urg-table | 22,462 |
| urg-carlineidxdist | urg-table | 2,154 |
| h-hollander_interchange_version | h-table | 1 |
| urg-hollander_numbers | urg-table | 8,209,005 |
| urg-hollander_numbers_retire_candidates | urg-table | 464,429 |
| urg-ic_numbers | urg-table | 755,137 |
| h-ids2hol | h-table | 1,620,347 |
| urg-ids2hol_array | urg-table | 751,914 |
| h-indexlist | h-table | 1,709,127 |
| h-indexlistapp | h-table | 8,067,388 |
| h-interchangelist | h-table | 2,037,758 |
| urg-interchangelist_dist | urg-table | 7,744,136 |
| h-interchangenote | h-table | 3,000,821 |
| h-manufacturer | h-table | 104 |
| urg-oem_mapping_requests | urg-table | 0 |
| urg-oem_match_queue | urg-table | 0 |
| urg-oem_uploads | urg-table | 0 |
| urg-pin_pro_ic | urg-table | 0 |
| urg-pline | urg-table | 1,621,015 |
| urg-pline_array | urg-table | 751,914 |
| urg-pline_pl | urg-table | 1,616,799 |
| urg-plinetemp | urg-table | 1,616,679 |
| h-ptype | h-table | 423 |
| urg-ptype_salessupport | urg-table | 0 |
| h-remarks | h-table | 1,820 |
| urg-retired_part_numbers | urg-table | 0 |
| urg-tmp_vin_5th | urg-table | 2,612 |
| urg-tmp_vin_6and7th | urg-table | 0 |
| urg-tmp_vin_7th | urg-table | 29 |
| urg-tmp_vin_8th | urg-table | 7 |
| urg-urg_interchangelist | urg-table | 9,094,686 |
| urg-urg_interchangelist_holid | urg-table | 6,953,944 |
| urg-urg_interchangelist_tmp1 | urg-table | 2,044,534 |
| urg-urg_interchangelist_tmp2 | urg-table | 2,089,739 |
| urg-ptype_view | urg-view | — |