BOM: Multi-part component assemblies best practices?

Hello, all,

What’s the best practice for generating a BOM for a PCB where some of the components are multi-part assemblies? Think fuse and fuseholder, or transistor and heat sink. In my case, a Jack consists of:
one red housing,
one black housing, and
two contacts (Anderson Power Poles)

I’d like to list the part numbers and distributor’s information for each part of a Jack.

I found one answer at Making multiple BOM items for one schematic component, but was concerned that it was 7 years ago. I wasn’t sure if the solution at Single-part, multi-item symbols? applied to my use case.

Has the advice changed with more recent versions of KiCAD (I’m using 5.1.7)?

What about including mechanical parts that have no electrical purpose, such as stand-offs for legs. What about including a part number and source for the PCB itself in the BOM. Any suggested way to do this?

Thanks for all your suggestion and advice. I’m enjoying using and learning about KiCAD. Thank you to all the developers who’ve worked on it.


You can mark symbols in the schematic as “not on PCB” so they appear in the BOM but have no footprint on the board.

Hi, @fox, can you provide more details about how to do this? I googled “KiCAD” “not on PCB” without success. Is it obvious?


I am using KiCad Nightly, I have not found a similar setting in the current stable release. There is a checkbox called “Exclude from Board” in the Symbol Properties dialog (select symbol and press E).

The most clean way would be having a database with all items you use or make, in something like an ERP system. For such a situation a new item would be created that has a part list with the 3 parts that are needed to create the component. The component is what is specified in KiCad, as a single component. The combination from this 3 individual parts to a single component would be handled completely outside KiCad.
This is how i would do this kind of things at my workplace, where a ERP system with such a database exist. But this probably not a solution for everyone, since not everyone has a (maintained) ERP system.

@johannespfister, thanks for your thought. Yeah, I’m just a hobbyist builder, and don’t’ need or want the complexity of a database or ERP system.


May be try this solution schematic to spreed sheet and vice versa

  1. I use the DNI for “Do Not Insert” on a BOM when some “part” that has a designator and is in the Pick and Place file is to be ignored.
  2. I’m considering moving to designators that start at some high number, like 900 for all DNI parts. It would be a good “check” when looking at either the PCB or the BOM.

This way, you can have a BOM with a fuse holder and fuse (board I just did, mentioned below had that) and it’s clear what’s on the PCB, what is not, and what is a footprint or hole that does not have a part.

I just took a PCB that I prototype in KiCad and had a outside group run 25 of the boards. I made some errors in my BOM and omitted 5 parts. I also had an incorrect total quantity (had 15, should have been 18) in the BOM. There were 18 designators but my “total count” column was 15. This was due to manual edits after adding 3 more parts. This resulted in the shop ordering too few parts on a spool, so they had to re-order which caused a delay.
The contract fab shop also said they struggled with the formats for the BOM ( a spreadsheet that originated in KiCad and then I edited) and the pick and place. So I have a software project I need to do where I can take a .csv from a BOM and take the pick and place file and suck them into memory. Then I can cross check for parts that were in the P&P but not on the BOM and vis-versa. Finally, the software will spit out a new .csv for a BOM, and a new P&P. I’l be working with the assembly house to see what format they want.
The goal is to be able to make small changes in a design when in the prototype stage without having to start from scratch again with the BOM. It should also catch errors in the BOM from manual editing. Not sure if I’ll be in C or PHP at this point, haven’t working in python and don’t need to learn another language.

This error only had one 0402, to correct, the rest were 0603 and 0805. The next board will be 80% 0402 parts (RF stuff) and I can not afford to make this errors again. This is the first time in 40 years I’ve had an error in my BOM.


I would not do this:

When you clear annotation, those numbers get reset, andthen you loose the information which parts have to be placed.

As a general rule it is a good Idea to have a checklist and work through it in order before ordering PCB’s. People are sloppy creatures (compared to PC’s) and it’s easy to skip or forget a step. Revise your checklist every time you’ve made a mistake so you won’t make the same mistake again.

