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




AttributeTypeMultiplicityDescription
IdCompoundIdentifier1Compound Identifier
Descriptionstring1Human-readable description of the product
ManufacturerIdInteger0..1Reference to a Manufacturer object
BrandIdInteger0..1Reference to a Brand object
ProductTypeInteger (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.)

ProductTypeProductTypeEnum1
StatusProductStatusEnum1

Possible values:

  • Active
  • Inactive

Will eventually be implemented as an EnumeratedRepresentationValue

ContextItemsContextItem0..*
FormProductFormEnum1

Possible values:

  • Solid
  • Liquid
  • Gas
DensityNumericRepresentationValue0..1It's optional because in some cases (manure, mixes) the density may not be an intensive property of the product, but lot-specific instead.
TotalQuantityNumericRepresentationValue0..1The 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.)
ProductComponentsProductComponent0..*Components of this product.
HasCropProtectionBoolean 1
HasCropNutritionBoolean1
HasCropVarietyBoolean1
HasHarvestCommodityBoolean1
CategoryCategoryEnum1

DensityFactor (Provide lot / batch - specific value of density)

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1This class is not referenced by anything else, therefore it needs a compound identifier so it can be inserted in the Catalog
ProductIdInteger1A reference to a product.
BatchNoString0..1
LotNoString0..1
DensityNumericRepresentationValue1Ex: 15000 seeds/bag; 500 lb/bag; 2000 pellets/lb
TimeScopesTimescope0..*
TimeScopeIdsInteger0..*




CropProtectionProduct (child class of Product)

AttributeAttributeMultiplicityDescription
BiologicalBoolean1Property of a crop protection product
OrganophosphateBoolean1Chemical property.
CarbamateBoolean1Chemical property.
IngredientsIngredientUse0..*




Ingredient (used by ProductComponent)

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DescriptionString1
ContextItemsContextItem0..*
IsActiveBool1




ActiveIngredient (child class of Ingredient)

AttributeTypeMultiplicityDescription
ModeOfActionEnumeratedRepresentationValue1..*

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)

AttributeTypeMultiplicityDescription
IngredientCodeCropNutritionIngredientCodeEnum1

An enumeration literal from a set of nutrient codes.

Will be implemented as an EnumeratedRepresentationValue

 IngredientCodeEnumeratedValue 1

ProductComponent




AttributeTypeMultiplicityDescription
ProductIdInteger0..1

If populated, indicates that the ProductComponent is a product. Examples:

  • One of the independentlt-labeled components of Avicta COmplete, itself a labeled product.
  • A product added to a tank mix.

Note that ProductId and IngredientId are mutually explusive: only ONE must be populated at any given time.

IngredientIdInteger1

If populated, indicates that the ProductComponent is an Ingredient. Examples:

  • glyphosate (an ActiveIngredient)
  • azoxystrobin (an ActiveIngredient)
  • Boron (a CropNutritionIngredient)
  • Humic acid (a CropNutritionIngredient)
QuantityNumericRepresentationValue1

Quantitative description of how much of the component participates in the product. This would typically involve a representation such as:

  • A mass fraction. An example of this is the description of the active ingredients that compose a product.
  • An amount by mass or volume: This would typically happen when creating a tank mix.

Reminder: a RepresentationValue encapsulates the following:

  • The meaning of the variable (e.g., a composition, a yield, etc.)
  • The family of units of measure to be used when expressing it (e.g., mass per unit volume, fraction y mass, etc.)
  • A numerical value
  • The specific unit of measure to apply to that value
IsCarrierBoolean1
IsProductBoolean 1
MixOrderInteger0..1




FertilizerProduct (child class of Product) [Not Implemented]

AttributeTypeMultiplicityDescription
IsManureBoolean1True if the fertilizer is manure. False if it's chemical fertilizer.




CropVarietyProduct (child class of Product)

AttributeTypeMultiplicityDescription
CropIdInteger1References the Crop that this variety belongs to.
TraitIdsInteger0..*Optional list of Trait
GeneticallyEnhancedBoolean1Is this a Genetically enhanced variety?




