Skip to content

Product Vendor Mapping

First-Pass Node Dossier

This page is an evidence-backed node dossier generated from the domain hierarchy and node questionnaire.

What It Is

ProductVendorMapping is the validated link between a staged vendor catalog item and a canonical product. It stores review state plus price and inventory multipliers, and it is the main control point that turns vendor-side supply into canonical inventory rows.

Parent hierarchy:

  • Inventory & Vendor Supply
  • Vendor-To-Product Mapping And Review
  • Product Vendor Mapping

Primary implementation paths:

  • packages/framework/src/Models/ProductVendorMapping.php
  • packages/framework/src/Actions/ProductVendorMapping
  • packages/admin/src/Livewire/Admin/Vendor/Mappings
  • packages/admin/src/Livewire/Admin/Vendor/CatalogItems/Mappings
  • packages/framework/src/Exports/ProductVendorMapping/BulkEditor
  • packages/framework/src/Imports/ProductVendorMapping/BulkEditor

What Users Can Do With It

Direct capabilities

Admin operators can:

  • create a mapping from a vendor catalog item to a canonical product
  • edit mapping multipliers and source status
  • delete a mapping
  • mark a mapping reviewed or unreviewed
  • sync canonical inventory from a mapping
  • bulk update, review, calculate, sync, or delete mappings through Excel
  • review mappings in a dedicated vendor mappings page

Indirect capabilities

Other workflows also create or change mappings:

  • accepting a successful mapping attempt creates a mapping with default multipliers
  • legacy vendor-item migration can backfill mapping ownership
  • staged vendor inventory changes can force projected-multiplier recalculation or resync pressure

Things users cannot do directly

This first pass did not find a generic admin API controller for ProductVendorMapping. The packaged management surface is admin workflow plus Excel tooling, not generic REST CRUD.

Where It Is Managed

ChannelRoleNotes
Vendor > MappingsDirectDedicated packaged mappings page with review state and filters
Vendor catalog-item mapping dialogsParent-ownedDirect create and edit dialogs for one catalog item
Excel import/exportDirectFirst-class bulk editor workflow
Mapping attemptsIndirectAccepting an attempt creates a mapping
StorefrontIndirectCustomers only feel the downstream effects

Sources:

  • packages/admin/routes/web.php
  • packages/admin/src/Livewire/Admin/Vendor/Mappings/Page.php
  • packages/admin/src/Livewire/Admin/Vendor/Mappings/DataTable.php
  • packages/admin/src/Livewire/Admin/Vendor/CatalogItems/Mappings/Form.php
  • packages/admin/src/Livewire/Admin/Tools/Excel/ExportDialog/ProductVendorMappingsExport.php
  • packages/admin/src/Livewire/Admin/Tools/Excel/ImportDialog/ProductVendorMappingsImport.php

Channel-Level Field Coverage

Catalog-item mapping dialogs

The inspected create and edit form exposes:

  • product_sku
  • inventory_multiplier
  • price_multiplier
  • is_source

Source:

  • packages/admin/src/Livewire/Admin/Vendor/CatalogItems/Mappings/Form.php

Dedicated mappings page

The main mappings page is review-oriented. It exposes filtering and row actions around:

  • work status
  • manufacturer filters
  • search
  • review state
  • projected cost and stock
  • sync and delete actions

Sources:

  • packages/admin/src/Livewire/Admin/Vendor/Mappings/DataTable.php
  • packages/admin/src/Livewire/Admin/Vendor/Mappings/DataTable/ActionsMenu.php

Excel bulk editor

The exported workbook contains:

  • product_vendor_mappings
  • catalog_items_without_mapping

The main mapping sheet exposes editable action columns around:

  • mapping_id
  • price_multiplier
  • inventory_multiplier
  • is_source

and supports import actions:

  • delete
  • update
  • review
  • unreview
  • calculate
  • sync

The unmapped-items sheet is the create path. It expects:

  • action=create
  • vendor_item_id
  • product_manufacturer_code
  • product_sku
  • optional price_multiplier, inventory_multiplier, and is_source

Workbook behavior that matters operationally:

  • the export pre-fills price_multiplier and inventory_multiplier as 1
  • the import path also defaults blank multipliers to 1 on the create sheet
  • the update sheet requires mapping_id and only requires multipliers when action=update

