Quantities
A Quantity in farmOS is a granular unit of quantitative data used to represent a single data point.
Quantities do not exist on their own, but rather are created with and are referenced by Logs. Logs provide the supporting metadata to give context to the data stored in Quantities, including timestamp, location, relation to Assets, etc.
Type
Each Quantity must have a type. All Quantity types have a common set of attributes and relationships. Specific Quantity types (also called "bundles") may also add additional attributes and relationships (collectively referred to as "fields"). Quantity types are defined by modules, and are only available if their module is enabled. The modules included with farmOS define the following Quantity types:
- Standard
- Material
- Test
ID
Each Quantity will be assigned two unique IDs in the database: a universally unique identifier (UUID), and an internal numeric ID.
The UUID will be unique across farmOS databases. The internal ID will only be unique to a single farmOS database. Therefore, the farmOS API uses UUIDs to ensure that IDs pulled from multiple farmOS databases do not conflict. Internally, farmOS modules use the internal IDs to perform CRUD operations.
Attributes
Quantities have a number of attributes that serve to describe their meta information. All Quantities have the same standard set of attributes. Modules can add additional attributes.
Standard attributes
Attributes that are common to all Quantity types include:
- Measure
- Value
- Label
Measure
The Measure attribute can be used to specify what type of measurement is being recorded. The available options are:
- Count
- Length/depth
- Weight
- Area
- Volume
- Time
- Temperature
- Pressure
- Water content
- Value
- Rate
- Rating
- Ratio
- Probability
Value
The Quantity value is a decimal number. Internally this is represented as two integers (numerator and denominator).
Label
A Quantity may have a label assigned to it. This helps to distinguish multiple Quantities of the same measure within a Log.
Additional attributes
Quantities may contain additional attributes:
- Inventory adjustment
Inventory adjustment
A Quantity can be designated as an "inventory adjustment" to reset, increment, or decrement the inventory of Assets referenced (see "Inventory asset" below).
For more information, see farmOS Inventory Logic.
Relationships
All Quantities have the same standard set of relationships. Modules can add additional relationships.
Standard relationships
Relationships that are common to all Quantity types include:
- Unit
Unit
The Unit of measurement is stored as a Term in the Units vocabulary.
Additional relationships
Quantities may contain additional relationships:
- Inventory asset
Inventory asset
Quantities can reference Assets, along with the "Inventory adjustment" attribute (above) to record adjustments to the Asset's inventory.
This field is added to all Quantity types by default only if the Inventory module is enabled.
For more information, see farmOS Inventory Logic.
Type-specific fields
In addition to the fields that are common to all Quantity types described above, some types add additional type-specific fields. These include:
Standard Quantities
Standard Quantities do not define any type-specific fields.
Material Quantities
Material Quantities are the default type on Input logs. They have the following additional relationships:
- Material type (References Terms in the "Material types" vocabulary)
Test Quantities
Test Quantities are the default type on Lab test logs. They have the following additional relationships:
- Test method (References Terms in the "Test methods" vocabulary)