# Arquitectura de las Listas de Materiales (BOM)

**Lista de Materiales ::** _ProductBOM_

* _name_ - Nombre de la Lista de materiales.
* _measure\_unit\_id_ - Cuando se juntan los Materiales de la Lista se obtiene un elemento expresado en esta Unidad de Medida. Por ejemplo: 1 kilo, 1 litro, 1 metro cúbico.
* _quantity_ - Si bien el resultado de agregar los Materiales de la Lista es siempre una unidad (del tipo indicado en el campo anterior), la cantidad de los Materiales puede indicarse relativa a otra cantidad, para hacer las cifras más manejables.

**Material perteneciente a la Lista ::** _ProductBOMLine_

* _line\_type :: phantom_ - Un Producto “fantasma” es un tipo de Semielaborado. Los requerimientos de fabricación del Producto “padre” del Semielaborado fantasma se pasan directamente a los Componentes del Semielaborado fantasma. Por tanto no se creará una Orden de fabricación para el Semielaborado fantasma.
* _scrap_ - Cuando el Material está listo para ser consumido en una Orden de Fabricación este Porcentaje será añadido a la Cantidad que se indica en la Lista de Materiales. Representa la merma en el proceso.

**Ejemplo**

Definir la Lista de Materiales para una masa que se elabora a partir de un 60% (en peso) de harina y el resto (40% en peso) de agua.

\- Alias. BOM-FLOUR60.

\- Nombre. Masa de Harina y Agua 60/40

\- Cantidad. 10

\- Unidad de Medida. kilo

\- Ingredientes:

&#x20;Harina. 6 kilo

&#x20;Agua. 4 kilo

El resultado de esta Lista de materiales será de 1kilo de Masa. Pero la cantidad de los Materiales se especifica para 10 kilos de producto final. De esta forma se evitan los decimales en la cantidad de los Materiales. Por tanto, para obtener 1 kilo de masa se necesita:

&#x20;Harina: 6 / 10 = 0,6 kilo

&#x20;Agua: 4 / 10 = 0,4 kilo

**Asignar una Lista de Materiales a un Producto ::** _BOMItem_

Un Producto puede tener varias Listas de Materiales. Por ejemplo, la proporción de los componentes puede variar de acuerdo con la estación climática, debido al efecto de la temperatura o la humedad ambiente. Además, adicionalmente a la Lista en vigor también podría existir otra en proceso de aprobación.

Por tanto, entre los Productos y las Listas de Materiales se establece una relación “muchos a muchos”, y por conveniencia se establece el Modelo BOMItem.

* _quantity_ - Es la cantidad de unidades de la Lista de Materiales necesaria para la elaboración del Producto. Por ejemplo: Asignar la Lista de Materiales del ejemplo anterior a un Pan que se vende por unidades; Este Pan requiere 375 gramos de Masa de Harina 60/40. En este caso, la Cantidad a especificar en el BOMItem es de 0,375, ya que con la Lista de Materiales se obtiene 1 kilo de masa.

Para obtener la Lista de Materiales actual se utiliza el método bom() del Modelo Product:

```
$current_list = $product->bom();
```

Este método debe personalizarse con la lógica adecuada para cada aplicación, por ejemplo, pasando como parámetro la fecha para la que se desea obtener la Lista de Materiales.

**Relaciones**

\- 1 Product (del tipo “manufacture”) tiene n (0 ó más) BOMItem

\- 1 BOMItem tiene 1 ProductBOM

\- 1 ProductBOM tiene n (1 ó más) ProductBOMLine

\- 1 ProductBOMLine tiene 1 Product (del tipo “purchase” o “assembly”)

\

