A lot of items in general should be possible to disassemble, but guns are a fairly special case. Most guns use components that are hard to re-appropriate. A gun’s barrel is frequently no mere pipe, for instance, and in many cases a gun’s receiver is such a specially machined piece that you wouldn’t be able to make anything but a gun out of it unless you melt it down.
Which bring me to my take on the suggestion, which is quite more far-ranging.
Template items.
Take Dwarf Fortress. The current iteration of it has creatures that are made out of too many things to list - various tissues, organs, secretions, etc, etc. But it does not define “giant cave bat spleen” as a separate item, even though it will be made out of giant cave bat spleen tissue, and cooking it will make a prepared cave bat spleen - none of which are actually defined separately either. And when it bites you with its teeth, the data for the sharpness of the teeth is pulled from the bat’s own tooth tissue, even though it’s not actually defined as its own thing either.
What I mean is, as a way of avoiding a combinatorial explosion in .JSON definitions, Cataclysm could be using a system of template items.
Disassembling an AK47 would give an “AK47 receiver” under the “rifle receiver” template, an “AK47 barrel” under the “rifle barrel” template, and various small items that can be repurposed - wooden planks, some steel scrap, and a small spring. Disassembling an M4A1 would give an “M4A1 receiver” and a “M4A1 barrel”, but they’d still belong to their own templates, meaning that no matter how many rifles and assault rifles are disassembled into their own receivers and barrels, the number of actual item definitions does not increase - they are all “rifle receiver” and “rifle barrel”.
Moreover, the disassembly recipes should be folded into the items themselves, using the same system used by vehicle parts: "breaks_into" : [
{"item": "leather", "min": 0, "max": 1},
{"item": "scrap", "min": 1, "max": 2}
]
In this case the definition will look something like: "can_disassemble" : [
{"skills": 2, "mechanics": 3, "firearms": 1},
{"tools": 1, "TOOL_SCREWDRIVER" : 1},
{"time": 200},
{"item": "template_receiver_rifle", "name": "AK47 receiver", "material": "steel", "min": 1, "max": 1},
{"item": "template_barrel_long", "name": "AK47 barrel", "material": "steel", "min": 1, "max": 1},
{"item": "scrap", "material": "steel", "min": 1, "max": 2},
{"item": "scrap", "material": "wood", "min": 1, "max": 2},
{"item": "spring_small", "min": 1, "max": 1}
]
It’s a far more compact system than all the disassembly recipes.