Sources:

  • packages/framework/src/Exports/ProductVendorMapping/BulkEditor/ProductVendorMappingsExport.php
  • packages/framework/src/Exports/ProductVendorMapping/BulkEditor/Sheets/ProductVendorMappingsSheet.php
  • packages/framework/src/Exports/ProductVendorMapping/BulkEditor/Sheets/CatalogItemsWithoutMappingSheet.php
  • packages/framework/src/Imports/ProductVendorMapping/BulkEditor/ProductVendorMappingsImport.php
  • packages/framework/src/Imports/ProductVendorMapping/BulkEditor/Sheets/ProductVendorMappingsSheet.php

Model fields that are system-managed

The model also stores operational fields that the create/edit form does not ask the user to type directly:

  • product_vendor_catalog_item_id
  • product_id
  • product_vendor_id
  • vendor_item_code
  • projected_price_multiplier
  • projected_inventory_multiplier
  • flagged_for_review_reason
  • flagged_for_review_at
  • reviewed_at

Source:

  • packages/framework/src/Models/ProductVendorMapping.php

Configuration And Data Model

Key model characteristics:

  • soft-deletable
  • generated UUIDs
  • review and validity state derived from flags
  • projected multipliers calculated from staged vendor and product data
  • delete event dispatches cleanup

Important states:

StateMeaning
is_valideither never flagged or already reviewed
is_invalidflagged and still unreviewed
is_to_be_reviewedinvalid and awaiting review
statusexposed as valid, reviewed, or invalid

Sources:

  • packages/framework/src/Models/ProductVendorMapping.php

Relationships

ProductVendorMapping directly relates to:

  • product()
  • productVendor()
  • productVendorCatalogItem()
  • productInventoryItems()
  • mappingAttempts()
  • latestMappingAttempt()

Practical owner:

  • the mapping belongs operationally to the staged vendor catalog item, not to the canonical product alone

Sources:

  • packages/framework/src/Models/ProductVendorMapping.php

Rules And Downstream Effects

Create and update behavior

When a mapping is created:

  • product_vendor_id and vendor_item_code are auto-populated from the staged catalog item
  • projected multipliers are calculated immediately
  • if the mapping is valid and staged vendor inventory exists, canonical inventory sync runs automatically from the model lifecycle

When a mapping is updated:

  • multiplier changes recalculate projected multipliers
  • valid multiplier changes can mark the mapping reviewed
  • valid reviewed changes can resync canonical inventory from the model lifecycle

Sources:

  • packages/framework/src/Models/ProductVendorMapping.php
  • packages/framework/src/Actions/ProductVendorMapping/UpdateOrCreateProductVendorMapping.php

Source-mapping rule

Only one source mapping is allowed per canonical product. Setting is_source on one mapping clears it from the others for the same product.

Source:

  • packages/framework/src/Actions/ProductVendorMapping/UpdateOrCreateProductVendorMapping.php

Delete behavior

Deleting a mapping deletes related canonical inventory rows before soft-deleting the mapping itself.

Sources:

  • packages/framework/src/Actions/ProductVendorMapping/DeleteProductVendorMapping.php
  • packages/framework/src/Listeners/ProductVendorMapping/DeleteProductVendorMappingRelationships.php

Integrations And Automation

Canonical inventory sync

This node is the main bridge between staged vendor supply and canonical inventory.

Source:

  • packages/framework/src/Actions/ProductVendorMapping/SyncInventoryItems.php

Excel

ProductVendorMapping has first-class Excel bulk-management support.

Sources:

  • packages/framework/src/Exports/ProductVendorMapping/BulkEditor
  • packages/framework/src/Imports/ProductVendorMapping/BulkEditor

Mapping attempts

Successful accepted mapping attempts create mappings with default multipliers.

Source:

  • packages/framework/src/Actions/ProductMappingAttempt/AcceptMappingAttempt.php

Where It Appears To End Users

ProductVendorMapping is not a shopper-facing concept.

Its practical effect is indirect:

  • canonical inventory appears or changes
  • stock levels change
  • downstream sellable supply can appear or disappear

Current Documentation Takeaways

  1. ProductVendorMapping is the control plane record that turns staged vendor supply into canonical inventory.
  2. The packaged product treats it as a first-class workflow even without a generic CRUD API.
  3. Multipliers, review state, and source ownership all have automatic downstream effects.

Open Questions

  • ProductVendorItem still exists as a legacy model over the product_vendor_mappings table, so some older naming remains under the surface.
  • Some row-level mapping UI details live in blade templates that were not opened in this pass, but the main Livewire actions and bulk-tooling contracts were verified.