Materials
Raw materials (inputs to work orders, purchased on materials POs) and their type classification.
Tables owned
| Table | Purpose |
|---|---|
org.materials | Material records (code, name, type, notes, active flag). |
org.material_types | Material classifications (e.g., Substrate, Ink, Packaging). |
Operations
Writes — Materials
createMaterial(conn, input)→Material.input:{ code, name, typeId?, notes? }.updateMaterial(conn, materialId, patch)→Material. Partial update.setMaterialActive(conn, materialId, isActive)→Material. Archive / reactivate.deleteMaterial(conn, materialId)→void. Hard-delete. L3 enforces "not referenced by orders or BOMs".
Writes — Material types
createMaterialType(conn, { name })→MaterialType.updateMaterialType(conn, typeId, patch)→MaterialType. Rename.deleteMaterialType(conn, typeId)→void. L3 enforces "no material uses it".
Reads
listMaterials(conn, filters?)→Material[]. Filters:{ typeId?, isActive? }.getMaterialById(conn, materialId)→Material | null.getMaterialsByIds(conn, materialIds)→Material[]. Batch hydration.listMaterialTypes(conn)→MaterialType[].getMaterialTypeById(conn, typeId)→MaterialType | null.isMaterialTypeInUse(conn, typeId)→{ inUse: boolean, materialCount: number }. Gates deletion.