ADAPT - Product / CropProtectionProduct / FertilizerProduct / CropVariety / Trait Discussion
Note: The integer IDs below correspond to the ReferenceID element in CompoundIdentifiers
Questions:
Must already-labeled (i.e., "product") ingredients of labeled mixes and active ingredients (AIs) be expressed in the same way?
Do we want to distinguish between labeled mixes and user-created mixes?
Do we need a flag to denote that a "Product" is a mix?
What "type" of product would a mix be considered if you were using liquid fert as a carrier for some crop protection chemicals?
Should we always use the abstract Product class for mixes?
Do we need a Mix subclass? (Business rules?)
How would you express a seed treatment combined with a seed product?
Where do things like "seed lot number" go? There could be 0..n
Product |
|
|
|
Attribute | Type | Multiplicity | Description |
|---|---|---|---|
Id | CompoundIdentifier | 1 | Compound Identifier |
Description | string | 1 | Human-readable description of the product |
ManufacturerId | Integer | 0..1 | Reference to a Manufacturer object |
BrandId | Integer | 0..1 | Reference to a Brand object |
ProductType | Integer (Bit field) | 1 | Bitfield. Proposed place value shown. The following 4 bits are used to make sense of a MixProduct and/or GenericProduct 1: Has Crop Protection (True for CropProtectionProducts and for mixes containing at least one CropProtectionProduct) 2: Has Crop Nutrition (True for CropNutritionProducts and for mixes containing at least one CropNutritionProduct) 4: Has CropVariety (True for CropVarietyProduct and for mixes containing at least one CropVarietyProduct) 8: Has HarvestedCommodityProduct (True for HarvestedCommodityProducts and for mixes containing at least one HarvestedCommodityProduct)
Proposed model to specify mixes (using Category bits in MixProduct)::
Note: StationMix also encompasses the use case of a formula used recurrently for a given purpose; e.g., "Ponderosa Farms Burndown Mix". Need a complete example of how Hot mixes are emergent properties of an ISO task (as the tank is refilled.) |
ProductType | ProductTypeEnum | 1 |
|
Status | ProductStatusEnum | 1 | Possible values:
Will eventually be implemented as an EnumeratedRepresentationValue |
ContextItems | ContextItem | 0..* |
|
Form | ProductFormEnum | 1 | Possible values:
|
Density | NumericRepresentationValue | 0..1 | It's optional because in some cases (manure, mixes) the density may not be an intensive property of the product, but lot-specific instead. |
TotalQuantity | NumericRepresentationValue | 0..1 | The total amount defined. This is critical for specifying a tank mix extensively (e.g, A certain amount of each component product, and then a total amount.) |
ProductComponents | ProductComponent | 0..* | Components of this product. |
HasCropProtection | Boolean | 1 |
|
HasCropNutrition | Boolean | 1 |
|
HasCropVariety | Boolean | 1 |
|
HasHarvestCommodity | Boolean | 1 |
|
Category | CategoryEnum | 1 |
|
DensityFactor (Provide lot / batch - specific value of density) | |||
Attribute | Type | Multiplicity | Description |
Id | CompoundIdentifier | 1 | This class is not referenced by anything else, therefore it needs a compound identifier so it can be inserted in the Catalog |
ProductId | Integer | 1 | A reference to a product. |
BatchNo | String | 0..1 |
|
LotNo | String | 0..1 |
|
Density | NumericRepresentationValue | 1 | Ex: 15000 seeds/bag; 500 lb/bag; 2000 pellets/lb |
TimeScopes | Timescope | 0..* |
|
TimeScopeIds | Integer | 0..* |
|
|
|
|
|
CropProtectionProduct (child class of Product) | |||
Attribute | Attribute | Multiplicity | Description |
Biological | Boolean | 1 | Property of a crop protection product |
Organophosphate | Boolean | 1 | Chemical property. |
Carbamate | Boolean | 1 | Chemical property. |
Ingredients | IngredientUse | 0..* |
|
|
|
|
|
Ingredient (used by ProductComponent) | |||
Attribute | Type | Multiplicity | Description |
Id | CompoundIdentifier | 1 |
|
Description | String | 1 |
|
ContextItems | ContextItem | 0..* |
|
IsActive | Bool | 1 |
|
|
|
|
|
ActiveIngredient (child class of Ingredient) | |||
Attribute | Type | Multiplicity | Description |
ModeOfAction | EnumeratedRepresentationValue | 1..* | How the active ingredient attacks the pest. Multiplicity is 1..* because the same ingredient could conceivably have more than one mode of action. (e.g., a fumigant) |
|
|
|
|
CropNutritionIngredient (child class of Ingredient) | |||
Attribute | Type | Multiplicity | Description |
IngredientCode | CropNutritionIngredientCodeEnum | 1 | An enumeration literal from a set of nutrient codes. Will be implemented as an EnumeratedRepresentationValue |
IngredientCode | EnumeratedValue | 1 |
|
ProductComponent |
|
|
|
Attribute | Type | Multiplicity | Description |
ProductId | Integer | 0..1 | If populated, indicates that the ProductComponent is a product. Examples:
Note that ProductId and IngredientId are mutually explusive: only ONE must be populated at any given time. |
IngredientId | Integer | 1 | If populated, indicates that the ProductComponent is an Ingredient. Examples:
|
Quantity | NumericRepresentationValue | 1 | Quantitative description of how much of the component participates in the product. This would typically involve a representation such as:
Reminder: a RepresentationValue encapsulates the following:
|
IsCarrier | Boolean | 1 |
|
IsProduct | Boolean | 1 |
|
MixOrder | Integer | 0..1 |
|
|
|
|
|
FertilizerProduct (child class of Product) [Not Implemented] | |||
Attribute | Type | Multiplicity | Description |
IsManure | Boolean | 1 | True if the fertilizer is manure. False if it's chemical fertilizer. |
|
|
|
|
CropVarietyProduct (child class of Product) | |||
Attribute | Type | Multiplicity | Description |
CropId | Integer | 1 | References the Crop that this variety belongs to. |
TraitIds | Integer | 0..* | Optional list of Trait |
GeneticallyEnhanced | Boolean | 1 | Is this a Genetically enhanced variety? |
|
|
|
|
Trait (used by CropVariety, Catalog) | |||
Attribute | Type | Multiplicity | Description |
Id | CompoundIdentifier | 1 |
|
TraitCode | String | 1 | Short code: e.g., "RR2", "A-GT" |
Description | String | 0..1 | Human-readable name; e.g., "RoundUp Ready 2", "Agrisure-GT" |
ManufacturerId | Integer | 0..1 |
|
CropIDs | |||