It’s always interesting to see how people use the tools. I never clear my annotation, the schematic annotation “sticks” throughout any given board.
Checklist is good idea, need to move that from my head to a document because, as you noted, people are sloppy creatures. This is where the software program to “cross check” the BOM with the P&P comes in, it will be a tool that help catch errors.
A lot of this is wrestling with the current use case for the area I’m working in- IoT sensors and networks for first responders in areas with no communications. As such, size is a critical factor. I really don’t want to take a layout directly to contract fabrication due to cost. There can also be a time penalty. The ability to make a proto and get it working and catch all those errors (there will always be errors and tweaks) is really nice. Having a compartmentalize layout so you can bring up the board in pieces is also nice.
If there is nothing smaller than an 0603, size is not critical and just a few chips without exposed pins, then assembly is easy. The challenge is the Raspberry Pi sized board (Not using a PI, just keeping the form factor) with 900 MHz and 2.4 GHz RF, power supplies and processors where just about everything is 0402. Hard to bring it up all at once and you don’t have the extra 15% space it might take to compartmentalize the layout. On the 3 board set I’m working on, I will have no choice but to fully populate one. The other 3 are less dense and use 0603s for most passives.
On the plus side, another strategy I’m using is I’ve used the 2oz .032" double sided OSHpark boards to do a trial lay-out of some of the sub systems on the board, in particular the switching power supplies. This lets me test them, test the filtering on them, look a the conducted EMI and removes a lot of the risk from the final board. Back when any PCB was about $100 to make, being able to run these power supplies, filter networks, analog sections on boards that cost $5 to $25 is a big win. When combined with the manufactures evaluation modules, it’s a good technique.
I’m learning how to organize these subsections in to schematic blocks so I can re-use them. Still wish I could “cut from one design a chunk of a schematic and paste it into a different schematic in a different project” but missing that is not a show stopper. It all comes down to how to use the EDA software tools, write the software pieces your missing, and work with the “stuff houses” to reduce both financial and time risk. Oh and these days, now to handle the wild lead times on parts. Make sure your design has second sources, and know what slightly different passives might work. There are a lot more logistics involved now than 40 years ago…

Thank you for your comment !


•According to ANSI/ASME Y14.44 you are talking about a multi-element part for which you would use a suffix letter. Back in the AC/DC radio days you might have, for instance, a 3-section electrolytic capacitor. On the schematic diagram you would show 3 separate capacitors but each would have a suffix letter, in this case A, B, and C. There would, however, be only one footprint, the same as for a multi-element digital part such as a quad NAND gate.

•For a fuse with a fuse holder, consisting of two separate items and using IEEE 315 Clause 22.4 and the Unit Numbering method of ASME Y14.44, the fuse would have a ref des of F# and the fuse holder would have a ref des of XF#. You would show both on the schematic diagram but only the fuse holder would have a footprint.

•For a fuse with fuse clips, the fuse would be ref des F# (as above) and the fuse clips would be ref des XF#A and XF#B. However, KiCad does not understand suffix letters of individual items, so for a work around use ref des XF#E1 and XF#E2. (In this case the E class letter stands for a terminal.)

•Now for your Anderson Power Pole connector. In effect you have 5 items, not counting the attachment wires, These items/parts would be ref des as follows:

J# for the assembled part
J#MP1 for the red connector housing (MP is the class letter for mechanical part)
J#MP2 for the black connector housing
J#MP3 for the pin that holds the two connector housings together
J#P1 for one of the terminals
J#P2 for the 2nd terminal
There would only be a footprint for J#, no part listed in the parts list for this, but all the other (sub)items would be listed. In order to account for all the sundry parts put the ref des on the schematic diagram, without any footprint of course.

•The class letter to use for a PCB is “U” according to IEEE 315 and ASME Y14.44. I use a ref des of U0 in the parts list. Zero is a number and would never be used for any part installed on the PCB.

Any other questions regarding the assignment of reference designations, let me know.
–Regards, Larry

Thanks Larry !
I’v always had the BOM broken into 2 pieces: “Things for the stuff house” and “Other stuff to order or place in-house after the PCB is made”. I’ll adjust my annotations accordingly, and look at IEEE 315. One thing that has changed since some of these conventions were established is the spreadsheet as the BOM. As such, I would still have a column in the spreadsheet to avoid confusion and serve as a sanity check where I could have the contents of a cell be either empty or “DNI” (for Do Not Insert). A parity check on the annotation convention, if you will. It would help the stuff house by clearing showing what they are placing, and avoid confusion on exactly “which standard” was being followed or slightly modified.

I guess it’s easier for the stuff houses to say “Just send what you have” than to risk loosing a customer by quietly suggesting a format and pointing to standards.


I use KiCost with variants:

You can see in the example below that manf#, S1MN and S2MN have both the pin header and the terminal block that plugs in on the header - the “;” is the separator for Kicost:

However the lcsc variant only has one component.

When generating the actual BOM file using Kicost, and specifying the ‘lcsc’ variant, the final BOM will have only one reference.
When not selecting the ‘lcsc’ variant, the BOM will have two entries for this component, labeled ‘J2#1’ and ‘J2#2’, each on a separate line.

I found that most (or rather all) PCBA manufacturer handle the BOMs manually to adapt it to their inner use . So I provide design documentation specific for the PCBA manufacturer explaining the meaning of the dual entries for a single component.
The PCBA manufacturer also has to order the cables in some cases.

I prefer to add these things to the BOM. If the PCBA contractor does not understand the extra lines, then this at least generates some kind of “exception”, and I get the appropriate question about it in case they did not find the explication in the accompanying documentation.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.