Trait (used by CropVariety, Catalog)

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
TraitCodeString1Short code: e.g., "RR2", "A-GT"
DescriptionString0..1Human-readable name; e.g., "RoundUp Ready 2", "Agrisure-GT"
ManufacturerIdInteger0..1
CropIDsInteger0..*What crops can this trait be present in?




HarvestedCommodityProduct (Subclass of Product)

AttributeTypeMultiplicityDescription
 CropIdInteger1




GenericProduct (child class of Product)

AttributeTypeMultiplicityDescription








MixProduct (child class of Product)

AttributeTypeMultiplicityDescription
IsTemporaryBoolean1False for a station mix; true for a tank mix or hot mix
IsHotmixBoolean1False for a station mix or tank mix; true for a hot mix
TotalQuantityNumericRepresentationValue0..1The 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.)






AvailableProduct

This object is used solely to establish a connection between a grower and the products that the said grower has available for use. The motivating user story is where a service provider that deals with multiple growers is instantiating an ApplicationDataModel to prepare a card or another FMIS to service multiple growers. It becomes critically important to conserve the relationship between each grower and the specific products that the said grower can usem in order to properly populate product selection drop-downs, prevent operator errors (that could have costly regulatory implications), etc.

This object must NOT be referenced by prescriptions, WorkItems, etc. It can NOT replace a Product reference.

  Note: This should be replaced by one of the forms of a ResourceAllocation object.

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
ProductIDInteger1
GrowerIDInteger1
ContextItemsContextItem0..*
 TimeScopesTimeScope0..*




ContainedPackagedProduct




AttributeTypeMultiplicityDescription
PackagedProductIdInteger1
CountInteger1




Container




AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DescriptionString1
ContainerModelIdInteger0..1
ContainerUseTypeContainerUseTypeEnum1
CorrespondingDeviceElementIdInteger0..1
ContextItemsContextItem0..*




ContainerModel




AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DescriptionString1
StatusContainerModelStatusEnum1
CapacityNumericRepresentationValue0..1
DefaultUseTypeContainerUseTypeEnum0..1
LengthNumericRepresentationValue0..1
WidthNumericRepresentationValue0..1
HeightNumericRepresentationValue0..1
ContextItemsContextItem0..*




CropNutritionProduct




AttributeTypeMultiplicityDescription
IsManureBoolean1




IngredientUse




AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
ProductIdInteger1
IngredientIdInteger1
FractionDouble1
IsProductBoolean1




PackagedProduct




AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DescriptionString0..1
ProductIdInteger1
ContainerModelIdInteger1
StatusPackagedProductStatusEnum0..1
ProductQuantityNumericRepresentationValue0..1
ContainedPackagedProductsContainedPackagedProduct0..*
GrossWeightNumericRepresentationValue0..1
NetWeightNumericRepresentationValue0..1
ContextItemsContextItem0..*
isBulkBoolean1




PackagedProductInstance




AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DescriptionString1
PackagedProductIdInteger1
ProductQuantityNumericRepresentationValue0..1
ContainedPackagedProductInstanceIdsInteger0..*
HeightNumericRepresentationValue0..1
GrossWeightNumericRepresentationValue0..1
NetWeightNumericRepresentationValue0..1
ContainerIdInteger0..1
ContextItemsContextItem0..*




PermittedProduct




AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
TimeScopesTimeScope0..*
GrowerIdInteger1
ProductIdInteger1
ContextItemsContextItem0..*


CategoryEnum


Enumeration LiteralDescription
Additive
Carrier
Fungicide
GrowthRegulator
Insecticide
Herbicide
Manure
NitrogenStabilizer
Unknown
Variety
Fertilizer
Pesticide


ContainerModelStatusEnum


Enumeration LiteralDescription
Active
Inactive
Retired
NoLongerSold


ContainerUseTypeEnum


Enumeration LiteralDescription
Disposable
Reusable
Fixed
Mobile


PackagedProductStatusEnum


Enumeration LiteralDescription
Active
Inactive
Retired
NoLongerSold


ProductFormEnum


Enumeration LiteralDescription
Gas
Liquid
Solid
Unknown


ProductStatusEnum


Enumeration LiteralDescription
Active
Inactive
Retired
NoLongerSold


ProductTypeEnum


Enumeration LiteralDescription
Chemical
Fertilizer
Generic
Mix
Variety