BOM Substitutions – Specifying Alternatives with Contract Manufacturer

manufacturingpcb-assembly

I fear this question may be opinion based but I think it has some value to the general community – because this falls into the end of the design phase.

When working with a CM, they may have better pricing due their volume and as a design method, should you allow the CM to make changes to the BOM (provided you specify which components may be substituted) or is it industry practice to allow specify the components and alternatives and that's it ?

Best Answer

This is exactly why a BOM doesn't normally specify a manufacturer and part number directly. Instead, the BOM references in-house part numbers, and each in-house part number has an AVL (approved vendors list) associated with it. This level of indirection allows you to add (or remove, if necessary) manufacturers and their specific part numbers to the in-house number without having to update every BOM that uses that part. And it allows your purchasing department (or that of a CM) to pick the vendor that they prefer for whatever reason from that list.


You asked about a sample of AVL data. This is a function that can be provided by any good MIS (Manufacturing Information System) or ERP (Enterprise Resource Planning) software. I'm a one-man consulting shop, so I don't use a commercial system; instead, I came up with my own tools that I use to support clients.

They're based on a simple database. Here's a snippet of a dump of that database showing some relevant records:

A: Enpoint 6001-0221 - "2x10 2mm female IDC"
C: Enpoint 6001-0221 FCI 89947-720LF                    # (keyed, in tube)
C: FCI 89947-720LF Digi-Key 609-2740
C: Enpoint 6001-0221 Sullins SFH21-PPPN-D10-ID-BK-M181  # (no key, bulk)
C: Sullins SFH21-PPPN-D10-ID-BK-M181 Digi-Key S9078

An "A" record simply describes a part. The fields are:

  • Manufacturer
  • Part number
  • Revision
  • Description

In this case, the "manufacturer" is a code for my client, and the part number is my internal house part number.

A "C" record maps one part number to another. The fields are:

  • Manufacturer
  • Part number
  • Manufacturer
  • Part number

(The # and anything after it are just comments.) In this case, there are two different mappings for "Enpoint 6001-0221" — one to "FCI 89947-720LF" and one to "Sullins SFH21-PPPN-D10-ID-BK-M181". Either of these parts would be acceptable wherever I use "6001-0221" in a design.

As it happens, both of these are available from Digi-Key, so there's an additional record for each of those parts that maps it to the corresponding Digi-Key part number. This allows me to easily generate a Digi-Key order when I need to restock.

The database has additional record types. "B" records describe the BOM itself, which is usually imported from schematic capture, and "G" records capture price data, including quantity price breaks. This allows me to then generate a "costed BOM" that looks like this:

sample of costed BOM

Hmm. I now see that there are errors in this BOM. But that's OK, since this is a prototype assembly that was long ago replaced by a custom flat-flex cable.