Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Planning for Provi

This document was build to plan for the integration of Provi into WISK. It’s for a possible deep integration between the two companies

Table of content

  • WISK Simplified data architecture
  • Provi XLS data architecture (reverse engineered)
  • A possible data structure for the WISK/Provi integration
  • Use cases
    • Venues imported from Provi
    • Matching based on the WISK Distributors
    • Barcode scanning from the mobile app
  • Venue in Wisk is a Retailer in Provi

WISK Simplified data architecture

classDiagram
Organization *-- Venue
Venue *-- Item
Venue *-- Invoices
Invoices *-- InvoiceLines
Venue *-- PurchaseOrders
PurchaseOrders *-- PurchaseOrdersLines
Item *-- Item_Variation
Item_Variation *-- Distributor
Venue *-- Country
Venue *-- Distributor
Venue *-- State
Distributor *-- WISKDistributor

class Organization {
    id: int
    name: string
}
class Venue{
    id: int
    organization_id: int
    name: String
    country: Country
    state: State
}
class Country {
    id: int
    name: String
}
class State {
    id: int
    name: String
    country_id: int
}
class Item{
    id: int
    name: String
    venue_id: int
}
class Item_Variation{
    id: int
    item_id: int
    variation_name: String
    quantity: double (ex: 1.3)
    unit_of_measurement(oz, lb, g, kg, etc)
    distributor_id: int
    distributor_code: String
    barcode: String
}
class Distributor{
    id: int 
    name: String
    venue_id: int
    wisk_distributor_id: int
    contacts: [Contact]
}
class WISKDistributor {
    id: int
    name: String
}
class Invoices {
    id: int
    distributor_id: int
    venue_id: int
}
class InvoiceLines {
    id: int
    invoice_id: int
    item_variation_id: int
    quantity: int
}
class PurchaseOrders {
    id: int
    distributor_id: int
    venue_id: int
}
class PurchaseOrdersLines {
    id: int
    purchase_order_id: int
    item_variation_id: int
    quantity: int
}

Provi XLS data architecture (reverse engineered)

img.png img_1.png img_2.png

classDiagram
    ProductLine *-- Product
    Product *-- Producer
    Product *-- Vendor
    Product *-- Country
    Product *-- Region
    Product *-- Supplier

    class ProductLine {
        +id: int    
        +name: string
    }
    class Product {
        +id: int
        +product_name: string
        +product_line_id: int
        +vendor_id: int
        +supplier_id: int
        +producer_id: int
        +sku: string
        +region_id: id
        +size: int
        +size_unit: string (ml/flOz/...)
        +container_type: string (bottle/can/...)
        +upc_code: string
    }
    class Vendor {
        +id: int
        +name: string
    }
    class Supplier {
        +id: int
        +name: string
    }
    class Producer {
        +id: int
        +name: string
    }
    class Country {
        +id: int
        +name: string
    }
    class Region {
        +id: int
        +name: string
    }

A possible data structure for the WISK/Provi integration

  • An Item in WISK is a Product Line in Provi
  • An ItemVariation in WISK is a Product in Provi
  • the WISK Item will have a link to the Provi Product Line (provi_product_line_id)
  • Within the WISK Item Variation we’ll have a link to a Provi Product (provi_product_id)

We’ll have a link in the WISK Distributor to a Provi Vendor (provi_vendor_id) Proposed changes to the WISK schema:

classDiagram
Item *-- Item_Variation
Item_Variation *-- Distributor
Item *-- Provi_Product_Line
Item_Variation *-- Provi_Product
Distributor *-- WISKDistributor
WISKDistributor *-- ProviVendor

class Item {
    id: int
    name: String
    provi_product_line_id: int
}
class Item_Variation {
    id: int
    name: String
    distributor_id: int
    distributor_code: String
    provi_product_id: int
}
class Provi_Product_Line {
    id: int
    name: String
}
class Provi_Product {
    id: int
    vendor_id: int
    name: String
    sku: String
}
class Distributor {
    id: int
    name: String
    provi_vendor_id: int
}
class WISKDistributor {
    id: int
    provi_vendor_id: int
    name: String
}
class ProviVendor {
    id: int
    name: String
}

Use cases

  • the best way to match WISK Items to Provi products is using the Venue sku number
  • the barcode matching should be used as a last resort when the client is using the WISK mobile app and the barcode scanner.
  • It’s important that we have a clear understanding of the use cases for the integration. Here are the ones I can think of:

Venues imported from Provi

  • For this we’ll have a single button in Provi to create a venue in WISK
  • All the items already in their Provi account will be imported into the WISK venue
    • Will create the Items and ItemVariations
    • WISK will augment the data with the full and empty weights

Matching based on the WISK Distributors

In this scenario, the venue exists in both WISK and Provi, and the user wants to add a new item in WISK from an invoice:

  • First we’ll need to make sure that Venue Distributors from WISK and Provi are linked
  • Then based on Distributor Code we’ll match it to a venue sku in Provi
    • If the sku doesn’t exist in Provi we’ll need to show an exception to the user
  • All ItemVariation in a WISK venue need to have a match to the Provi Product
    • If some are not matched we’ll show a list of the unmatched items to the user
    • The objective is to always have a 100% match between the two systems

Barcode scanning from the mobile app

During the inventory process the users can scan the barcodes of the items in the venue and the app will match the barcode to the item in WISK WISK currently prioritizes the match based on the following criteria:

sequenceDiagram
    Barcode->>+Organization: Find barcode
    Organization->>+VenueDistributors: Find barcode
    VenueDistributors->>+State: Find barcode
    State->>+Country: Find barcode

The proposed change is to first search the Provi database and then search the WISK database

sequenceDiagram
    Barcode->>+Organization: Find barcode in the 
    Organization->>+VenueDistributors: Find barcode
    VenueDistributors->>+ProviDatabase: Find barcode
    ProviDatabase->>+State: Find barcode
    State->>+Country: Find barcode

The proposed change is to search barcodes in the Provi database first and then search in the WISK database

  • In the integration with Provi we’ll first find the barcode in the Provi database
  • If we find more than one match we’ll show a list of the matches to the user and let them choose the correct one