Bill of Materials
From EVEDev
A blueprint's bill of materials is a list of all the item types required to manufacture from or do research on that blueprint. Manufacturing materials are split into two tables -- invTypeMaterials and ramTypeRequirements. The former is keyed by a blueprint's productTypeID, because it doubles as recycling information, and the latter is keyed by blueprintTypeID. Research, copying, inventing, and reverse engineering materials are all in ramTypeRequirements.
Contents |
[edit] Manufacturing
Broadly, to get the materials to construct something, you need to take the product's invTypeMaterials, subtract recycled materials' invTypeMaterials, and add extra materials or skills listed in ramTypeRequirements.
[edit] Raw Materials Only
For items which have no extra materials or skill requirements, such as the Civilian Shield Booster I (productTypeID 10039, blueprintTypeID 10040), you need only query invTypeMaterials:
SELECT t.typeName, m.quantity FROM invTypeMaterials AS m INNER JOIN invTypes AS t ON m.materialTypeID = t.typeID WHERE m.typeID = 10039; -- Civilian Shield Booster I
| typeName | quantity |
|---|---|
| Tritanium | 64 |
| Pyerite | 22 |
| Mexallon | 1 |
You still need to add waste to this -- see Equations.
[edit] Raw Plus Skills
Most blueprints require one or more skills (such as Industry I) for manufacturing. You can get the raw materials with the previous query, and then add the skills with the following query (using Capital Crystalline Carbonide Armor Plates as example, productTypeID=29041, blueprintTypeID=29042):
-- Base materials SELECT t.typeName, m.quantity FROM invTypeMaterials AS m INNER JOIN invTypes AS t ON m.materialTypeID = t.typeID WHERE m.typeID = 29041; -- Capital Crystalline Carbonide Armor Plate -- Extra materials SELECT t.typeName, r.quantity, r.damagePerJob FROM ramTypeRequirements AS r INNER JOIN invTypes AS t ON r.requiredTypeID = t.typeID WHERE r.typeID = 29042 -- Capital Crystalline Carbonide Armor Plate Blueprint AND r.activityID = 1; -- Manufacturing
Base materials
| typeName | quantity |
|---|---|
| Crystalline Carbonide | 2000 |
| Sylramic Fibers | 1500 |
Extra materials
| typeName | quantity | damagePerJob |
|---|---|---|
| Industry | 5 | 0 |
| Molecular Engineering | 4 | 0 |
| Capital Ship Construction | 1 | 0 |
You'll need to add the waste to the base materials, and you probably want to convert the quantity to Roman numerals for the skill level -- 'Mechanical Engineering IV', for example, looks a bit more natural than 'Mechanical Engineering 4' or 'Mechanical Engineering * 4'.
[edit] Extra Plus Skills
Some blueprints, such as the hybrid construction components' (used to build tech 3 subsystems and strategic cruisers), only have extra materials and skills, but no raw materials. Using Electromechanical Interface Nexus (productTypeID=30466, blueprintTypeID=30467):
-- Extra materials + skills SELECT t.typeName, r.quantity, r.damagePerJob FROM ramTypeRequirements AS r INNER JOIN invTypes AS t ON r.requiredTypeID = t.typeID WHERE r.typeID = 30467 -- Electromechanical Interface Nexus Blueprint AND r.activityID = 1; -- Manufacturing
| typeName | quantity | damagePerJob |
|---|---|---|
| Industry | 5 | 0 |
| Electromagnetic Physics | 2 | 0 |
| Mechanical Engineering | 2 | 0 |
| Powdered C-540 Graphite | 1 | 1 |
| Modified Fluid Router | 3 | 1 |
| Cartesian Temporal Coordinator | 1 | 1 |
| Electromechanical Hull Sheeting | 5 | 1 |
| PPD Fullerene Fibers | 10 | 1 |
| Lanthanum Metallofullerene | 10 | 1 |
| Graphene Nanoribbons | 5 | 1 |
As these are extra materials instead of raw materials, you do not need to add material level waste -- which means that the material level required to build without waste from such blueprints is 0.
Skills are mixed in with the extra materials; to separate them, you can check their category via invGroups: categoryID 16 is for skills.
-- Extra materials SELECT t.typeName, r.quantity, r.damagePerJob FROM ramTypeRequirements AS r INNER JOIN invTypes AS t ON r.requiredTypeID = t.typeID INNER JOIN invGroups AS g ON t.groupID = g.groupID WHERE r.typeID = 30467 -- Electromechanical Interface Nexus Blueprint AND r.activityID = 1 -- Manufacturing AND g.categoryID != 16; -- Skill -- Skills SELECT t.typeName, r.quantity, r.damagePerJob FROM ramTypeRequirements AS r INNER JOIN invTypes AS t ON r.requiredTypeID = t.typeID INNER JOIN invGroups AS g ON t.groupID = g.groupID WHERE r.typeID = 30467 -- Electromechanical Interface Nexus Blueprint AND r.activityID = 1 -- Manufacturing AND g.categoryID = 16; -- Skill
Extra Materials
| typeName | quantity | damagePerJob |
|---|---|---|
| Powdered C-540 Graphite | 1 | 1 |
| Modified Fluid Router | 3 | 1 |
| Cartesian Temporal Coordinator | 1 | 1 |
| Electromechanical Hull Sheeting | 5 | 1 |
| PPD Fullerene Fibers | 10 | 1 |
| Lanthanum Metallofullerene | 10 | 1 |
| Graphene Nanoribbons | 5 | 1 |
Skills
| typeName | quantity | damagePerJob |
|---|---|---|
| Industry | 5 | 0 |
| Electromagnetic Physics | 2 | 0 |
| Mechanical Engineering | 2 | 0 |
[edit] Raw And Extra
Some of the tech 1 blueprints, such as bombs, have both raw and extra materials (example quote screenshot). To get the correct total material requirements, you need to get the reprocessing amounts, add waste as appropriate, and then add the extra materials.
-- Base materials SELECT t.typeName, m.quantity FROM invTypeMaterials AS m INNER JOIN invTypes AS t ON m.materialTypeID = t.typeID WHERE m.typeID = 27912; -- Concussion Bomb -- Extra materials and skills SELECT t.typeName, r.quantity, r.damagePerJob FROM ramTypeRequirements AS r INNER JOIN invTypes AS t ON r.requiredTypeID = t.typeID WHERE r.typeID = 27913 -- Concussion Bomb Blueprint AND r.activityID = 1; -- Manufacturing
Base materials
| typeName | quantity |
|---|---|
| Tritanium | 10000 |
| Pyerite | 100 |
| Mexallon | 10 |
| Isogen | 10 |
| Nocxium | 10 |
| Zydrine | 10 |
| Megacyte | 10 |
Extra materials and skills
| typeName | quantity | damagePerJob |
|---|---|---|
| Tritanium | 1403572 | 1 |
| Pyerite | 632432 | 1 |
| Mexallon | 63982 | 1 |
| Isogen | 10070 | 1 |
| Nocxium | 2342 | 1 |
| Zydrine | 1446 | 1 |
| Megacyte | 370 | 1 |
| Industry | 1 | 0 |
[edit] Extra Recycled Materials
So far, none of the examples have included any materials that are recycled. Most of the tech 2 blueprints require their tech 1 version as input. Recycled materials' materials need to be subtracted from the product's materials. Let's look at the results of reprocessing an Improved Cloaking Device II (typeID 11577):
-- Reprocessing results SELECT t.typeName, m.quantity FROM invTypeMaterials AS m INNER JOIN invTypes AS t ON m.materialTypeID = t.typeID WHERE m.typeID = 11577; -- Improved Cloaking Device II
| typeName | quantity |
|---|---|
| Tritanium | 14628 |
| Pyerite | 5718 |
| Mexallon | 700 |
| Isogen | 414 |
| Nocxium | 154 |
| Zydrine | 60 |
| Megacyte | 15 |
| Morphite | 20 |
However, the actual bill of materials differs: Improved Cloaking Device II quote. Let's look at the reprocessing results of its tech 1 requirement, Prototype Cloaking Device I (typeID 11370):
-- Reprocessing results SELECT t.typeName, m.quantity FROM invTypeMaterials AS m INNER JOIN invTypes AS t ON m.materialTypeID = t.typeID WHERE m.typeID = 11370; -- Prototype Cloaking Device I
| typeName | quantity |
|---|---|
| Tritanium | 14628 |
| Pyerite | 5718 |
| Mexallon | 700 |
| Isogen | 414 |
| Nocxium | 154 |
| Zydrine | 60 |
| Megacyte | 15 |
| Morphite | 10 |
They are nearly an exact match. The only difference is 10 Morphite, which is the pre-waste amount of the only base material needed to build an ICD2. As for the extra materials:
-- Extra materials and skills SELECT t.typeName, r.quantity, r.damagePerJob, recycle FROM ramTypeRequirements AS r INNER JOIN invTypes AS t ON r.requiredTypeID = t.typeID WHERE r.typeID = 12104 -- Improved Cloaking Device II Blueprint AND r.activityID = 1; -- Manufacturing
| typeName | quantity | damagePerJob | recycle |
|---|---|---|---|
| Industry | 5 | 0 | 0 |
| Transmitter | 10 | 1 | 0 |
| Miniature Electronics | 5 | 1 | 0 |
| Prototype Cloaking Device I | 1 | 1 | 1 |
| Graviton Physics | 2 | 0 | 0 |
| Quantum Physics | 2 | 0 | 0 |
| R.A.M.- Electronics | 1 | 0.15 | 0 |
| Photon Microprocessor | 10 | 1 | 0 |
| Graviton Pulse Generator | 10 | 1 | 0 |
[edit] Researching and Copying
Researching material productivity, researching time productivity, and copying are all fairly similar, and the query to get their skill and material requirements are almost identical. For the Prototype Cloaking Device I Blueprint (typeID 13000):
SELECT a.activityName, t.typeName, r.quantity, r.damagePerJob FROM ramTypeRequirements AS r INNER JOIN invTypes AS t ON r.requiredTypeID = t.typeID INNER JOIN ramActivities AS a ON r.activityID = a.activityID WHERE r.activityID IN (3, 4, 5) -- time, material research, copying AND r.typeID = 13000 -- Prototype Cloaking Device I Blueprint ORDER BY a.activityName, t.typeName;
| activityName | typeName | quantity | damagePerJob |
|---|---|---|---|
| Copying | Data Sheets | 20 | 1 |
| Copying | Graviton Physics | 3 | 0 |
| Copying | Hydromagnetic Physics | 1 | 0 |
| Copying | Quantum Physics | 3 | 0 |
| Copying | R.Db - CreoDron | 1 | 0.5 |
| Copying | R.Db - Ishukone | 1 | 0.5 |
| Researching Material Productivity | Consumer Electronics | 1 | 1 |
| Researching Material Productivity | Graviton Physics | 2 | 0 |
| Researching Material Productivity | Metallurgy | 5 | 0 |
| Researching Material Productivity | Quantum Physics | 2 | 0 |
| Researching Material Productivity | R.Db - CreoDron | 1 | 0.3 |
| Researching Material Productivity | R.Db - Ishukone | 1 | 0.3 |
| Researching Material Productivity | Reports | 5 | 1 |
| Researching Time Productivity | Consumer Electronics | 4 | 1 |
| Researching Time Productivity | Graviton Physics | 2 | 0 |
| Researching Time Productivity | Quantum Physics | 2 | 0 |
| Researching Time Productivity | R.Db - CreoDron | 1 | 0.4 |
| Researching Time Productivity | R.Db - Ishukone | 1 | 0.4 |
| Researching Time Productivity | Reports | 5 | 1 |

